Linux предлагает шесть различных способов поиска, и у каждого есть свои достоинства. Мы покажем, как использовать find
, locate
, which
, whereis
, whatis
и apropos
. Каждый выделяется в разных задачах; Вот как правильно выбрать инструмент для работы.
Вы избалованы выбором, когда дело доходит до команд для поиска и поиска в Linux. Почему так много? Ну, у каждого из них есть свои особенности, и они работают лучше, чем другие в определенных обстоятельствах. Вы могли бы думать о них как о чем-то вроде швейцарского армейского ножа для поиска. Мы по очереди посмотрим на каждое лезвие и выясним его сильные стороны.
Команда поиска
Поведение команды find
сложно определить методом проб и ошибок. Когда вы поймете синтаксис , вы начнете ценить его гибкость и мощь.
Самый простой способ использовать find
— просто набрать find
и нажать Enter.
находить
Используемый таким образом find
ведет себя как ls
, но в нем перечислены все файлы в текущем каталоге и те, которые находятся в подкаталогах.
Некоторые реализации find
требуют, чтобы вы поставили .
для текущего каталога. Если это так в вашей версии Linux, используйте следующую команду:
находить .
Чтобы find
поиск из корневой папки, вы должны использовать эту команду:
находить /
Чтобы начать поиск из вашей домашней папки, используйте эту команду:
найти ~
Использование find с шаблонами файлов
Чтобы find
был чем-то большим, чем автоматически рекурсивная версия ls
, мы должны предоставить ему что-то для поиска. Мы можем предоставить имена файлов или шаблоны файлов. Шаблоны используют подстановочные знаки, где *
означает любую строку символов и ?
означает любой отдельный символ.
Шаблоны должны быть указаны для правильной работы. Это легко забыть сделать, но если вы не процитируете шаблон, find
не сможет правильно выполнить команду, которую вы ему дали.
С помощью этой команды мы будем искать в текущей папке файлы, которые соответствуют шаблону «*. * S». Это означает, что любое имя файла имеет расширение файла, оканчивающееся на «s». Мы используем опцию -name
чтобы сообщить, find
мы передаем имя файла или шаблон имени файла.
находить . -имя "*. * s"
find
возвращает эти подходящие файлы.
Обратите внимание, что два расширения файла имеют длину два символа, а одно — три символа. Это потому, что мы использовали шаблон «*. * S». Если бы мы хотели только два символьных расширения файла, мы бы использовали «*.? S».
Если бы мы заранее знали, что ищем файлы JavaScript «.js», мы могли бы быть более конкретными в нашем шаблоне файлов. Также обратите внимание, что вы можете использовать одинарные кавычки, чтобы обернуть шаблон, если хотите.
находить . -имя '* .js'
На этот раз find
только отчеты по файлам JavaScript.
Игнорирование дела с находкой
Если вы знаете имя файла, который вы хотите find
чтобы найти, вы можете передать его, чтобы find
вместо шаблона. Вам не нужно заключать имя файла в кавычки, если в нем нет подстановочных знаков, но рекомендуется делать это постоянно. Это означает, что вы не забудете использовать их тогда, когда они вам нужны.
находить . имя Yelp.js
Это ничего не вернуло. Но странно, мы знаем, что файл должен быть там. Давайте попробуем еще раз и скажем find
чтобы игнорировать регистр. Мы делаем это с помощью опции -iname
(игнорируем имя дела)
находить. - имя Yelp.js
В этом была проблема, имя файла начинается со строчной буквы «y», а мы искали заглавную «Y».
Рекурсивные подкаталоги с находкой
Отличительной особенностью find
является то, как он рекурсивно просматривает подкаталоги. Давайте найдем любые файлы, начинающиеся с «map».
находить . -имя "карта *. *"
Соответствующие файлы перечислены. Обратите внимание, что все они находятся в подкаталоге.
Поиск каталогов с находкой
Опция -path
позволяет искать каталоги. Давайте посмотрим на каталог, название которого мы не можем вспомнить, но знаем, что он заканчивается буквами «о».
находить . -path '* about'
Каталог найден, он просто называется «около» и вложен в другой каталог в текущем каталоге.
Существует -ipath
(игнорировать путь к -ipath
), которая позволяет вам искать пути и игнорировать регистр, аналогично опции — iname
описанной выше.
Использование атрибутов файла с find
find
может искать файлы, атрибуты которых соответствуют подсказке поиска. Например, вы можете искать пустые файлы, используя опцию -empty
, независимо от того, как они называются.
находить . -empty
Любые файлы нулевой длины будут перечислены в результатах поиска.
Опция -executable
найдет любой файл, который может быть выполнен, например, программу или скрипт.
находить . -executable
В списке результатов указан файл с именем «fix_aptget.sh».
Они также содержат три каталога, включая «.», Текущий каталог. Каталоги включены в результаты, потому что бит выполнения установлен в их разрешениях файла. Без этого вы не сможете изменить («запустить») эти каталоги.
Опция -типа
Опция -type
позволяет вам искать тип объекта, который вы ищете. Мы собираемся предоставить индикатор типа «f» в качестве параметра опции -type
потому что мы хотим, чтобы поиск выполнял поиск только файлов.
находить . исполняемый тип -f
На этот раз подкаталоги не перечислены. Исполняемый файл сценария является единственным элементом в результатах.
Мы также можем попросить find
включить в результаты только каталоги. Чтобы вывести список всех каталогов, мы можем использовать опцию -type
с индикатором типа «d».
находить . тип -d
В каталогах перечислены только каталоги и подкаталоги.
Использование других команд с find
Вы можете выполнить некоторые дополнительные действия с найденными файлами. Вы можете передать файлы, в свою очередь, какой-то другой команде.
Если нам нужно убедиться, что в текущем каталоге и подкаталогах нет исполняемых файлов, мы могли бы использовать следующую команду:
находить . -name "fix_aptget.sh" -exec chmod -x '{}' \;
Команда означает:
- Найдите в текущем каталоге именованный объект с именем «fix_aptget.sh».
- Если он найден, выполните команду
chmod
. - Параметры, передаваемые в
chmod
:-x
для удаления прав на исполняемый файл и'{}'
который представляет имя файла найденного файла. - Последняя точка с запятой отмечает конец параметров, которые будут переданы в
chmod
. Этого нужно «избежать», поставив перед ним обратную косую черту.
После запуска этой команды мы можем искать исполняемые файлы, как и раньше, и на этот раз файлов в списке не будет.
Чтобы расширить нашу сеть, мы могли бы использовать шаблон файла вместо имени файла, которое мы использовали в нашем примере.
Эта гибкость позволяет вам искать файлы определенных типов или с шаблонами имен файлов, а также выполнять некоторые действия с соответствующими файлами.
Поиск имеет много других опций , включая поиск файлов по дате их изменения, файлы, принадлежащие пользователю или группе, файлы, которые доступны для чтения, или файлы с определенным набором прав доступа к файлам.
Команды locate и mlocate
Во многих дистрибутивах Linux имелась копия locate
. Это было заменено командой mlocate
, которая была улучшенной и обновленной версией locate
.
Когда mlocate
установлен в системе, он изменяет команду locate
так что вы фактически используете mlocate
даже если вы вводите locate
.
Текущие версии Ubuntu, Fedora и Manjaro были проверены на предмет наличия предустановленных версий этих команд. Ubuntu и Fedora включили mlocate.
Он должен был быть установлен на Манджаро с помощью этой команды:
Судо Пакман -Сю Мокате
В Ubuntu вы можете использовать locate и mlocate
взаимозаменяемо. В Fedora и Manjaro вы должны ввести locate
, но команда выполняется для вас mlocate
.
Если вы используете опцию --version
с locate
вы увидите, что mlocate
самом деле mlocate
.
найти - версия
Поскольку locate
работает во всех протестированных дистрибутивах Linux, мы будем использовать locate
в наших пояснениях ниже. И это на одну букву меньше.
База данных locate
Самое большое преимущество locate
— это скорость.
Когда вы используете команду find
, она прерывается и выполняет поиск по вашей файловой системе. Команда locate
работает совсем по-другому. Он выполняет поиск в базе данных, чтобы определить, находится ли то, что вы ищете, на вашем компьютере. Это делает поиск намного быстрее.
Конечно, это поднимает очевидный вопрос о базе данных. Что обеспечивает актуальность базы данных? Когда mlocate
установлен, он (обычно) помещает запись в cron.daily
. Это выполняется каждый день (очень рано утром) и обновляет базу данных.
Чтобы проверить, существует ли эта запись, используйте эту команду:
ls /etc/cron.daily/*loc*
Если вы не найдете там записи, вы можете настроить автоматическое задание, чтобы сделать это для вас в любое время.
СВЯЗАННЫЕ: Как планировать задачи в Linux: Введение в файлы Crontab
Что если ваш компьютер не включен в то время, когда предполагается обновить базу данных? Вы можете вручную запустить процесс обновления базы данных с помощью следующей команды:
sudo updatedb
Использование locate
Давайте посмотрим на файлы, которые содержат строку «getlatlong». С помощью locate поиск автоматически ищет любые совпадения, содержащие искомое слово в любом месте имени файла, поэтому нет необходимости использовать подстановочные знаки.
найти getlatlong
Трудно передать скорость на скриншоте, но почти сразу соответствующие файлы перечислены для нас.
Говорите, найдите, сколько результатов вы хотите
Иногда вы можете знать, что существует множество файлов того типа, который вы ищете. Вам нужно только увидеть первые несколько из них. Возможно, вы просто хотите напомнить, в каком каталоге они находятся, и вам не нужно видеть все имена файлов.
Используя опцию -n
(число), вы можете ограничить количество результатов, которые будут возвращены вам. В этой команде мы установили ограничение в 10 результатов.
найдите .html -n 10
locate
отвечает, перечисляя первые 10 соответствующих имён файлов, которые он извлекает из базы данных.
Подсчет подходящих файлов
Если вы хотите узнать только количество подходящих файлов и вам не нужно знать, как они называются или где они находятся на вашем жестком диске, используйте параметр -c (count).
найдите -c .html
Итак, теперь мы знаем, что на этом компьютере 431 файл с расширением «.html». Может быть, мы хотим взглянуть на них, но мы подумали, что взглянем и посмотрим, сколько их было в первую очередь. Вооружившись этим знанием, мы знаем, что нам нужно будет передавать результаты через less
.
найти .html | Меньше
И вот они все, или, по крайней мере, вот вершина длинного списка их.
Игнорирование дела с помощью locate
-i
(игнорировать регистр) заставляет locate
делать именно это, он игнорирует прописные и строчные различия между поисковым термином и именами файлов в базе данных. Если мы попытаемся снова посчитать файлы HTML, но по ошибке введем поисковый запрос в верхнем регистре, мы получим ноль результатов.
найдите -c .HTML
Включив опцию -i
мы можем заставить locate
игнорировать разницу в случае и вернуть ожидаемый ответ для этой машины, который равен 431.
найдите -c -i .HTML
Найти состояние базы данных
Чтобы увидеть состояние базы данных, используйте опцию -s
(status). Это заставляет locate
возвращать некоторую статистику о размере и содержимом базы данных.
найти -s
Команда который
Команда which
ищет каталоги в вашем пути и пытается найти команду, которую вы ищете. Это позволяет вам определить, какая версия программы или команды будет выполняться при вводе ее имени в командной строке.
Представьте, что у нас есть программа под названием geoloc
. Мы знаем, что он установлен на компьютере, но мы не знаем, где он находится. Он должен быть где-то в пути, потому что когда мы набираем его имя, он запускается. Мы можем использовать, чтобы найти его с помощью этой команды:
какой геолок
which
сообщает, что программа находится в /usr/local/bin
.
Мы можем проверить, есть ли другие копии программы в других местах в пути, используя опцию -a
(все).
который-геолокация
Это показывает нам, что у нас есть программа geoloc
в двух местах.
Конечно, копия в /usr/local/bin
будет всегда сначала обнаруживаться оболочкой Bash, поэтому бессмысленно иметь программу в двух местах.
Удаление версии в /usr/bin/geoloc
сэкономит вам немного места на жестком диске. Что еще более важно, это также позволит избежать проблем, созданных кем-то, кто обновляет программу вручную и делает это не в том месте. Затем задаюсь вопросом, почему они не видят новые обновления при запуске программы.
Команда whereis
Команда whereis
похожа на команду which
, но она более информативна.
В дополнение к расположению командного или программного файла, whereis
также указывается, где находятся страницы руководства (руководства) и файлы исходного кода . В большинстве случаев файлы с исходным кодом не будут на вашем компьютере, но если они есть, то о них будут сообщать.
Бинарный исполняемый файл, справочные страницы и исходный код часто называют «пакетом» для этой команды. Если вы хотите узнать, где находятся различные компоненты пакета для команды diff
, используйте следующую команду:
где разница
whereis
отвечает, перечисляя расположение страниц руководства diff
двоичного файла diff
.
Чтобы ограничить результаты только отображением местоположения двоичного файла (по сути, whereis
работать whereis
подобное), используйте параметр -b
(двоичный).
whereis -b diff
whereis
сообщает только о расположении исполняемого файла.
Чтобы ограничить поиск отчетом только на страницах руководства, используйте параметр -m
(руководство). Чтобы ограничить поиск отчетами только по файлам исходного кода, используйте параметр -s
(источник).
Чтобы увидеть местоположения, по которым осуществляется поиск, используйте параметр -l
(местоположения).
где-я
Места указаны для вас.
Теперь, когда мы знаем местоположения, в которых будет выполняться поиск, мы можем, если захотим, ограничить поиск определенным местоположением или группой местоположений.
Опция -B
(двоичный список) ограничивает поиск исполняемых файлов списком путей, указанным в командной строке. Вы должны указать хотя бы одно место для поиска. Опция -f
(файл) используется для обозначения конца местоположения, последнего начала имени файла.
где -B / bin / -f chmod
whereis
смотрит в единственное место, которое мы просили найти. Это происходит, где файл находится.
Вы также можете использовать опцию -M
(список вручную), чтобы ограничить поиск справочных страниц путями, указанными в командной строке. Опция -S
(список источников) позволяет таким же образом ограничивать поиск файлов исходного кода.
Команда Whatis
Команда whatis
используется для быстрого поиска по страницам руководства (руководства). Он содержит однострочное краткое описание термина, который вы просили найти.
Давайте начнем с простого примера. Хотя это выглядит как отправная точка глубоких философских дебатов, мы просто спрашиваем, что сказать нам, что означает термин «человек».
что за человек
whatis
находит два подходящих описания. Он печатает краткое описание для каждого матча. В нем также перечислены пронумерованные разделы руководства, которые содержат каждое полное описание.
Чтобы открыть руководство в разделе, описывающем команду man
, используйте следующую команду:
человек 1 человек
Руководство открывается в разделе man (1) на странице man
.
Чтобы открыть руководство в разделе 7, на странице, где обсуждаются макросы, которые можно использовать для создания справочных страниц, используйте эту команду:
человек 7 человек
Страница man для макроса man отображается для вас.
Поиск в отдельных разделах руководства
Опция -s
(section) используется для ограничения поиска интересующими вас разделами руководства. Чтобы ограничить поиск whatis
разделом 7 руководства, используйте следующую команду. Обратите внимание на кавычки вокруг номера раздела:
whatis -s "7" человек
Результаты относятся только к разделу 7 руководства.
Использование whatis с подстановочными знаками
Вы можете использовать подстановочные знаки с whatis
. Для этого вы должны использовать опцию -w
(подстановочный знак).
whatis -w char *
Результаты сопоставления перечислены в окне терминала.
По поводу Команды
Команда apropos
похожа на whatis
, но у нее есть еще несколько наворотов . Он просматривает заголовки страниц справочника и описания в одну строку в поиске поискового запроса. В нем перечислены соответствующие описания man-страниц в окне терминала.
Слово apropos означает «связанный с» или «относительно», и команда apropos
получила свое название от этого. Чтобы найти что-либо связанное с командой groups
, мы можем использовать эту команду:
по поводу группы
apropos
перечисляет результаты в окне терминала.
Использование более одного условия поиска
Вы можете использовать более одного условия поиска в командной строке. apropos
будет искать справочные страницы, содержащие любой из условий поиска.
по поводу чоун chmod
Результаты перечислены как прежде. В этом случае существует одна запись для каждого из условий поиска.
Использование точных соответствий
apropos
вернет страницы справочника, которые содержат поисковый термин, даже если этот термин находится в середине другого слова. Чтобы сделать так, чтобы возвращались только точные совпадения для поискового запроса, используйте опцию -e
(точный)
Чтобы проиллюстрировать это, мы будем использовать apropos
с grep
в качестве поискового запроса.
по поводу grep
Для этого возвращается много результатов, в том числе многие, где grep
включен в другое слово, такое как bzfgrep
.
Давайте попробуем это снова и используем опцию -e
(точная).
по поводу -е grep
На этот раз у нас есть один результат, который мы действительно искали.
Соответствие всем условиям поиска
Как мы видели ранее, если вы укажете более одного поискового термина, apropos
будет искать страницы справочника, которые содержат любой поисковый термин. Мы можем изменить это поведение, используя опцию -a
(и). Это позволяет выбирать только те совпадения, в которых есть все время поиска.
Давайте попробуем команду без опции -a
чтобы мы могли увидеть, какие результаты дает apropos
.
по поводу crontab cron
Результаты включают справочные страницы, которые соответствуют одному или другому из условий поиска.
Теперь мы будем использовать опцию -a
.
по поводу-crontab cron
На этот раз результаты сужаются до тех, которые содержат оба условия поиска.
Еще больше вариантов
Все эти команды имеют больше опций — некоторые из них гораздо больше опций — и вам предлагается прочитать справочные страницы для команд, которые мы обсуждали в этой статье.
Вот краткий обзор каждой команды:
- find : Обеспечивает многофункциональный и детальный поиск для поиска файлов и каталогов.
- locate : Обеспечивает быстрый поиск программ и команд на основе базы данных.
- который : ищет $ PATH в поисках исполняемых файлов
- whereis : ищет в $ PATH исполняемые файлы, справочные страницы и файлы исходного кода.
- whatis : Выполняет поиск в однострочных описаниях man для поиска соответствия поисковому запросу.
- apropos : поиск страницы справочника с большей точностью, чем whatis, для поиска соответствия поисковому запросу или терминам.
Ищете больше информации о терминале Linux? Вот 37 команд, которые вы должны знать .