Команда find в Linux — одно из наиболее мощных и часто используемых утилит в Unix-подобных операционных системах. С её помощью можно не только быстро находить файлы и каталоги по множеству критериев (имя, владелец, группа, права доступа, дата изменения, размер и т.д.), но и выполнять над ними различные действия. Ниже мы рассмотрим 35+ практических примеров, которые помогут вам освоить основные и более продвинутые приёмы работы с find.
Введение в команду find
Команда find даёт возможность искать файлы и директории, опираясь на различные параметры. Синтаксис выглядит следующим образом:
find [путь] [условия поиска] [действия]
- [путь] – один или несколько каталогов, в которых будет идти поиск. Если путь не указан, по умолчанию поиск происходит в текущем каталоге (. ).
- [условия поиска] – критерии (например, имя файла, права, владелец, диапазон дат, размер и т.д.).
- [действия] – что делать с найденными объектами (вывести на экран, выполнить другую команду, удалить и т.д.).
В зависимости от поставленной задачи можно комбинировать несколько критериев и действий. Далее рассмотрим примеры, сгруппированные по темам: поиск по имени, по правам доступа, по владельцам/группам, по дате и времени изменения, а также по размеру.
Поиск по имени (Часть I)
Довольно часто приходится искать файлы и директории по названию или шаблону. Вот несколько базовых примеров.
Поиск файлов в текущем каталоге по точному имени
Допустим, нужно найти файл с именем zomro.txt в текущем каталоге:
find . -name zomro.txt
- . – указывает на текущий каталог.
- -name zomro.txt – ищем только те файлы и каталоги, имя которых точно совпадает с zomro.txt.
В результате выведется путь к найденному файлу, например:
./zomro.txt
Если файл не найден, команда не выведет никаких результатов.
Поиск файлов в указанном каталоге
Чтобы найти файл zomro.txt во всём каталоге /home, используем:
find /home -name zomro.txt
/home – начальный путь. Поиск пройдёт по всей глубине вложенных директорий внутри /home.
Поиск, игнорируя регистр (параметр -iname)
Если не важен регистр букв (например, нужно найти zomro.txt, но не исключать Zomro.TXT или TECMIT.txt):
find /home -iname zomro.txt
- -iname – поиск, не учитывая регистр символов.
Поиск директорий по имени
Чтобы искать только директории с названием Zomro:
find / -type d -name Zomro
- -type d – указывает, что надо искать только директории (directories).
Поиск PHP-файлов по точному имени
Нередко возникает задача искать файлы определённого языка программирования, например, PHP:
find . -type f -name zomro.php
- -type f – ищем только файлы (files).
Эта команда найдёт файл zomro.php в текущем каталоге (и всех вложенных).
Поиск всех PHP-файлов в каталоге
Если нужно отыскать все PHP-файлы:
find . -type f -name "*.php"
- *.php – стандартный шаблон (mask) для поиска всех файлов, оканчивающихся на .php.
Поиск по правам доступа (Часть II)
Часто бывает нужно искать файлы или каталоги с конкретными правами (или наоборот, без конкретных прав). Это полезно при аудите безопасности, настройке серверов и т.п.
Поиск файлов с правами 777
Права 777 означают, что все (владелец, группа и остальные пользователи) могут читать, записывать и выполнять файл. Для поиска таких файлов в текущем каталоге:
find . -type f -perm 0777 -print
- -perm 0777 – точное совпадение прав доступа.
Поиск файлов без прав 777
Чтобы найти все файлы, у которых не установлены права 777:
find / -type f ! -perm 777
- ! – логическое отрицание; выражение ! -perm 777 означает «не имеет прав 777».
Поиск файлов с установленным SGID и правами 644
SGID (Set Group ID) позволяет запускать файл или заходить в директорию с правами группы владельца. Если нужно найти файлы с SGID-битом и правами 644:
find / -perm 2644
- 2 в первой цифре 2644 указывает на SGID-бит.
- 644 – стандартные права: владелец может читать и писать, группа и остальные – только читать.
Поиск файлов со Sticky-битом (Sticky Bit) и правами 551
Sticky-бит чаще используется для директорий (например, /tmp), чтобы файлы внутри могли удалять только их владельцы. Для поиска файлов с Sticky-битом и правами 551:
find / -perm 1551
- 1 в первой позиции говорит о Sticky-бите.
Поиск файлов с SUID (Set User ID)
SUID-бит позволяет запускать файл с привилегиями владельца (часто используется у системных команд типа passwd). Чтобы найти все такие файлы:
find / -perm /u=s
- /u=s – указывает, что должен быть установлен бит SUID у владельца (user).
Поиск файлов с SGID
Команда для поиска всех файлов, у которых установлен SGID-бит:
find / -perm /g=s
- /g=s – SGID-бит у группы (group).
Поиск файлов только для чтения (Read-Only)
Чтобы найти все файлы, у которых установлен флаг чтения для владельца (u=r):
find / -perm /u=r
Это может понадобиться, чтобы проверить файлы, недоступные для записи владельцу.
Поиск исполняемых файлов (Executable)
Чтобы найти все исполняемые файлы (т.е. такие, у которых установлен хотя бы один бит выполнения – для владельца, группы или всех):
find / -perm /a=x
- /a=x – указывает на исполнение (eXecute) для всех (all).
Одновременный поиск и изменение прав
Нередко после поиска требуется выполнить какое-то действие. Например, найти все файлы с правами 777 и сразу установить им права 644:
find / -type f -perm 0777 -print -exec chmod 644 {} \;
- -exec chmod 644 {} \; – для каждого найденного объекта выполняется команда chmod 644, где {} – подстановка имени файла, \; – конец команды -exec.
- Флаг -print выведет на экран пути к каждому найденному файлу перед изменением прав.
Поиск директорий с правами 777 и изменение прав на 755
Аналогично, но для каталогов:
find / -type d -perm 777 -print -exec chmod 755 {} \;
- -type d – ищем именно директории.
Рассмотрев ключевые аспекты поиска по имени, правам доступа и владельцам файлов, мы заложили прочную основу для эффективного использования команды find. Эти базовые приёмы позволят быстрее ориентироваться в системе и находить нужные объекты, исходя из самых распространённых критериев. Теперь, когда вы уверенно применяете поиск по фундаментальным параметрам, настало время перейти к более сложным и тонким сценариям работы с find следующей статье.