[Перевод] Самые полезные приёмы работы в командной строке Linux
Как выглядят типичные трудовые будни системного администратора, который сидит на Linux? Если абстрагироваться от всего, кроме набираемых на клавиатуре команд, то окажется, что команды эти постоянно повторяются. Всё выходит на уровень автоматизма. И, если даже в работе есть что улучшать, привычка противится новому. Как результат, немало времени уходит на то, чтобы делать так, как привычнее, а не так, как быстрее, и, после небольшого периода привыкания — удобнее. Помнить об этом, сознательно вводить в собственную практику новые полезные мелочи — значит профессионально расти и развиваться, значит — экономить время, которое можно много на что потратить.
Перед вами — небольшой список полезных приёмов работы с командной строкой Linux. С некоторыми из них вы, возможно, уже знакомы, но успели их позабыть. А кое-что вполне может оказаться приятной находкой даже для знатоков. Хочется надеяться, что некоторые из них будут вам полезны и превратятся из «списка» в живые команды, которыми вы будете пользоваться каждый день.
Вывод результатов работы команд в виде таблицы
Иногда вывод результатов работы команд выглядит как мешанина из беспорядочных строк. Найти то, что надо, в таких данных можно, но работать с ними неудобно. Например — что-то подобное можно получить в ответ на команду
mount
. Хорошо бы то же самое вывести в виде таблицы. И это не только возможно, но ещё и очень просто: mount | column –t
Результаты работы команды mount, оформленные в виде таблицы
По умолчанию команда формирует табличное представление, ориентируясь на пробелы между словами. А что, если в качестве разделителей используются другие символы, вроде двоеточий? Например — в выводе cat /etc/passwd
?
Упорядочить можно и такие данные — достаточно указать символ-разделитель с параметром –s
. Например, ниже приведена команда для символа »:».
cat /etc/passwd | column -t –s:
Отформатированный вывод /etc/passwd
Многократный повтор команды до её успешного завершения
Если вы погуглите на эту тему, то обнаружите, что многие задают вопрос о том, как повторять команду до тех пор, пока она не будет успешно выполнена. Например, такое может быть полезным при пинге сервера до тех пор, пока он не откликнется, при проверке выгрузки файлов, или при опросе некоего URL до тех пор, пока он не окажется доступен.
Решить подобную задачу поможет цикл while true
. Выглядит всё это так:
Команда будет повторяться до её успешного завершения
В этом примере конструкция >/dev/null 2>&1
перенаправляет вывод программы в /dev/null
, включая и Standard Error, и Standard Out.
Вероятнее всего, это — один из самых полезных приёмов работы с командной строкой Linux.
Сортировка процессов по используемой памяти
Тут всё просто:
ps aux | sort -nk 4
Отсортированный список процессов
Сортировка процессов по использованию ресурсов CPU
Сортировка процессов по использованию CPU делается так:
ps aux | sort -nk 3
Отсортированный список процессов
Для того, чтобы вывести сведения об архитектуре, используйте команду getconf LONG_BIT
.
Одновременный просмотр нескольких лог-файлов
Для просмотра лог-файлов вполне подходит команда
tail
, но иногда может понадобиться одновременная работа с несколькими подобными файлами. Для решения этой задачи подойдёт консольный инструмент multitail
, который поддерживает выделение текста, фильтрацию и многие другие полезные возможности.
Работа с multitail
Установить эту утилиту, если вы её у себя не найдёте, можно командой apt-get install multitail
.
Возврат к предыдущей директории
Для того, чтобы вернуться к предыдущей директории, просто наберите
cd –.
Мониторинг с регулярными интервалами
Использование утилиты
watch
(например, watch df –h
) поможет организовать наблюдение за выводом любой команды. Например, можно наблюдать за объёмом свободного пространства, и за тем, как он меняется.Пожалуй, вы сами сможете найти подходящие сценарии для использования этой команды.
Продолжение выполнения программы после окончания сессии
Когда вы запускаете любую программу в фоне и закрываете консоль, программа тоже завершит работу. А что, если надо, чтобы программа работала и после закрытия оболочки?
Для того, чтобы этого добиться, можно воспользоваться командой nohup
, название которой расшифровывается как «no hang-up». Выглядит это так:
nohup wget site.com/file.zip
Пожалуй, эта команда — одна из тех, о которой забывают чаще всего, открывая по несколько окон терминала только ради исполняющихся в них команд.
Команда nohup
В примере, показанном на рисунке выше, в текущей директории будет создан файл nohup.out
, содержащий вывод команды:
Файл nohup.out
Полезная штука, согласны?
Автоматический ответ yes или no
Предположим, вы хотите автоматизировать процесс, который требует от пользователя постоянно отвечать
yes
. Сделать это можно, используя команду yes
: yes | apt-get update
Возможно, вместо этого вы решите автоматизировать отрицательные ответы. Тут поможет такая конструкция:
yes no | command
Автоматизация ответа YES
Создание файла заданного размера
Создавать файлы заданного размера можно, используя команду
dd
: dd if=/dev/zero of=out.txt bs=1M count=10
Вышеприведённая команда создаст файл размером 10 Мб, заполненный нулями.
Создание файла заданного размера
Выполнение последней команды с root-привилегиями
Иногда можно забыть ввести
sudo
перед командой, которой нужны root-привилегии. Вводить всё заново нет нужды — достаточно воспользоваться такой командой: sudo !!
Выполнение последней команды с root-привилегиями
Создание протокола терминальной сессии
Для того, чтобы записать в файл всё, что было выведено в окне терминала, можно воспользоваться командой
script
.После выхода из сессии протокол будет записан в файл typescript
.
Замена пробелов на знаки табуляции
Вот команда, которая позволяет заменить пробелы на знаки табуляции:
cat geeks.txt | tr ':[space]:' '\t' > out.txt
На самом деле, она универсальна и умеет работать с любыми символами.
Замена строчных букв на прописные
А вот — пример вышеописанной команды для замены строчных букв в файле с текстом на прописные:
cat myfile | tr a-z A-Z > output.txt
Замена строчных букв в файле на прописные
Автоматическое формирование списка аргументов для команд: xargs
Утилита
xargs
, пожалуй, достойна звания одной из самых полезных возможностей командной строки Linux. Её можно использовать для передачи вывода некоей команды в качестве аргумента для другой. Например, вот как можно выполнить поиск .png-файлов и сжать их, или сделать с ними что-нибудь ещё: find. -name *.png -type f -print | xargs tar -cvzf images.tar.gz
Или, возможно, у вас имеется файл со списком URL, и вы хотите загрузить ресурсы по этим адресам, или ещё как-то их обработать:
cat urls.txt | xargs wget
Тут надо учитывать, что вывод первой команды передаётся в качестве аргумента в конце команды
xargs
. Если при конструировании второй команды надо явно указать место, куда должны попасть выходные данные первой, достаточно воспользоваться парой фигурных скобок, {}
и параметром –i
для замены аргумента в нужном месте: ls /etc/*.conf | xargs -i cp {} /home/likegeeks/Desktop/out
Команда xargs
Итоги
Полезности для командной строки Linux — тема невероятно обширная. Поэтому любой список, подобный нашему, можно пополнять очень и очень долго. Например, много неожиданного скрыто в командах
awk
и sed
. Пожалуй, главное — чтобы такие вот списки шли в дело.А какими интересными приёмами работы в командной строке пользуетесь вы?
Комментарии (2)
6 марта 2017 в 14:53
0↑
↓
Спасибо, было интересно!Узнал про script, буду пробовать. Раньше бы сделал скриншот или фотку :)
Заметка про замену табов\пробелов — для этого есть специальные тулзы. Но можно и через универсальный tr, как у вас.
expand - convert tabs to spaces unexpand - convert spaces to tabs
6 марта 2017 в 14:55
0↑
↓
>nohup wget site.com/file.zip
>Пожалуй, эта команда — одна из тех, о которой забывают чаще всего,… потому что пользуются screen.