Развертывание строк

Каждый раз когда в командную строку Linux Shell вводится команда для выполнению, bash выполняет множество преобразований над текстом команды перед ее выполнением. Ранее мы сталкивались с подстановками файлов по шаблонам, но детально не разобрали как оно устроено. А оно является частью механизма развертывания. Например, когда в рабочей директории два файла test1.txt и test2.txt, мы можем выбрать их с помощью подстановки по шаблону «t*.txt». Например, если мы желаем их удалить, мы воспользуемся командой rm.

Программа rm в качестве аргументов ожидает имена файлов к удалению, а мы передали ей шаблон. На самом деле программа не видит наш шаблон. В процессе развертывания строки, наша команда была преобразована с перечислением всех файлов.

Программе rm, как и остальным, нет необходимости в поддержке шаблонов имен файлов, чтобы они работали. Выборка файлов происходит до выполнения программы. А программа выполняет лишь свой функционал Это позволяет экономить значительные ресурсы при разработке программ 🙂

Развертывание строк не ограничивается подстановкой имен файлов по шаблонам. Основной принцип в том, что при вводе какой-то инструкции с подстановками для выполнения, она преобразуется в другую, где все подстановки развернуты.

Чтобы увидеть конечный вид команды, которая выполняется после всех развертываний, нам понадобится команда, которая выводит все переданные аргументы. Воспользуемся командой echo. Она выводит все ее аргументы в стандартный вывод, который при необходимости можно перенаправить в файл.

При помощи команды echo и перенаправления вывода создадим два файла test1.txt и test2.txt с каким нибудь текстом.

С помощью echo можно записывать информацию в файл. Команда echo  считывает выводимые данные из аргументов команды, а не стандартного ввода, как мы это делали ранее с помощью программы cat. Аргументы любой команды являются частью вводимой инструкции, поэтому к ним применимо развертывание. Посмотрим как оно работает при помощи команды echo на подстановках имени файлов по шаблонам.

Каждая подстановка, в которой была произведена выборка файлов, замена последовательностью имен файлов. В последних двух примерах мы выполняли подстановку по шаблону «a*». Данному шаблону не соответствует ни одно имя файла в рабочей директории, потому подстановка развернута не была и осталась в неизменном виде.

Echo и подстановки файлов по шаблонам

Помимо подстановке имен файлов по шаблонам, существуют и иные развертывания строк.

Пользовательская директория

Нам уже известны специальные ярлыки пользовательских директорий. Они работают на этапе развертывания строк. Символ “~” (тильда) при развертывании заменяется на собственную домашнюю директорию. А если за ним следует имя учетной записи пользователя, тогда вся последовательность, начиная от символа «~» и заканчивая именем пользователя, заменяется на домашнюю директорию данного пользователя.

Арифметические операции

Linux Shell при развертывании вычисляет значения арифметических выражений. Командную строку можно использовать как калькулятор 🙂

Чтобы значение было вычислено, арифметическое выражение необходимо обернуть в двойные круглые скобки и поставить перед ними символ «$» (знак доллара).

Допускается использовать лишь целые числа. Вещественные числа (дроби) не поддерживаются 🙁 Пробелы в выражениях игнорируются, поэтому их можно использовать в качестве произвольных разделителей для удобства чтения. Выражения могут быть вложенными.

В данном примере во вложенным арифметическом выражении число 5 возводится в квадрат (2 степень), затем результат умножается на 3.

Для группировки вложенных выражений можно использовать круглые скобки. Тогда предыдущий пример будет короче и лучше читаем.

Возможно также целочисленное деление чисел и извлечение остатка. Попробуем разделить 5 жестких дисков на два компьютера, так чтобы каждый получил поровну.

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

Попробуем записать список всех файлов в рабочей директории в файл, имя которого начинается со слова «test», после чего идет число равное результату умножения 25  на 132 (сколько будет? :)) и заканчивается строкой «.txt».

Развертывание последовательностей и комбинации

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

Для развертывания последовательности, состоящей из интервала целых чисел или символов, в фигурных скобках указывают границы интервала, разделенные двумя точками («..»). Интервал может быть указан как в возрастающем порядке, так и в убывающем.

Если последовательность состоит из списка строк, то их разделяют запятыми и помещают в фигурные скобки.

Сами строки внутри последовательности тоже развертываются.

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

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

