Линукс найти файл по содержимому

Урок 9. Поиск файлов по имени и содержимому командами grep и locate

Очень часто нам придется использовать поиск файлов или определенного текста в файлах. Для этого в Linux есть несколько достаточно мощные утилиты.

Поиск по имени файла:

locate [опции] имя_файла

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

Система индексирует абсолютно все файлы либо только определенные?

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

То есть придется ждать пока она это сделает?

Необязательно. Можно принудительно обновить базу данных с помощью команды updatedb.

А где находится эта база данных?

Здесь — /var/lib/mlocate/mlocate.db . Необходимо обладать правами root для доступа к этому файлу.

Попробуем найти файлы, в имени которого присутствует слово user. Для этого введем следующую команду:

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

locate -b user либо locate —basename user

Для того, чтобы не учитывать регистр (то есть заглавные и прописные буквы в имени файла) достаточно ввести:

locate -i имя_файла либо locate —ignore-case имя_файла

После этого система отобразит имена файлов с заглавными и прописными буквами.

Иногда результат поиска выдает большое число записей. В данном случае можно перенаправить вывод на вход команды less .

Поиск фрагментов текста в текстовых файлах

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

grep [опции] шаблон файл

Для этого рассмотрим текстовый файл Linux.txt и попробуем найти слово configuration в его тексте:

grep configuration Linux.txt

Команда вывела сами строки, где встречается искомое слово.

А если текст содержит тысячи строк, то как найти эту строку в файле?

Для этого есть опция -n или —line-number.

grep -n configuration Linux.txt

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

А можно осуществить поиск в нескольких файлах или по всей системе?

Конечно, с помощью символов групповых операций.

К примеру, у нас 4 файла, в именах которых присутствует слово manual:

Какую команду введем? Конечно же grep -n configuration *manual*.txt

Как видно сначала выводится название файла, за ним номер строки и затем сама строка с искомым словом.

Ну а если у имен этих файлов нет общих слов, то как осуществить поиск?

Достаточно ввести grep -n configuration *.

Когда используется данная комбинация, то grep ищет только в текущем каталоге! То есть вложенные каталоги не учитываются.

Читайте также:  Lenovo yoga tablet 1050l windows

Чтобы учесть и вложенные подкаталоги необходимо использовать опцию -R или —dereference-recursive.

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

grep —color=auto configuration *

Ну а если вдруг понадобится знать в каких файлах находится искомый текст и ничего больше, то воспользуемся опцией -l либо —files-with-matches:

grep -Rl configuration *

Команду grep удобно использовать и с другими командами, например ls .

Допустим мы хотим отобразить только файлы с расширением txt . Для этого выполним ls | grep —color=auto txt

Вариантов применения grep с другими командами очень много и по мере прохождения курса можно придумать довольно интересные комбинации.

Для данной команды доступны следующие опции:

-i ( —ignore-case ) — не учитывается регистр

-w ( —word-regexp ) — при поиске учитывается целое имя, то есть отображаются записи, в точности соответствующие заданному шаблону.

-v ( —invert-match ) — инвертированный поиск, то есть будут отображаться только те записи, где искомое слово отсутствует.

Источник

🧟♀️ Как найти определенное слово в файле в Linux

По умолчанию большинство инструментов поиска смотрят имена файлов, а не их содержимое.

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

Здесь мы покажем вам, как вы можете найти конкретные слова в файле в Linux.

Использование grep для поиска определенного слова в файле

По умолчанию grep просматривает содержимое файлов, а также их имена.

Он включен в большинство систем Linux и в целом одинаков для всех дистрибутивов.

Тем не менее, небольшие или менее мощные Linux-боксы могут предпочесть выполнить другую команду, например, ack.

В зависимости от того, как файл закодирован, grep не всегда может заглянуть внутрь.

Но для большинства текстовых форматов grep может сканировать текст файла по указанному шаблону.

Флаг -R устанавливает grep в рекурсивный режим, перемещаясь по всем каталогам, содержащимся в указанном каталоге.

Флаг -w ищет совпадения всего слова.

Это означает, что «red» будет соответствовать только «red», окруженному пробельными символами, а не «redundant» или «tired».

Флаг -e предшествует шаблону для поиска.

Он поддерживает регулярные выражения по умолчанию.

Чтобы ускорить grep, вы можете использовать флаги –exclude и –include, чтобы ограничить поиск определенными типами файлов.

Например, –exclude = *. Csv не будет искать в файлах с расширением .csv. –include = *. txt, с другой стороны, будет выполнять поиск только в файлах с расширением .txt.

Флаг можно добавить сразу после команды grep, как показано ниже:

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

Эта команда не будет выполнять поиск в каких-либо каталогах в текущем рабочем каталоге с именами dir1, dir2 или с шаблоном * _old, исключая их из процесса поиска.

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

Использование find для поиска определенного слова в файле

Хотя синтаксис команды find является более сложным, чем grep, некоторые предпочитают его.

Эта команда будет использовать флаг find -exec для передачи найденных файлов в grep для поиска.

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

Читайте также:  Finding file in linux command

Обратите внимание, что команда find ищет только имена файлов, а не их содержимое.

Вот почему grep требуется для поиска текста и содержимого файла.

Обычные флаги grep должны быть полностью работоспособны в пределах флага -exec.

Использование ack для поиска определенного слова в файле

Команда ack, вероятно, является самым быстрым инструментом поиска, но она не так популярна, как описанные выше опции.

Команда, показанные ниже будет искать в текущем каталоге.

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

Заключение

Для большинства людей в большинстве ситуаций, grep – лучший широко доступный инструмент поиска.

Вы также можете посмотреть другие инструменты поиска, такие как RipGrep, для более быстрого поиска.

