opened image

Практические примеры использования команды find в Linux - Часть 1

 

 

Команда 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 следующей статье.