find
Что делает команда find в Linux
Команда find в Linux используется для поиска файлов и каталогов по множеству критериев: имени, типу, размеру, дате изменения, правам доступа и другим атрибутам. Она сканирует файловую систему рекурсивно, начиная с указанного каталога, и выполняет заданные действия с найденными файлами.
Основной синтаксис команды:
find [путь] [условия] [действия]
Например:
find /home/user -name "file.txt"
Эта команда ищет файл с именем file.txt в каталоге /home/user и всех его подкаталогах.
Основные параметры команды find в Linux
Поиск по имени файла (-name и -iname)
Для поиска по имени используется флаг -name. Если нужно игнорировать регистр букв — применяется -iname.
find /var/log -name "*.log"
Поиск всех лог-файлов в каталоге /var/log.
find /home -iname "readme.txt"
Поиск файла readme.txt без учёта регистра.
Поиск по типу файла (-type)
Команда find умеет различать типы объектов в файловой системе.
Наиболее часто используемые значения параметра -type:
f— обычный файлd— каталогl— символическая ссылкаc— символьное устройствоb— блочное устройство
Примеры:
find /etc -type d
Поиск всех каталогов в /etc.
find /dev -type b
Поиск блочных устройств в /dev.
Поиск по размеру файла (-size)
Параметр -size позволяет находить файлы по их размеру.
Используются суффиксы:
c— байтыk— килобайтыM— мегабайтыG— гигабайты
Примеры:
find /var -size +100M
Найти файлы больше 100 мегабайт.
find /tmp -size -500k
Найти файлы меньше 500 килобайт.
Знак + означает «больше», а - — «меньше». Если не указать знак, будет найден файл точно указанного размера.
Поиск по дате изменения (-mtime, -ctime, -atime)
Команда find в Linux позволяет искать файлы по времени изменения, создания или последнего доступа.
-mtime— по дате изменения содержимого-ctime— по дате изменения метаданных-atime— по дате последнего доступа
Примеры:
find /var/log -mtime -3
Найти файлы, изменённые менее 3 дней назад.
find /home -atime +10
Найти файлы, к которым не обращались более 10 дней.
-mtime вместе с -delete, чтобы автоматически удалять устаревшие файлы.Поиск по правам доступа (-perm)
Параметр -perm позволяет искать файлы с определёнными правами доступа.
find /usr/bin -perm 755
Поиск исполняемых файлов с правами rwxr-xr-x.
Можно использовать символы:
-— «как минимум эти права»/— «любые из этих прав»
Например:
find / -perm -002
Найти файлы, доступные на запись всем пользователям.
Поиск по владельцу (-user, -group)
Чтобы искать файлы, принадлежащие определённому пользователю или группе:
find /home -user alex
Ищет все файлы, принадлежащие пользователю alex.
find /data -group developers
Ищет файлы, принадлежащие группе developers.
Комбинированные условия (-and, -or, -not)
Команда find в Linux поддерживает логические операторы для комбинирования условий.
Примеры:
find /home -type f -and -name "*.py"
Ищет только файлы с расширением .py.
find /etc -type f -not -name "*.conf"
Ищет файлы, не имеющие расширения .conf.
find /var -name "*.log" -or -name "*.txt"
Поиск всех файлов с расширениями .log или .txt.
Выполнение действий над найденными файлами (-exec и -delete)
После поиска можно выполнить действие с каждым найденным файлом.
Параметр -exec
find /home -type f -name "*.tmp" -exec rm {} \;
Удаляет все временные файлы (.tmp).
Фигурные скобки {} заменяются на имя найденного файла, а \; завершает команду.
Параметр -delete
Более короткий способ удаления:
find /tmp -type f -name "*.log" -delete
Удаляет все лог-файлы в /tmp.
-delete сначала, добавив -print, чтобы убедиться, что удаляются нужные файлы.Ограничение глубины поиска (-maxdepth и -mindepth)
Иногда нужно ограничить глубину рекурсивного поиска:
find /home -maxdepth 1 -type f
Ищет только файлы в самом каталоге /home, без захода в подкаталоги.
find /home -mindepth 2 -type d
Ищет каталоги, начиная с уровня ниже второго.
Практические примеры использования команды find в Linux
- Найти и удалить старые бэкапы:
find /backups -name "*.tar.gz" -mtime +30 -delete
- Найти все исполняемые файлы размером более 10 МБ:
find /usr/bin -type f -size +10M -perm /111
- Найти все пустые каталоги:
find /home -type d -empty
- Найти файлы с определёнными правами и изменить их:
find /var/www -type f -perm 777 -exec chmod 644 {} \;
Эти примеры показывают, насколько мощной и гибкой является команда find в Linux. Она незаменима при администрировании систем, автоматизации задач и очистке файловой системы.
Полезные советы при работе с командой find в Linux
/home, /var) вместо относительных, чтобы избежать ошибок при запуске из скриптов.find с xargs: find /var/log -name "*.log" | xargs grep "error" Такой способ быстрее обрабатывает большое количество файлов.Команда find в Linux — мощный инструмент для поиска и управления файлами. Она поддерживает десятки параметров, логические условия и позволяет выполнять действия с найденными объектами. Умение эффективно использовать find делает работу администратора или инженера гораздо продуктивнее.