К окружающему тексту тоже применяется развертывание строк.

А значит возможно составление сложных комбинаций их нескольких последовательностей.

Это очень удобно и позволяет сэкономить много времени. Ранее мы пытались создать дерево директорий для сортировки фотографий по датам, которое выглядело как photo/год/месяц/день. Тогда мы создали всего две директории (не считая родительских) photo/2014/01/10 и photo/2010/12/05. Сейчас мы создадим директории для всевозможных дат за 2013-2015 годы. Чтобы это выполнить нам вполне достаточно перечислить их имена (относительные пути), а родительские директории программа mkdir создаст автоматически. Но в году 365 дней, значит нужно перечислить все $((3*365)) 😉 директорий.

Попробуем решить задачу с помощью последовательностей. Первый шаблон, который приходит в голову «photo/{2013..2015}/{01..12}/{01..31}». Но тогда мы получим $((3*12*31)) директорий, что явно больше чем наши $((3*365)) дней в этих годах 🙂 Наверное, нужно учесть, разное количество дней в каждом месяце. Нам поможет вложенная последовательность. В итоге мы получим «photo/{2013..2015}/{{01,03,05,07,08,10,12}/{01..31},{04,06,09,11}/{01..30},02/{01..28}}». Перед тем, как что-то создавать, испытаем наш шаблон при помощи команды echo. Так как результат будет слишком длинным, перенаправим вывод в программу для чтения текста less и пролистаем там.

Начало сгенерированного списка директорий для дат при помощи последовательной и команды echo

Конец сгенерированного списка директорий для дат при помощи последовательной и команды echo

Выглядит как мы и ожидали. Значит теперь создадим все папки, заменив echo на mkdir с ключом -p.

Как видим, все прошло отлично. Столь сложная на первый взгляд задача была решена столько простой командой. Если кто-то не уверен, то может пробежать по всему созданному дереву директорий и проверить его вручную 🙂

Значения переменных

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

Для развертывания значения переменной перед её именем ставится символ «$» (знак доллара). Например, мы желаем узнать значение переменной «USER». Выведем его с помощью команды echo.

Для вывода списка всех переменных окружения и их значений можно воспользоваться командой printenv.

Неустановленная (несуществующая) переменная при развертывании подменяется пустой строкой.

Чтобы задать значение переменной нужно указать имя переменной, после этого поставить символ «=» (знак равно) и указать значение переменной. Между именем переменной и символом «=» не должно быть пробелов. Зададим значение переменной «TEST».

Но, если мы попытаемся вывести список переменных при помощи команды printenv, то нашей переменной «TEST» там не будет.

Если быть более точным, команда printenv выводит только список переменных окружения, а мы задали локальную переменную «TEST». Подробно о внутреннем устройствое переменных и работе с ними я напишу в материалах программирования и разработки скриптов для Linux Shell. Если есть желание увидеть список всех переменных сейчас, можно самостоятельно научиться работать с командой set. Мы ведь помним где получить справку по незнакомой команде? 🙂

Подстановка команд

Мы уже знаем как перенаправить вывод команды в файл или прицепить к вводу другой команды. А еще его можно подставить в строку и передавать как аргументы другой команды. Для развертывания вывода команды, саму команду необходимо обернуть в круглые скобки и поставить перед ними символ “$” (знак доллара). Посмотрим как это работает.

