- Консольный поиск в Linux: grep, find
- Текстовый поиск.
- Урок 9. Поиск файлов по имени и содержимому командами grep и locate
- grep — поиск в Linux, примеры
- 1. Немного про grep
- 2. Базовый синтаксис команды grep
- 3. Как использовать grep для поиска в файлах
- 4. Рекурсивное использование grep
- 5. Использование grep для поиска только целых слов
- 6. Как искать несколько различных слов
- 7. Подсчет количества строк, содержащих вхождение
- 8. Инвертный поиск
- 9. Как выводить только имена файлов в которых есть включение слова
- 10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях
- 11. Вывод строк перед и после найденного вхождения
- Как выполнить поиск файлов и папок в Linux
- Поиск файла по имени при помощи утилиты locate
- Поиск в Linux при помощи утилиты find
- Поиск файла по имени
- Поиск файла по дате
- Поиск файла по размеру
- Поиск папки
- Поиск текста в Linux при помощи утилиты grep
Консольный поиск в Linux: grep, find
Часто бывает нам нужно что то найти, но к сожалению или к счастью Линукс это ни Винда. Тут не льзя нажать одну кнопку и найти все что нужно, особенно если вы работает из консоли. В этой статье мы как раз и поговорим о поиске из консоли в *nix системах.
Начнем с простого. Я создал файл findmi , давайте его найдем. Собственно для этого есть мощная одноименная утилита find :
Как вы догадались тут можно использовать разные шаблоны и т.д. Давайте разберемся немного подробней :
find [папка] [параметры] критерий шаблон
- -name — поиск файлов по имени
- -perm — поиск файлов в Linux по режиму доступа
- -user — поиск файлов по владельцу
- -group — поиск по группе
- -mtime — поиск по времени модификации файла
- -atime — поиск файлов по дате последнего чтения
- -nogroup — поиск файлов, не принадлежащих ни одной группе
- -nouser — поиск файлов без владельцев
- -newer — найти файлы новее чем указанный
- -size — поиск файлов в Linux по их размеру
Показать все файлы в текущей директории :
Не учитывать регистр при поиске по имени:
Найти файлы, которые не соответствуют шаблону:
Найти все файлы размером 50 мегабайт:
От пятидесяти до ста мегабайт:
Это конечно не все возможности. Но их должно хватить для большинства ситуаций. Для более глубокого разбора утилиты вы можете почитать man .
Текстовый поиск.
Конечно все круто, а что делать если нам надо найти ошибкe в логах ? Или другу текстовую информацию в файле ? Конечно у нас есть просто мега утилита grep ))))
Игнорировать регистрозависимые слова -i :
Две разные строки внутри файла :
Точное совпадение слова -w :
-n — отображать номер строки в файле;
Поиск в выводе команды:
Поиск в файлах по маске :
- —— include=\*. Любые файлы с разрешением txt,log .
- -r Рекурсивный поиск .
- -e Шаблон для поиска .
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Урок 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 ищет только в текущем каталоге! То есть вложенные каталоги не учитываются.
Чтобы учесть и вложенные подкаталоги необходимо использовать опцию -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 ) — инвертированный поиск, то есть будут отображаться только те записи, где искомое слово отсутствует.
Источник
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 после найденного вхождения используйте команду:
Источник
Как выполнить поиск файлов и папок в Linux
В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.
Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.
Поиск файла по имени при помощи утилиты locate
Чтобы выполнить просто поиск файла по имени в Linux логичнее использовать команду locate — за счет заранее подготовленной базы она быстро выдаст нужный результат:
Если же вы получили сообщение о том, что команда не найдена, возможно её нужно установить. Для Debian-based дистрибутивов (Ubuntu, Mint) установить её можно командой:
# apt-get install mlocate
Пользователям RedHat, CentOS и Fedora стоит выполнить
# yum install mlocate
После установки нужно создать/обновить базу данных — файл, содержащий в себе «снимок» файловой системы, благодаря которому locate работает так быстро:
Т.е. вместо того, чтобы каждый раз проходиться по всей файловой системе, locate доверяет updatedb создать файл, содержащий в себе все имена и пути файловой системы, и выполняет поиск в нем. Важно поддерживать его актуальность, иначе вы можете случайно найти уже давно удаленные файлы, или не найти новые. Поэтому updatedb при инсталляции «вешается» на CRON и выполняется автоматически — вы можете в этом убедиться, посмотрев на файлы заданий CRON.
Поиск в Linux при помощи утилиты find
Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:
find [path. ] [expression]
Поиск файла по имени
Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:
# find / -name myfilename
Учтите, что в данном случае поиск будет идти по имени файла в точности соответствующему заданному. Чтобы сымитировать поведение команды locate для find следует ввести:
# find / -name «*part_of_name*»
«*» означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:
Поиск файла по дате
Вот пример того, как можно выполнить поиск в Linux файла по дате:
# find /home -mtime -5
Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.
Поиск файла по размеру
А так, например, можно выполнит поиск файлов по размеру:
# find /home -size +1G
Данная команды выведет все файлы из каталога /home, имеющие размер более одного гигабайта. Очень удобно для поиска больших файлов в linux
Поиск папки
На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните
# find / -type d -name «*mysql*»
Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:
- b — блочное устройство
- c — символьное устройство
- d — папка (дирректория)
- p — именнованный канал
- f — обычный файл
- l — символическая ссылка
- s — сокет
- D — дверь (только для Solaris)
Подробнее о различных параметрах поиска find вы можете почитать, введя команду
Поиск текста в Linux при помощи утилиты grep
Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php. ) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.
Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести
# grep -lri root /etc/*
Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt». Вы поняли
Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите
# grep -lri ^root /etc/*
Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии
Источник