Иллюстрированный самоучитель по Linux

Find, locate, whereis и grep

Команды find, locate, whereis и grep – мощные инструменты поиска файлов. Мы рассмотрим наиболее основные варианты их применения, поскольку полное описание потребовало бы целой главы. Полное описание каждой команды можно найти на соответствующих страницах руководства (команду обращения к ним рассмотрена далее).

Все эти команды предназначены для поиска, но назначение у каждой свое. Команда find применяется для поиска файлов по ряду критериев, в том числе по имени и дате создания, grep – для поиска в файлах определенного содержимого.

Find

Если вы купили свой первый компьютер раньше, чем эту книгу, то у вас, наверняка, возникала проблема поиска недавно созданного файла, позабытого в каком-то каталоге. Ответ Unix на эту проблему – команда find.

Эта команда позволяет отыскивать файлы по имени, дате создания или модификации, владельцу (обычно, это создатель файла), объему и даже типу файла. Мы рассмотрим лишь самый распространенный способ поиска – по имени файла.

Основная структура команды find следующая.

$ find starting-directory parameters actions

Параметр starting-directory определяет каталог, с которого должен начинаться поиск. Например, если в качестве этого параметра указать /home, поиск будет проводиться во всех подкаталогах каталога /home – в исходных каталогах пользователей. Если указать одну косую (/), будет выполнен поиск по всем каталогам.

Параметр parameters означает критерии поиска. В нашем случае, это имя файла, который надо найти (-name имя_ файла).

Параметр actions указывает, что делать с найденными файлами. Чаще всего указывается флажок -print, по которому выводится имя найденного файла с указанием пути. Задавать поиск без этого параметра бессмысленно, поскольку результат останется неизвестным.

Подытожим. Чтобы найти в системе все файлы с именем foo, введите следующую команду.

$ find / – name foo – print

На экране результат будет выглядеть примерно так:

$ find / – name foo – print
/trap/foo
/home/armand/foo
/home/tdanesh/foo

Совет
Обратите внимание: в предыдущем примере задавался поиск во всей системе. Чтобы такая операция была возможна, необходимо войти в систему как корневой пользователь, которому доступны все каталоги. Если этого не сделать, то в ответ на каждую попытку провести поиск в каталоге, к которому нет доступа, будет выводиться сообщение об ошибке "permission denied" (нет доступа)
.

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

$ find / – name 'fo*' – print
/tmp/foo
/var/lib/texmf/fonts
/usr/bin/font2c
/usr/bin/mh/folders
/usr/bin/mh/folder
/usr/bin/mh/forw
/usr/bin/formail
/usr/bin/fontexport
/usr/bin/fontimport
/usr/bin/fold

…и т.д.

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

$ find / – name fo* – print – mount
find: paths must precede expression Usage: find [path…] [expression]

Если результаты выполнения команды find не помещаются на экране, можно присоединить к ней команду more, как в примере с командой ls – |.

$ find / – name 'fo*' – print | more
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.