Этот набор продвинутых команд делает одним из самых ценных инструментов для аудита безопасности и криминалистического анализа в 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

