Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Статьи об операционной системе Linux

Сайдбар

Инструменты и команды для поиска файлов Linux

16 апр. 2014

В системе Linux предусмотрено множество возможностей поиска файлов. Выбор команды, лучше всего подходящей для конкретного случая, зависит от того, о файле какого типа идет речь (текстовый файл, программа и т. д.) и какая информация о файле известна (фрагменты названия, фрагменты содержимого и т. д.).

Инструменты для поиска файлов



beagle-query — Поиск файлов по их содержимому

grep — Поиск текста в текстовом файле

And — Поиск файлов по имени, дате, размеру и т. д.

locate — Поиск файлов по имени

whereis — Поиск файлов в заданных каталогах

which — Поиск программ в РАТН-каталогах

Команды which и whereis


Команда which ищет указанную команду. Она возвращает полное имя команды, которая была бы выполнена, если бы вы набрали ее имя без указания пути. Команда which осуществляет поиск только по каталогам, указанным в PATH, работая при этом исключительно быстро. PATH содержит список каталогов, в которых находятся программы. Однако необходимо учитывать, что PATH для администратора содержит больше каталогов, чем для обычного пользователя. Итак, если вы ищете системные команды, необходимо войти в систему с правами администратора.

<code>user$ which emacs

/usr/bin/emacs</code>


Команда whereis просматривает все пути, обычно используемые для двоичных файлов, файлов конфигурации, man-страниц и исходного кода. Для этого ее нужно ввести после имени файла. Команда whereis охватывает больше файлов, чем which, при этом поиск не ограничивается одними только программами. Она не может искать в каталогах, которые специально не указаны программе как места для по-иска(см. man whereis).

<code>user$ whereis fstab

fstab: /etc/fstab /usr/include/fstab.h /usr/share/man/man5/fstab.5.gz
</code>

Команда locate


Команда locate ищет файлы, в полном названии которых (путь + имя файла) содержится указанная схема поиска. Поиск осуществляется очень быстро: locate не ищет по файловой системе, а обращается к базе данных, в которой содержится список имен всех файлов из файловой системы. В зависимости от дистрибутива locate показывает все файлы, к которым пользователь может получить доступ. Если вы ищете системные файлы, войдите в систему как администратор и выполните команду locate. Использовать ее можно только в том случае, когда в системе установлен соответствующий пакет, который по умолчанию имеется не во всех дистрибутивах.

Примеры



Следующая команда ищет конфигурационный Х-файл xorg.conf:

user$ locate xorg.conf

/etc/X11/xorg.conf

/etc/X11/xorg.conf.backup

/etc/X11/xorg.conf~/usr/share/man/man5/xorg.conf.5x.gz

Поиск dvips (возможен, если установлен и этот пакет, и ЕаТЕХ) выдает много результатов, так как результат поискового запроса имеется во многих названиях каталогов. Все эти результаты не отображаются, а подсчитываются с помощью параметра wc.

<code>user$ locate dvips | wc -l

421
</code>

Количество результатов значительно уменьшится, если искать только те файлы, названия которых оканчиваются на dvips:

user$ locate '*dvips'
/usr/bin/dvips /usr/bin/odvips

/usr/bin/opdvips
/usr/bin/pdvips

/usr/local/texmf/dvips

/usr/local/texmf/fonts/map/dvips

Команда updatedb



Качество результатов поиска зависит от актуальности базы данных, используемой командой locate. В большинстве дистрибутивов эта база ежедневно обновляется с помощью команды updatedb. Разумеется, updatedb можно выполнять вручную всякий раз, как это потребуется. Для этого необходимо обладать правами администратора.

Детали, характерные для определенных дистрибутивов


Внедрение команд locate и updatedb отличается от дистрибутива к дистрибутиву. В Debian, Fedora и Ubuntu эти команды входят в состав стандартного пакета mlocate. Файловая база данных находится в файле /var/lib/mlocate/mlocate.db и ежедневно обновляется программой Cron-Job /etc/cron.daily/mlocate. Конфигурационный файл /etc/updatedb.conf определяет, какие каталоги и файловые системы не будут учитываться при поиске (например, CD, DVD, различные буферные каталоги).

В стандартной сборке openSUSE команда locate отсутствует. Прежде чем вы сможете пользоваться этой поисковой командой, потребуется установить пакет findutils-locate и один раз выполнить updatedb, будучи в системе с привилегиями администратора. В дальнейшем эта команда будет ежедневно выполняться программой Cron-Job /etc/cron.daily/suse.de-updatedb. Конфигурация осуществляется через /etc/sysconfig/locate.

