[Перевод] 18 отборных однострочных команд Bash
В этой статье я опишу ряд функциональных, полезных, а порой и опасных команд, чтобы продемонстрировать потенциал использования оболочки Bash в Linux.Некоторые из них, действительно, потребуют соблюдения осторожности, так как иначе можно потерять все свои данные. Другие же, наоборот, окажутся очень покладистыми и полезными для повышения эффективности работы.
Приступим!
Опасные команды
Выполняйте их, только если уверены в своих действиях. Я добавил в начало и конец каждой символы - -
, чтобы их нельзя было просто скопировать и вставить.
1. fork-бомба
Эта «команда» при выполнении на ПК не представляет особой угрозы, но вот ее запуск на сервере может привести к отказу в обслуживании.
Выглядит она как странный набор символов, хотя на деле это реальное определение функции bash.
В bash допускается использовать в качестве имени функции :
. И в случае выполнения команды :(){ :|:& };::
именно такую функцию мы и создаем. Внутренне она рекурсивно вызывает сама себя, то есть выполняется бесконечно, а с помощью &
мы инструктируем процесс выполняться фоново.
$ -- :(){ :|: & };: --
2. Прямая запись на жесткий диск
Вы легко повредите файловую систему, если при выполнении любой команды сохраните ее вывод на диск. Так кому же это может понадобиться?
$ -- "a command" > /dev/sda --
Запись на диск случайных данных
Эта команда может пригодиться, например, для перезаписи секторов диска с целью исключения возможности восстановления данных. Напомню, что при наличии правильного инструмента вернуть данные после форматирования диска трудностей не составит.
Если использовать эту команду в цикле и выполнить ее 3–4 раза, то она в достаточной степени гарантирует невозможность восстановления удаленной информации.
$ -- dd if=/dev/urandom of=/dev/disk --
//for i in {1..10}; do dd if=/dev/urandom of=/dev/disk; done
3. Удалить все
Эта команда удаляет все, включая файлы на жестком диске и подключенных устройствах, что делает ее очень опасной, поскольку разрешения она не спрашивает.
С помощью флага rf
мы инструктируем ее выполняться рекурсивно и удалять все файлы без запроса разрешения.
Символ /
указывает, что начинать нужно с корневого каталога, который содержит все файлы и все смонтированные устройства с данными, включая удаленные файловые ресурсы и съемные диски.
$ -- rm -rf/ --
Регулярные команды
4. Определение самых используемых команд
Эта однострочная инструкция удобна, когда мы хотим узнать, какие команды чаще всего используем. С помощью -n X
указывается количество, которое нужно вывести. Например, n -10
отобразит 10.
cat ~/.bash_history | tr "\|\;" "\n" | sed -e "s/^ //g" | cut -d " " -f 1 | sort | uniq -c | sort -n | tail -n 10
5. Вывод из файла списка уникальных слов
Следующая команда используется для вывода слов, содержащих символы алфавита. Данная инструкция tr
преобразует все не алфавитные символы в символы новой строки, после чего команда sed
эти пустые строки удаляет. В завершении с помощью sort
выполняется уникальная сортировка результатов с исключением повторений.
tr -c a-zA-Z '\n' < someFile.txt | sed '/^$/d' | sort | uniq -i -c
6. Выделение цветом вывода ps
Эта команда окрашивает вывод ps
, показывая службы красным, а ведущие процессы сеанса зеленым.
Цвета Ascii: http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prompt-Como/Bash-Prompt-Como-5.html
ps ajxf | awk '{ if($2 == $4) { if ($1 == 1) { print "\033[35m" $0"\033[0m"} else print "\033[1;32m" $0"\033[0m" } else print $0 }'
7. Переход в предыдущий рабочий каталог
Суперполезная, но редко используемая команда. Если вам нужно вернуться в предыдущий каталог, просто выполните:
cd -
8. Комбинация Traceroute и ping
Эта команда сочетает в себе инструкции ping
и traceroute
, представляя диагностический инструмент, который непрерывно отправляет пакеты, отражая время выполнения каждого опроса.
mtr google.com
9. Поиск последней команды, начинающейся с «xxx», без ее выполнения
В этом примере мы ищем первую команду, начинающуюся с «cp».
!cp:p
10. Выполнение команды N раз
Тут все довольно очевидно: мы используем цикл и команду, которая должна выполняться при каждой его итерации.
for i in {1..10}; do command; done
11. Добавление часов в терминал
Выполнение следующих команд приведет к добавлению в терминал часов, которые останутся активны до его закрытия.
while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &
12. Поиск повторяющихся файлов
Удобный способ поиска дубликатов файлов, при котором команда получает и сравнивает их хэш-значения.
find -not -empty -type f -printf "%s
" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
13. Установка звукового уведомления об активации IP-адреса
Эта инструкция пригождается во многих ситуациях. Например, она может давать звуковое оповещение при возвращении сервера в онлайн.
Флаг -i 120
указывает, сколько секунд ожидать между запросами.
Флаг -a
включает звуковое уведомление при получении сервером пакета.
ping -i 120 -a IP_address
14. Удаление всех файлов каталога, не соответствующих заданному расширению
Как часто у вас бывали случаи, когда нужно было очистить каталог не от всех файлов? Вместо того, чтобы делать это поэтапно, можно провернуть операцию в один шаг, указав файлы, которые нужно оставить.
rm !(*.xls|*.slsx|*.csv)
15. Удалить все файлы, кроме одного
Эта команда аналогична предыдущей, но здесь мы обозначаем всего один файл, который нужно оставить.
rm -f !(theFile.txt)
16. Генерация случайного пароля заданной длины
Если вы, как и я, порой испытывается трудности с придумыванием пароля, то за вас это может сделать оболочка.
Нужная длина при этом устанавливается флагом -c
.
date +%s | sha256sum | base64 | head -c 8; echo
17. Рекурсивное удаление всех пустых каталогов
Находит и удаляет все пустые каталоги.
find . -type d -empty -delete
18. Копирование разрешений файла
Инструкция ниже скопирует для file1 все разрешения, установленные для file2.
chmod --reference file2 file1
▍Напоследок
Командная строка — удивительная вещь, с помощью которой можно выполнять невероятно много разных действий. Надеюсь, что статья оказалась для вас полезной, и благодарю за уделенное внимание!