Поиск по текстовому файлу linux

Поиск в Linux с помощью команды find

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Общий синтаксис

путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <> \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

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

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

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

3. Несколько условий.

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

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

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

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

find / -type f -exec grep -i -H «content» <> \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

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

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

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

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm <> \;

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

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv <> new_name \;

find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 <> \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

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

Открываем на редактирование задания cron:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Источник

ИТ База знаний

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Серверные решения

Телефония

FreePBX и Asterisk

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

Корпоративные сети

Протоколы и стандарты

Рекурсивно найти слово в файлах и папках Linux

Великая сила grep

2 минуты чтения

Дистрибутив Linux, несмотря на версию и вид, имеет множество графических оболочек, которые позволяют искать файлы. Большинство из их них позволяют искать сами файлы, но, к сожалению, они редко позволяют искать по содержимому. А особенно рекурсивно. В статье покажем два способа того, как можно рекурсивно найти файлы, которые содержат ту или иную фразу. Поиск будет осуществлен по папкам и директориям внутри этих папок.

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

Найти фразу в файлах рекурсивно через консоль

Все просто. Открываем серверную консоль, подключившись по SSH. А далее, вводим команду:

Например, команда может выглядеть вот так:

Команда найдет и выведет все файлы, которые содержат фразу merionet в директории /home/user/merion и во всех директориях, внутри этой папки. Мы используем следующие ключи:

  • -i — игнорировать регистра текста (большие или маленькие буквы);
  • -R — рекурсивно искать файлы в сабдиректориях;
  • -I — показывать названия файлов, вместо их содержимого;

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

  • -n — показать номер строки, в которой находится фраза;
  • -w — показать место, где слово попадается;

Поиск слова через Midnight Commander

Так же, в консоли сервера, дайте команду:

Эта команда запустит Midnight Commander. Кстати, если он у вас не установлен, его можно просто установить через yum:

Открыв mc, во вкладке Command выберите Find File и заполните поисковую форму как показано ниже:

  • Start at: — директория, где нужно осуществлять поиск;
  • File name: — маска поиска. Например, искать только в файлах расширения txt будет — *.txt;
  • Content — сама фраза;

Нажимаем OK и получаем результат:

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

Источник

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

Способ 1: Текстовые редакторы с графическим интерфейсом

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

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

Щелкните по нему правой кнопкой мыши для вызова контекстного меню и откройте через установленный по умолчанию редактор или выберите пункт «Открыть в другом приложении».

После открытия файла через удобный редактор остается только отыскать раздел «Правка».

В нем присутствует опция «Найти», именно она и интересует нас сейчас. Чаще всего ее же можно вызвать и через стандартную комбинацию клавиш Ctrl + F.

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

Только что в качестве примера мы взяли стандартный текстовый редактор LibreOffice. Если в используемом дистрибутиве установлена другая программа или вы предпочитаете взаимодействовать с похожими аналогами, принцип выполнения поставленной задачи практически ничем не отличается от увиденного только что. При возникновении проблем с поиском раздела «Правка» попробуйте нажать комбинацию Ctrl + F, чтобы открыть строку поиска.

Способ 2: Редакторы конфигурационных файлов с GUI

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

  1. Для начала потребуется запустить консоль. Сделайте это через меню приложений или нажатием на горячую клавишу Ctrl + Alt + T.

Введите команду gedit /etc/ssh/sshd_config , где /etc/ssh/sshd_config замените на путь к необходимому объекту.

Активируйте команду нажатием на клавишу Enter и дождитесь отображения нового окна. Здесь разверните меню с параметрами.

Отыщите пункт «Найти» и кликните по нему.

Осталось только ввести содержимое в появившуюся строку и ознакомиться с полученными результатами, которые будут подсвечены оранжевым цветом.

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

Способ 3: Консольные редакторы

Существуют специальные консольные утилиты, выполняющие роль редакторов файлов. У них отсутствует собственный графический интерфейс, а все содержимое выводится прямо в «Терминале». Через них поиск текста тоже прекрасно осуществим, а на примере известного nano предлагаем остановиться в рамках этой статьи.

    Используйте команду nano + расположение файла , чтобы открыть его для произведения поиска или редактирования. Если вы присваиваете этой строке аргумент sudo, дополнительно придется ввести пароль root-доступа для успешной активации команды.

Обычно в таких редакторах присутствует описание кнопок или же все сведения находятся в официальных документациях. Если рассматривать конкретно nano, строка поиска вызывается путем нажатия сочетания Ctrl + W.

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

Курсор сразу же переместится на подходящую строку и вы сможете ознакомиться с ней.

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

Способ 4: Утилита grep

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

    В «Терминале» введите grep + содержание_для_поиска + путь_к_файлу , а затем нажмите Enter. Учитывайте, что при применении grep без опций следует указывать регистр вводимых символов.

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

Задействуйте команду grep c опцией -i, чтобы строка выглядела так: grep -i «port» /etc/ssh/sshd_config . В таком случае регистр учитываться не будет.

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

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

Помимо этой статьи, на сайте еще 12315 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Источник

Читайте также:  Надо ли при обновлении windows
Оцените статью