Команды findM grep



Команда find очень мощная, но не менее сложная, чем описанные выше команды для поиска файлов. Она учитывает различные поисковые критерии (схемы поиска по именам файлов, размеру файлов, датам создания файла или последнего обращения к нему и т. д.). Полная справка по параметрам этой команды содержится в man find. Однако лучше всего будет продемонстрировать работу с find на примерах, приведенных ниже. Учитывайте, что команда find работает сравнительно медленно, так как она просматривает всю файловую систему каталог за каталогом.

Команда find



Если не указывать дополнительные параметры, find выдает список всех файлов, находящихся в текущем каталоге и всех его подкаталогах:

user$ find


Следующая команда ищет все файлы в текущем каталоге и во всех подкаталогах, названия которых начинаются с .e:

user$ find -name '.e*'

./.evolution ./.emacs ./.emacs~ ./.esd_auth

Команда find производит поиск, начиная с каталога /usr/share/texmf, и ищет все файлы вида *.tex в каталоге, название которого оканчивается на latex.

<code>user$ find /usr/share/texmf -path '*latex/*.tex'

/usr/share/texmf/ptex/platex/base/plnews03.tex /usr/share/texmf/ptex/platex/base/kinsoku.tex</code>


В следующем примере find ищет все каталоги, находящиеся в /etc/. Обычные файлы, находящиеся в /etc/., среди результатов не показываются. Список результатов упорядочивается по алфавиту с помощью команды sort (по умолчанию такой сортировки не происходит).

<code>root# find /etc -type d | sort

/etc

/etc/acpi /etc/acpi/actions</code>


Следующая команда удаляет все резервные копии, содержащиеся в данном каталоге и во всех подкаталогах. При этом find строит список всех сомнительных файлов и передает его команде rm через подстановку команды ($(команда)).

user$ rm $(find . -name '*~')

Если речь идет об очень большом количестве файлов, то при выполнении вышеуказанной команды возникает ошибка: запись со всеми *~-файлами может получиться такой длинной, что превысит размер командной строки. В таких случаях следует воспользоваться либо параметром -exec- команды find, либо командой xargs.

Команда grep



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

Следующая команда просматривает все ТЕХ-файлы текущего каталога в поисках последовательности символов emacs. Список всех найденных строк (перед каждой из которых указывается имя файла) отображается на экране.

user$ grep emacs *.tex


Команда grep определяет, как часто применяется функция arctan в указанных С-файлах.

user$ grep -c arctan\(.*\) *.c


Команда grep с параметром -v возвращает в качестве результата все строки, в которых отсутствует заданный шаблон поиска. В приведенном далее примере grep удаляет из configfile все строки, которые начинаются с символа# (то есть все комментарии). Последующая команда cat дополнительно удаляет все пустые строки. Конечный результат сохраняется в файле nocomments. Эта команда очень удобна, когда всего несколько строк конфигурационного кода приходятся на сотни или тысячи строк комментариев.

user$ grep -v configfile | cat -s > nocomments

Комбинирование find и grep

Команды find и grep можно комбинировать, чтобы выполнять расширенный поиск. В следующем примере команда find просматривает все файлы на предмет того, нет ли в них последовательности символов emacs. Если такая последовательность обнаруживается, то название файла выводится на экран. Обратите внимание на то, что нельзя указывать параметр -print перед -exec (в отличие от предыдущего примера, команда grep emacs *.tex учитывает все файлы с расширением ТЕХ независимо от глубины вложения подкаталога, в котором они могут находиться).

user$ find -name '*.tex' -type f -exec grep -q emacs {} \; -print


Следующая команда просматривает в текущем каталоге все файлы размером менее 10 Кбайт на предмет наличия в них регулярного выражения case.*in. Список найденных файлов сохраняется в файле resultat. Ограничение размера файла вводится для того, чтобы исключить из поиска двоичные файлы (обычно они гораздо больше 10 Кбайт).

<code>user$ find -name '*' -maxdepth 1 -size -10k -exec grep -q \

> case.*in {}\; -print > ergebnis
</code>

Поисковики для персональных компьютеров



В последнее время в Linux, как и в других системах, стали популярны системы для локального поискаhttp://www.modx.cc/manager/?a=resource/create&class_key=Article&parent=982&context_key=web&template=30 (поиска по ПК). Наибольшее распространение получили программы Beagle и Tracker. Компания Google также позаботилась о создании специальной версии локального поисковика Google Desktop для Linux, но пока эта программа остается в арьергарде.


