
- Главная
- Каталог
- Интернет технологии
- BashTex | Linux
BashTex | Linux
Авторский канал про мир Linux и Bash. Основная аудитория: системные администраторы, DevOps, Python-разработчики и другие.
Статистика канала
echo {1..5}
1 2 3 4 5{}
С шагом:
echo {1..10..2}
1 3 5 7 9{}
echo {a..e}
a b c d e{}
touch file_{1..5}.txt{}
Создаст:
file_1.txt
file_2.txt
...{}
mkdir -p project/{src,bin,config,logs}{}
Результат:
project/src
project/bin
project/config
project/logs{}
echo {dev,prod}_{1..3}
dev_1 dev_2 dev_3 prod_1 prod_2 prod_3{}
mkdir -p env/{dev,stage,prod}/{logs,tmp,data}{}
Создать пачку логов
touch log_{2024..2026}_{01..12}.log{}
Удаление группы файлов
rm file_{1..10}.txt{}
echo file_{1..3}.txt{}
сначала превращается в:
echo file_1.txt file_2.txt file_3.txt{}
BashTex
project/
├── main.sh
├── lib/
│ ├── log.sh
│ ├── config.sh
│ ├── checks.sh
│ └── deploy.sh
├── conf/
│ └── app.conf
└── tmp/{}
Где:
main.sh - точка входа
lib/ - функции по темам
conf/ - конфиги
tmp/ - временные файлы
source "$(dirname "$0")/lib/log.sh"
source "$(dirname "$0")/lib/checks.sh"{}
Примеры модулей:
log.sh - логгер
config.sh - загрузка переменных
checks.sh - проверки окружения
actions.sh - основная логика
doStuff()
x()
RunAll(){}
Лучше:
log_info()
check_dependencies()
deploy_app()
cleanup_tmp(){}
Для приватных функций можно префикс:
_internal_parse_config(){}
main() {
load_config
check_dependencies
run_tasks
}
main "$@"{}
Это делает скрипт читаемым как программу, а не как свалку команд.
BashTex
#!/usr/bin/env bash
BACKUP_DIR="/var/backups/db"
DB_NAME="mydb"
DB_USER="postgres"
day=$(date +%a | tr '[:upper:]' '[:lower:]') # mon, tue, wed...
file="$BACKUP_DIR/backup-$day.sql"
mkdir -p "$BACKUP_DIR"
pg_dump -U "$DB_USER" "$DB_NAME" > "$file"
echo "Backup saved to $file"{}
#!/usr/bin/env bash
BACKUP_DIR="/var/backups/db"
DB_NAME="mydb"
DB_USER="root"
day=$(date +%a | tr '[:upper:]' '[:lower:]')
file="$BACKUP_DIR/backup-$day.sql"
mkdir -p "$BACKUP_DIR"
mysqldump -u "$DB_USER" "$DB_NAME" > "$file"
echo "Backup saved to $file"{}
mysqldump -u "$DB_USER" "$DB_NAME" | gzip > "$BACKUP_DIR/backup-$day.sql.gz"{}
0 2 * * * /usr/local/bin/db-backup.sh{}
Каждую ночь в 02:00 дамп будет обновлять файл нужного дня.
BashTex my file.txt или backup (old).tar.gz
for f in $(ls); do
echo "$f"
done{}
Проблема: bash режет вывод по пробелам и переводам строк. Файл my file.txt превратится в два разных слова.
for f in *; do
echo "$f"
done{}
Почему это безопаснее: * раскрывается самим shell; каждый элемент цикла - это отдельное имя файла; кавычки сохраняют пробелы.
Если нужен определённый тип:
for f in *.log; do
[[ -e "$f" ]] || continue
echo "$f"
done{}
[[ -e "$f" ]] защищает, если совпадений нет.
find . -type f -print0 | while IFS= read -r -d '' f; do
echo "$f"
done{}
Почему это хорошо:
-print0 разделяет файлы нулевым байтом;
это безопасно даже для пробелов, табов и спецсимволов;
read -d '' читает до NUL, а не до пробела.
find . -type f -print0 | xargs -0 rm -f{}
Пара: -print0 и xargs -0 должны идти вместе.
BashTex
journalctl --disk-usage
Archived and active journals take up 2.3G on disk{}
journalctl --vacuum-size=500M{}
Удалятся самые старые записи, пока объем не станет ~ 500 МБ.
journalctl --vacuum-time=7d{}
Поддерживаются: d - дни h - часы m - минуты
journalctl --vacuum-time=7d
journalctl --vacuum-size=1G{}
Это дает контроль и по времени, и по размеру.
0 3 * * * /usr/bin/journalctl --vacuum-time=7d --vacuum-size=1G{}
/etc/systemd/journald.conf{}
Пример:
SystemMaxUse=1G
SystemKeepFree=500M
MaxRetentionSec=7day{}
После изменения:
systemctl restart systemd-journald{}
BashTex
content=$(cat huge.log){}
Если файл весит несколько гигабайт - скрипт может съесть всю RAM или просто упасть.
Правильный подход - обрабатывать файл потоково.
while IFS= read -r line; do
echo "$line"
done < huge.log{}
файл читается строка за строкой;
память почти не используется;
можно обрабатывать очень большие файлы.
grep ERROR huge.log{}
или:
awk '/ERROR/ {print $0}' huge.log{}
Они читают файл частями, не загружая его полностью.
grep ERROR huge.log | awk '{print $5}' | sort | uniq -c{}
Это обработает гигабайтные логи за секунды.
tail -F huge.log{}
Можно фильтровать сразу:
tail -F huge.log | grep ERROR{}
Это удобно для мониторинга сервисов.
split -l 100000 huge.log part_{}
Файл разобьется на куски:
part_aa
part_ab
part_ac{}
Теперь их можно обрабатывать параллельно.
BashTex
ls /tmp > /dev/null{}
Теперь stdout (fd 1) будет игнорироваться.
ls /no/such/file 2> /dev/null{}
Ошибки исчезнут, но нормальный вывод останется.
command > /dev/null 2>&1{}
Что происходит:
stdout в /dev/null и stderr туда же
curl -s https://bashtex.com > /dev/null 2>&1{}
Команда выполняется тихо.
command -v docker > /dev/null 2>&1{}
Проверяем наличие команды:
if command -v docker > /dev/null 2>&1; then
echo "Docker установлен"
fi{}
command 2>&1 > /dev/null{}
Это не то же самое. Правильный порядок:
command > /dev/null 2>&1{}
Потому что редиректы выполняются слева направо.
test -f file.txt > /dev/null 2>&1{}
Проверка сервиса
systemctl is-active nginx > /dev/null{}
Проверка сети
ping -c1 google.com > /dev/null 2>&1{}
BashTex systemd-analyze.
systemd-analyze blame{}
Пример вывода:
8.532s docker.service
4.921s networkd-wait-online.service
3.102s postgresql.service
1.876s nginx.service{}
Список уже отсортирован по времени запуска.
Что это значит:
docker.service запускался 8.5 секунд
networkd-wait-online.service ждал сеть почти 5 секунд
Именно такие сервисы чаще всего замедляют загрузку.
systemd-analyze critical-chain{}
Пример:
graphical.target
└─docker.service
└─network-online.target
└─systemd-networkd-wait-online.service{}
Это показывает кто кого блокирует при загрузке.
systemd-analyze{}
Пример:
Startup finished in 3.112s (kernel)
+ 9.842s (userspace){}
Здесь видно:
время загрузки ядра
время загрузки systemd сервисов
Отзывы канала
всего 6 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
BashTex | Linux — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 2.5K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 23.5, количество отзывов – 6, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 1258.74 ₽, а за 24 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий