Среди системных администраторов и обычных пользователей Linux достаточно популярна практика писать Bash скрипты для автоматизации и облегчения выполнения определенных задач в операционной системе. Фактически, вы написали один раз порядок действий, которые нужно выполнить, расписали файлы и так далее, а затем просто пишите одну короткую команду и все действия выполняются как нужно. Можно пойти еще дальше и запланировать автоматическое выполнение скрипта.
В этой небольшой статье мы собрали самые полезные Bash скрипты Linux, которые вы можете использовать в своих системах. Некоторые из них состоят из нескольких строк, некоторые помещаются в одну строку. Здесь есть как небольшие сниппеты, которые вы можете использовать в своих скриптах, так и полноценные интерактивные скрипты, для работы с ними через консоль.
Содержание статьи
Полезные Bash скрипты Linux
Начнем с небольших полезных команд, которые могут пригодиться в различных ситуациях.
Команды
Первый скрипт сортирует содержимое текущей папки по размеру:
du -a -d 1 -h | sort -h
Но в большинстве случаев это не эффективно, вам намного удобнее будет использовать утилиту ncdu. Вам нужно быстро создать пароль и вы не хотите устанавливать pwgen, можете использовать такую команду:
< /dev/urandom tr -dc '[:punct:][:alnum:]' | head -c${1:-16};echo;
Эта команда запускает простейший HTTP сервер в текущей папке. Очень удобно для отладки чего либо:
python -m SimpleHTTPServer
С помощью команды at можно запланировать выполнение произвольной команды один раз в указанное время, например, в полночь:
echo "ls -l" | at midnight
Скрипт передает звук от вашего микрофона на другой компьютер по ssh. Качество будет очень плохим, но тем не менее это работает:
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
Хотите скачать весь сайт на компьютер для того, чтобы потом иметь возможность просматривать его оффлайн? Для этого достаточно утилиты wget:
wget --random-wait -r -p -e robots=off -U mozilla https://losst.pro
Будут загружены все файлы сайта, включая изображения, игнорированы правила из файла robots.txt и в качестве агента пользователя будет сообщаться Mozilla Firefox. А такой командой можно реализовать самый простой таймер:
time read (ctrl-d для остановки)
Выводит команды bash, которые используются чаще всего:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
Такой командой вы можете выводить символы с небольшой задержкой, как в фильмах:
echo "Взлом пентагона.......... ОШИБКА ОШИБКА" | pv -qL 10
Записать видео с экрана в терминале linux:
ffmpeg -f x11grab -r 25 -s 800x600 -i :0.0 /tmp/outputFile.mpg
Запустит команду через указанный промежуток времени, в данном случае, через 5 секунд:
timeout 5s команда
Удаляет все пустые папки:
find . -type d -empty -delete
Это были самые популярные и полезные команды с точки зрения ресурса commandlinefu.com. А теперь нам нужно рассмотреть сниппеты bash, которые вы можете использовать в своих проектах.
Сниппеты Bash
Допустим, вы хотите засечь сколько времени выполняется определенное действие в вашем Bash скрипте, для этого добавьте там, где нужно начать замер строку:
А там, где нужно прекратить:
Переменная DIFF будет содержать время выполнения в минутах. Теперь вы можете вывести ее с помощью echo.
Скрипты довольно часто требуют ввода параметров для правильной работы. Этот сниппет позволяет достаточно просто разбирать переданные параметры:
Тут мы присваиваем значение параметра переменной в зависимости от того какой буквой он обозначен. Например, для такого вызова:
Переменной SERVER будет присвоено значение losst, DATA - 20170916 и PARAMETER - Subscribe. Как это работает? Если кратко, то мы всегда используем первый параметр, и используем команду shift, чтобы сдвинуть стек с параметрами влево, когда текущий первый параметр больше не нужен.
Дальше, если вам нужно убедиться, что важные параметры заданы, можно просто проверить на существование эти переменные:
Рабочая директория скрипта имеет важное значение, если вам нужно сохранить какие-либо данные в файловую систему. Лучше выполнять команды в правильной директории. Также нужно проверить есть ли у текущего пользователя права на запись в текущую папку. Создайте такую функцию:
# Проверяем существует ли папка
[ -d "$DIR_NAME" ] || {
echo Dir: $DIR_NAME does not exist
exit 1
}
# Проверяем доступ на чтение
[ -r "$DIR_NAME" ] || {
echo Dir: $DIR_NAME not readable
exit 2
}
# Проверяем доступ на выполнение
[ -x "$DIR_NAME" ] || {
echo Dir: cannot cd to $DIR_NAME
exit 3
}
# Проверяем доступ на запись
[ -w "$DIR_NAME" ] || {
echo Dir: $DIR_NAME not writeable
exit 4
}
cd $DIR_NAME
echo "Present directory $DIR_NAME"
}
Затем, чтобы в скрипте безопасно изменить текущую папку на нужную добавьте:
changedir /путь/к/папке
Иногда может понадобится узнать результат работы предыдущей команды. Для этого используйте переменную $?:
Для записи логов с текущим временем и датой создайте такую функцию:
Следующий сниппет используется часто в скриптах, которые зависят от состояния других системных процессов. Например, может понадобиться убедиться, что MySQL отключен прежде чем выполнять определенные действия.
Теперь вернемся к нашему примеру с MySQL и используем только что написанную функцию:
Иногда может понадобиться загрузка значений переменных из файла. Сначала создаем файл с переменными:
Затем просто добавьте такую строку вначале скрипта, при условии, что конфигурационный файл находится в этой папке и называется configfile:
. configfile
Значения будут загружены в переменные $key1 и $key2. Если нужно перебрать все файлы в текущей папке или файлы, по определенному шаблону, используйте такой цикл:
Следующую функцию вы можете использовать для отправки email сообщений из ваших скриптов. Все что нужно, это указать текст сообщения, тему и список адресов получателей. Вот сама функция:
Выводы
В этой статье мы рассмотрели полезные bash скрипты linux, которые вы можете использовать при работе с системой. Сначала мы разобрали несколько полезных комбинированных команд, а затем несколько полезных снипетов. Если вы хотите более детально разобраться в создании скриптов, смотрите статью написание скриптов на Bash.
https://youtu.be/Vy5iq8GBlxw
Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали













Команда `timeout` непонятно как работает. Выполнил ее примерно так `$ timeout 5s df -h` в итоге команда выполнилась сразу.
подтверждаю результат
Однозначно в закладки. Спасибо!
Огромное спасибо за статью! Особо за сниппет с параметрами! Только хотелось бы уточнить: а если параметр без аргумента нужен? например "scan.sh -z"? Или вообще "scan.sh -zifg" Как это правильно обработать?
timeout прерывает выполнение команды через указанный промежуток времени.
простая проверка
avprobe udp://255.255.255.1:5500
и timeout 5s avprobe udp://255.255.255.1:5500
что бы "Запустит команду через указанный промежуток времени" используется sleep 10s
Выводит команды bash, которые используются чаще всего:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
Можно проще:
history | awk '{print $2}'| sort| uniq -c|sort -nr| head