Установка Linux Red Hat 7.1

         

Find, locate, whereis и grep



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 -1.

$ find / -name 'fo*' -print | more



Содержание раздела