Источник

Поиск по содержимому файлов в Linux

Необходимо в каталоге найти файлы содержащие определенную фразу. Как это сделать? Думаю, многие не раз сталкивались с подобной проблемой, как необходимость найти в папке с файлами (а порой и подпапками, в которых тоже хорошо бы поискать) файл, зная кусочек его текста (ну, или догадываясь о нем). Я тоже много раз спотыкался об эту нужда и вот, наконец, собрался и написал небольшой скрипт на bash, выполняющий эту задачу. Не самой общераспространенной задачей, но всё же имеющей место быть, является поиск исполняемого файла программы. Она воспринимает в качестве параметра имя программы, а после выполнения выводит в терминал список с расположением одновременных файлов. Иногда может понадобится найти файл, в котором содержится определённая строчка или найти строку в файле, где есть нужное слово. В Linux всё это делается с помощью одной весьма простой, но в то же время мощной утилиты grep. С её помощью можно искать не только строчки в файлах, но и фильтровать вывод команд, и много чего ещё.

Linux поиск по содержимому файлов командой grep

Часто возникают ситуации, что нужно найти какой-нибудь текст, но вы не помните, в каком файле/файлах он содержится. Секрет популярности — её мощь, она отдает возможность пользователям сортировать и фильтровать текст на основе сложных правил.

Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU.

В этом варианте для поиска по содержимому файлов в каталоге можно использовать утилиту grep:

grep -r -n «text» /path

grep -r «Строчка для поиска»
grep -rl $’\xEF\xBB\xBF’

где:
-n показывает строку, где был найден фрагмент;
-r осуществляет розыск рекурсивно, в файлах в самом каталоге /path и в его подкаталогах;

Также можно приплюсовать опцию -C 3, чтобы видеть +- 3 строки вокруг (выше и ниже от найденной).

Дабы найти файл по его содержимому во всех Linux — подобных ОС, достаточно использовать утилиту find.

Linux поиск по содержимому файлов командой find

Своего рода швейцарским ножом в розыске файлов является команда find. Отметим, что она имеет множество опций, которые смогут кардинально изменять механизм поиска. Мы изложим лишь основные принципы, а с остальными способностями ознакомьтесь в справке по команде. Базовый принцип использования find состоит в указании папки поиска и опций. Например, выражение «find

/ -name *.cpp» осуществит поиск файлов, имеющих продолжение «cpp» по всем каталогам, находящимся в личной директории пользователя.

Читайте также:  Asus n55sf звук windows 10

/usr/bin/find /папка -type f -exec grep -H ‘строчка для поиска’ <> ;

Значение, указанное после опции -name, задает шаблон соотношения имени файла. Вы можете использовать опцию -type для указания типа файла, где в свойстве значений нужно использовать специальные буквы: d — директория, f — файл, l — символическая ссылка и т. д. Функции -user, -group и -size также довольно полезны. Их значениями являются имя пользователя, имя категории и размер файла в байтах.

find /var/www/ -name «file.conf»
find /var/www/ -name «*.conf»

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

/ -name *.cpp -user ‘my-username’ -group ‘my-group’
find

/ -name ‘*.config’ -type f -exec grep ‘user’ <> \;
find /home/ ( -name «*.php» -or -name «*.html» -or -name «*.js» )
-exec grep -lHEi $’\xEF\xBB\xBF’ <> ;

А возможно и еще проще

Linux поиск по содержимому файлов командой which

Бригада which ищет только те файлы, у которых есть право на выполнение как программы. Розыск осуществляется по директориям, заданным в переменной окружения PATH. Содержимое переменной PATH сможет отличаться для различных пользователей. Чтобы охватить как можно большее количество системных директория, необходимо войти в систему под учетной записью администратора.

which cat
/bin/cat
which docker-stack
/home/username/.local/bin/docker-stack

Linux поиск по содержимому файлов командой locate

Поиск, производимый командой locate весьма быстр. Однако учитывайте тот факт, что системная база данных может быть не живой на момент осуществления операции. Механизм сканирования файловой системы, время его проведения и вобщем наличие такого инструмента может разниться в различных дистрибутивах Linux. Команда locate может быть полезна лишь при поиске файла по его имени. Однако для проверки текстового содержимого документов на вступление искомых данных нужно использовать другой инструмент.

Команда locate представляется альтернативой для find.

Данная команда, как правило, работает быстрее и может с легкостью производить поиск (в широком смысле — стремление добиться чего-либо, найти что-либо; действия субъекта, направленные на получение нового или утерянного (забытого): новой информации (поиск информации), данных,) по всей файловой системы. Linux имеет специальную команду grep, какая принимает шаблон для поиска и имя файла (именованная область данных на носителе информации). В случае нахождения совпадений, они будут выведены в терминал. В всеобщем виде выражение можно составить как «grep шаблон_поиска имя_файла». Чтобы отыскать файлы с помощью команды locate, просто используйте следующий синтаксис:

К образцу, чтобы возвращать только файлы, содержащие сам запрос, вместо того чтобы вводить каждый файл, который содержит запрос в ведущих к нему каталогах, можно утилизировать флаг –b (чтоб искать только basename, базовое имя файла):

Команды find и locate – отличные инструменты для поиска файлов в UNIX‐подобных операционных системах. Любая из этих утилит имеет свои преимущества. Мы рассмотрели использование команд для поиска и фильтрации вывода бригад в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Несмотря на то, что команды find и locate сами по себе очень мощны, их действие возможно расширить, комбинируя их с другими командами. Научившись работать с find и locate, попробуйте чистить их результаты при помощи команд wc, sort и grep.

Источник

Оцените статью