
- Главная
- Каталог
- Интернет технологии
- Bash Ready | Linux
Статистика канала
Полная статистикаchevron_right
#!/bin/bash
# Список IP или хостнеймов
HOSTS=("192.168.0.1" "google.com" "server.local")
for HOST in "${HOSTS[@]}"; do
if ping -c 1 -W 1 "$HOST" &> /dev/null; then
echo "[✅] $HOST доступен"
else
echo "[❌] $HOST недоступен"
fi
done
{}
📌 Что делает:
* ping -c 1 -W 1 — один пинг с таймаутом в 1 секунду
* Выводит результат по каждому хосту
🔥 Можно запускать по крону или вручную, если нужно быстро понять, где беда.
scp / rsync - передача sha256sum - хеши ssh - удаленное выполнение logger / лог-файл - аудит
#!/bin/bash
SRC_FILE="/data/backup.tar.gz"
DEST_USER="user"
DEST_HOST="backup.server"
DEST_PATH="/srv/backups/"
LOG="/var/log/file_transfer.log"
FILENAME=$(basename "$SRC_FILE")
CHECKSUM=$(sha256sum "$SRC_FILE" | awk '{print $1}')
STAMP=$(date '+%F %T')
echo "$STAMP : Начата передача $FILENAME" | tee -a "$LOG"
# Отправка файла
scp "$SRC_FILE" "$DEST_USER@$DEST_HOST:$DEST_PATH"
# Проверка хеша на удаленной стороне
REMOTE_SUM=$(ssh "$DEST_USER@$DEST_HOST" "sha256sum '$DEST_PATH/$FILENAME' | awk '{print \$1}'")
# Сравнение и лог
if [[ "$REMOTE_SUM" == "$CHECKSUM" ]]; then
echo "$STAMP : Успешно: $FILENAME передан и проверен" | tee -a "$LOG"
else
echo "$STAMP : Ошибка: контрольные суммы не совпадают!" | tee -a "$LOG"
fi{}
#!/bin/bash
TARGET="8.8.8.8" # IP-адрес для проверки (Google DNS)
INTERFACE="eth0" # Ваш сетевой интерфейс
if ! ping -c 4 $TARGET &> /dev/null; then
echo "$(date) - Потеряно соединение! Перезапускаю сеть..." >> /var/log/network_recovery.log
systemctl restart networking
systemctl restart NetworkManager # Для дистрибутивов с NetworkManager
ip link set $INTERFACE down && sleep 2 && ip link set $INTERFACE up
else
echo "$(date) - Сеть работает нормально" >> /var/log/network_recovery.log
fi{}
*/5 * * * * /path/to/network_check.sh{}
2. Авто-переключение на резервный интерфейс. Если ваш сервер поддерживает несколько сетевых интерфейсов (например, eth0 и eth1), можно автоматически переключаться на резервный:
#!/bin/bash
TARGET="8.8.8.8"
PRIMARY_IF="eth0"
SECONDARY_IF="eth1"
if ! ping -c 4 $TARGET &> /dev/null; then
echo "$(date) - Основной интерфейс $PRIMARY_IF не отвечает, переключаюсь на $SECONDARY_IF" >> /var/log/network_recovery.log
ip route del default
ip route add default via 192.168.1.2 dev $SECONDARY_IF
else
echo "$(date) - Основной интерфейс $PRIMARY_IF работает" >> /var/log/network_recovery.log
fi{}
#!/bin/bash
VPN_PRIMARY="vpn1"
VPN_SECONDARY="vpn2"
if ! ping -c 4 10.8.0.1 &> /dev/null; then
echo "$(date) - Основной VPN не отвечает, переключаюсь на резервный $VPN_SECONDARY" >> /var/log/network_recovery.log
systemctl restart openvpn@$VPN_SECONDARY
else
echo "$(date) - VPN работает стабильно" >> /var/log/network_recovery.log
fi{}
/backups/
2025-12-05-12:00/
2025-12-05-13:00/
2025-12-05-14:00/{}
Каждый каталог - полноценная копия состояния.
#!/usr/bin/env bash
set -e
SRC="/home/user/project"
DST="/backups"
TS=$(date +"%Y-%m-%d-%H:%M")
LAST="$DST/latest"
NEW="$DST/$TS"
mkdir -p "$DST"
if [[ -d "$LAST" ]]; then
echo "[i] Using hardlinks from: $LAST"
rsync -a --delete --link-dest="$LAST" "$SRC/" "$NEW/"
else
echo "[i] First snapshot — no link-dest"
rsync -a --delete "$SRC/" "$NEW/"
fi
# Update the "latest" symlink
rm -f "$LAST"
ln -s "$(basename "$NEW")" "$LAST"
echo "[i] Snapshot created: $NEW"{}
rsync -a —link-dest=... - команда говорит сравни каталог с предыдущим снапшотом и все неизмененные файлы сделай через hardlink. Это не копия, а именно вторая ссылка на тот же inode. Место: +0 байт.
--delete - удаленные файлы тоже исчезнут из новой точки — snapshot становится точным состоянием дерева в данный момент.
Symlink latest - позволяет быстро создавать следующую точку, не перебирая каталоги.
rsync -a /backups/2025-12-05-12:00/ /home/user/project/
Либо наоборот: перейти в каталог снапшота и увидеть все как было.
0 * * * * /usr/local/bin/snapshot.sh{}
find /backups -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;{}
Удалить снапшоты старше 30 дней.
.rsync-filter:
- *.tmp
- .cache/{}
И вызывай rsync так:
rsync -a --filter='. .rsync-filter' ...{}
/backups/
2025-12-05-12:00/
2025-12-05-13:00/
2025-12-05-14:00/{}
Каждый каталог - полноценная копия состояния.
#!/usr/bin/env bash
set -e
SRC="/home/user/project"
DST="/backups"
TS=$(date +"%Y-%m-%d-%H:%M")
LAST="$DST/latest"
NEW="$DST/$TS"
mkdir -p "$DST"
if [[ -d "$LAST" ]]; then
echo "[i] Using hardlinks from: $LAST"
rsync -a --delete --link-dest="$LAST" "$SRC/" "$NEW/"
else
echo "[i] First snapshot — no link-dest"
rsync -a --delete "$SRC/" "$NEW/"
fi
# Update the "latest" symlink
rm -f "$LAST"
ln -s "$(basename "$NEW")" "$LAST"
echo "[i] Snapshot created: $NEW"{}
rsync -a —link-dest=... - команда говорит сравни каталог с предыдущим снапшотом и все неизмененные файлы сделай через hardlink. Это не копия, а именно вторая ссылка на тот же inode. Место: +0 байт.
--delete - удаленные файлы тоже исчезнут из новой точки — snapshot становится точным состоянием дерева в данный момент.
Symlink latest - позволяет быстро создавать следующую точку, не перебирая каталоги.
rsync -a /backups/2025-12-05-12:00/ /home/user/project/
Либо наоборот: перейти в каталог снапшота и увидеть все как было.
0 * * * * /usr/local/bin/snapshot.sh{}
find /backups -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;{}
Удалить снапшоты старше 30 дней.
.rsync-filter:
- *.tmp
- .cache/{}
И вызывай rsync так:
rsync -a --filter='. .rsync-filter' ...{}
/backups/
2025-12-05-12:00/
2025-12-05-13:00/
2025-12-05-14:00/{}
Каждый каталог - полноценная копия состояния.
#!/usr/bin/env bash
set -e
SRC="/home/user/project"
DST="/backups"
TS=$(date +"%Y-%m-%d-%H:%M")
LAST="$DST/latest"
NEW="$DST/$TS"
mkdir -p "$DST"
if [[ -d "$LAST" ]]; then
echo "[i] Using hardlinks from: $LAST"
rsync -a --delete --link-dest="$LAST" "$SRC/" "$NEW/"
else
echo "[i] First snapshot — no link-dest"
rsync -a --delete "$SRC/" "$NEW/"
fi
# Update the "latest" symlink
rm -f "$LAST"
ln -s "$(basename "$NEW")" "$LAST"
echo "[i] Snapshot created: $NEW"{}
rsync -a —link-dest=... - команда говорит сравни каталог с предыдущим снапшотом и все неизмененные файлы сделай через hardlink. Это не копия, а именно вторая ссылка на тот же inode. Место: +0 байт.
--delete - удаленные файлы тоже исчезнут из новой точки — snapshot становится точным состоянием дерева в данный момент.
Symlink latest - позволяет быстро создавать следующую точку, не перебирая каталоги.
rsync -a /backups/2025-12-05-12:00/ /home/user/project/
Либо наоборот: перейти в каталог снапшота и увидеть все как было.
0 * * * * /usr/local/bin/snapshot.sh{}
find /backups -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;{}
Удалить снапшоты старше 30 дней.
.rsync-filter:
- *.tmp
- .cache/{}
И вызывай rsync так:
rsync -a --filter='. .rsync-filter' ...{}
source ~/.zhsrc после очередных изменений, да и плагинов я актуальных найти так и не смог.
По-хорошему можно было бы и плагин для сообщества накидать, но я ленивая скотина и обошелся Bash скриптом.Поэтому открываем
~/.zshrc и пихаем в него такое:
ZSH_LAST_MOD=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
precmd() {
local new_mod=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
if [[ $new_mod != $ZSH_LAST_MOD ]]; then
if zsh -n ~/.zshrc; then
source ~/.zshrc
ZSH_LAST_MOD=$new_mod
echo "🔄 .zshrc auto-reloaded (OK)"
else
echo "⚠️ .zshrc has syntax errors — reload skipped"
fi
fi
}{}
Теперь после каждого изменения файла ~/.zshrc конфиг будет автоматически перечитан. НО перечитан он будет только после проверки, если ты своими кривыми руками где-то накосорезил — идешь нахуй. Логично? Логично!
Как это работает:
1. Сохраняет timestamp последней модификации .zshrc 2. precmd() — специальная функция zsh, которая автоматически вызывается перед каждым выводом prompt (после любой команды или Enter). Вызывается незаметно, идеально для фоновых проверок без вмешательства в работу. 3. Дальше логика, сравнивает timestamps — если .zshrc отредактирован и сохранен, переходит к проверке. 4. zsh -n файл — проверяет синтаксис без выполнения (no-execute mode). Возвращает 0 при успехе, > 0 при ошибках (дубликаты, незакрытые скобки и т.п.). 5. Ну а дальше сообщает тебе, все ок или идешь нахуй.Нюанс:
echo 'syntax error' >> ~/.zshrc
/home/user/.zshrc:226: command not found: syntax
🔄 .zshrc auto-reloaded (OK)
Проблема в том, что zsh -n проверяет только синтаксис (скобки, конструкции), но не выполнение команд. Имей это ввиду.
Если сделать так:
echo '# syntax error' >> ~/.zshrc
🔄 .zshrc auto-reloaded (OK)
То всё пройдёт замечательно. Ну ты понял к чему я клоню.
Тема прикольная, экспериментируй.
🚪 Bash Ready | #практикаОтзывы канала
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Bash Ready | Linux — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 4.7K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 13.7, количество отзывов – 1, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 1118.88 ₽, а за 6 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий