Что системному администратору следует знать про командную строку

7 июля 2023
В своей прошлой статье мы рассказывали про графические утилиты администрирования в Astra Linux. В ней, в частности, обсуждалось зачем нужна командная строка или CLI. Теперь я хочу рассказать, что требуется знать, когда вы работаете в CLI. Есть несколько концептуальных вещей, которые нужно знать при написании команд, и несколько утилит, имеющих фундаментальное значение.

Что такое командная строка (CLI) и команды?



Под командной строкой подразумевается программа, которая последовательно выполняет команды пользователя. Такая программа   называется оболочка (shell). Чаще всего это программа — bash (Bourne Again Shell).

 Оболочка запускается на специальном устройстве — терминале. Терминалы бывают аппаратные (такие в современных машинах обычно не  используются), виртуальные и псевдотерминалы. На практике терминал - это то, что позволяет вам ввести команду и получить результат выполнения команды.

Команда - это некоторая строка текста. Строки вы можете набрать на клавиатуре, использовать copy/paste или даже написать ее автоматически с помощью автодополнения.

Как правило команда - это программа, которая располагается в одном из каталогов. Эти каталоги определены переменной PATH!!! 

echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin:/home/vlesk/.local/bin:/home/vlesk/bin

И тут есть нюанс. В некоторых операционных системах, например, Debian или Astra Linux, каталога sbin в PATH нет у обычного пользователя, и поэтому пользователь «не видит» команд для системного администрирования. Следовательно, чтобы «увидеть» эти команды, надо правильно перейти в учетную запись суперпользователя (root), для чего используйте или команду su — (именно с минусом) или sudo -i.

Команды - это не только программы на диске, но еще и специальные возможности оболочки: встроенные команды оболочки, алиасы и функции оболочки.

Команды, в общем случае состоят из трех частей: 

  • имя команды — то что мы запускаем,

  • опции — как это должно работать,

  • аргументы — в отношении чего работает команда.

Опции и аргументы могут быть не обязательными в команде. 

Потоки и конвейеры



Когда вы запускаете программу (команду), то ОС создает три специальных файла для взаимодействия с этой программой. Файлы называются стандартные потоки: ввода (stdin), вывода (stdout) и ошибок (stderr). Три этих потока связываются с тем терминалом, где была запущена команда.

Оболочка может особым образом работать с этими специальными файлами.

Во-первых, оболочка может перенаправить вывод команды в файл вместо терминала, или наоборот, вместо ввода из терминала, взять данные из файла. В общем, это называется перенаправлением стандартных потоков.

1.    < или 0< - перенаправление стандартного ввода из файла:

команда < «читает данные из файла»

2.    > или 1> - перенаправление стандартного потока вывода в файл:

команда > «записывает данные в файл»

3.    2> - перенаправление стандартного потока ошибок в файл:

команда 2> «записывает ошибки в файл»

Запомнить, что делают эти знаки очень просто: смотрите на них, как на стрелки, которые указывают направление потока данных. От команды «>» в файл или в команду «<» из файла.

Во-вторых, оболочка умеет связывать стандартный поток ввода одной команды со стандартным потоком другой. Называется это конвейер. Выглядит это так:

команда1 | команда2 | ... | командаN

Эта конструкция имеет фундаментальное значение. Смысл в следующем: вы выполняете некую команду, и она что-то выводит в стандартный поток. Если вас устраивает этот результат, то все команда написана. Если вы получили не то, что хотели, но нечто большее, то вы передаете результат в следующую команду, которая уточняет (обычно фильтрует) результат. И снова, если нужный результат получен, то -стоп. Если нет - продолжаем дальше, постепенно приближаясь к нужному результату.

В этом есть еще три нюанса:

1. Когда вы пишите команду, то требуется хорошо представлять, какой результат должен быть у команды, а это не всегда легко понять, особенно в отсутствие практики.

2. В *nix системах принято создавать утилиты, исходя из конкретной задачи. Каждая утилита выполняет свою и только свою задачу и делает это хорошо. 

Или другими словами на каждое действие - своя утилита: отдельно для сортировки, отдельно для поиска и т. д. Универсальных команд, т.е. тех, которые делают множество действий, не бывает. Что в свою очередь приводит к появлению огромного количества.

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

Пять важнейших утилит


Что обязательно к изучению при работе с командной строкой:

·         find — команда для поиска файлов. Команда может не только искать файлы по атрибутам типа имя, размер, права доступа, тип и пр., но и может выполнять действия над найденными файлами.

·         vi — текстовый редактор. Работа с текстом в командной строке - это то, что приходится делать почти постоянно. В том числе приходится много работать с текстовыми файлами (конфигурационные файлы, скрипты и пр.). Есть и другие текстовые nano или mcedit. Но vi – это 1) то, что всегда работает; 2) другие редакторы не обладают функционалом vi.

С другой стороны, в vi нет интуитивности, от слова совсем. Те, кто впервые с ним сталкиваются, даже не могут из него выйти. И еще, vi может запуститься в самый неожиданный момент, поэтому хотя бы элементарные навыки работы с ним надо иметь обязательно. Чтобы быстро научиться с ним работать, запустите утилиту vimtutor (из состава пакета vim).

·         sed — потоковый или не интерактивный редактор текста. sed полезен для поиска и замены, вставки строк или удаления из текстового потока.

·         awk — потоковый редактор для структурированных данных (таблиц). Часто данные, которые подлежат обработке, представлены в виде таблиц. awk умеет получать данные из таблиц, работать с этими данными и формировать таблицы. И sed и awk очень мощные средства, книги про них пишут: «The AWK Programming Language» (https://archive.org/details/awkprogrammingla00ahoa) или «sed & awk» (http://www.oreilly.com/catalog/sed2/). Они требуют вдумчивого и внимательного изучения.

·         grep — поиск текста по специальным шаблонам или регулярным выражениям. Очень полезно при анализе данных. Понимание принципов работы с регулярными выражениями сложно переоценить.

Заключение



Командная строка - это мощное средство управления ОС, но в то же время она требует времени и терпения на изучение ее возможностей. И один из самых важных курсов из всех, что есть про Линукс, это L-101. Это те фундаментальные знания, которые поддержат вас в изучении этих ОС. Выскажу свое наблюдение: очень многим не хватает знаний и умений, которые рассматриваются в курсе L-101.

И самое последнее. Если из прочитанного выше вам что-то непонятно или неизвестно, значит у вас пробел в знаниях, и мы настоятельно рекомендуем выделить время на изучение этого базисного материала.

Автор статьи
Вячеслав Лесковец
Преподаватель:
УЦ АйТи Клауд по направлениям сетевые технологии, операционные системы

Курсы к статье

Затрудняетесь
с выбором курса?

Оставьте заявку на консультацию

Отправляя заявку, вы соглашаетесь с условиями обработки персональных данных

Хотите преподавать в АйТи Клауд?

Если вы имеете компетенции и хотите работать тренером курсов в АйТи Клауд - оставьте ваши данные, мы свяжемся с вами!