[Перевод] Самые полезные приёмы работы в командной строке Linux

Каждый, кто пользуется командной строкой Linux, встречался со списками полезных советов. Каждый знает, что повседневные дела вполне можно выполнять эффективнее, да только вот одно лишь это знание, не подкреплённое практикой, никому не приносит пользы.

Как выглядят типичные трудовые будни системного администратора, который сидит на Linux? Если абстрагироваться от всего, кроме набираемых на клавиатуре команд, то окажется, что команды эти постоянно повторяются. Всё выходит на уровень автоматизма. И, если даже в работе есть что улучшать, привычка противится новому. Как результат, немало времени уходит на то, чтобы делать так, как привычнее, а не так, как быстрее, и, после небольшого периода привыкания — удобнее. Помнить об этом, сознательно вводить в собственную практику новые полезные мелочи — значит профессионально расти и развиваться, значит — экономить время, которое можно много на что потратить.

image

Перед вами — небольшой список полезных приёмов работы с командной строкой Linux. С некоторыми из них вы, возможно, уже знакомы, но успели их позабыть. А кое-что вполне может оказаться приятной находкой даже для знатоков. Хочется надеяться, что некоторые из них будут вам полезны и превратятся из «списка» в живые команды, которыми вы будете пользоваться каждый день.

Вывод результатов работы команд в виде таблицы


Иногда вывод результатов работы команд выглядит как мешанина из беспорядочных строк. Найти то, что надо, в таких данных можно, но работать с ними неудобно. Например — что-то подобное можно получить в ответ на команду mount. Хорошо бы то же самое вывести в виде таблицы. И это не только возможно, но ещё и очень просто:
mount | column –t

e2e79f42fb47d16a50d6fd596aadf8b5.png
Результаты работы команды mount, оформленные в виде таблицы

По умолчанию команда формирует табличное представление, ориентируясь на пробелы между словами. А что, если в качестве разделителей используются другие символы, вроде двоеточий? Например — в выводе cat /etc/passwd?

Упорядочить можно и такие данные — достаточно указать символ-разделитель с параметром –s. Например, ниже приведена команда для символа »:».

cat /etc/passwd | column -t –s:

ecd07f7842efeeb3e35525ec2ed06c46.png
Отформатированный вывод /etc/passwd

Многократный повтор команды до её успешного завершения


Если вы погуглите на эту тему, то обнаружите, что многие задают вопрос о том, как повторять команду до тех пор, пока она не будет успешно выполнена. Например, такое может быть полезным при пинге сервера до тех пор, пока он не откликнется, при проверке выгрузки файлов, или при опросе некоего URL до тех пор, пока он не окажется доступен.

Решить подобную задачу поможет цикл while true. Выглядит всё это так:

a9a907fbdf1a91c963f881202a43f805.png
Команда будет повторяться до её успешного завершения

В этом примере конструкция >/dev/null 2>&1 перенаправляет вывод программы в /dev/null, включая и Standard Error, и Standard Out.

Вероятнее всего, это — один из самых полезных приёмов работы с командной строкой Linux.

Сортировка процессов по используемой памяти


Тут всё просто:
ps aux | sort -nk 4

2f75ce4ed6dc91b18e7385632b12f045.png
Отсортированный список процессов

Сортировка процессов по использованию ресурсов CPU


Сортировка процессов по использованию CPU делается так:
ps aux | sort -nk 3

aed1d604dbbeb7d5115f2b77e6a45d5f.png
Отсортированный список процессов

Для того, чтобы вывести сведения об архитектуре, используйте команду getconf LONG_BIT.

Одновременный просмотр нескольких лог-файлов


Для просмотра лог-файлов вполне подходит команда tail, но иногда может понадобиться одновременная работа с несколькими подобными файлами. Для решения этой задачи подойдёт консольный инструмент multitail, который поддерживает выделение текста, фильтрацию и многие другие полезные возможности.

f4a0241a2fce1d78a787e2e5298863d8.png
Работа с multitail

Установить эту утилиту, если вы её у себя не найдёте, можно командой apt-get install multitail.

Возврат к предыдущей директории


Для того, чтобы вернуться к предыдущей директории, просто наберите cd –.

Мониторинг с регулярными интервалами


Использование утилиты watch (например, watch df –h) поможет организовать наблюдение за выводом любой команды. Например, можно наблюдать за объёмом свободного пространства, и за тем, как он меняется.

Пожалуй, вы сами сможете найти подходящие сценарии для использования этой команды.

Продолжение выполнения программы после окончания сессии


Когда вы запускаете любую программу в фоне и закрываете консоль, программа тоже завершит работу. А что, если надо, чтобы программа работала и после закрытия оболочки?

Для того, чтобы этого добиться, можно воспользоваться командой nohup, название которой расшифровывается как «no hang-up». Выглядит это так:

nohup wget site.com/file.zip

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

7e513c7652e881e06ae82761e613c4cd.png
Команда nohup

В примере, показанном на рисунке выше, в текущей директории будет создан файл nohup.out, содержащий вывод команды:

6a0cb7b1e11f84ac92e96a78a4fcd0dd.png
Файл nohup.out

Полезная штука, согласны?

Автоматический ответ yes или no


Предположим, вы хотите автоматизировать процесс, который требует от пользователя постоянно отвечать yes. Сделать это можно, используя команду yes:
yes | apt-get update

Возможно, вместо этого вы решите автоматизировать отрицательные ответы. Тут поможет такая конструкция:
yes no | command

4e073857abd932b5e6e454351d017325.png
Автоматизация ответа YES

Создание файла заданного размера


Создавать файлы заданного размера можно, используя команду dd:
dd if=/dev/zero of=out.txt bs=1M count=10

Вышеприведённая команда создаст файл размером 10 Мб, заполненный нулями.

ff56bd400a8f03bd85bbb07cf4951a73.png
Создание файла заданного размера

Выполнение последней команды с root-привилегиями


Иногда можно забыть ввести sudo перед командой, которой нужны root-привилегии. Вводить всё заново нет нужды — достаточно воспользоваться такой командой:
sudo !!

06fcb06f900bd11cdfdfdc2fad76411f.png
Выполнение последней команды с root-привилегиями

Создание протокола терминальной сессии


Для того, чтобы записать в файл всё, что было выведено в окне терминала, можно воспользоваться командой script.

После выхода из сессии протокол будет записан в файл typescript.

Замена пробелов на знаки табуляции


Вот команда, которая позволяет заменить пробелы на знаки табуляции:
cat geeks.txt | tr ':[space]:' '\t' > out.txt

На самом деле, она универсальна и умеет работать с любыми символами.

Замена строчных букв на прописные


А вот — пример вышеописанной команды для замены строчных букв в файле с текстом на прописные:
cat myfile | tr a-z A-Z > output.txt

image
Замена строчных букв в файле на прописные

Автоматическое формирование списка аргументов для команд: 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

bb8c3b51613c0bd20250dfe8888d1b41.png
Команда 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.

© Habrahabr.ru