Материал просмотрен 8,945 раз(а)

Всем вот хороша FreeBSD, но пока мы не умеем искать то, что нас интересует. Например файл или пакет. В этой статье я расскажу основные способы поиска нужных файлов.

Поиск средствами which

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

# echo $PATH

Хоть which у нас и ограничена в поиске по путям в переменной окружения, но поиск этот происходит очень быстро. Если мы хотим узнать, где находится та или иная программа пользователя, то лучше воспользоваться именно этой утилитой. Вот на примере поиск утилиты копирования.

# which cp

Поиск средствами whereis

Тоже неплохой поиск. Ищем по $PATH и дереву портов. Именно так я и ищу разные программы в портах. Нужен нам squid, ищем:

# whereis squid

Ничего особенного про этот поиск не скажу, просто прикольно.

Поиск средствами locate

Ещё один вид поиска, который происходит моментально – поиск средствами locate. Отличная утилита, ищет не только по PATH, но в бочку мёда позволено добавить ложку дёгтя. Поиск происходит по специальной базе данных файлов, которую желательно периодически обновлять. Например, если база у нас обновляется раз в неделю, то файлы, созданные месяц назад утилита найдёт мгновенно. А вот файл, созданный вчера (при условии, что обновление ещё не проводилось) нами найден не будет. Поэтому рекомендую обновление базы данных связать с планировщиком CRON, например еженощно. 🙂

Обновление базы данных вызывается вот так:

# /usr/libexec/locate.updatedb

Поиск же, соответственно:

# locate <фрагмент имени файла>

Поиск средствами find

Мой любимый поисковичок! Почему? Потому что он прост и замысловат одновременно. Никаких баз данных, шуршит по всем файлам выбранного каталога, ищет прекрасно, способен на множество дополнительных примочек посредством хитроумных опций.

Для получения исчерпывающей справки по всем ключам утилиты набираем:

# man find

Ну основные опции такие:

-name “имя” – ищет по имени файла. Например:

# find /home -name "script.sh"

-maxdepth (-mindepth) – глубина поиска от указанного каталога. Если я уверен, что файл был где-то недалеко, например, в корневой домашней папке либо подпапке, то могу указать просто:

# find /home -maxdepth 3 -name "script.sh"

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

Я на примере всё той же своей папки скрипта покажу, насколько большая разница в рекурсивном обходе каталогов. Для пущей разницы искать будем от корня с глубиной 3 уровня (обратите внимание на команду, я в ней вызываю программу date до и после выполнения поиска, в одной строке, чтобы оценить затраты времени):

Итак, ограничение глубины позволило нам затратить на поиск … да вообще ничего не затратить! Поиск прошёл за < секунду.

Без ограничения глубины поиск длился почти 3 полных минуты. Ощутимая разница, верно? А теперь мы можем включить фантазию и при умелом указании максимальной и минимальной глубины искать поистине быстро!

Кроме этого, никто не запрещает нам использовать подстановочные символы маски (* и ?) или регулярные выражения, что делает поиск очень гибким. Винде такое даже не снилось!

Также следует обратить внимание на опции поиска по файлам, изменённым за определённый период и на ключ -exec, позволяющий производить с найденными файлами определённые действия (удаление, копирование и т.д.).

Полностью перепечатывать ман-страницу я не буду, это глупо! Ведь вы знаете, как получить помощь! А моя задача – лишь указать вам направление! Спасибо за внимание! Удачи!