[Перевод] 18 отборных однострочных команд Bash

iaudfajteigajkkd-4edy8ov1mi.png

В этой статье я опишу ряд функциональных, полезных, а порой и опасных команд, чтобы продемонстрировать потенциал использования оболочки 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


urlx9t-fz7w2o4yuu-mcvo4d3_m.png

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 }'


5z1nzeb9owyl1v2gjx04p9b4lbe.png

7. Переход в предыдущий рабочий каталог


Суперполезная, но редко используемая команда. Если вам нужно вернуться в предыдущий каталог, просто выполните:

cd -


8. Комбинация Traceroute и ping


Эта команда сочетает в себе инструкции ping и traceroute, представляя диагностический инструмент, который непрерывно отправляет пакеты, отражая время выполнения каждого опроса.

mtr google.com


fq53f7pvanztl3eiqpipo1vjs5s.png

9. Поиск последней команды, начинающейся с «xxx», без ее выполнения


В этом примере мы ищем первую команду, начинающуюся с «cp».

!cp:p


lg1gf7_funrzeniaq3ahr2i4efe.png

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 & 


8mu3x9dljae3gx7hk15ct37w2sm.png

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


▍Напоследок


Командная строка — удивительная вещь, с помощью которой можно выполнять невероятно много разных действий. Надеюсь, что статья оказалась для вас полезной, и благодарю за уделенное внимание!
xbo4gmrlicdllfwrmtuypqrlcgg.jpeg

© Habrahabr.ru