Консольный поиск в Linux: grep, find

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

Начнем с простого. Я создал файл findmi , давайте его найдем. Собственно для этого есть мощная одноименная утилита find :

root@root:~# find / -name 'findmi'
/tmp/findmi'

root@root:~# find / -name 'findmi.*'
/tmp/findmi.txt
/tmp/findmi.log

Как вы догадались тут можно использовать разные шаблоны и т.д. Давайте разберемся немного подробней :

find [папка] [параметры] критерий шаблон 

  • -name — поиск файлов по имени
  • -perm — поиск файлов в Linux по режиму доступа
  • -user — поиск файлов по владельцу
  • -group — поиск по группе
  • -mtime — поиск по времени модификации файла
  • -atime — поиск файлов по дате последнего чтения
  • -nogroup — поиск файлов, не принадлежащих ни одной группе
  • -nouser — поиск файлов без владельцев
  • -newer — найти файлы новее чем указанный
  • -size — поиск файлов в Linux по их размеру

Показать все файлы в текущей директории :

find /tmp

Не учитывать регистр при поиске по имени:

find /tmp -iname '*.txt'

Найти файлы, которые не соответствуют шаблону:

root@root:~# find /tmp -name "findmi.*" -not -name "*.txt"
/tmp/findmi.log

Найти все файлы размером 50 мегабайт:

find / -size 50M

От пятидесяти до ста мегабайт:

find / -size +50M -size -100M 

Это конечно не все возможности. Но их должно хватить для большинства ситуаций. Для более глубокого разбора утилиты вы можете почитать man .

Текстовый поиск.

Конечно все круто, а что делать если нам надо найти ошибкe в логах ? Или другу текстовую информацию в файле ? Конечно у нас есть просто мега утилита grep ))))

grep -rin --include '*.log' 'Failed password' /

Игнорировать регистрозависимые слова -i :

root@root:/home# grep -i test /home/test.txt
Test
test
TEST
TEST!!!

Две разные строки внутри файла :

root@root:/home# grep 'test\|not' /home/test.txt
test
test not

Точное совпадение слова -w :

root@root:/home# grep -w Test /home/test.txt
Test

-n — отображать номер строки в файле;

root@root:/home# grep -w -n Test /home/test.txt
1:Test

Поиск в выводе команды:

ip a | grep inet6
inet6 ::1/128 scope host

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

root@root:/home# grep --include=\*.{txt,log} -rwn '/home' -e "Test"
/home/test.txt:1:Test
  • — include=\*.{txt,log} Любые файлы с разрешением txt,log .
  • -r Рекурсивный поиск .
  • -e Шаблон для поиска .

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