
В этой статье я опишу ряд функциональных, полезных, а порой и опасных команд, чтобы продемонстрировать потенциал использования оболочки 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; done3. Удалить все
Эта команда удаляет все, включая файлы на жестком диске и подключенных устройствах, что делает ее очень опасной, поскольку разрешения она не спрашивает.
С помощью флага
rf мы инструктируем ее выполняться рекурсивно и удалять все файлы без запроса разрешения.Символ
/ указывает, что начинать нужно с корневого каталога, который содержит все файлы и все смонтированные устройства с данными, включая удаленные файловые ресурсы и съемные диски. (прим. пер.: современные дистрибутивы не дают просто так удалить /, надо либо добавить --no-preserve-root, либо удалять /* (все файлы в корневом каталоге).$ -- 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 -c6. Выделение цветом вывода 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; done11. Добавление часов в терминал
Выполнение следующих команд приведет к добавлению в терминал часов, которые останутся активны до его закрытия.
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=separate13. Установка звукового уведомления об активации IP-адреса
Эта инструкция пригождается во многих ситуациях. Например, она может давать звуковое оповещение при возвращении сервера в онлайн.
Флаг
-i 120 указывает, сколько секунд ожидать между запросами. Флаг
-a включает звуковое уведомление при получении сервером пакета.ping -i 120 -a IP_address14. Удаление всех файлов каталога, не соответствующих заданному расширению
Как часто у вас бывали случаи, когда нужно было очистить каталог не от всех файлов? Вместо того, чтобы делать это поэтапно, можно провернуть операцию в один шаг, указав файлы, которые нужно оставить.
rm !(*.xls|*.slsx|*.csv)15. Удалить все файлы, кроме одного
Эта команда аналогична предыдущей, но здесь мы обозначаем всего один файл, который нужно оставить.
rm -f !(theFile.txt)16. Генерация случайного пароля заданной длины
Если вы, как и я, порой испытываете трудности с придумыванием пароля, то за вас это может сделать оболочка.
Нужная длина при этом устанавливается флагом
-c.date +%s | sha256sum | base64 | head -c 8; echo17. Рекурсивное удаление всех пустых каталогов
Находит и удаляет все пустые каталоги.
find . -type d -empty -delete18. Копирование разрешений файла
Инструкция ниже скопирует для file1 все разрешения, установленные для file2.
chmod --reference file2 file1▍Напоследок
Командная строка – удивительная вещь, с помощью которой можно выполнять невероятно много разных действий. Надеюсь, что статья оказалась для вас полезной, и благодарю за уделенное внимание!

