25 примеров использования утилиты find
Краткое описание find
Утилита find позволяет искать по:
- имени
- символическим ссылкам
- дате
- размеру
- типу: файл, каталог, символическая ссылка, соккет и т.п.
- имени пользователя и группы
- правам доступа
- любой комбинации вышеперечисленного и многому другому
Если файл был найден, то мы можем сделать следующее:
- просмотреть или отредактировать
- сохранить
- удалить или переименовать
- сменить права доступа
- любое другое действие
Немного примеров:
Простой поиск
1. Поиск всех обычных файлов
$ find Symfony -type f
Symfony/web/.htaccess
Symfony/web/app.php
Symfony/web/app_dev.php
Symfony/web/robots.txt
...
2. Поиск всех каталогов
$ find Symfony -type d
Symfony/
Symfony/web
Symfony/web/bundles
Symfony/web/bundles/webprofiler
...
3. Поиск по имени файла или каталога
$ find Symfony -name '*config*';
Symfony/app/config
Symfony/app/config/config_prod.yml
Symfony/app/config/config.yml
...
4. Поиск по имени (регистронезависимый)
$ find Symfony -iname '*config*';
...
Symfony/.../Loader/ConfigurationLoader.php
Symfony/.../ConfigurationResource.php
...
Symfony/app/config
Symfony/app/config/config_prod.yml
Symfony/app/config/config.yml
...
Поиск на основании размера
5. Найти все файлы, размер которых 300MB
$ find . -size 300M
6. Найти все файлы, размер которых больше 300MB
$ find . -size +300M
7. Найти все файлы, размер которых меньше 300MBкаталоги
$ find . -empty
Поиск по дате
GNU/Linux хранит последнюю дату следующих операций:
Операция | Значение | Опции find |
---|---|---|
access | чтение содержимого файла | -atime, -amin |
modification | изменение контента файла | -mtime, -mmin |
change of status | смена имени файла или атрибутов (права доступа, владелец, ...) | -ctime, -cmin |
Чтоб узнать даты файла можно использовать команду stat:
$ stat index.php
...
Access: 2016-06-02 22:53:22.813885684 -0500
Modify: 2016-05-08 12:12:12.971073193 -0500
Change: 2016-05-08 12:12:12.971073193 -0500
10. Найти файлы с датой доступа менее 15 дней назад
$ find . -atime -15
11. Найти модифицированные файлы более 7 дней назад
$ find . -mtime +7
12. Найти измененные файлы в промежутке от 2 до 6 минут назад
$ find . -cmin +2 -cmin -6
Поиск основанный на имени пользователя или группы
13. Найти файлы пользователя sedlav
$ find . -user sedlav -type f
14. Найти файлы, которые относятся к группе flossblog
$ find . -group flossblog -type f
15. Найти файлы, где владелец имет uid между 500 и 1000 (исключая 500 и 1000)
$ find . -uid +500 -uid -1000 -type f
Иногда требуется найти все файлы, например, если у нас есть
доказательства какого-то необычного поведения на нашем сервере или
рабочей станции, то можно запустить поиск всех файлов, которые не
принадлежат ни одному пользователю или группе.
16. Найти все файлы, которые не принадлежат ни одному пользователю
$ find . -nouser
17. Найти все файлы, которые не принадлежат ни одной группе
$ find . -nogroup
Поиск на основании прав доступа
find позволяет искать файлы, которые может читать (-readable), писать
(-writable) или запускать (-executable) текущий пользователь или файлы,
которые имеют определенные права
18. Найти все файлы, которые может читать текущий пользователь
$ find . -readable
19. Найти все файлы, которые может записывать текущий пользователь
$ find . -writable
20. Найти все файлы, которые может запускать текущий пользователь
$ find . -executable
Поиск файлов с определенными правами доступа
-perm PMODE
- PMODE может быть числовым или символьным
- PMODE может иметь префикс / или -
- Если PMODE не имеет префикса / или -, тогда права файла должны точно
соответствовать PMODE - Если PMODE имеет префикс -, то права файла должны содержать PMODE
- Если PMODE имеет префикс /, то права файла должны содержать любой из
битов указанных в PMODE (символьные права не допустимы)
Права | Числовое обозначение | Символьное обозначение |
---|---|---|
Чтение | 4 | r |
Запись | 2 | w |
Запуск | 1 | x |
Примеры:
21. Найти все файлы, владелец и группа которых имеют права на чтение и запись, а остальные могут только читать
$ find -perm 664
22. Найти все файлы, владелец и группа которых имеют права на чтение и запись, а остальные могут только читать
Примечание: - перед правами указывает на то, что будут найдены так же
все файлы с правами: 777, 666, 776
$ find . -perm -664
23. Найти все файлы, которые может модифицировать (записывать) любой пользователь
$ find . -perm /222
Расширенный поиск
24. Поиск на основе регулярных выражений по каталогам на 1 уровень ниже
Найти все каталоги одним уровнем ниже каталога project (не рекурсивный
поиск), которые не пусты, не оканчиваются на цифру, old backups, bkp или
содержат слова backup, copy, new с последующим одинм из символов -_. .
$ PATTERN='.*/((.*([0-9]|old|ba?c?ku?ps?))|(..*)|(copy|new|backup|back|)[-_.].*)$';
$ find project -maxdepth 1 -mindepth 1 -regextype posix-egrep ! -iregex $PATTERN ! -empty -type d
25. Комбинируем find, xargs и grep
Это очень удобный пример для сложного поиска. Пример, найдем слово ireg
во всех php файлах в project:
$ find project -name '*.php' -type f -print0 | xargs -0 grep -l ireg