Поиск Файлов в Linux

Поиск Файлов в Linux


Вы можете пролистать все каталоги, в поисках того, что вам надо, но существуют более быстрые способы. В Slackware есть четыре основных инструмента для поиска файлов.

which

Первый из них - это команда which. which обычно используется для быстрого поиска программ. Он просто ищет в каталогах, указанных в вашей PATH переменной и выдаёт первое найденное соответствие, а так же путь к этому файлу. Например:

$ which bash

/bin/bash

Таким образом, bash находится в /bin каталоге. Это очень ограниченная команда для поиска, так как она ищет только в вашем PATH.

whereis

Команда whereis работает аналогично программе which, но в дополнение к последней, так же ищет man страницы и исходники программ. Результат выполнения whereis для bash будет следующий:

$ whereis bash

bash: /bin/bash /usr/bin/bash /usr/man/man1/bash.1.gz

Эта команда не только говорит, где находится программа, но так же указывает, где находится её онлайн документация. Но она всё ещё весьма ограничена. Что если вам необходимо найти определённый конфигурационный файл? which или whereis тут вам не помогут.

grep

Команда grep (расшифровывается как global regular expression print)

Синтаксис команды выглядит следующим образом:

$ grep [опции] шаблон [имя файла…]

  • Опции - это дополнительные параметры, с помощью которых указываются различные настройки поиска и вывода, например количество строк или режим инверсии.

  • Шаблон - это любая строка или регулярное выражение, по которому будет вестись поиск

  • Файл и команда - это то место, где будет вестись поиск. Как вы увидите дальше, grep позволяет искать в нескольких файлах и даже в каталоге, используя рекурсивный режим.

Опции:

-b - показывать номер блока перед строкой;

-c - подсчитать количество вхождений шаблона;

-h - не выводить имя файла в результатах поиска внутри файлов Linux;

-i - не учитывать регистр;

-l - отобразить только имена файлов, в которых найден шаблон;

-n - показывать номер строки в файле;

-s - не показывать сообщения об ошибках;

-v - инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;

-w - искать шаблон как слово, окружённое пробелами;

-e - использовать регулярные выражения при поиске;

-An - показать вхождение и n строк до него;

-Bn - показать вхождение и n строк после него;

-Cn - показать n строк до и после вхождения;

Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.

Примеры использования

С теорией покончено, теперь перейдём к практике. Рассмотрим несколько основных примеров поиска внутри файлов Linux с помощью grep, которые могут вам понадобиться в повседневной жизни.

Поиск текста в файлах

В примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста c grep в файле /etc/passwd введите следующую команду:

  • grep User /etc/passwd

Поиск слов в grep

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:

  • grep -w “abc” имя_файла

Поиск двух слов

Можно искать по содержимому файла не одно слово, а два сразу:

  • egrep -w ‘word1 word2’ /path/to/file

find

Команда find может быть использована для поиска всего, чего угодно. Я хочу задать поиск файла xinitrc во всей системе.

$ find / -name xinitrc

/var/X11R6/lib/xinit/xinitrc

find потребует много времени для поиска, так как эта команда пролистает всё дерево каталогов для поиска. И если вы выполните команду, как обычный пользователь, то на экран, вероятно, неоднократно будут выведены сообщения об ошибке доступа к некоторым из каталогов (к тем, которые может просматривать только root). Но find нашла наш файл. Уже хорошо. Если бы только она работала чуточку быстрее…

locate

Команда locate производит поиск по всей файловой системе, в точности как и find, но она просматривает свою базу данных вместо того, чтобы пролистать все каталоги. База данных настроена так, что она автоматически обновляется в 4:40 утра. Вы так же можете вручную выполнить updatedb, для обновления этой базы данных (перед запуском её вручную вам следует выполнить su nobody). Вот пример использования locate:

$ locate xinitrc # нам не надо быть root

/var/X11R6/lib/xinit/xinitrc

/var/X11R6/lib/xinit/xinitrc.fvwm2

/var/X11R6/lib/xinit/xinitrc.openwin

/var/X11R6/lib/xinit/xinitrc.twm

Мы получили больше, чем нам было необходимо и очень быстро в то же время. С этими командами вы можете найти всё, что угодно в Linux системе.