Что такое командная строка (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.
И самое последнее. Если из прочитанного выше вам что-то непонятно или неизвестно, значит у вас пробел в знаниях, и мы настоятельно рекомендуем выделить время на изучение этого базисного материала.
Курсы к статье
Подпишись на рассылку актуальных новостей
и читай нас в соц. сетях