Поиск файлов в Linux

Обновлено: 21.11.2024

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

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

Предпосылки

Чтобы следовать этому руководству, вам потребуется доступ к компьютеру с операционной системой на базе Linux. Это может быть либо виртуальный частный сервер, к которому вы подключились с помощью SSH, либо ваша локальная машина. Обратите внимание, что это руководство было проверено с использованием сервера Linux с Ubuntu 20.04, но приведенные примеры должны работать на компьютере с любой версией любого дистрибутива Linux.

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

Кроме того, вы можете использовать интерактивный терминал, встроенный в эту страницу, чтобы поэкспериментировать с примерами команд из этого руководства. Щелкните следующее Запустить интерактивный терминал! кнопку, чтобы открыть окно терминала и начать работу в среде Linux (Ubuntu).

Запустите интерактивный терминал!

Примечание. Чтобы проиллюстрировать, как работают команды find и locate, приведенные в этом руководстве примеры команд выполняют поиск файлов, хранящихся в папке / или в корневом каталоге. Из-за этого, если вы вошли в терминал как пользователь без полномочий root, некоторые из примеров команд могут содержать в своем выводе Отказ в доступе.

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

Поиск по имени

Самый очевидный способ поиска файлов — по имени.

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

Это будет чувствительно к регистру, то есть поиск по запросу отличается от поиска по запросу .

Чтобы найти файл по имени, но игнорировать регистр запроса, используйте параметр -iname:

Если вы хотите найти все файлы, которые не соответствуют определенному шаблону, вы можете инвертировать поиск, указав -not :

Кроме того, вы можете инвертировать поиск, используя восклицательный знак ( ! ), например:

Обратите внимание, что если вы используете ! , вы должны экранировать символ обратной косой чертой ( \ ), чтобы оболочка не пыталась интерпретировать его до того, как find сможет действовать.

Поиск по типу

Вы можете указать тип файлов, которые хотите найти, с помощью параметра -type. Это работает следующим образом:

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

  • f : обычный файл
  • d : каталог
  • l : символическая ссылка
  • c : символьные устройства
  • b : заблокировать устройства

Например, если вы хотите найти все символьные устройства в вашей системе, вы можете ввести следующую команду:

Эта команда ищет только устройства в каталоге /dev, в котором обычно монтируются файлы устройств в системах Linux:

Вы можете найти все файлы, оканчивающиеся на .conf, с помощью следующей команды. В этом примере выполняется поиск соответствующих файлов в каталоге /usr:

Примечание. В предыдущем примере объединены два выражения запроса поиска; а именно, -type f и -name "*.conf" . Чтобы любой файл был возвращен, он должен удовлетворять обоим этим выражениям.

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

В этом примере будут найдены все файлы, имена которых соответствуют запросу query_1 или query_2 .

Фильтрация по времени и размеру

find предоставляет множество способов фильтрации результатов по размеру и времени.

Вы можете фильтровать файлы по их размеру, используя параметр -size. Для этого вы должны добавить специальный суффикс в конце числового значения размера, чтобы указать, рассчитываете ли вы размер в байтах, мегабайтах, гигабайтах или другом размере. Вот некоторые часто используемые суффиксы размера:

  • c : байты
  • k : килобайты
  • M : мегабайты
  • G : гигабайты
  • b : блоки по 512 байт.

Для иллюстрации следующая команда найдет все файлы в каталоге /usr размером ровно 50 байт:

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

Чтобы найти в каталоге /usr файлы размером более 700 мегабайт, можно использовать следующую команду:

Для каждого файла в системе Linux хранит временные данные о времени доступа, времени модификации и времени изменения.

Время доступа: время последнего чтения или записи файла.

Время модификации: время последнего изменения содержимого файла.

Время изменения: время последнего изменения метаданных индексного дескриптора файла.

Вы можете основывать свои поисковые запросы на этих параметрах, используя параметры -atime , -mtime и -ctime соответственно. Для любого из этих параметров вы должны указать значение, указывающее, сколько дней в прошлом вы хотите выполнить поиск. Как и в случае с параметрами размера, описанными ранее, перед этими параметрами можно поставить символы плюс или минус, чтобы указать «больше» или «меньше».

Например, чтобы найти файлы в каталоге /usr, которые были изменены за последний день, выполните следующую команду:

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

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

У этих параметров также есть сопутствующие параметры, которые можно использовать для указания минут вместо дней:

Это даст файлы, которые были изменены за последнюю минуту.

find также может выполнять сравнение с эталонным файлом и возвращать более новые файлы:

Этот синтаксис вернет все файлы в системе, которые были созданы или изменены позже эталонного файла.

Поиск по владельцу и разрешениям

Вы также можете искать файлы по пользователю или группе, которой принадлежит файл, используя параметры -user и -group соответственно. Чтобы найти все файлы в каталоге /var, принадлежащие пользователю syslog, выполните следующую команду:

Аналогичным образом вы можете указать файлы в каталоге /etc, принадлежащие теневой группе, набрав:

Вы также можете искать файлы с определенными разрешениями.

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

Это будет соответствовать файлам с точно указанными разрешениями.

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

Это будет соответствовать любым файлам, имеющим дополнительные разрешения. В этом случае будет найден файл с правами доступа 744.

Фильтрация по глубине

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

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

После выполнения команд в этом разделе ваш каталог /tmp/ будет содержать три уровня каталогов с десятью каталогами на первом уровне. Каждый каталог (включая временный каталог) будет содержать десять файлов и десять подкаталогов.

Создайте примерную структуру каталогов в каталоге /tmp/ с помощью следующей команды:

После этого заполните эти каталоги несколькими образцами файлов с помощью команды touch:

Установив эти файлы и каталоги, перейдите в только что созданный каталог test/:

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

Это вернет много результатов. Если вы направите вывод в счетчик, вы обнаружите, что всего 1111 результатов:

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

Чтобы найти файл1 только в каталогах уровня 1 и выше, вы можете указать максимальную глубину 2 (1 для каталога верхнего уровня и 1 для каталогов уровня 1):

Это гораздо более управляемый список.

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

Вы можете использовать это, чтобы найти только файлы в конце ветвей каталога:

Опять же, из-за разветвленной структуры каталогов будет возвращено большое количество результатов (1000).

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

Такое сочетание этих параметров значительно сужает результаты: возвращается только 110 строк вместо прежних 1 000.

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

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

Кнопка <> используется в качестве заполнителя для файлов, которые находят совпадения. \; позволяет найти, где заканчивается команда.

Например, предположив, что вы все еще находитесь в каталоге test/, который вы создали в каталоге /tmp/ на предыдущем шаге, вы можете найти файлы в предыдущем разделе, у которых были разрешения 644, и изменить их, чтобы они имели разрешения 664:

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

В этом примере выполняется поиск всех каталогов с разрешениями, установленными на 755, а затем изменяются разрешения на 700 .

Поиск файлов с помощью locate

Альтернативой использованию find является команда locate. Эта команда часто выполняется быстрее и может с легкостью выполнять поиск по всей файловой системе.

Вы можете установить эту команду в Debian или Ubuntu с помощью apt, обновив списки пакетов и затем установив пакет mlocate:

В Rocky Linux, CentOS и других дистрибутивах, производных от RedHat, вы можете вместо этого использовать команду dnf для установки mlocate:

Причина, по которой locate работает быстрее, чем find, заключается в том, что он опирается на базу данных, в которой перечислены все файлы в файловой системе. Эта база данных обычно обновляется один раз в день с помощью cron-скрипта, но вы можете обновить ее вручную с помощью команды updatedb. Запустите эту команду сейчас с привилегиями sudo:

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

locate позволяет фильтровать результаты несколькими способами. Самый простой способ использовать его для поиска файлов — использовать следующий синтаксис:

Это будет соответствовать любым файлам и каталогам, которые содержат строковый запрос в любом месте их пути к файлу. Чтобы возвращать только файлы, имена которых содержат сам запрос, вместо каждого файла, содержащего запрос в каталогах, ведущих к нему, вы можете включить флаг -b для поиска только тех файлов, чье «базовое имя» соответствует запросу:

Чтобы функция locate возвращала только те результаты, которые все еще существуют в файловой системе (имеются в виду файлы, которые не были удалены между последним вызовом updateb и текущим вызовом locate), используйте флаг -e:

Вы можете получить статистику по каталогизированной информации locate с помощью параметра -S:

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

Заключение

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

С этого момента мы рекомендуем вам продолжать экспериментировать с поиском и размещением . Вы можете прочитать их соответствующие справочные страницы, чтобы узнать о других параметрах, не описанных в этом руководстве, и вы можете анализировать результаты поиска и управлять ими, перенаправляя их в другие команды, такие как wc , sort и grep .

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

Хотите узнать, как найти файл в Linux? Что ж, сюрприз, сюрприз, вам понадобится команда find в Linux, чтобы просмотреть ваш каталог или файловую систему. Команда Linux find может рекурсивно фильтровать объекты, используя простой условный механизм, а если вы используете флаг -exec, вы также сможете сразу найти файл в Linux. и обработайте его, не используя другую команду.

Найти файлы Linux по имени или расширению

Введите find в командной строке, чтобы отследить конкретный файл по его имени или расширению. Если вы хотите найти файлы *.err в каталоге /home/username/ и во всех подкаталогах, попробуйте следующее: найти /home/username/ -name "*.err"

Типичный Linux Поиск Команды и синтаксис

Выражения команды

найти выглядят следующим образом:

найти параметры команды начало/путь выражение

Атрибут options управляет поведением и методом оптимизации процесса find. Атрибут starting/path определяет каталог верхнего уровня, в котором команда find в Linux начинает процесс фильтрации. Атрибут выражение управляет оценками, которые просматривают дерево каталогов для создания выходных данных.

Давайте разберем команду поиска Linux, где нам нужен не просто поиск файла Linux по имени:

найти -O3 -L /var/www/ -name "*.html"

Это включает оптимизацию верхнего уровня (-O3) и позволяет find переходить по символическим ссылкам (-L). Команда find в Linux ищет во всей иерархии каталогов в /var/www/ файлы с расширением .html на конце.

Основные примеры

<р>1. найти . -назовите этот файл.txt

Если вам нужно знать, как найти в Linux файл с именем thisfile.txt, он будет искать его в текущем и подкаталогах.

<р>2. найти /home -name *.jpg

Ищите все файлы .jpg в каталоге /home и под ним.

<р>3. найти . -тип f -пусто

Найдите пустой файл в текущем каталоге.

<р>4. найти /home -user randomperson-mtime 6 -iname ".db"

Поиск всех файлов .db (без учета регистра), которые были изменены за последние 6 дней пользователем с именем randomperson.

Параметры и оптимизация команды Найти для Linux

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

find может помочь Linux найти файл по имени. Команда Linux find совершенствует свой подход к фильтрации, чтобы оптимизировать производительность. Пользователь может найти файл в Linux, выбрав три этапа оптимизации-O1, -O2, и -O3. -O1 — это стандартная настройка, которая заставляет find фильтровать в соответствии с именем файла перед запуском любых других тестов.

-O2 выполняет фильтрацию по имени и типу файла, прежде чем перейти к более сложным фильтрам для поиска файла в Linux. Уровень -O3 переупорядочивает все тесты в соответствии с их относительной стоимостью и вероятностью успеха.

  • -O1 — (по умолчанию) сначала фильтруется по имени файла.
  • -O2 — сначала имя файла, затем тип файла
  • -O3 — разрешить поиску автоматически изменять порядок поиска в зависимости от эффективности использования ресурсов и вероятности успеха.
  • -maxdepth X — поиск в этом каталоге вместе со всеми подкаталогами до уровня X
  • -iname — поиск без учета регистра.
  • -not — выдавать только результаты, не соответствующие тестовому набору.
  • -type f — искать файлы
  • -type d — искать каталоги

Найти файлы по времени их изменения

Команда Linux find позволяет фильтровать иерархию каталогов на основе времени последнего изменения файла:

найти / -name "*jpg" -mtime 5

найти /home/randomuser/ -name "*jpg" -mtime 4

Первоначальная команда Linux find выводит список файлов во всей системе, которые заканчиваются символами jpg и которые были изменены за предшествующие 5 дней. Следующий фильтр отфильтровывает домашний каталог randomuser's на предмет файлов, имена которых заканчиваются на "conf" и которые были изменены за предыдущие 4 дня.

Используйте Grep для поиска файлов по содержимому

Команда find в Linux великолепна, но она может фильтровать дерево каталогов только по имени файла и метаданным. Для поиска файлов на основе того, что они содержат, вам понадобится такой инструмент, как grep. Взгляните:

найти . -type f -exec grep "forinstance" '<>' \; -печать

Это просматривает каждый объект в текущем дереве каталогов (.), который является файлом (-type f), а затем запускает grep «forinstance» для каждого совпадающего файла, а затем печатает их на экране (-print). Фигурные скобки (<>) — это заполнитель для тех результатов, которые соответствуют команде Linux find. Знак <> заключен в одинарные кавычки (‘), чтобы grep не получил искаженное имя файла. Команда -exec заканчивается точкой с запятой (;), которая также нуждается в escape-последовательности (\;), чтобы она не интерпретировалась оболочкой.

До того, как был реализован -exec, xargs использовался бы для создания того же типа вывода:

найти . тип f-print | xargs grep "для примера"

Как найти и обработать файлы с помощью команды Найти в Linux

Параметр -exec запускает команды для каждого объекта, который соответствует выражению find. Посмотрим, как это выглядит:

Это фильтрует все объекты в текущем дереве каталогов (.) для файлов с именем rc.conf и запускает команду chmod o+r для изменения прав доступа к файлам результатов, которые возвращает find.

Корневой каталог Linux — это место, где выполняются команды, запускаемые -exec. Используйте -execdir для выполнения нужной команды в каталоге, где находится совпадение, поскольку при определенных обстоятельствах это может быть более безопасным и повысить производительность.

Параметры -exec или -execdir будут продолжать работать сами по себе, но если вы хотите видеть подсказки перед тем, как они что-либо сделают, замените -exec -ok или -execdir для -okdir.

Как управлять файлами с помощью Plesk?

Допустим, у вас есть веб-сайт, готовый к работе на вашем ноутбуке или компьютере, и вы хотите использовать диспетчер файлов, чтобы загрузить его на сервер Plesk в Linux:

Как редактировать файлы в файловом менеджере

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

  • Редактор HTML или редактор типа "что видишь, то и получаешь". Это хороший вариант, поскольку он добавляет HTML-теги за вас. Если вы не очень хорошо разбираетесь в HTML, этот вариант может оказаться полезным.
  • Редактор кода. Когда вы открываете файлы HTML с помощью этого, вам будет представлен текст, в котором выделен синтаксис HTML. Если вам удобно добавлять HTML-теги самостоятельно, вам подойдет редактор кода.
  • Текстовый редактор. Файлы HTML открываются как обычный текст.

Возможно, ваш администратор Plesk уже настроил расширение Rich Editor, и в этом случае вы можете использовать его для редактирования HTML-файлов. Rich Editor работает по принципу "что видишь, то и получаешь", как и редактор кода, хотя он лучше оснащен такими функциями, как, например, проверка орфографии.

Вот как использовать диспетчер файлов для редактирования файла:

  1. Наведите курсор на файл, и соответствующая ему строка будет выделена.
  2. Откройте контекстное меню файла, щелкнув его.
  3. Нажмите «Редактировать в … редакторе» (это зависит от выбранного вами редактора).

Как изменить разрешения с помощью файлового менеджера

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

Для этого найдите элемент, для которого вы хотите ограничить доступ в Интернет, например:

  1. Наведите на него курсор и подождите, пока не появится выделение, как в предыдущем примере.
  2. Нажмите на файл, чтобы открыть его контекстное меню, и повторите то же самое в разделе "Изменить разрешения".
  3. Внесите изменения и нажмите "ОК". Если вы хотите узнать больше о том, как просматривать и изменять разрешения, см. раздел Настройка разрешений доступа к файлам и каталогам.

Подход File Manager по умолчанию заключается в изменении разрешений нерекурсивным образом, поэтому на вложенные файлы и каталоги не влияют измененные разрешения каталогов более высокого уровня, которым они принадлежат. В Plesk для Linux вы можете заставить Файловый менеджер изменять разрешения рекурсивным образом, предполагая, что ваш администратор Plesk настроил расширение Permissions Recursive и что вы понимаете восьмеричное представление прав доступа к файлам.

Чтобы включить рекурсивное редактирование прав доступа:

  1. Наведите курсор на каталог и дождитесь выделения.
  2. Нажмите, чтобы открыть его контекстное меню, а затем снова выберите Рекурсивный набор разрешений.
  3. Теперь вы можете редактировать их. «Разрешения для папки» говорят о каталоге более высокого уровня и любых связанных с ним подкаталогах. В данном случае «Разрешения на доступ к файлам» применяются к подфайлам.
  4. После внесения изменений в права доступа нажмите "ОК".

Поиск файлов в диспетчере файлов

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

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

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

Искомая команда — найти. Чтобы сделать понимание этой команды еще более заманчивым, как только вы ее узнаете, вы можете начать использовать ее в своих сценариях Bash. Это не только удобство, но и мощность.

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

Как использовать команду поиска

Когда я впервые увидел Linux в 1997 году, я не совсем понимал, как работает команда find; поэтому он никогда не работал так, как я ожидал. Это казалось простым; введите команду find FILENAME (где FILENAME — это имя файла), и команда должна была найти файл и сообщить об этом. Мало ли я знал, что в команде было что-то большее, чем это. Многое другое.

Если вы введете команду man find, вы увидите, что синтаксис команды find следующий:

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

Теперь посмотрим, как это работает.

Найти по имени

Давайте разберем эту основную команду, чтобы сделать ее максимально понятной. Самая упрощенная структура команды find должна включать путь к файлу, опцию и само имя файла. Вы можете подумать: «Если бы я знал путь к файлу, я бы уже знал, где его найти!». Ну, путь к файлу может быть корнем вашего диска; так что / будет законным путем. Ввод этого пути потребует больше времени для обработки, потому что он должен начинаться с нуля, но если вы не знаете, где находится файл, вы можете начать с него. Во имя эффективности всегда лучше иметь хотя бы представление, с чего начать поиск.

Следующий бит команды — опция. Как и в случае с большинством команд Linux, у вас есть ряд доступных опций. Тем не менее, мы начинаем с самого начала, так что давайте упростим задачу. Поскольку мы пытаемся найти файл по имени, мы будем использовать один из двух вариантов:

имя — с учетом регистра

iname — без учета регистра

Помните, Linux очень требователен к регистру, поэтому, если вы ищете файл с именем Linux.odt, следующая команда не даст результатов.

Однако, если вы измените команду с помощью параметра -iname, команда find найдет ваш файл независимо от регистра. Итак, новая команда выглядит так:

Найти по типу

f – обычный файл

l — символическая ссылка

c — символьные устройства

b – блокировать устройства

Теперь предположим, что вы хотите найти все блочные устройства (файл, который ссылается на устройство) в вашей системе. С помощью параметра -type мы можем сделать это следующим образом:

Приведенная выше команда приведет к довольно большому объему вывода (большая часть которого указывает на отказ в доступе), но будет содержать вывод, аналогичный следующему:

Вуаля! Блокировать устройства.

Тот же вариант можно использовать для поиска файлов конфигурации. Скажем, например, вы хотите найти все обычные файлы, которые заканчиваются расширением .conf. Эта команда будет выглядеть примерно так:

Приведенная выше команда просматривает всю структуру каталогов, чтобы найти все обычные файлы, оканчивающиеся на .conf. Если вы знаете, что большинство ваших конфигурационных файлов находятся в каталоге /etc, вы можете указать это так:

Приведенная выше команда выведет список всех ваших файлов .conf из каталога /etc (рис. 1).

Рисунок 1. Расположение всех файлов конфигурации в каталоге /etc.

Вывод результатов в файл

Одним очень удобным приемом является вывод результатов поиска в файл. Когда вы знаете, что вывод может быть обширным, или если вы хотите просмотреть результаты позже, это может быть невероятно полезным. Для этого мы будем использовать тот же пример, что и выше, и передать результаты в файл с именем conf_search. Эта новая команда будет выглядеть так: ​

Теперь у вас будет файл (conf_search), содержащий все результаты выполненной команды find.

Поиск файлов по размеру

Теперь мы подходим к моменту, когда команда find становится невероятно полезной. У меня были случаи, когда настольные компьютеры или серверы обнаруживали, что их диски загадочным образом заполнены. Чтобы быстро освободить место (или помочь найти проблему), вы можете использовать команду find для поиска файлов определенного размера. Скажем, например, вы хотите увеличить размер и найти файлы размером более 1000 МБ. Команда поиска может быть запущена с помощью параметра -size следующим образом:

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

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

b — блоки по 512 байт

Продолжайте учиться

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

Поделиться этой записью

Авторское право © 2022 The Linux Foundation®. Все права защищены.Linux Foundation зарегистрировала товарные знаки и использует товарные знаки. Список товарных знаков The Linux Foundation см. на нашей странице «Использование товарных знаков». Linux является зарегистрированным товарным знаком Линуса Торвальдса. Условия использования | Политика конфиденциальности | Устав | Антимонопольная политика | Политика хорошей репутации

В этом руководстве подробно описаны наиболее полезные команды grep для систем Linux/Unix.

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

  • Linux или UNIX-подобная система
  • Доступ к терминалу/командной строке
  • Пользователь с разрешениями на доступ к нужным файлам и каталогам

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

Что такое команда grep?

Grep — это аббревиатура, расшифровывающаяся как Global Regular Expression Print.

Grep — это инструмент командной строки Linux/Unix, используемый для поиска строки символов в указанном файле. Шаблон текстового поиска называется регулярным выражением. Когда он находит совпадение, он печатает строку с результатом. Команда grep удобна при поиске в больших файлах журналов.

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

Команда grep в своей основной форме состоит из трех частей. Первая часть начинается с grep, за которой следует искомый шаблон. После строки идет имя файла, в котором ищет grep.

Простейший синтаксис команды grep выглядит следующим образом:

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

Примечание. Grep чувствителен к регистру. Обязательно используйте правильный регистр при выполнении команд grep.

Чтобы найти файл

Чтобы напечатать любую строку из файла, содержащего определенный набор символов, в нашем случае phoenix в файле sample2, выполните команду:

Grep отобразит каждую строку, в которой есть совпадение со словом phoenix . При выполнении этой команды вы не получите точных совпадений. Вместо этого терминал печатает строки со словами, содержащими введенную вами строку символов. Вот пример:

Совет. Если шаблон поиска включает символы, отличные от буквенно-цифровых, используйте кавычки. Сюда входят пробелы или любой символ.

Поиск в нескольких файлах

Чтобы найти несколько файлов с помощью команды grep, вставьте имена файлов, которые вы хотите найти, разделив их пробелом.

В нашем случае команда grep для сопоставления слова phoenix в трех файлах sample , sample2 и sample3 выглядит следующим образом:

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

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

Совет: обратитесь к нашей статье Команды Xargs, чтобы узнать, как использовать xargs с grep для поиска строки в списке файлов.

Поиск во всех файлах в каталоге

Чтобы найти все файлы в текущем каталоге, используйте звездочку вместо имени файла в конце команды grep.

В этом примере мы используем nix в качестве критерия поиска:

Вывод показывает имя файла с nix и возвращает всю строку.

Найти только целые слова

Grep позволяет находить и печатать результаты только для целых слов. Чтобы найти слово phoenix во всех файлах в текущем каталоге, добавьте -w к команде grep.

Эта опция печатает только строки с полным совпадением слов и именами файлов, в которых они были найдены:

Если параметр -w опущен, grep отображает шаблон поиска, даже если он является подстрокой другого слова.

Если вы хотите найти несколько строк и шаблонов слов, ознакомьтесь с нашей статьей о том, как выполнить поиск нескольких строк, шаблонов или слов.

Игнорировать регистр при поиске Grep

Поскольку команды grep чувствительны к регистру, одним из наиболее полезных операторов для поиска grep является -i. Вместо того, чтобы печатать результаты только в нижнем регистре, терминал отображает результаты как в верхнем, так и в нижнем регистре. Вывод включает строки с записями смешанного регистра.

Пример этой команды:

Если мы используем оператор -i для поиска файлов phoenix в текущем каталоге, результат будет выглядеть следующим образом:

Искать в подкаталогах

Чтобы включить в поиск все подкаталоги, добавьте оператор -r к команде grep.

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

Обратный поиск grep

Вы можете использовать grep для вывода всех строк, которые не соответствуют определенному шаблону символов. Чтобы инвертировать поиск, добавьте -v к команде grep.

Чтобы исключить все строки, содержащие phoenix , введите:

Терминал печатает все строки, не содержащие слова, используемого в качестве критерия поиска. Используйте -i, чтобы игнорировать регистр, чтобы полностью исключить слово, используемое для этого поиска:

Показать строки, точно соответствующие строке поиска

Команда grep печатает целые строки, когда находит совпадение в файле. Чтобы напечатать только те строки, которые полностью соответствуют строке поиска, добавьте параметр -x.

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

Вот сравнение результатов без оператора -x и с ним в нашей команде grep:

Чтобы получить список имен совпадающих файлов

Иногда вам нужно только увидеть имена файлов, которые содержат слово или строку символов, и исключить фактические строки. Чтобы вывести только те имена файлов, которые соответствуют вашему запросу, используйте оператор -l:

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

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

Чтобы подсчитать количество совпадений

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

Используйте оператор -c, чтобы подсчитать количество совпадений:

Отображение количества строк до или после строки поиска

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

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

  • Используйте -A и количество строк для отображения после совпадения: grep -A 3 phoenix sample — эта команда печатает три строки после совпадения.
  • Используйте -B и количество строк для отображения перед совпадением: grep -B 2 phoenix sample — эта команда выводит две строки перед совпадением.
  • Используйте -C и несколько строк для отображения до и после совпадения: grep -C 2 phoenix sample — эта команда выводит две строки до и после совпадения.

Отображение номеров строк с совпадениями grep

Когда grep выводит результаты с большим количеством совпадений, удобно видеть номера строк. Добавьте оператор -n к любой команде grep, чтобы отобразить номера строк.

Мы будем искать Phoenix в текущем каталоге, покажем две строки до и после совпадений вместе с их номерами строк.

Ограничить вывод grep фиксированным количеством строк

Отдельные файлы, например файлы журналов, могут содержать множество совпадений с шаблонами поиска grep. Ограничьте количество строк в выводе grep, добавив в команду параметр -m и число.

В этом случае терминал распечатает первые два совпадения, найденные в файле примера.

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

Теперь вы знаете, как использовать команду grep в Linux/Unix.

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

Читайте также: