FIND: Поиск и продвинутый поиск файлов по критериям

FIND: Поиск и продвинутый поиск файлов по критериям

Этот набор продвинутых команд делает одним из самых ценных инструментов для аудита безопасности и криминалистического анализа в Linux!

1. Основной синтаксис

find path criteria

  • path: Директория, с которой начинается поиск (например, / для всей системы, или . для текущей директории).
  • criteria: Параметры поиска (например, −name, −user, −size).

2. Поиск по имени (−name)

Опция −name позволяет искать файлы по их имени. Для поиска по шаблону (а не по точному совпадению) необходимо использовать подстановочные знаки (wildcards).

Команда
Что ищет
Примечание
find / −name hosts
Файлы с точным именем «hosts».
find / −name hosts∗
Файлы, начинающиеся с «hosts».
hosts и hosts.allow
find / −name ∗hosts∗
Файлы, содержащие «hosts» в любом месте.
pam_rhosts.so

Лучшая практика: При использовании wildcards (как ∗) в find их следует заключать в двойные кавычки («hosts«), чтобы командная оболочка не пыталась интерпретировать их до передачи команде find.

3. Фильтрация ошибок

При поиске по всей системе (find /) обычный пользователь столкнется с множеством сообщений Permission denied (из-за отсутствия прав доступа к системным директориям, таким как /root).

  • Перенаправление ошибок: Чтобы скрыть эти сообщения и видеть только результаты поиска, используй перенаправление потока ошибок:
    find / criteria 2> /dev/null
    
    • 2> перенаправляет второй поток (stderr, поток ошибок).
    • /dev/null — это «черная дыра» Linux, которая просто отбрасывает весь перенаправленный в нее вывод.

4. Поиск по другим критериям (с sudo)

Для системного поиска часто требуются права root (sudo):

Критерий
Команда
Назначение
Пользователь
sudo find / −user linda
Найти все файлы, принадлежащие пользователю linda.
Размер
sudo find / −size +2G
Найти файлы с размером больше (+) 2 Гигабайт (G).
Права
sudo find / −perm /4000
Найти файлы, у которых установлен бит Set User ID (SUID).

5. Выполнение команды над результатами (−exec)

Опция −exec позволяет выполнить произвольную команду над каждым файлом, найденным find. Это очень мощный инструмент.

find ... −exec command {}
  • command: Команда, которую нужно выполнить (например, cp, chmod, rm).
  • {} (фигурные скобки): В этом месте будет подставлено имя каждого найденного файла.
  • (обратный слэш и точка с запятой): Обязательный синтаксис, который служит маркером конца команды, выполняемой через -exec. Обратный слэш (\) экранирует точку с запятой от интерпретации командной оболочкой (shell).

Пример: Найти все файлы пользователя linda и скопировать их в /root/linda:

sudo find / −user linda −exec cp {} /root/linda/

6. Командный разделитель Shell ( ; )

Не путай с простой точкой с запятой (;):

  • ; (без \): Используется командной оболочкой для разделения нескольких команд в одной строке (например, mkdir dir; find …).

Продвинутые возможности find

1. Фильтрация по типу (−type)

Опция −type позволяет ограничить поиск, чтобы избежать нежелательного вывода (например, директорий) при поиске файлов по размеру или другим характеристикам.

  • −type f: Найти только обычные файлы ($\text{F}$ile).
  • −type d: Найти только директории ($\text{D}$irectory).

Пример: Найти только файлы, размер которых больше (+) 100 мегабайт (M):

sudo find / −type f −size +100M

2. Множественные −exec

Ты можешь выполнять несколько команд −exec в одном запросе find. Команды выполняются последовательно для каждого найденного файла.

Пример: Найти файлы в /etc с текстом «student» и затем скопировать их:

sudo find /etc −exec grep −l student {}  −exec cp {} /root/linda/
  • Первый -exec использует grep −l (list files) для фильтрации (находит только те файлы, где есть «student»).
  • Второй -exec копирует найденный файл.

3. Использование xargs (альтернатива −exec)

xargs — это мощная команда, которая считывает элементы из стандартного ввода (обычно из pipe) и использует их как аргументы для другой команды. Она часто более эффективна, чем -exec.

find path criteria ∣ xargs command

Пример: Найти все файлы в /etc и передать их grep для поиска IP-адреса:

find /etc −type f 2> /dev/null ∣ xargs grep "127.0.0.1"

Перенаправление ошибок с pipe

При использовании pipe (∣) важно помнить, что каждый сегмент работает независимо:

  • Если find выдает ошибки (Permission denied), нужно перенаправить его поток ошибок:
    find ... 2> /dev/null ∣ xargs ...
    
  • Перенаправление 2> /dev/null после xargs не сработает, так как pipe связывает только поток стандартного вывода (stdout) первой команды со стандартным вводом (stdin) второй.

4. Форматированный вывод (−printf)

Опция −printf позволяет точно контролировать формат вывода найденных файлов. Это полезно для создания отчетов или для дальнейшей обработки данных.

Формат
Значение
%s
Размер файла в байтах.
%p
Имя файла (путь).
\n
Символ новой строки.

Пример: Вывести размер и имя файла, отсортировать по размеру:

find /etc −name ∗conf −printf "%s, %p\\n" ∣ sort −rn
  • ∣ sort −rn: Перенаправляет отформатированный вывод в команду sort для обратной (−r) числовой (−n) сортировки, помещая самый большой файл в начало списка.

Данный материал был переведён с английского в рамках курса Linux Foundation Certified System Administrator (LFCS): Unit 1

Комментарии

Комментариев пока нет. Почему бы ’Вам не начать обсуждение?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *