Что такое команды?
Команда может быть:
Идентификация команд
Часто бывает полезно точно знать, какому из четырех типов принадлежит команда, и 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 без аргументов, она выведет список всех псевдонимов в окружении.
Существует одна маленькая проблема, связанная с определением псевдонимов в командной строке. Они исчезают по завершении сеанса работы с командной оболочкой. Но есть метод, как добавить определения псевдонимов в файлы, чтобы они восстанавливались при каждом запуске командной оболочки.