• type - сообщает, как интерпретируется имя указанной команды;
  • which - сообщает, какая программа будет выполнена;
  • help - выводит справку по встроенным командам оболочки;
  • man - выводит страницу справочного руководства с описанием команды;
  • apropos - выводит список подходящих команд;
  • info - выводит запись из справочного руководства Info с описанием команды;
  • whatis - выводит краткое описание команды;
  • alias - создает псевдоним для команды.

Что такое команды?

Команда может быть:

  • Выполняемой программой, как файлы в каталоге /usr/bin. К этой категории относятся: скомпилированные двоичные программы, например, написанные на C и C++; программы, написанные на языках сценариев, таких как shell, Perl, Python, Ruby и др.
  • Встроенной командой, реализованной внутри самой командной оболочки. Командная оболочка bash поддерживает множество внутренних команд, которые так и называют - встроенными (shell builtins). Команда cd, например, - это встроенная команда.
  • Функцией командной оболочки. Функции командной оболочки (shell functions) - это миниатюрные сценарии на языке командной оболочки, встроенные в окружение.
  • Псевдонимом. Псевдоним (alias) - это команда, которую мы можем определить сами, сконструировав из других команд.

Идентификация команд

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

type - получение типа команды

Команда type - это встроенная команда, которая сообщает тип указанной ей команды. Вызывается она следующим образом:

type команда

где команда - это имя исследуемой команды. Например:

root@oado:/# type type
type is a shell builtin