Вместо знака доллара и скобок можно использовать символ «`» (обратная кавычка).

Данный функционал особо полезен при разработке Shell скриптов и его можно использовать совместно с переменными, записывая в них результат выполнения команд. Но об этом позже 🙂

Обзор инструментов обработки информации и фильтров

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

В Linux инструменты обработки информации, которые часто используются в цепочках переадресации ввода-вывода, называются фильтрами. Они считывают информации из стандартного вывода, обрабатывают ее и выводят результат в стандартный вывод. Ввод обычно перенаправляется на вывод предыдущей программы, а вывод либо на вводе следующей программы, либо в файл для сохранения конечного результата. Таким образом, объединив несколько простых инструментов, можно легко выполнить существенное преобразовании информации и получить результат в удобном виде 🙂

Познакомимся с наиболее часто используемыми фильтрами. Более подробно с некоторыми из них мы познакомимся с ними в материалах программирования и разработки скриптов для Linux Shell. Рекомендую самостоятельно ознакомиться со справочной информацией по каждой из описанных программ.

sort
Сортирует строки и выводит их в упорядоченном виде. Мы уже знакомы с этим фильтром 🙂
uniq
Фильтрует повторы соседних строк, выводя каждую строку не более одного раза. Обычно применяется для отсортированного списка через sort, чтобы вырезать все повторы строк из текста.
grep
Просматривает информацию и фильтрует ее по указанному шаблону.
fmt
Считывает текст и выводит его строки в отформатированном виде, удобном для чтения.
pr
Подготавливает информацию к распечатке на бумаге путем разбивки ее на страницы и вставки верхнего и нижнего колонтитула.
head
Выводит только несколько первых строк. Обычно применяется для ознакомления с заголовками файлов.
tail
Выводит только несколько последних строк. Обычно применяется для ознакомления с последними записями журнальных файлов. В составных цепочках используется после фильтрации информации.
tr
Выполняет преобразование символов. Используется для преобразования регистра и типов переноса строк (в различных ОС, концы строк кодируются разными символами).
sed
Редактирует информацию по заданным правилам в процессе ее считывания и сразу выводит результат. Предназначен для более сложных преобразований, которые не может выполнить программа tr. Обработка информации происходит в процессе получения информации без ожидания указателя конца ввода.
awk
Выводит преобразованную информацию по заданным правилам. Достаточно могущественный и сложный инструмент.
wc
Подсчитывает и выводит число строк, слов и символов. Часто употребляется с ключом -l в цепочках, чтобы вывести только одно число — количество строк.

А теперь посмотрим использование некоторых инструментов на примере. Во время путешествия по файлам и директориям Linux мы посещали директорию /var/log, в которой хранятся журнальные файлы. Там хранится файл boot.log, содержащий информацию о последней загрузке системы. Откровенно говоря, я выбрал этот файл для текущего примера только из-за того, что он не требует прав суперпользователя для чтения 😉 Откроем его в программе less, быстро ознакомимся с его содержимым и закроем.

Файл boot.log в less

Заметили странные начала строк? Так less выводит специальные символы, которые не предназначены для прямого отображения на экране (например, перенос страницы). Здесь данные спецсимволы распознаются терминальной программой и используются для выделения слова OK зеленым цветом при выводе в терминале. Но less заменил их на видимые, чтобы отобразить нам их присутствие в тексте. Но сейчас мы это исследовать не будем.

Если приглядеться, то можно заметить, что в файле есть строки, содержащие «Reached target». Они обозначают начала выполнения группы действий. Мы хотим ознакомиться со списком из первых пяти этих групп в алфавитном порядке. Но как это сделать? Искать в less строку «Reached target» мы умеем, но это не очень удобно. Лучше отфильтруем содержимое файла boot.log, оставим в нем лишь строки, которые содержат «Reached target». Отсортируем список по алфавиту и выведем только первые 5 строк.

Цепочка cat, grep, sort, head

С виду сложная задача для решения в графическом интерфейсе была легко решена в командной строке Linux Shell. Теперь, я надеюсь, смысл и удобства цепочек команд понятен всем. А еще мы увидели как выглядит этот таинственно закодированный зеленый цвет 🙂

Сцепление ввода и вывода

А что если нам нужно сам ввод направить в вывод? Например, мы хотим, чтобы то, что мы вводим, сразу же выводилось.

Зачем же нам это? Ну, например, мы ведь можем перенаправить вывод в файл или на принтер, стало быть, если бы у нас была программа, которая выводит то, что мы вводим, мы могли бы легко создавать файлы или печатать на принтере прямо с клавиатуры 🙂

В Linux есть такая программа. Она называется cat. Испытаем ее. После завершения ввода нажмем Ctrl+D (указатель конца ввода).

После того как мы вводим строку, она сразу же выводится обратно. Так в чем же польза? Перенаправим вывод в файл test.txt и попробуем снова, после чего откроем файл в программе просмотра текстовых файлов less.

Содержание файла test.txt после cat

Мы только что научились создавать файлы и записывать в них информацию 🙂

Попробуем в этот же файл добавить еще несколько строчек.

Содержание файла test.txt после cat после добавления строк

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

А теперь попробуем вывести содержание файла test.txt, но не с помощью программы для чтения тестовых файлов less. Сделаем это командой cat. Для этого перенаправим ввод из файла less.txt.

С помощью cat очень удобно просматривать содержание мелких файлов. В отличии от less все содержание файла сразу же выводится и командная строка Linux Shell сразу же ожидает новой инструкции, без необходимости выходить из редактора с помощью кнопки «q».

А еще программа cat помимо вывода информации из стандартного ввода умеет напрямую выводит содержание файлов (без необходимости перенаправления ввода). Для этого после имени команды следует через пробел указать список файлов. Попробуем вывести содержание файла less.txt.

Обычно программа cat используется в качестве первого звена при составлении цепочки перенаправления вывода одной программы на ввод другой. При помощи cat считывается содержание файла, который отправляется на обработку следующей программы. Так инструкция из цепочки с несколькими командами выглядит наиболее читаемой и понятной для человека, чем перенаправление ввода.

Например, мы желаем через программу просмотра текста less открыть содержание файла test.txt, предварительно отсортировав в нем строки по алфавиту. Для этого воспользуемся уже известным нам инструментом sort. Для начала посмотрим как бы это выглядело, если бы мы воспользовались переадресацией ввода из файла. Если быть совсем откровенным, то программа sort по аналогии с cat умеет считывать данные из файла без перенаправления ввода, для этого необходимо лишь указать имена файлов после названия команды. Но сейчас нас интересует не работа программы sort, а принцип построения цепочек конвейерной обработки данных.

А теперь представим, перед sort мы желаем предварительно обработать данные другой программой и только после этого отсортировать результат. Для этого нам бы пришлось перемещать имя файла. Попробуем начать эту же цепочку с команды cat.

Сейчас наше указание выглядит наиболее понятным. Мы просим Linux Shell сначала открыть файл, потом отсортировать, а потом открыть результат в программе для чтения текста less. Если мы пожелаем добавить в цепочку еще какую-либо обработку данных, мы просто вставим ее в нужное месте. Ведь имя файла больше не привязано ни к одной команде обработки данных 🙂

Перенаправление ввода и вывода

В интерфейсе командной строки есть очень полезная возможность перенаправления (переадресации) ввода и вывода (англ. термин I/O Redirection). Как мы уже заметили, многие программы выводят данные на экран. А ввод данных в терминале осуществляется с клавиатуры. С помощью специальных обозначений можно перенаправить вывод многих команд в файлы или иные устройства вывода (например, распечатать на принтере). Тоже самое и со вводом информации, вместо ввода данных с клавиатуры, для многих программ можно задать считывание символов их файла. Кроме того, можно даже вывод одной программы передать на ввод другой программе 😉

Разморозим нашу виртуальную машину и посмотрим как все это работает. В домашней директории создадим директорию test и перейдем в нее. Это позволит нам после завершения наших проб удалить весь мусор, стерев всю директорию test, как мы это сделали в позапрошлый раз.

Создание директории test и переход в нее

Стандартный вывод

Большинство программ, работающих в интерфейсе командной строки, отображают результаты, направляя их на специальное приспособление, называемое стандартным выводом. Все, что отправляется в стандартный вывод, обычно отображается на экране. Но вывод можно перенаправить. Для его перенаправления в определенный файл, существует специальное обозначение «>» (знак больше), после которого указывается имя файла. В таком случае вывод результатов работы команды записывается в файл и на экран не выводится. Если файла с указанным именем не существует, то он будет создан. В противном случае, старое содержание файла будет стерто. Для записи в конец существующего файла вместо «>» следует использовать «>>» (два знака больше). Если файл отсутствует, то он будет создан, в противном случае вывод будет дописан в конец существующего файла.

Посмотрим как это работает. Для этого перенаправим вывод команды ls в файлы. А после посмотрим их содержание с помощью программы для чтения текстовых файлов less.

Перенаправление вывода всегда указывается после всех параметров и аргументов программы (в конце команды).

Помимо текстовой информации, в стандартный вывод могут быть выведены двоичные (не читаемые человеком данные). В таком случае, при обычном вызове программы, которая выдает подобный результат, они появятся на экране, что не имеет смысла, так как прочитать (понять) результат работы программы мы не сможем 🙁 Предполагается, что подобный вывод будет перенаправлен для записи в файл или на ввод другой программе.  Это очень удобно, ведь программа лишь обрабатывает данные, а после мы сами указываем, куда отправить (или записать) результат, без необходимости предварительной записи его во временные файлы. С конкретными примерами подобного использования мы познакомимся после того, как разберемся с перенаправлением ввода.

Стандартный ввод

Большинство программ, работающих в интерфейсе командной строки, ожидают ввод данных от пользователя с так называемого приспособления стандартный ввод.  Обычно, все, что набирается на клавиатуре, доступно для считывания программе из стандартного ввода. Но его можно перенаправить.  Чтобы перенаправить ввод из файла, существует специальное обозначение «<» (знак меньше) после которого следует указать имя файла. При перенаправлении ввода, вместо того, чтобы считывать символы с клавиатуры (стандартного устройства ввода), программа считывает их их указанного источника (файла).

Чтобы понять, удобство переадресации ввода, вначале познакомимся с программой sort, которая считывает строки и выводит их, отсортировав по алфавиту. Если быть совсем честным, то программа sort умеет считывать данные из файла, если указать его имя, но мы не будем в данном случае этим пользоваться. Ведь нас интересует разобраться как работает перенаправление ввода.

Вначале запустим программу sort и введем несколько строк. После завершения ввода воспользуемся комбинацией Ctrl+D, которая вставляет так называемый символ (указатель) конца данных (файла).

Как видим, программа отсортировала строки в алфавитном порядке (вначале следуют цифры). Если присмотреться, то не очень понятно, где начинается вывод результата, так как сразу после того, как мы закончили вводить данные, программа вывела результат.

Программа sort

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

Аналогично было бы, если бы мы сортировали строки из файла. На экране был бы отображен лишь результат сортировки. Попробуем отсортировать строки в файле usr.txt, в который мы сохранили вывод результата программы ls после двух запусков. Как мы заметили, программа ls выводит результат в отсортированном виде, но мы запускали ее дважды и получили два отсортированных списка в файле usr.txt. Сейчас нам нужно отсортировать все строки файла usr.txt между собой.

Перенаправление ввода всегда указывается после всех параметров и аргументов программы (в конце команды).

Можно сразу перенаправить и ввод, и вывод. Сохраним отсортированный выше список в файле usr-sorted.txt и посмотрим результат через less.

При одновременном указании переадресации ввода и вывода, порядок в котором они указываются не имеет значения. Можно вначале указать либо перенаправление ввода, а затем вывода, либо наоборот 🙂

Перевод вывода на ввод

Перенаправлять стандартные ввод и вывод в файлы мы уже умеем. Но еще можно вывод одной команды подать на ввод другой. Это наиболее полезный и удобный функционал переадресации ввода вывода. Таким образом можно объединить в цепочку несколько команд, последовательно создавая канал между выводом одной команды и вводом следующей. Такая переадресация ввода вывода одной команды в другую называется каналом (англ. pipeline или pipe). Для присоединение ввода команды к выводу другой команды, используется обозначение «|» (вертикальная черта, «труба» (англ. pipe)). После полного описания команды, вывод которой следует перенаправить на ввод другой команде, ставится символ «|» (вертикальная черта) и следует описание второй команды. Цепочка может содержать сразу несколько команд.

Посмотрим как это работает. Если мы помним, в директории /usr/bin слишком много файлов. Мы хотим посмотреть детальную информацию по каждому, но список не помещается на экране. Для решения подобной задачи мы перенаправляли вывод команды ls в файл, а затем открывали его через удобную программу для просмотра текстовых файлов less. А ведь можно сразу без сохранения результата в файл открыть его через less. Сделаем это.

Перенаправление вывода команды ls в программу less

Теперь мы можем видеть весь результат и перемещаться по нему при помощи прокрутки в less и даже выполнять поиск текста. Для выхода из less нажмем клавишу «q». Я надеюсь, к текущему моменту мы запомнили нужные нам команды управления, особенно выход из less, поэтому далее про «q» упоминаний не будет.

Не забудем удалить созданную директорию test. Все помнят как это сделать? Если возникают сложности, советую вновь ознакомиться и понять основные методы воздействия на файлы и директории в Linux.

Более подробно о применении цепочек из команд будет рассказано в следующих материалах. А пока вновь заморозим виртуальную машину. О заморозке и разморозке в будущем я тоже упоминать не буду, как и о многом очевидном. И не бойтесь отклоняться от инструкций в материалах и ставить опыты с командной строкой — это только пойдет на пользу 🙂

Работаем с командами и программами

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

Введенное что-либо в командной строке воспринимается как инструкция к выполнению. Она может быть как указанием к запуску другой программы, так и внутренней командой Linux Shell (мы работает с программой bash в качестве командной строки). Для нас в большинстве случаев важен лишь результат исполнения.

Команды Linux Shell можно поделить на 4 группы:

  1. Исполняемая программа. В качестве примера можно взять любой файл из директории /usr/bin. Программы могут быть представлены в виде скомпилированных двоичных файлов или текстовых скриптов. Они дают возможность расширения набора доступных возможностей (команд) при установке новых приложений или разработке собственных.
  2. Внутренняя команда Linux Shell. В самой программе, выполняющей функции Linux Shell (в нашем случае программа bash) имеется фиксированный набор своих команд. В отличии от исполняемых программ, они позволяют изменять настройки Linux Shell. Например, при помощи команды cd можно изменить рабочую директорию.
  3. Внутренние функции Shell. Это миниатюрные скрипты, включаемые в окружение внутри Linux Shell. Пока мы с ними еще не сталкивались. Подробно мы познакомимся с ними в материалах программирования и разработки скриптов для Linux Shell.
  4. Псевдонимы или алиасы. Это команды, которые можно задать на основе других доступных команд.
  5. Управляющие конструкции. Являются частью языка Shell для написания инструкций и управляют выполнением команд. Подробно мы познакомимся с ними в материалах программирования и разработки скриптов для Linux Shell.

Разморозим виртуальную машину и познакомимся с командами поближе 🙂

Определение типа команд

Если мы знаем только имя команды, но не знаем с чем столкнулись и нам любопытно узнать, то можно воспользоваться командой type, которая определит тип интересуемой нас команды. Для этого после команды type указывается имена интересуемых команд. Сама команда type является внутренней командой Linux Shell (программы bash). Убедимся в этом.

Попробуем опытным путем получить информацию по ранее известным нам командам cd, pwd, ls, less, file, mkdir, rmdircp, mv, rm и kshkqskskjskafege (первая команда, которую мы ввели).

Как мы видим, команды cd и pwd, встроенные в Shell, less, file, mkdir, rmdircp, mv и rm — исполняемые программы из директории /usr/binls — псевдоним команды ls с ключом --color=auto (теперь мы знаем, почему папки выводятся синим цветом, а программы зеленым), а команды kshkqskskjskafege не существует.

Поиск исполняемого файла

Иногда бывает несколько разных версий выполняемой программы, установленной в разных местах. Для домашних компьютеров это несколько необычно, но на больших серверах совсем в порядке вещей. Чтобы определить точное расположение выполняемого файла по имени, существует команда which, После команды which следует указать имя интересуемой нас программы. Попробуем определить расположение программ less и rmdir.

Документация к командам

Зная название команды, можно попытаться поискать к ней документацию. Для этого есть различные инструменты.

Команда справки help

Для внутренних команд bash можно запросить справку через команду help. Для этого после команды help следует через пробел указать имя интересуемой команды, по котой требуется справка. Почитаем информацию о команде pwd.

Параметр справки --help

Многие программы поддерживают ключ --help. При его использовании, программа выводит описание, доступные параметры и ожидаемые аргументы. Запросим справку у команды mkdir.

К сожалению, некоторые программы не поддерживают параметр --help. Но имеет смысл попытаться таким образом получить информацию о программе, если иных возможностей нет. В большинстве случаем, когда ключ --help не распознан программой, программа выведет сообщение об ошибке и отобразит информацию по её использованию, которая нас интересует.

Страницы руководства

Большинство программ, предназначенных для работы с интерфейсом командной строки, снабжены формальной документацией, называемой руководством по использованию. Для её поиска и просмотра в Linux присутствует специальная программа man. Чтобы получить информацию по интересуемой нас программе или файлу, после команды man следует указать имя команды или файла. Для отображения самой документации программа man запускает инструмент просмотра файлов (обычно это знакомая нам программа less). Почитаем руководство по использованию команды rmdir (для выхода из less после окончания чтения нажмем на клавиатуре клавишу «q»).

Руководство по использованию команды rmdir

Теперь мы знаем где искать информацию по незнакомым и знакомым командам 🙂

А пока вновь заморозим виртуальную машину и дадим ей отдохнуть немножко.