По сравнению с рассмотренными выше текстовыми поисковыми командами системы локального поиска обладают целым букетом преимуществ.

Поиск быстр, так как применяется механизм, сходный с работой команды locate, —
анализируются заранее созданные индексные файлы.

Поисковый индекс собственных файлов обновляется при каждом изменении файла, поэтому он всегда актуален.

Поисковые алгоритмы приспособлены к работе с важнейшими двоичными форматами файлов, поэтому поисковые программы находят и тексты, содержащиеся в документах OpenOffice, и PDF-файлы, и электронные письма.

Работа с такими программами не составляет труда даже для новичков, так как эти поисковики хорошо интегрированы в KDE или Gnome.

Есть, конечно, и недостатки: постоянное обновление поискового индекса затрудняет работу системы, и программы, занятые обработкой большого объема информации, могут существенно тормозить. Кроме того, индексные файлы локального компьютера занимают сравнительно много места. Я так и не смог сделать окончательный выбор между Beagle и Tracker.

Программа Beagle



С Beagle вы встретитесь прежде всего в дистрибутивах SUSE, в которых система поиска устанавливается по умолчанию. В Gnome для поиска применяется пользовательский интерфейс beagle-search, в KDE — программа kerry. Даже те пользователи, которые работают с консолью, могут применять Beagle с помощью команды beagle-query.

По умолчанию Beagle выдает результаты поиска, содержащие результаты всех заданных поисковых запросов, содержащиеся в имени или содержании файла. Кроме того, существуют различные возможности формулирования и ограничения поиска, например слово! OR слово2 ищет документы, в которых содержится как минимум один поисковый запрос из двух; слово! -слово2 ищет документы, в которых содержится первый запрос, а второй отсутствует; .pdf означает, что поиск ведется только в PDF-документах.

Следует упомянуть еще о некоторых технических деталях: поисковик Beagle написан на С#, поэтому предназначен для установки с Mono. Файловая система, по которой проводится поиск, должна поддерживать расширенные атрибуты. Это означает, что для каждого файла сохраняется дополнительная информация (атрибуты). С помощью таких атрибутов Beagle помечает, какие каталоги и файлы были проиндексированы и не изменились ли они с тех пор.

Начиная с версии ядра 2.6, расширенные атрибуты предоставляются по умолчанию для систем ext2/3/4, xfs и NFS4. Конечно же, сама по себе поддержка расширенных атрибутов еще не означает, что эта функция действительно активна во всех системах. Например, в системах ряда ext для активизации необходим параметр user_xattr. Взгляните на четвертый столбец в файле /etc/fstab. Если этого параметра там нет, добавьте его. Изменения вступят в силу только после новой привязки файловой системы или после перезагрузки.

Программа Tracker



Считается, что Tracker немного быстрее и эффективнее, чем Beagle, не в последнюю очередь потому, что эта программа обходится без Mono. После установки необходимо выйти из системы и снова войти. После того как Tracker потратит некоторое время на индексирование файловой системы, начинайте поиск с помощью инструмента tracker-search-tool.


Tracker сохраняет свои индексные файлы в каталоге ~/.cache/tracker. По умолчанию поиск производится только по файлам из домашнего каталога. Если вы хотите включить в поиск определенные каталоги или, наоборот, исключить их, измените конфигурацию в tracker-preferences.

Программа Strigi



Еще одна система локального поиска, созданная специально для KDE, — это Strigi. Во многих дистрибутивах Strigi необходимо сначала установить (пакеты strigi*), а потом активизировать с помощью параметра STRIGI-FILE-INDEXER в специальном системном управляющем модуле. Сам поиск осуществляется не самой интересной программой, которая называется strigiclient. Использование Strigi в Gnome обеспечивается минипрограммой Deskbar. Я признаюсь, что ничего хорошего о программе Strigi сказать не могу и не рекомендую ею пользоваться.
Читайте так же:
Тип файла MIME и его конфигурация

Подпишитесь на рассылку! Никакого спама, только обновления!!!

Комментарии (0)


    Услуги по MODX Revolution

    Посмотреть все услуги

    Техническая оптимизация сайта

    Подробнее & Заказать

    Создание сайта на MODX Revolution

    Подробнее & Заказать

    Перенос сайта на MODX Revolution

    Подробнее & Заказать

    Продвижение сайта на MODX

    Подробнее & Заказать