🧯 Освобождаем место: «удалённые, но открытые» файлы
Когда логи удалили, а место не вернулось - виноваты процессы, держащие дескрипторы удалённых файлов. Вот скрипт, который находит таких «пожирателей» и показывает, что можно обнулить.
🧪 Пример
Выводит таблицу вида:
🧹 Как безопасно освободить место (без перезапуска сервиса)
1. Найдите строку с нужным PID и FD (например,
2. Обнулите файл у процесса (уберите буквы из FD - остаётся число):
🔐 Альтернатива (более щадяще): перезапустить соответствующий сервис
ℹ️ Полезные заметки
- Требуется
- Порог можно задавать как
- Не удаляйте повторно сами файлы на диске — они уже помечены как удалённые; место держит именно процесс.
- Для контейнеров Docker заходите внутрь:
👉@bash_srv
Когда логи удалили, а место не вернулось - виноваты процессы, держащие дескрипторы удалённых файлов. Вот скрипт, который находит таких «пожирателей» и показывает, что можно обнулить.
#!/usr/bin/env bash
# автор: https://t.iss.one/bash_srv
# leakspace.sh — ищет удалённые, но открытые большие файлы
# Использование: ./leakspace.sh [порог] # пример: ./leakspace.sh 1G
set -o pipefail
THRESH="${1:-100M}"
THR_BYTES=$(numfmt --from=iec "$THRESH" 2>/dev/null || printf '104857600')
echo -e "SIZE\tPID\tFD\tFILE"
sudo lsof -nP | awk -v thr="$THR_BYTES" '
/ \(deleted\)/ && $7 ~ /^[0-9]+$/ {
size=$7; pid=$2; fd=$4;
name="";
for (i=9;i<=NF;i++) name=name (i>9?" ":"") $i;
if (size+0 >= thr) printf "%s\t%s\t%s\t%s\n", size, pid, fd, name
}' | sort -nr \
| numfmt --to=iec --header=1 --field=1 \
| column -t
🧪 Пример
./leakspace.sh 500M
Выводит таблицу вида:
SIZE  PID  FD  FILE для файлов ≥ 500M, помеченных как (deleted).🧹 Как безопасно освободить место (без перезапуска сервиса)
1. Найдите строку с нужным PID и FD (например,
PID=1234, FD=4u).2. Обнулите файл у процесса (уберите буквы из FD - остаётся число):
sudo truncate -s 0 "/proc/1234/fd/4"
🔐 Альтернатива (более щадяще): перезапустить соответствующий сервис
sudo systemctl restart <service>
ℹ️ Полезные заметки
- Требуется
lsof (apt install lsof / yum install lsof).- Порог можно задавать как
200M, 1G и т.п. (по умолчанию 100M).- Не удаляйте повторно сами файлы на диске — они уже помечены как удалённые; место держит именно процесс.
- Для контейнеров Docker заходите внутрь:
docker exec -it <container> bash и выполняйте проверку там.👉@bash_srv
👍8❤7
  Мониторинга логов в реальном времени
Иногда нужно следить за логами, но обычный
📌 Можно изменить путь к файлу лога (
Очень удобно, когда нужно быстро отследить проблемные записи в логах.
👉@bash_srv
Иногда нужно следить за логами, но обычный
tail -f не всегда удобен. Ниже накидал скрипт, который подсвечивает ошибки и предупреждения разными цветами:
#!/bin/bash
# автор: https://t.iss.one/bash_srv
LOGFILE="/var/log/syslog"
tail -Fn0 "$LOGFILE" | \
while read line; do
if echo "$line" | grep -q "ERROR"; then
echo -e "\e[31m$line\e[0m" # красный для ошибок
elif echo "$line" | grep -q "WARN"; then
echo -e "\e[33m$line\e[0m" # жёлтый для предупреждений
else
echo "$line"
fi
done
📌 Можно изменить путь к файлу лога (
LOGFILE) и ключевые слова (ERROR, WARN) под свои нужды.Очень удобно, когда нужно быстро отследить проблемные записи в логах.
👉@bash_srv
👍11
  Скрипт, который находит в логах все уникальные IP-адреса и подсчитывает, сколько раз каждый встречался.
🔍 Что делает скрипт:
-
-
-
-
-
💡Будет полезн для быстрого анализа DDoS или частых запросов от конкретных клиентов.
👉@bash_srv
#!/bin/bash
# Подсчёт уникальных IP-адресов в логах
# автор: https://t.iss.one/bash_srv
LOGFILE="/var/log/nginx/access.log"
awk '{print $1}' "$LOGFILE" | sort | uniq -c | sort -nr | head -20
🔍 Что делает скрипт:
-
awk '{print $1}' — вытаскивает первый столбец (обычно IP).-
sort — сортирует все IP.-
uniq -c — считает количество повторений.-
sort -nr — сортировка по числу в обратном порядке.-
head -20 — показывает топ-20 самых активных IP.💡Будет полезн для быстрого анализа DDoS или частых запросов от конкретных клиентов.
👉@bash_srv
👍9❤2
  Как быстро проверить, какие процессы занимают больше всего памяти или CPU?
Вместо длинных
🔍 Что делает скрипт:
 
 
 
📌 Если хотите отсортировать по CPU - замените
Удобно для быстрой диагностики «прожорливых» процессов без лишних инструментов! ⚡
👉@bash_srv
Вместо длинных
top или htop, можно использовать скрипт ниже.
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 15
🔍 Что делает скрипт:
ps -eo ... - выводит список процессов с PID, PPID, командой, % памяти и CPU.--sort=-%mem - сортировка по памяти (от большего к меньшему).head -n 15 - показываем только топ-15 процессов.📌 Если хотите отсортировать по CPU - замените
%mem на %cpu:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 15
Удобно для быстрой диагностики «прожорливых» процессов без лишних инструментов! ⚡
👉@bash_srv
👍9❤2
  Чтобы быстро проверить соединение с набором хостов, можно использовать след. скрипт
🔧 Можно добавить свои сервера в список и за пару секунд проверить доступность.
👉@bash_srv
#!/bin/bash
for host in server1.example.com server2.example.com 8.8.8.8; do
if ping -c1 -W1 "$host" &>/dev/null; then
echo "✅ $host доступен"
else
echo "❌ $host недоступен"
fi
done
🔧 Можно добавить свои сервера в список и за пару секунд проверить доступность.
👉@bash_srv
👍11
  Если вам часто приходится искать файлы по содержимому, то для этого есть мощная связка 
Например, чтобы найти все файлы с текстом "ERROR" в
📌 А если хотите искать рекурсивно по каталогу проще, используйте
✨ Добавим подсветку совпадений:
Теперь нужные строки будут выделяться цветом
👉@bash_srv
grep + find 🔍Например, чтобы найти все файлы с текстом "ERROR" в
/var/log:
find /var/log -type f -exec grep -H "ERROR" {} \;
📌 А если хотите искать рекурсивно по каталогу проще, используйте
grep -r:
grep -r "ERROR" /var/log
✨ Добавим подсветку совпадений:
grep --color=always -r "ERROR" /var/log
Теперь нужные строки будут выделяться цветом
👉@bash_srv
👍5👌3
  Как быстро найти и удалить пустые директории  
Иногда в системах с большим количеством файлов и директорий накапливаются пустые папки. Вот простой способ найти и удалить их одним махом:
🔍 Разбор:
-
-
-
-
🛡 Важно:
Перед удалением рекомендую посмотреть, что именно будет удалено:
👉@bash_srv
Иногда в системах с большим количеством файлов и директорий накапливаются пустые папки. Вот простой способ найти и удалить их одним махом:
find /path/to/search -type d -empty -delete
🔍 Разбор:
-
/path/to/search — укажи директорию, где искать.-
-type d — ищем только директории.-
-empty — фильтруем только пустые.-
-delete — удаляем найденные.🛡 Важно:
Перед удалением рекомендую посмотреть, что именно будет удалено:
find /path/to/search -type d -empty
👉@bash_srv
👍10❤1
  Облако ITENTIS CLOUD: технологии топов, цена без наценки (и живая поддержка!)
 
Нашли брендовую вещь в надежном маркете на 30% дешевле? Вот и мы так же. 😉
 
ITENTIS CLOUD — не "бюджетный" вариант. Это ВСЕ те же технологии, что у Яндекса, Mail или VK (VPC, Kubernetes, S3, снимки, автомасштабирование), но...
 
🔥 ...ЗНАЧИТЕЛЬНО ДЕШЕВЛЕ! 🔥
 
Зачем платить за бренд? Получите то же самое (а кое-что лучше) и сэкономьте. Не верите? Сравните тарифы! Надежные дата-центры Tier III, как у всех.
 
И главное — наша поддержка. Вот где мы их РЕАЛЬНО обходим:
 
💩 У них: очереди, боты, ответ "в течение 24 часов".
😍 У нас: живой, компетентный специалист 24/7. Не бот! Настоящий человек, который РАЗБЕРЕТСЯ. Ответ за минуты. Сложный Kubernetes? Объясним и поможем. Это наш стандарт.
 
Что вы получаете за меньшие деньги:
 
1. Та же "начинка": все ключевые технологии (VPC, Kubernetes, S3 и т.д.) — как у топов.
2. Надежность: Tier III, 2FA, шифрование, брандмауэры.
3. Скорость: запуск кластера быстрее доставки пиццы.
4. Простой контроль: интуитивное управление.
5. ГЛАВНОЕ: цена, от которой улыбнетесь + поддержка, которая реально спасает.
 
"А подвох?" Да нигде!
 
▶️14 дней БЕСПЛАТНО: протестируйте всё.
▶️БЕСПЛАТНАЯ миграция: перенесем ваши проекты без простоев.
▶️Гарантия возврата: риск — ноль.
 
‼️ Понравится? Расскажите друзьям! Реферальная программа: за каждого клиента — бонус или скидка. Без мишуры.
 
Итог: ITENTIS CLOUD = Технологии топов + Честная цена + Человеческая поддержка 24/7.
 
Хватит переплачивать и ждать ответа! Получите максимум.
 
👉 Действуйте выгодно:
 
1. Сравните тарифы: https://itentis.cloud
2. Пишите:
🤖 Telegram-бот: @itentis_bot (Фраза: "Хочу облако дешевле Яндекса!")
✉️ Почта: [email protected]
3. Скажите: "Читал пост про ЭКОНОМИЮ в облаке!" 🚀(Получите бонус!)
4. Присоединяйтесь: https://t.iss.one/+D0MuFDf8P1FlMTJi
 
https://itentis.ru Мощное облако. Честная цена. Люди на связи.
Реклама. ООО "АВАНГАРД", ОГРН 1107746046550, erid: 2VtzqxcZdhf
Нашли брендовую вещь в надежном маркете на 30% дешевле? Вот и мы так же. 😉
ITENTIS CLOUD — не "бюджетный" вариант. Это ВСЕ те же технологии, что у Яндекса, Mail или VK (VPC, Kubernetes, S3, снимки, автомасштабирование), но...
🔥 ...ЗНАЧИТЕЛЬНО ДЕШЕВЛЕ! 🔥
Зачем платить за бренд? Получите то же самое (а кое-что лучше) и сэкономьте. Не верите? Сравните тарифы! Надежные дата-центры Tier III, как у всех.
И главное — наша поддержка. Вот где мы их РЕАЛЬНО обходим:
💩 У них: очереди, боты, ответ "в течение 24 часов".
😍 У нас: живой, компетентный специалист 24/7. Не бот! Настоящий человек, который РАЗБЕРЕТСЯ. Ответ за минуты. Сложный Kubernetes? Объясним и поможем. Это наш стандарт.
Что вы получаете за меньшие деньги:
1. Та же "начинка": все ключевые технологии (VPC, Kubernetes, S3 и т.д.) — как у топов.
2. Надежность: Tier III, 2FA, шифрование, брандмауэры.
3. Скорость: запуск кластера быстрее доставки пиццы.
4. Простой контроль: интуитивное управление.
5. ГЛАВНОЕ: цена, от которой улыбнетесь + поддержка, которая реально спасает.
"А подвох?" Да нигде!
▶️14 дней БЕСПЛАТНО: протестируйте всё.
▶️БЕСПЛАТНАЯ миграция: перенесем ваши проекты без простоев.
▶️Гарантия возврата: риск — ноль.
‼️ Понравится? Расскажите друзьям! Реферальная программа: за каждого клиента — бонус или скидка. Без мишуры.
Итог: ITENTIS CLOUD = Технологии топов + Честная цена + Человеческая поддержка 24/7.
Хватит переплачивать и ждать ответа! Получите максимум.
👉 Действуйте выгодно:
1. Сравните тарифы: https://itentis.cloud
2. Пишите:
🤖 Telegram-бот: @itentis_bot (Фраза: "Хочу облако дешевле Яндекса!")
✉️ Почта: [email protected]
3. Скажите: "Читал пост про ЭКОНОМИЮ в облаке!" 🚀(Получите бонус!)
4. Присоединяйтесь: https://t.iss.one/+D0MuFDf8P1FlMTJi
https://itentis.ru Мощное облако. Честная цена. Люди на связи.
Реклама. ООО "АВАНГАРД", ОГРН 1107746046550, erid: 2VtzqxcZdhf
👍1
  📁Как отрезать расширение у файла в Bash
📌 Что тут происходит:
-
👀 Примеры:
Если хочешь убрать все расширения (в т.ч.
🧠 Под капотом:
-
-
Мощно и без внешних команд! 🚀
👉@bash_srv
filename="example.txt"
name="${filename%.*}"
echo "$name"
📌 Что тут происходит:
-
${filename%.*} — удаляет последнюю точку и всё после неё, то есть расширение.👀 Примеры:
filename="backup.tar.gz"
name="${filename%.*}" # Результат: backup.tar
Если хочешь убрать все расширения (в т.ч.
.tar.gz), можно использовать вот так:
filename="backup.tar.gz"
name="${filename%%.*}" # Результат: backup
🧠 Под капотом:
-
%.* — удаляет самую правую точку и всё после.-
%%.* — удаляет самую левую точку и всё после.Мощно и без внешних команд! 🚀
👉@bash_srv
👍10
  🛡 Проверка SSL-сертификатов с помощью Bash  
Иногда нужно быстро проверить срок действия SSL-сертификата удалённого сайта. Вот удобный однострочник на Bash, который покажет дату окончания действия сертификата:
📆 Чтобы получить только оставшиеся дни до окончания:
🔒 Полезно для автоматического мониторинга или проверки перед продлением сертификатов!
👉@bash_srv
Иногда нужно быстро проверить срок действия SSL-сертификата удалённого сайта. Вот удобный однострочник на Bash, который покажет дату окончания действия сертификата:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -dates | grep notAfter
📆 Чтобы получить только оставшиеся дни до окончания:
end_date=$(echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
end_ts=$(date -d "$end_date" +%s)
now_ts=$(date +%s)
echo "Осталось дней: $(( (end_ts - now_ts) / 86400 ))"
🔒 Полезно для автоматического мониторинга или проверки перед продлением сертификатов!
👉@bash_srv
👍10❤1
  🚀 Утилита 
Когда ты запускаешь какую-то команду, и она может зависнуть - это беда. Особенно в скриптах. На помощь приходит утилита
Пример использования:
Эта команда завершит
Можно задать время в секундах (
Что произойдёт при превышении тайм-аута?
По умолчанию
Изменение сигнала:
Проверка кода возврата:
👉@bash_srv
timeout: автоматическое завершение зависших команд  Когда ты запускаешь какую-то команду, и она может зависнуть - это беда. Особенно в скриптах. На помощь приходит утилита
timeout из пакета coreutils.Пример использования:
timeout 30s ./backup.sh
Эта команда завершит
./backup.sh, если она не завершится за 30 секунд.Можно задать время в секундах (
s), минутах (m), часах (h) и даже днях (d).Что произойдёт при превышении тайм-аута?
По умолчанию
timeout отправляет сигнал SIGTERM, а через 5 секунд - SIGKILL, если процесс всё ещё жив.Изменение сигнала:
timeout -s SIGINT 10s ./script.sh
Проверка кода возврата:
if timeout 5s ./some_command; then
echo "Успешно"
else
echo "Команда завершена по таймауту или с ошибкой"
fi
👉@bash_srv
👍13
  Отключаем историю Bash (~/.bash_history)
🔒Отключение истории в текущей сессии
Просто обнуляем переменные истории:
💥 После этого Bash не будет сохранять историю вообще. Даже после выхода из сессии.
🧼 Стереть историю прямо сейчас
🔁 Отключить навсегда (для пользователя)
Добавь в ~/.bashrc или ~/.bash_profile:
📌 После перезапуска оболочки история вестись не будет.
🧙 Дополнительно (опционально)
Чтобы Bash не пытался писать историю на выходе:
💡Без истории сложнее откатить действия, иногда это нужно.
👉@bash_srv
🔒Отключение истории в текущей сессии
Просто обнуляем переменные истории:
unset HISTFILE
export HISTSIZE=0
export HISTFILESIZE=0
💥 После этого Bash не будет сохранять историю вообще. Даже после выхода из сессии.
🧼 Стереть историю прямо сейчас
history -c # очистить историю из памяти
> ~/.bash_history # стереть файл истории
🔁 Отключить навсегда (для пользователя)
Добавь в ~/.bashrc или ~/.bash_profile:
export HISTFILE=
export HISTSIZE=0
export HISTFILESIZE=0
📌 После перезапуска оболочки история вестись не будет.
🧙 Дополнительно (опционально)
Чтобы Bash не пытался писать историю на выходе:
unset HISTFILE
trap "" EXIT
💡Без истории сложнее откатить действия, иногда это нужно.
👉@bash_srv
👍8❤1
  📌 Регулярки - ищем email-адреса в тексте
Если необходимо быстро вытащить email-адреса из логов или текстов, скрипт ниже для вас.
Примеры использования:
Оно находит валидные email'ы вроде:
-
-
⚙️ Флаг
👉@bash_srv
Если необходимо быстро вытащить email-адреса из логов или текстов, скрипт ниже для вас.
grep -Eo '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
Примеры использования:
cat файл.txt | grep -Eo '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
Оно находит валидные email'ы вроде:
-
[email protected]-
[email protected]⚙️ Флаг
-o в grep выводит только совпадения, без строк целиком.👉@bash_srv
👍13❤3
  🧠 Логи — Самые частые IP-адреса в access.log
Когда нужно быстро понять, кто чаще всего лупит по серверу — вот простой однострочник:
🔍 Что делает:
1.
2.
3.
📊 Вывод будет примерно такой:
🔥 Подходит для NGINX, Apache и других web-логов с классическим форматом.
👉@bash_srv
Когда нужно быстро понять, кто чаще всего лупит по серверу — вот простой однострочник:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
🔍 Что делает:
1.
awk '{print $1}' — вытаскивает IP из первой колонки.2.
sort и uniq -c — считает повторы.3.
sort -nr | head — выводит топ-10 по частоте.📊 Вывод будет примерно такой:
152 192.168.1.10
103 203.0.113.45
87 172.16.0.5
🔥 Подходит для NGINX, Apache и других web-логов с классическим форматом.
👉@bash_srv
👍10
  🚀 Очистка кэша пакетного менеджера APT 
Иногда кэш пакетов APT разрастается и занимает лишнее место. Ниже написал простой скрипт, который поможет автоматизировать очистку и освободить дисковое пространство 💾
📌 Как использовать:
1. Сохрани как
2. Сделай исполняемым:
3. Запускай по необходимости или добавь в
👉@bash_srv
Иногда кэш пакетов APT разрастается и занимает лишнее место. Ниже написал простой скрипт, который поможет автоматизировать очистку и освободить дисковое пространство 💾
#!/bin/bash
# Очищаем кэш APT
echo "🧼 Очистка кэша APT..."
sudo apt clean
sudo apt autoclean
# Удаляем неиспользуемые пакеты
echo "🗑 Удаление неиспользуемых пакетов..."
sudo apt autoremove -y
# Отчёт о свободном месте
echo "📊 Свободное место после очистки:"
df -h /
📌 Как использовать:
1. Сохрани как
clean_apt.sh2. Сделай исполняемым:
chmod +x clean_apt.sh3. Запускай по необходимости или добавь в
cron👉@bash_srv
👍11
  🚀 Bash-совет дня: Быстрый мониторинг TCP/UDP портов  
Иногда нужно оперативно узнать, какие порты слушает сервер и какие подключения активны. Вот простой однострочник, который поможет:
📌 Пояснение ключей:
-
-
-
-
-
🔍 Хочешь отсортировать по порту или найти конкретный? Добавь
🎯 Альтернатива на случай, если нет
Полезно для отладки фаервола, проверки работы сервисов или просто для уверенности, что сервер не слушает ничего лишнего 😉
👉@bash_srv
Иногда нужно оперативно узнать, какие порты слушает сервер и какие подключения активны. Вот простой однострочник, который поможет:
sudo ss -tunlp
📌 Пояснение ключей:
-
-t — TCP  -
-u — UDP  -
-n — не разрешать имена хостов и портов (быстрее)  -
-l — только слушающие сокеты  -
-p — показать PID и имя процесса  🔍 Хочешь отсортировать по порту или найти конкретный? Добавь
grep:
sudo ss -tunlp | grep 8080
🎯 Альтернатива на случай, если нет
ss:
sudo netstat -tunlp
Полезно для отладки фаервола, проверки работы сервисов или просто для уверенности, что сервер не слушает ничего лишнего 😉
👉@bash_srv
👍10
  🧹 Автоматическая очистка логов старше N дней  
Если логи разрастаются, а места становится всё меньше — пора автоматизировать их очистку! Вот простой способ удалить файлы старше, скажем, 14 дней:
🔧 Объяснение:
-
-
-
-
-
🛡️ Сухой запуск перед удалением:
Так ты увидишь, что будет удалено, прежде чем запускать
📌 Добавь в cron, чтобы забыть о рутине навсегда.
👉@bash_srv
Если логи разрастаются, а места становится всё меньше — пора автоматизировать их очистку! Вот простой способ удалить файлы старше, скажем, 14 дней:
find /var/log -type f -name "*.log" -mtime +14 -exec rm -f {} \;
🔧 Объяснение:
-
/var/log — каталог с логами (можно заменить на нужный путь);-
-type f — только файлы;-
-name "*.log" — ищем только .log-файлы;-
-mtime +14 — которым больше 14 дней;-
-exec rm -f {} — удаляем.🛡️ Сухой запуск перед удалением:
find /var/log -type f -name "*.log" -mtime +14
Так ты увидишь, что будет удалено, прежде чем запускать
rm.📌 Добавь в cron, чтобы забыть о рутине навсегда.
👉@bash_srv
👍13
  В чем разница между объявлением переменной export VAR="VALUE" и VAR="VALUE" в bash?
В
1.
- Это обычное объявление переменной в текущей оболочке (сессии).
- Переменная
- Например, если вы запустите новую команду или скрипт из текущей оболочки,
2.
- Команда
- То есть,
- Это полезно, когда необходимо передать значение переменной в другие программы или скрипты, запущенные из текущей оболочки.
Для примера
Таким образом,
👉@bash_srv
В
bash (и других оболочках Unix) разница между командами export VAR="VALUE" и VAR="VALUE" связана с областью видимости переменной:1.
VAR="VALUE": - Это обычное объявление переменной в текущей оболочке (сессии).
- Переменная
VAR будет доступна только внутри текущей сессии, и не будет передаваться дочерним процессам, запущенным этой сессией.- Например, если вы запустите новую команду или скрипт из текущей оболочки,
VAR не будет доступна в этом дочернем процессе.2.
export VAR="VALUE": - Команда
export делает переменную VAR доступной для всех дочерних процессов текущей оболочки.- То есть,
VAR будет установлена и доступна не только в текущей сессии, но и во всех процессах, запущенных из этой сессии.- Это полезно, когда необходимо передать значение переменной в другие программы или скрипты, запущенные из текущей оболочки.
Для примера
# Присвоение переменной без export
VAR="Hello"
bash -c 'echo $VAR' # Ничего не выведет, так как VAR не экспортирована
# Присвоение переменной с export
export VAR="Hello"
bash -c 'echo $VAR' # Выведет "Hello", так как VAR экспортирована
Таким образом,
export используется для того, чтобы переменная была доступна в дочерних процессах, тогда как обычное присвоение без export ограничивает переменную только текущей сессией.👉@bash_srv
👍9👎2
  
#!/bin/bash
#=====================================
# скрипт изменения кодировки файлов.
#=====================================
# суть для одного файла: iconv -f Исходная_кодировка -t В_какую_кодировку > выходной_файл
# CONFIG:
TYPES="*.txt"; # на случай поиска по расширению. напр. "*.log"
FROM='cp1251'; # из какой кодировки.
TO='utf8'; # в какую кодировку.
FILEPREFIX='.utf8'; # к названию перекодированного файла добавится.
# START:
if [ -z $1 ]
then
echo "Encoding all $TYPES in directory From $FROM To $TO";
echo "use $0 /Path_to_recoding_directory/"; echo;
exit 1;
else
echo "Encoding all $TYPES in directory $1 From $FROM To $TO";
echo;
find $1 -name "$TYPES" -type f -print0|while read -d '' SOURCE; do
echo "========== SOURCE: $SOURCE FROM: $FROM TO: $TO ==========";
cat "$SOURCE"|iconv -f $FROM -t $TO > "$SOURCE$FILEPREFIX";
wait;
done;
exit 0;
fi
# end
👉@bash_srv
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍10
  Проверка существования файла:
?
if ! [ -f /path/to/file ]; then
echo 'No file'
fi
Проверка существования директории:
if ! [ -d /path/directory/ ]; then
echo 'No directory'
fi
Проверка существования пользователя:
grep "username:" /etc/passwd >/dev/null
if [ $? -ne 0 ]; then
echo 'No username found'
fi
👉@bash_srv
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍7
  