
- Главная
- Каталог
- Интернет технологии
- BashTex | Linux
BashTex | Linux
Авторский канал про мир Linux и Bash. Основная аудитория: системные администраторы, DevOps, Python-разработчики и другие.
Статистика канала
/opt/app/logs/
/srv/project/log/
/data/custom/*.log{}
Реализуем для них контролируемую ротацию на bash.
LOG_DIR="/opt/app/logs"
DAYS=7
find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS{}
-mtime +7 - старше 7 дней.
mtime - это время последнего изменения.
ARCHIVE_DIR="/opt/app/archive"
mkdir -p "$ARCHIVE_DIR"
find "$LOG_DIR" -type f -name "*.log" -mtime +7 -print0 |
while IFS= read -r -d '' file; do
base=$(basename "$file")
gzip -c "$file" > "$ARCHIVE_DIR/${base}_$(date +%F).gz" && rm -f "$file"
done{}
Здесь важно:
-print0 + read -d '' - безопасно для пробелов
gzip -c - сначала создаем архив
&& rm - удаляем только если архив создан
Никаких rm до успешного gzip.
if lsof "$file" >/dev/null 2>&1; then
echo "Файл используется, пропускаем: $file"
continue
fi{}
Альтернатива: ротировать только логи, которые не менялись X часов:
-mmin +1440{}
find "$ARCHIVE_DIR" -type f -name "*.gz" -mtime +30 -delete{}
Лучше сначала проверить:
find "$ARCHIVE_DIR" -type f -mtime +30 -print{}
Только потом добавлять -delete.
(
flock -n 200 || exit 1
# код ротации здесь
) 200>/var/lock/custom-log-rotate.lock{}
Теперь крон не создаст гонку.
0 3 * * * /usr/local/bin/custom_rotate.sh{}
BashTex - разработчиков - девопсов и админов - специалистов по данным и ML - специалистов поддержки и сопровождения - тестировщиков и безопасниковВнутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой) Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами После прохождения вы получите сертификат, который можно добавить в резюме. В ближайшие 48ч курс доступен со скидкой 30% по промокоду «
NETWORK30»: открыть курс на Stepikservers.txt
Проверяем доступность всех сразу:
while read -r host; do
(
ping -c1 -W1 "$host" &>/dev/null \
&& echo "[OK] $host" \
|| echo "[FAIL] $host"
) &
done < servers.txt
wait{}
Все ping идут параллельно, вывод появляется почти мгновенно.
MAX=10
i=0
while read -r host; do
(
ping -c1 -W1 "$host" &>/dev/null \
&& echo "[OK] $host" \
|| echo "[FAIL] $host"
) &
((i++))
((i % MAX == 0)) && wait
done < servers.txt
wait{}
ping -c1 -W1 "$host" &>/dev/null || echo "$host DOWN"{}
Будет полезно тем, у кого нет мониторинга, но есть 2 и более сервера.
BashTex
SERVICE=nginx
OUT="/tmp/${SERVICE}-logs-$(date +%F_%H-%M).tar.gz"
journalctl -u "$SERVICE" --no-pager > /tmp/${SERVICE}.log
tar -czf "$OUT" -C /tmp "${SERVICE}.log"
rm /tmp/${SERVICE}.log{}
Результат: один .tar.gz с логами сервиса за все время.
journalctl -u nginx --since "24 hours ago" --no-pager > nginx.log
tar -czf nginx-logs.tar.gz nginx.log{}
Можно и точнее:
--since "2026-01-20 10:00" --until "2026-01-20 12:00"{}
-o short-iso - удобный формат времени
-p err - только ошибки
--boot - текущая загрузка
Пример:
journalctl -u nginx -p err --since today -o short-iso{}
BashTex
./script.sh "file one.txt" "file two.txt"{}
for arg in "$@"; do
echo "[$arg]"
done{}
Вывод:
[file one.txt]
[file two.txt]{}
Каждый аргумент сохраняется как отдельная сущность.
Это то, чего вы ожидаете в 99% скриптов.
for arg in "$*"; do
echo "[$arg]"
done{}
Вывод:
[file one.txt file two.txt]{}
Все аргументы склеены в одну строку через IFS (по умолчанию пробел).
rm "$*"{}
rm получает один путь, которого не существует.
Обработка файлов:
cp "$*" /backup{}
копирование падает или ведет себя странно.
Работа с пробелами:
один аргумент = несколько файлов (по мнению bash).
BashTex etc/shadow, но факт его отсутствия легко проверить:
sudo awk -F: '($2==""){print $1}' /etc/shadow{}
Если вывод не пустой - это повод проверить, зачем аккаунт существует.
sudo awk -F: '($2 ~ /^!|^\*/){print $1}' /etc/shadow{}
! или * в поле пароля значит, что вход запрещен
Обычно это нормально для сервисных аккаунтов.
awk -F: '($7 ~ /(nologin|false)$/){print $1, $7}' /etc/passwd{}
Типично для:
www-data
nginx
backup
Если обычный пользователь с таким shell - стоит проверить.
sudo chage -l username{}
Полезно для поиска:
истекших паролей;
аккаунтов без политики смены.
for u in $(cut -d: -f1 /etc/passwd); do
chage -l "$u" 2>/dev/null | grep -q "never" && echo "$u"
done{}
awk -F: '{print $1 ":" $7}' /etc/passwd{}
BashTex
while read line; do
echo "$line"
done < file.txt{}
Проблемы:
\ - пропадает
начальные/конечные пробелы обрезаются
строки с \n, \t, \\ читаются некорректно
Для конфигов, путей и логов это критично.
while IFS= read -r line; do
echo "$line"
done < file.txt{}
Это канонический вариант чтения строк.
IFS=
отключает разделение по пробелам и табам;
сохраняет все пробелы в начале и конце строки.
read -r
запрещает интерпретацию \ как escape;
строка читается как есть.
path=C:\Program Files\App\{}
Без -r:
path=C:Program FilesApp{}
С IFS= read -r:
path=C:\Program Files\App\{}
while IFS= read -r line; do
[[ "$line" =~ ^#|^$ ]] && continue
echo "Обработка: $line"
done < config.conf{}
mapfile -t lines < file.txt{}
Но есть один минус - mapfile загружает весь файл в память
BashTex Отзывы канала
всего 6 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
BashTex | Linux — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 2.6K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 23.3, количество отзывов – 6, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 1258.74 ₽, а за 19 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий