- grep — поиск в Linux, примеры
- 1. Немного про grep
- 2. Базовый синтаксис команды grep
- 3. Как использовать grep для поиска в файлах
- 4. Рекурсивное использование grep
- 5. Использование grep для поиска только целых слов
- 6. Как искать несколько различных слов
- 7. Подсчет количества строк, содержащих вхождение
- 8. Инвертный поиск
- 9. Как выводить только имена файлов в которых есть включение слова
- 10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях
- 11. Вывод строк перед и после найденного вхождения
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Рекурсивно найти слово в файлах и папках Linux
- Найти фразу в файлах рекурсивно через консоль
- Поиск слова через Midnight Commander
- Поиск в Linux с помощью команды find
- Общий синтаксис
- Описание опций
- Примеры использования find
- Поиск файла по имени
- Поиск по дате
- По типу
- Поиск по правам доступа
- Поиск файла по содержимому
- С сортировкой по дате модификации
- Лимит на количество выводимых результатов
- Поиск с действием (exec)
- Чистка по расписанию
grep — поиск в Linux, примеры
1. Немного про grep
Команда grep (global regular expression print) остается одной из наиболее универсальных команд в окружении командной строки Linux. Это происходит потому что grep является чрезвычайно мощной утилитой которая дает пользователям возможность сортировать ввод на основе сложных правил, тем самым делая ее популярным связующим звеном в конвейере команд. Grep в основном используется для поиска текста как в данных поступающих на стандартный вход, так и в указанных файлах на предмет строк содержащих указанные слова или подстроки.
2. Базовый синтаксис команды grep
Ниже представлены примеры использования grep с базовым синтаксисом:
3. Как использовать grep для поиска в файлах
Попробуем найти пользователя «vasya» в файле passwd. Для поиска в файле /etc/passwd информации о пользователе «vasya» необходимо использовать следующую команду:
Также мы можем попросить grep осуществлять поиск игнорируя регистр букв, то есть не делая различия между большими и маленькими буквами. Для этого используется параметр -i, как показано ниже:
4. Рекурсивное использование grep
Если у вас есть большое количество текстовых файлов в ряде директорий и поддиректорий, к примеру, конфигурационных файлов apache в /etc/apache2 и требуется найти файл где содержится определенный текст, то стоит использовать параметр -r чтобы осуществить рекурсивный поиск. То есть поиску будет осуществлен по всем файлам в иерархии директорий:
Также можно использовать этот параметр в верхнем регистре. То есть можно писать -R. Разница в том что при использовании -r не происходит обработка символических ссылок, а при использовании -R — происходит. Пример использования:
/etc/apache2/sites-available/debian-help.ru: ServerName debian-help.ru /etc/apache2/sites-available/debian-help.ru: ServerAlias www.debian-help.ru
Как можно видеть результат состоит из имени файла, где была найдена строка и самой строки. Включение в вывод имен файлов можно с легкостью подавить с помощью параметра -h, как показано ниже:
ServerName debian-help.ru ServerAlias www.debian-help.ru
5. Использование grep для поиска только целых слов
Когда вы ищите qwe, grep выберет все вхождения данного сочетания, к примеру, qwerty, qwe123, 345qwerty и множество других комбинаций. Вы можете указать, чтобы grep выбирал только те строки, которые содержат точное включение в виде целого слова. Для этого используйте параметр -w:
6. Как искать несколько различных слов
Для поиска двух или более различных слов вы можете использовать команду egrep следующим образом:
Либо вариант с просто grep:
7. Подсчет количества строк, содержащих вхождение
grep может сообщать сколько строк содержат указанное сочетание. Для этого воспользуйтесь параметром -c (count):
В дополнение, можно использовать параметр -n чтобы заставить grep выводить номера строк в файле, в которых было найдено включение:
8. Инвертный поиск
grep позволяет осуществлять поиск наоборот, то есть будут выведены все строки, кроме имеющих вхождение указанного слова и для этого используется параметр -v:
Можно исключить что-либо из вывода поиска применив конвейер:
9. Как выводить только имена файлов в которых есть включение слова
Для вывода только имен файлов нужно использовать параметр -l, к примеру, так:
10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях
Если вам нужно осуществить поиск слова в любых формах во всех файлах в этой директории и всех содержащихся в ней тоже, то используйте сочетание описанных выше параметров:
11. Вывод строк перед и после найденного вхождения
Для вывода нескольких строк перед вхождением используется параметры -A, а после вождения -B.
К примеру, чтобы вывести 5 строк перед и 10 после найденного вхождения используйте команду:
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Рекурсивно найти слово в файлах и папках Linux
Великая сила grep
2 минуты чтения
Дистрибутив Linux, несмотря на версию и вид, имеет множество графических оболочек, которые позволяют искать файлы. Большинство из их них позволяют искать сами файлы, но, к сожалению, они редко позволяют искать по содержимому. А особенно рекурсивно. В статье покажем два способа того, как можно рекурсивно найти файлы, которые содержат ту или иную фразу. Поиск будет осуществлен по папкам и директориям внутри этих папок.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Найти фразу в файлах рекурсивно через консоль
Все просто. Открываем серверную консоль, подключившись по 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 с помощью команды find
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Общий синтаксис
— путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».
— набор правил, по которым выполнять поиск.
* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Опция | Описание |
---|---|
-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 |
Показать найденное. | |
-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 системах он может располагаться в разных местах.
Источник