LinuxКак сделать

Как использовать все поисковые команды Linux

Концепция терминала Linux, полный текста на ноутбуке
Фатмавати Ахмад Заенури / Shutterstock.com

Linux предлагает шесть различных способов поиска, и у каждого есть свои достоинства. Мы покажем, как использовать find , locate , which , whereis , whatis и apropos . Каждый выделяется в разных задачах; Вот как правильно выбрать инструмент для работы.

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

Команда поиска

Поведение команды find сложно определить методом проб и ошибок. Когда вы поймете синтаксис , вы начнете ценить его гибкость и мощь.

Самый простой способ использовать find — просто набрать find и нажать Enter.

  находить 

найти команду в окне терминала

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

вывод команды find в окне терминала

Некоторые реализации find требуют, чтобы вы поставили . для текущего каталога. Если это так в вашей версии Linux, используйте следующую команду:

  находить . 

находить . команда в окне терминала

Чтобы find поиск из корневой папки, вы должны использовать эту команду:

  находить / 

команда fin d / command в окне терминала

Чтобы начать поиск из вашей домашней папки, используйте эту команду:

  найти ~ 

найти ~ в окне терминала

Использование find с шаблонами файлов

Чтобы find был чем-то большим, чем автоматически рекурсивная версия ls , мы должны предоставить ему что-то для поиска. Мы можем предоставить имена файлов или шаблоны файлов. Шаблоны используют подстановочные знаки, где * означает любую строку символов и ? означает любой отдельный символ.

Шаблоны должны быть указаны для правильной работы. Это легко забыть сделать, но если вы не процитируете шаблон, find не сможет правильно выполнить команду, которую вы ему дали.

С помощью этой команды мы будем искать в текущей папке файлы, которые соответствуют шаблону «*. * S». Это означает, что любое имя файла имеет расширение файла, оканчивающееся на «s». Мы используем опцию -name чтобы сообщить, find мы передаем имя файла или шаблон имени файла.

  находить .  -имя "*. * s" 

находить . -имя "*. * s" в окне терминала

find возвращает эти подходящие файлы.

Обратите внимание, что два расширения файла имеют длину два символа, а одно — три символа. Это потому, что мы использовали шаблон «*. * S». Если бы мы хотели только два символьных расширения файла, мы бы использовали «*.? S».

вывод команды file в окне терминала

Если бы мы заранее знали, что ищем файлы JavaScript «.js», мы могли бы быть более конкретными в нашем шаблоне файлов. Также обратите внимание, что вы можете использовать одинарные кавычки, чтобы обернуть шаблон, если хотите.

  находить .  -имя '* .js' 

находить . имя "* .js" в окне терминала

На этот раз find только отчеты по файлам JavaScript.

Файлы JavaScript, найденные командой find в окне терминала

Игнорирование дела с находкой

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

  находить .  имя Yelp.js 

находить . имя 'Yelp.js' в окне терминала

Это ничего не вернуло. Но странно, мы знаем, что файл должен быть там. Давайте попробуем еще раз и скажем find чтобы игнорировать регистр. Мы делаем это с помощью опции -iname (игнорируем имя дела)

  находить.  - имя Yelp.js 

находить. - имя Yelp.js в окне терминала

В этом была проблема, имя файла начинается со строчной буквы «y», а мы искали заглавную «Y».

Рекурсивные подкаталоги с находкой

Отличительной особенностью find является то, как он рекурсивно просматривает подкаталоги. Давайте найдем любые файлы, начинающиеся с «map».

  находить .  -имя "карта *. *" 

находить . имя "map *. *" в окне терминала

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

Результаты из подкаталога в окне терминала

Поиск каталогов с находкой

Опция -path позволяет искать каталоги. Давайте посмотрим на каталог, название которого мы не можем вспомнить, но знаем, что он заканчивается буквами «о».

  находить .  -path '* about' 

находить . -path '* about' в окне терминала

Каталог найден, он просто называется «около» и вложен в другой каталог в текущем каталоге.

Найденный каталог в окне терминала

Существует -ipath (игнорировать путь к -ipath ), которая позволяет вам искать пути и игнорировать регистр, аналогично опции — iname описанной выше.

Использование атрибутов файла с find

find может искать файлы, атрибуты которых соответствуют подсказке поиска. Например, вы можете искать пустые файлы, используя опцию -empty , независимо от того, как они называются.

  находить .  -empty 

находить . пустое в окне терминала

Любые файлы нулевой длины будут перечислены в результатах поиска.

Опция -executable найдет любой файл, который может быть выполнен, например, программу или скрипт.

  находить .  -executable 

находить . -исполняемый в окне терминала

В списке результатов указан файл с именем «fix_aptget.sh».

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

результаты поиска исполняемого файла в окне терминала

Опция -типа

Опция -type позволяет вам искать тип объекта, который вы ищете. Мы собираемся предоставить индикатор типа «f» в качестве параметра опции -type потому что мы хотим, чтобы поиск выполнял поиск только файлов.

  находить .  исполняемый тип -f 

находить . исполняемый файл -type f в окне терминала

На этот раз подкаталоги не перечислены. Исполняемый файл сценария является единственным элементом в результатах.

результаты поиска без каталогов в окне терминала

Мы также можем попросить find включить в результаты только каталоги. Чтобы вывести список всех каталогов, мы можем использовать опцию -type с индикатором типа «d».

  находить .  тип -d 

находить . введите -d в окне терминала

В каталогах перечислены только каталоги и подкаталоги.

каталоги, перечисленные в окне терминала

Использование других команд с find

Вы можете выполнить некоторые дополнительные действия с найденными файлами. Вы можете передать файлы, в свою очередь, какой-то другой команде.

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

  находить .  -name "fix_aptget.sh" -exec chmod -x '{}' \; 

находить . -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. Он должен был быть установлен на Манджаро с помощью этой команды:

  Судо Пакман -Сю Мокате 
sudo pacman -Сю перемещаться в окне терминала

В Ubuntu вы можете использовать locate и mlocate взаимозаменяемо. В Fedora и Manjaro вы должны ввести locate , но команда выполняется для вас mlocate .

Если вы используете опцию --version с locate вы увидите, что mlocate самом деле mlocate .

  найти - версия 

locate --version в окне терминала

Поскольку locate работает во всех протестированных дистрибутивах Linux, мы будем использовать locate в наших пояснениях ниже. И это на одну букву меньше.

База данных locate

Самое большое преимущество locate — это скорость.

Когда вы используете команду find , она прерывается и выполняет поиск по вашей файловой системе. Команда locate работает совсем по-другому. Он выполняет поиск в базе данных, чтобы определить, находится ли то, что вы ищете, на вашем компьютере. Это делает поиск намного быстрее.

Конечно, это поднимает очевидный вопрос о базе данных. Что обеспечивает актуальность базы данных? Когда mlocate установлен, он (обычно) помещает запись в cron.daily . Это выполняется каждый день (очень рано утром) и обновляет базу данных.

Чтобы проверить, существует ли эта запись, используйте эту команду:

  ls /etc/cron.daily/*loc* 

ls /etc/cron.daily/*loc* в окне терминала

Если вы не найдете там записи, вы можете настроить автоматическое задание, чтобы сделать это для вас в любое время.

СВЯЗАННЫЕ: Как планировать задачи в Linux: Введение в файлы Crontab

Что если ваш компьютер не включен в то время, когда предполагается обновить базу данных? Вы можете вручную запустить процесс обновления базы данных с помощью следующей команды:

  sudo updatedb 

sudo updatedb в окне терминала

Использование locate

Давайте посмотрим на файлы, которые содержат строку «getlatlong». С помощью locate поиск автоматически ищет любые совпадения, содержащие искомое слово в любом месте имени файла, поэтому нет необходимости использовать подстановочные знаки.

  найти getlatlong 
найдите getlatlong в окне терминала

Трудно передать скорость на скриншоте, но почти сразу соответствующие файлы перечислены для нас.

найти результаты с файлами, содержащими getlatlong в окне терминала

Говорите, найдите, сколько результатов вы хотите

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

Используя опцию -n (число), вы можете ограничить количество результатов, которые будут возвращены вам. В этой команде мы установили ограничение в 10 результатов.

  найдите .html -n 10 

найдите .html -n 10 в окне терминала

locate отвечает, перечисляя первые 10 соответствующих имён файлов, которые он извлекает из базы данных.

результаты поиска из ограниченного до 10 результатов в окне терминала

Подсчет подходящих файлов

Если вы хотите узнать только количество подходящих файлов и вам не нужно знать, как они называются или где они находятся на вашем жестком диске, используйте параметр -c (count).

  найдите -c .html 

найдите -c .html в окне терминала

Итак, теперь мы знаем, что на этом компьютере 431 файл с расширением «.html». Может быть, мы хотим взглянуть на них, но мы подумали, что взглянем и посмотрим, сколько их было в первую очередь. Вооружившись этим знанием, мы знаем, что нам нужно будет передавать результаты через less .

  найти .html |  Меньше 

найти .html | меньше в окне терминала

И вот они все, или, по крайней мере, вот вершина длинного списка их.

список html-файлов пропускается меньше в окне терминала

Игнорирование дела с помощью locate

-i (игнорировать регистр) заставляет locate делать именно это, он игнорирует прописные и строчные различия между поисковым термином и именами файлов в базе данных. Если мы попытаемся снова посчитать файлы HTML, но по ошибке введем поисковый запрос в верхнем регистре, мы получим ноль результатов.

  найдите -c .HTML 

найдите -c .HTML в окне терминала

Включив опцию -i мы можем заставить locate игнорировать разницу в случае и вернуть ожидаемый ответ для этой машины, который равен 431.

  найдите -c -i .HTML 

найдите -c -i .HTML в окне терминала

Найти состояние базы данных

Чтобы увидеть состояние базы данных, используйте опцию -s (status). Это заставляет locate возвращать некоторую статистику о размере и содержимом базы данных.

  найти -s 

найдите -s в окне терминала

Команда который

Команда which ищет каталоги в вашем пути и пытается найти команду, которую вы ищете. Это позволяет вам определить, какая версия программы или команды будет выполняться при вводе ее имени в командной строке.

Представьте, что у нас есть программа под названием geoloc . Мы знаем, что он установлен на компьютере, но мы не знаем, где он находится. Он должен быть где-то в пути, потому что когда мы набираем его имя, он запускается. Мы можем использовать, чтобы найти его с помощью этой команды:

  какой геолок 

какой геолок в окне терминала

which сообщает, что программа находится в /usr/local/bin .

геолокация в / usr / local / bin

Мы можем проверить, есть ли другие копии программы в других местах в пути, используя опцию -a (все).

  который-геолокация 

который-геолокация в окне терминала

Это показывает нам, что у нас есть программа geoloc в двух местах.

который-геолокация в окне терминала

Конечно, копия в /usr/local/bin будет всегда сначала обнаруживаться оболочкой Bash, поэтому бессмысленно иметь программу в двух местах.

Удаление версии в /usr/bin/geoloc сэкономит вам немного места на жестком диске. Что еще более важно, это также позволит избежать проблем, созданных кем-то, кто обновляет программу вручную и делает это не в том месте. Затем задаюсь вопросом, почему они не видят новые обновления при запуске программы.

Команда whereis

Команда whereis похожа на команду which , но она более информативна.

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

Бинарный исполняемый файл, справочные страницы и исходный код часто называют «пакетом» для этой команды. Если вы хотите узнать, где находятся различные компоненты пакета для команды diff , используйте следующую команду:

  где разница 

где разница в окне терминала

whereis отвечает, перечисляя расположение страниц руководства diff двоичного файла diff .

где результаты для diff в окне терминала

Чтобы ограничить результаты только отображением местоположения двоичного файла (по сути, whereis работать whereis подобное), используйте параметр -b (двоичный).

  whereis -b diff 

whereis -b diff в окне терминала

whereis сообщает только о расположении исполняемого файла.

где вывод ограничен двоичным местоположением только в окне терминала

Чтобы ограничить поиск отчетом только на страницах руководства, используйте параметр -m (руководство). Чтобы ограничить поиск отчетами только по файлам исходного кода, используйте параметр -s (источник).

Чтобы увидеть местоположения, по которым осуществляется поиск, используйте параметр -l (местоположения).

  где-я 

где -l в окне терминала

Места указаны для вас.

где местоположения поиска перечислены в окне терминала

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

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

  где -B / bin / -f chmod 

где -B / bin / -f chmod в окне терминала

whereis смотрит в единственное место, которое мы просили найти. Это происходит, где файл находится.

где результат использования опции -B в окне терминала

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

Команда Whatis

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

Давайте начнем с простого примера. Хотя это выглядит как отправная точка глубоких философских дебатов, мы просто спрашиваем, что сказать нам, что означает термин «человек».

  что за человек 

Что такое человек в окне терминала

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

что приводит к окну терминала

Чтобы открыть руководство в разделе, описывающем команду man , используйте следующую команду:

  человек 1 человек 

человек 1 человек в окне терминала

Руководство открывается в разделе man (1) на странице man .

Страница man открывается в первом разделе в окне терминала

Чтобы открыть руководство в разделе 7, на странице, где обсуждаются макросы, которые можно использовать для создания справочных страниц, используйте эту команду:

  человек 7 человек 

человек 7 человек в окне терминала

Страница man для макроса man отображается для вас.

man-страница, открытая в седьмом разделе в окне терминала

Поиск в отдельных разделах руководства

Опция -s (section) используется для ограничения поиска интересующими вас разделами руководства. Чтобы ограничить поиск whatis разделом 7 руководства, используйте следующую команду. Обратите внимание на кавычки вокруг номера раздела:

  whatis -s "7" человек 

whatis -s "7" человек в окне терминала

Результаты относятся только к разделу 7 руководства.

Результаты Whatis ограничены разделом семь в окне терминала

Использование whatis с подстановочными знаками

Вы можете использовать подстановочные знаки с whatis . Для этого вы должны использовать опцию -w (подстановочный знак).

  whatis -w char * 

whatis -w char * в окне терминала

Результаты сопоставления перечислены в окне терминала.

подстановочный знак whatis совпадает с окном терминала

По поводу Команды

Команда apropos похожа на whatis , но у нее есть еще несколько наворотов . Он просматривает заголовки страниц справочника и описания в одну строку в поиске поискового запроса. В нем перечислены соответствующие описания man-страниц в окне терминала.

Слово apropos означает «связанный с» или «относительно», и команда apropos получила свое название от этого. Чтобы найти что-либо связанное с командой groups , мы можем использовать эту команду:

  по поводу группы 

по поводу группы в терминальном окне

apropos перечисляет результаты в окне терминала.

по поводу результатов для группы в окне терминала

Использование более одного условия поиска

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

  по поводу чоун chmod 

по поводу chown chmod в терминальном окне

Результаты перечислены как прежде. В этом случае существует одна запись для каждого из условий поиска.

По поводу результатов для chmod и chown в окне терминала.

Использование точных соответствий

apropos вернет страницы справочника, которые содержат поисковый термин, даже если этот термин находится в середине другого слова. Чтобы сделать так, чтобы возвращались только точные совпадения для поискового запроса, используйте опцию -e (точный)

Чтобы проиллюстрировать это, мы будем использовать apropos с grep в качестве поискового запроса.

  по поводу grep 

по поводу grep в окне терминала

Для этого возвращается много результатов, в том числе многие, где grep включен в другое слово, такое как bzfgrep .

результаты по поводу grep в окне терминала

Давайте попробуем это снова и используем опцию -e (точная).

  по поводу -е grep 

по поводу -е grep в окне терминала

На этот раз у нас есть один результат, который мы действительно искали.

результаты по поводу -e grep в окне терминала

Соответствие всем условиям поиска

Как мы видели ранее, если вы укажете более одного поискового термина, apropos будет искать страницы справочника, которые содержат любой поисковый термин. Мы можем изменить это поведение, используя опцию -a (и). Это позволяет выбирать только те совпадения, в которых есть все время поиска.

Давайте попробуем команду без опции -a чтобы мы могли увидеть, какие результаты дает apropos .

  по поводу crontab cron 

по поводу crontab cron в терминальном окне

Результаты включают справочные страницы, которые соответствуют одному или другому из условий поиска.

по поводу результатов crontab cron в терминальном окне

Теперь мы будем использовать опцию -a .

  по поводу-crontab cron 

кстати -a crontab cron в терминальном окне

На этот раз результаты сужаются до тех, которые содержат оба условия поиска.

результаты по поводу -a crontab cron в терминальном окне

Еще больше вариантов

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

Вот краткий обзор каждой команды:

  • find : Обеспечивает многофункциональный и детальный поиск для поиска файлов и каталогов.
  • locate : Обеспечивает быстрый поиск программ и команд на основе базы данных.
  • который : ищет $ PATH в поисках исполняемых файлов
  • whereis : ищет в $ PATH исполняемые файлы, справочные страницы и файлы исходного кода.
  • whatis : Выполняет поиск в однострочных описаниях man для поиска соответствия поисковому запросу.
  • apropos : поиск страницы справочника с большей точностью, чем whatis, для поиска соответствия поисковому запросу или терминам.

Ищете больше информации о терминале Linux? Вот 37 команд, которые вы должны знать .

СВЯЗАНО: 37 важных команд Linux, которые вы должны знать

Похожие посты
Как сделать

Как получить возмещение за покупки в iTunes или App Store

Как сделать

Поверхностное перо не работает? Вот как это исправить

Как сделать

Как настроить и использовать Fire TV Recast

Как сделать

Как изменить рингтон по умолчанию на вашем iPhone