root@oado:/# type ls
ls is aliased to `ls --color=auto'

root@oado:/# type cp
cp is hashed (/usr/bin/cp)

Здесь мы видим результаты определения типов трех разных команд. Обратите внимание, что команда ls фактически является псевдонимом (alias) команды ls с параметром --color=tty. Теперь-то мы знаем, почему результаты команды ls отображаются в цвете!

which - определение местоположения выполняемого файла

Иногда в системе имеется более одной версии исполняемой программы. Это довольно редкое явление для настольных систем, но вполне обычное для больших серверов. Точно определить местоположение данного исполняемого файла позволяет команда which:

root@oado:/# which ls
/usr/bin/ls

which ищет только исполняемые программы, она не способна выявлять встроенные команды или псевдонимы, замещающие фактические исполняемые программы. Если попытаться с помощью which определить местоположение встроенной команды (например, cd), мы либо ничего не получим, либо получим сообщение об ошибке.

Получение документации с описанием команд

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

help - получение справки для встроенных команд

bash имеет встроенную справку для каждой встроенной команды. Чтобы получить ее, введите help с именем встроенной команды. Например:

root@oado:/# help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
    Change the shell working directory.

--help - вывод инструкции по использованию

Многие выполняемые программы поддерживают параметр --help для вывода описания синтаксиса и параметров, поддерживаемых командой. Например:

root@oado:/# mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.

man - вывод страниц справочного руководства

Большинство программ, предназначенных для использования в командной строке, предоставляют официальную документацию, которую называют страницей справочного руководства (man-страницу). Для просмотра этих страниц используется специальная программа постраничного просмотра man, например:

man программа

где программа - имя команды.

# apropos - вывод списка подходящих команд

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

root@oado:/# apropos partition
addpart (8)          - tell the kernel about the existence of a partition
cfdisk (8)           - display or manipulate a disk partition table
cgdisk (8)           - Curses-based GUID partition table (GPT) manipulator
delpart (8)          - tell the kernel to forget about a partition
fdisk (8)            - manipulate disk partition table
fixparts (8)         - MBR partition table repair utility
gdisk (8)            - Interactive GUID partition table (GPT) manipulator
growpart (1)         - extend a partition in a partition table to fill available space
iostat (1)           - Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.
kpartx (8)           - Create device maps from partition tables.
parted (8)           - a partition manipulation program
partprobe (8)        - inform the OS of partition table changes
partx (8)            - tell the kernel about the presence and numbering of on-disk partitions
resizepart (8)       - tell the kernel about the new size of a partition
sfdisk (8)           - display or manipulate a disk partition table
sgdisk (8)           - Command-line GUID partition table (GPT) manipulator for Linux and Unix
systemd-gpt-auto-generator (8) - Generator for automatically discovering and mounting root, /home/, /srv/, /var/ and /var/tmp/ partitions, as well as discovering and enabling swap partitions, based on GPT partition type GUIDs.

Первое поле в каждой строке вывода - это имя страницы справочного руководства, а второе поле — номер раздела. Обратите внимание, что команда man с параметром -k действует как apropos.

info - вывод записи из справочного руководства Info

В проекте GNU имеется альтернативное руководство Info, которое часто называют info-страницами. Info-страницы выводятся с помощью программы чтения с подходящим названием info. Info-страницы содержат гиперссылки, подобно веб-страницам. Программа info читает info-файлы, организованные в древовидную структуру отдельных узлов, каждый из которых содержит отдельную тему. Info-файлы включают гиперссылки, с помощью которых можно перемещаться от узла к узлу. Гиперссылку можно узнать по начальному символу звездочки. Гиперссылки активируются при установке текстового курсора на них и осуществляют переход при нажатии клавиши ENTER.

root@oado:/# info coreutils

whatis - вывод очень краткого описания команды

Программа whatis выводит имя и однострочное описание из страницы справочного руководства, соответствующей искомому слову:

root@oado:/# whatis ls
ls (1)               - list directory contents

root@oado:/# whatis pwd
pwd (1)              - print name of current/working directory

root@oado:/# whatis mkdir
mkdir (1)            - make directories

Создание собственных команд с помощью alias

У нас есть возможность создавать собственные команды с помощью команды alias. Но прежде чем начать, познакомимся с одной маленькой хитростью командной строки. Она позволяет уместить в одной строке несколько команд, для чего нужно просто отделить их друг от друга точкой с запятой:

команда1; команда2; команда3...

Следующий пример демонстрирует этот прием:

root@oado:/# cd /usr; ls; cd -
bin  games  include  lib  lib32  lib64  libexec  libx32  local  sbin  share  src
/

Как видите, мы поместили три команды в одну строку. Первая выполняет переход в каталог /usr, вторая выводит его содержимое, и третья осуществляет возврат в предыдущий каталог (команда cd -), поэтому по завершении мы оказываемся там же, где и были. Давайте теперь с помощью alias превратим эту последовательность в новую команду. Первое, что мы должны сделать, - придумать имя для новой команды. Пусть это будет test. Но прежде чем продолжить, хорошо бы проверить, не занято ли уже имя test. Для этого воспользуемся командой type:

root@oado:/# type test
test is a shell builtin

Ой! Имя test уже занято. Попробуем foo:

root@oado:/# type foo
-bash: type: foo: not found

Отлично! Имя foo свободно. Теперь создадим наш псевдоним:

root@oado:/# alias foo='cd /usr; ls; cd -'

Обратите внимание на структуру этой команды. За командой alias следует имя, сразу за которым (то есть без пробелов) следует знак "равно" и строка в кавычках, описывающая действие, присваиваемое имени. После определения псевдонима его можно использовать везде, где ожидается команда. Давайте попробуем:

root@oado:/# foo
bin  games  include  lib  lib32  lib64  libexec  libx32  local  sbin  share  src
/

Команда type правильно определяет псевдонимы:

root@oado:/# type foo
foo is aliased to `cd /usr; ls; cd -'

Удалить псевдоним можно с помощью команды unalias:

root@oado:/# unalias foo

root@oado:/# type foo
-bash: type: foo: not found

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

root@oado:/# type ls
ls is aliased to `ls --color=auto'

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

Существует одна маленькая проблема, связанная с определением псевдонимов в командной строке. Они исчезают по завершении сеанса работы с командной оболочкой. Но есть метод, как добавить определения псевдонимов в файлы, чтобы они восстанавливались при каждом запуске командной оболочки.