Часто бывает нам нужно что то найти, но к сожалению или к счастью Линукс это ни Винда. Тут не льзя нажать одну кнопку и найти все что нужно, особенно если вы работает из консоли. В этой статье мы как раз и поговорим о поиске из консоли в *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 Шаблон для поиска .