Этот учебник познакомит вас с различными способами поиска каталога в Linux. Как вы уже, возможно, знаете, в Linux все является файлом, включая каталоги. И одно из обычных действий пользователя Linux в командной строке – поиск файла или каталога.
Существует несколько различных средств и утилит для поиска файлов в командной строке, таких как find, locate и which. Однако последняя утилита (which) используется только для нахождения команды.
В рамках этого учебника мы сосредоточимся в основном на утилите find, которая ищет файлы в живой файловой системе Linux и является более эффективной и надежной по сравнению с locate.
Недостатком locate является то, что она читает одну или несколько созданных баз данных updatedb, она не ищет в живой файловой системе. Кроме того, она не предлагает гибкости в отношении того, откуда начинать поиск (начальная точка).
Ниже приведен синтаксис выполнения команды locate:
# locate [option] [search-pattern]
Для демонстрации недостатка locate, давайте предположим, что мы ищем каталог с именем pkg
в текущем рабочем каталоге.
Примечание: В команде ниже опция --basename
или -b
указывает locate на поиск только совпадения с именем файла (каталога) (которое точно равно pkg), но не с путем (/путь/к/pkg). Где \
является символом глобирования, он отключает неявную замену pkg на *pkg*.
$ locate --basename '\pkg'

Как видно из вывода команды выше, locate будет искать, начиная с корневого (/) каталога, поэтому найдутся совпадения с другими каталогами с тем же именем.
Чтобы справиться с этой проблемой, используйте find, следуя упрощенному синтаксису ниже:
$ find starting-point options [expression]
Давайте рассмотрим несколько примеров.
Для поиска того же каталога (pkg)
в текущем рабочем каталоге выполните следующую команду, где флаг -name
считывает выражение, которым в данном случае является имя базового каталога.
$ find . -name "pkg"
Если возникают ошибки «Permission denied», используйте команду sudo так:
$ sudo find . -name "pkg"

Вы можете предотвратить поиск find в других типах файлов, кроме каталогов, используя флаг -type
, чтобы указать тип файла (в команде ниже d
означает каталог) следующим образом:
$ sudo find . -type d -name "pkg"
Кроме того, если вы хотите перечислить каталог в формате длинного списка, используйте переключатель действия -ls
:
$ sudo find . -type d -name "pkg" -ls

Затем опция -iname
позволит выполнить поиск без учета регистра:
$ sudo find . -type d -iname "pkg" $ sudo find . -type d -iname "PKG"

Чтобы найти более интересную и продвинутую информацию об использовании, ознакомьтесь с руководствами по find и locate.
$ man find $ man locate
В качестве последнего замечания, команда find более надежна и эффективна для поиска файлов (или каталогов) в системе Linux по сравнению с командой locate.
Так же, как и ранее, не забудьте отправить нам свой отзыв или вопрос через раздел комментариев ниже. Наконец, всегда оставайтесь на связи с Tecmint.