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

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

Простой поиск

Например, мы хотим найти команды, которые включают в свое описание или название слово move. Тогда мы должны выполнить команду:

apropos move

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

yuriy@yuriy-NIX:~$ apropos move
aa_gotoxy (3)        - move the hardware cursor (if any) to specified position.
add-apt-repository (1) - Adds a repository into the /etc/apt/sources.list or ...
BIO_pop (3ssl)       - add and remove BIOs from a chain.
caca_conio_movetext (3caca) - (неизвестный объект)
...
git-bundle (1)       - Move objects and refs by archive
git-clean (1)        - Remove untracked files from the working tree
git-mv (1)           - Move or rename a file, a directory, or a symlink
...
mq_unlink (2)        - remove a message queue
mv (1)               - move (rename) files
...

Поиск с учетом раздела

На самом деле в нем будут присутствовать не только команды, но и, например, функции языка C, так как для них тоже существуют man страницы (кстати, apropos отлично подойдет для поиска C функций). Все man-страницы разделены на разделы (apropos выводит номер раздела в скобках после названия команды). Например, в первом разделе man-страниц расположены описания команд Linux. Для того, чтобы вывести информацию только из man-страниц определенного раздела, существует опция -s, за которой указывается номер man-страницы.

Выполним поиск по ключевому слову move только в 1-м разделе:

apropos -s 1 move
yuriy@yuriy-NIX:~$ apropos -s 1 move
add-apt-repository (1) - Adds a repository into the /etc/apt/sources.list or ...
colrm (1)            - remove columns from a file
cut (1)              - remove sections from each line of files
dh_movefiles (1)     - move files out of debian/tmp into subpackages
git-bundle (1)       - Move objects and refs by archive
git-clean (1)        - Remove untracked files from the working tree
git-mv (1)           - Move or rename a file, a directory, or a symlink
git-prune-packed (1) - Remove extra objects that are already in pack files
git-rm (1)           - Remove files from the working tree and from the index
git-stripspace (1)   - Remove unnecessary whitespace
ipcrm (1)            - remove a message queue, semaphore set or shared memory id
lockfile-remove (1)  - command-line programs to safely lock and unlock files ...
mmove (1)            - move or rename an MSDOS file or subdirectory
...

Для удобства можно отсортировать результаты, воспользовавшись командой sort:

apropos -s 1 move | sort

Поиск по нескольким словам

Если вы вводите несколько слов через пробел, тогда apropos найдет все команды, содержащие любое из ключевых слов. Например, мы хотим найти команды, по ключевым словам move и empty:

apropos -s 1 move empty | sort

В результате получим:

yuriy@yuriy-NIX:~$ apropos -s 1 move empty | sort
add-apt-repository (1) - Adds a repository into the /etc/apt/sources.list or ...
colrm (1)            - remove columns from a file
cut (1)              - remove sections from each line of files
dh_movefiles (1)     - move files out of debian/tmp into subpackages
git-bundle (1)       - Move objects and refs by archive
git-clean (1)        - Remove untracked files from the working tree
git-init (1)         - Create an empty git repository or reinitialize an exis...
git-init-db (1)      - Creates an empty git repository
...

Поиск точного вхождения слов

Обратите внимание, что apropos по ключевому слову move найдет и строки со словами remove. Чтобы искать точное вхождение слов используется опция -e:

apropos -s 1 -e move empty | sort

Теперь мы получим только те команды, которые содержат слова move и empty:

yuriy@yuriy-NIX:~$ apropos -s 1 -e move empty | sort
dh_movefiles (1)     - move files out of debian/tmp into subpackages
git-bundle (1)       - Move objects and refs by archive
git-init (1)         - Create an empty git repository or reinitialize an exis...
git-init-db (1)      - Creates an empty git repository
git-mv (1)           - Move or rename a file, a directory, or a symlink
mmove (1)            - move or rename an MSDOS file or subdirectory
mv (1)               - move (rename) files
rmdir (1)            - remove empty directories

Поиск по фразе

Если вы хотите выполнить поиск по какой-нибудь фразе, содержащей пробелы, тогда ее нужно заключить в кавычки:

apropos -s 1 "remove empty"

Получим:

yuriy@yuriy-NIX:~$ apropos -s 1 "remove empty"
rmdir (1)            - remove empty directories

Использование регулярных выражений

Команда apropos поддерживает поиск с использованием регулярных выражений, для этого служит опция -r:

apropos -s 1 -r "remove [f|e]" | sort
yuriy@yuriy-NIX:~$ apropos -s 1 -r "remove [f|e]" | sort
git-prune-packed (1) - Remove extra objects that are already in pack files
git-rm (1)           - Remove files from the working tree and from the index
pamdeinterlace (1)   - remove ever other row from a PAM/PNM image
rm (1)               - remove files or directories
rmdir (1)            - remove empty directories

Я рассказал об основных возможностях утилиты apropos. Дополнительную информацию можно получить в помощи по этой команде (у меня в Ubuntu на русском языке, кстати, но к сожалению, без примеров):

man apropos