FreeBSD

Поиск по файловой системе командой find

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

Пример

find . -найти и отобразить все файлы находящиеся в текущем каталоге и во всех подкаталогах
 find /etc -name ppp.conf -найти в каталоге /etc файл с именем ppp.conf
find /etc -name «*.conf»-найти в каталоге /etc все файлы с расширением .conf
find -type f -user www -найти все файлы (f- файл, d- каталог, l- ссылка) пользователя www
find . -mtime -5 -найти файлы, измененные пять или меньше дней назад
find . -atime +10 -найти файлы, которые не читали больше десяти дней
find . -newer httpd.conf-найти файлы, которые были изменены после изменения файла httpd.conf

Для поиска по содержимому файлов нет специальной команды, и нет специального ключа для команды find, но есть возможность применить конструкцию:

# find /var/log/ -type f -exec grep -H ‘19:26′ {} ;

Разберем эту конструкцию подробнее:

  • find /var/log/ – означает, что мы ищем в каталоге /var/log/;
  • ключ -type f – что мы ищем только файлы;
  • -exec – это ключ, который позволяет перенаправить вывод команды find другим командам, каждый файл по очереди. В качестве аргумента этого ключа указывается команда, которой нужно перенаправить вывод. У нее могут быть собственные ключи. В нашем примере это команда grep с ключом -H, а значит она выведет путь и имя файла, если в нем найдется указанная фраза (у нас это ‘19:26′)

  • {} — этими скобками мы указываем, куда подставлять имена файлов в выполняемой команде;
  • ; — Точка с запятой говорит об окончании команды, вызываемой ключем -exec.

Поиск по индексированной базе

Отличие такого поиска заключается в скорости работы, но имеет некоторые недостатки. Команда locate отвечает за поиск файлов в индексированной базе данных. Поиск в такой базе осуществляется практически мгновенно,однако база данных locate нуждается в периодическом обновлении, без которого результат работы этой команды может оказаться неактуальным. Обновление базы locate осуществляется через демон cron и присутствует в списке задач periodic weekly. Обновление базы данных производится программой /usr/libexec/locate.updatedb а файл конфигурации – /etc/locate.rc.При поиске locate ищет совпадения не только в именах файлов и каталогов, но и в их путях.

Пример

locate *.conf -найти все файлы с расширением .conf
locate -i «/x11/xtrans»-поиск, не зависимый от регистра
locate -с *.pid-отобразить количество файлов с расширением .pid

Поиск по базе приложений

Команда whatis отображает краткое описание программы, записанное в индексированной базе данных. База данных создается и обновляется при помощи команды makewhatis. Она разбита на файлы, хранящиеся там же, где и сами базы man: */man/whatis. Обновление базы whatis осуществляется через демон cron и присутствует в списке задач periodic weekly. Для получения описания программы при использовании команды whatis нужно вводить полное и правильное имя программы. У этой команды нет специальных ключей или параметров.

Команда apropos так же делает поиск по базе приложений whatis, но в отличии от whatis не требует точного совпадения названия программы с параметром поиска. Она выведет все программы, в названии которых так или иначе встречается слово, введенное в качестве параметра.

Команда whereis выполняет поиск по стандартным директориям бинарных файлов, страниц помощи man, и исходных кодов программ включая /usr/src/ и /usr/ports/, и в случае совпадения выводит имена и пути этих файлов. Позволяет задавать пути поиска для каждого из 3-х компонентов, либо выполнять поиск по одному или 2-м заданным компонентам.

Пример

whereis -m -u /usr/bin/*-отображает список приложений, для которых нет страниц помощи manwhereis -s -a bash -отображает список всех (а не только первого) файлов исходников bash

Рекомендации по поиску приложений и портов

Для поиска порта нужного приложения часто используется команда whereis. Например, Вам нужно найти программу trafshow.

# whereis trafshow
/usr/ports/net/trafshow

Для более точного поиска по портам существует отдельная команда make search name=port (make search key=port). Ее можно использовать только находясь в директории портов(/usr/ports/). Используйте ключ name, если вы точно знаете название приложения. Ключ key выполняет поиск в названиях и описаниях портов, а затем выводит поиск всех совпадений, где встречается заданный параметр поиска.

Пример

#cd /usr/ports
# make search key=pppoe
Port:   rp-pppoe-3.8
Path:   /usr/ports/net/rp-pppoe
Info:   The popular Roaring Penguin’s PPPoE software
Maint:  matthias [dot] andree [at] gmx [dot] de
B-deps:
R-deps:
WWW:    http://www.roaringpenguin.com/penguin/openSourceProducts/rpPppoe

Поиск при помощи команды make search не чувствителен к регистру.

Для поиска уже установленных приложений или собранных пакетов используется команда pkg_info. Она выводит список всех установленных приложений, и их версии и короткие описания, но при использовании ключей поможет узнать больше информации об установленных приложениях.

Пример

pkg_info -a - выводит список всех установленных приложений с детальным описанием, адресом в интернете и зависимостямиpkg_info -D webmin-1.420_2 - выводит сообщение выводимое после установки для webmin-1.420_2pkg_info -r mc-4.6.1_6 - список зависимостей Midnight Commanderpkg_info -R mc-4.6.1_6 - список приложений зависимых от Midnight Commanderpkg_info -L curl-7.18.0 - список файлов с путями, принадлежащих приложению curl

Насколько полезным был этот пост?

Нажмите на звезду, чтобы оценить!

Средний рейтинг 0 / 5. Голосов: 0

Пока оценок нет! Будьте первым, поставь свою оценку этому посту.

Мы сожалеем, что этот пост не был полезен для вас!

Давайте улучшим этот пост!

Расскажите, как мы можем улучшить этот пост?

Источник
muff.kiev.ua
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments
Back to top button
0
Would love your thoughts, please comment.x
()
x