обучение урокам линукс

Цель урока: Научиться использовать команду find на профессиональном уровне. Мы выйдем за рамки простого поиска по имени и освоим поиск по множеству критериев: размеру, дате изменения, правам доступа, владельцу. Самое главное - мы научимся не просто находить файлы, а немедленно выполнять над ними нужные действия, что является ключом к мощной автоматизации.

Часть 1: Теория. Почему find - это не ls

В предыдущих уроках мы использовали команду ls для просмотра содержимого каталогов. ls - это как оглавление в книге: вы видите, что есть на этой "странице" (в этом каталоге).

Команда find - это совершенно другой инструмент. Это как поисковая система по всей "библиотеке" (вашей файловой системе). Она позволяет задавать очень сложные и точные запросы для поиска нужных "книг" (файлов и каталогов), где бы они ни находились.

Базовый синтаксис find выглядит так:

find [ГДЕ_ИСКАТЬ] [ПО_КАКИМ_КРИТЕРИЯМ] [ЧТО_ДЕЛАТЬ]
  • [ГДЕ_ИСКАТЬ]: Стартовый каталог, откуда find начнет свой рекурсивный поиск (т.е. он будет заходить во все вложенные папки). Например, . (текущий каталог) или / (вся система).

  • [ПО_КАКИМ_КРИТЕРИЯМ]: Набор условий для поиска. Это самая интересная часть.

  • [ЧТО_ДЕЛАТЬ]: Действие, которое нужно выполнить над каждым найденным файлом. По умолчанию - просто напечатать его имя на экран.

Часть 2: Практика. Поиск по различным критериям

Давайте на практических примерах разберем самые полезные критерии поиска. Для экспериментов мы будем работать в нашем каталоге ~/scripts.

1. Поиск по имени (-name) и типу (-type)

Это самый базовый вид поиска.

  • -name "шаблон": Искать по точному имени или шаблону (где * - любые символы). Важно: шаблон лучше всегда брать в кавычки, чтобы его не интерпретировала сама оболочка bash.

  • -iname "шаблон": То же самое, но без учета регистра ( insensitive).

  • -type ТИП: Искать объекты определенного типа. Самые частые типы: f - обычный file (файл), d - directory (каталог).

Примеры:

# Найти все скрипты с расширением .sh в текущем каталоге
find . -type f -name "*.sh"
find команда
# Найти все каталоги с именем 'backups' во всей системе # (этот поиск может занять время и выдать ошибки доступа, что нормально) find / -type d -name "backups"
поиск бекапов

2. Поиск по времени модификации (-mtime)

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

  • -mtime N: Файлы, измененные ровно N*24 часа назад.

  • -mtime -N: Файлы, измененные менее чем N дней назад (т.е. за последние N дней).

  • -mtime +N: Файлы, измененные более чем N дней назад (т.е. старее N дней).

Пример:

# Найти все файлы в домашней директории (~), измененные за последние 2 дня
find ~ -type f -mtime -2

3. Поиск по размеру (-size)

Помогает находить слишком большие или пустые файлы.

  • -size Nс: Файлы размером ровно N байт (characters).

  • -size +Nk: Файлы размером больше N килобайт.

  • -size -NM: Файлы размером меньше N Мегабайт.

  • -size +NG: Файлы размером больше N Гигабайт.

Пример:

# Найти все файлы в каталоге /var/log размером больше 10 Мегабайт
find /var/log -type f -size +10M

4. Поиск по правам доступа (-perm) и владельцу (-user)

Критически важно для аудита безопасности.

  • -perm ПРАВА: Искать файлы с конкретными правами (например, 644).

  • -user ИМЯ_ПОЛЬЗОВАТЕЛЯ: Искать файлы, принадлежащие указанному пользователю.

Пример:

# Найти все файлы в /var/www, принадлежащие пользователю www-data
find /var/www -user www-data

# Найти все файлы в текущем каталоге, у которых есть права на исполнение для всех
find . -type f -perm 777

Сила find раскрывается, когда вы начинаете комбинировать условия. По умолчанию, если вы пишете несколько критериев подряд, они объединяются логическим "И" (-and).

Пример: Найти все файлы с расширением .log, размером больше 1Мб, которые не менялись более 7 дней, в каталоге /var/log.

find /var/log -type f -name "*.log" -size +1M -mtime +7

Часть 4: Практика. Выполнение команд над найденными файлами (-exec)

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

Синтаксис:

... -exec КОМАНДА {} \;
  • -exec: Ключевое слово, которое говорит: "для каждого найденного файла выполни следующую команду".

  • КОМАНДА: Любая команда Linux, например, rmchmodcp.

  • {}: Это специальный "заполнитель" (placeholder). find автоматически подставит на это место имя каждого найденного файла.

  • \;: Обязательная точка с запятой в конце, которая говорит find, где заканчивается команда для -exec. Обратный слэш \ нужен, чтобы оболочка bash не "перехватила" точку с запятой, а передала ее именно команде find.

Пример 1: Удаление временных файлов
Найдем и удалим все файлы с расширением .tmp в домашнем каталоге.

find ~ -type f -name "*.tmp" -exec rm -f {} \;

Как это работает:

  1. find находит файл, например, /root/temp_file.tmp.

  2. Он видит -exec и формирует команду, подставляя имя файла вместо {}. Получается: rm -f /root/temp_file.tmp.

  3. Выполняет эту команду.

  4. Продолжает поиск следующего файла.

Пример 2: Изменение прав
Найдем все скрипты (.sh) в текущей папке, у которых нет прав на исполнение, и добавим их.

# ! - это логическое "НЕ"
find . -type f -name "*.sh" ! -perm /a=x -exec chmod +x {} \;

Здесь мы добавили условие ! -perm /a=x - "у которых НЕТ прав на исполнение (x) для всех (a)".

Итоги урока

  • Что мы освоили:

    • Принцип работы find как поисковой системы для файлов.

    • Как искать файлы по множеству критериев: имени (-name), типу (-type), времени (-mtime), размеру (-size), правам (-perm).

    • Как комбинировать критерии для создания точных поисковых запросов.

    • Как использовать мощнейшую опцию -exec для выполнения команд над найденными файлами, используя {} и \;.

На следующем, 17-м уроке, мы продолжим наше погружение в обработку данных и освоим grep на профессиональном уровне. Мы научимся использовать регулярные выражения для поиска не просто слов, а сложных текстовых шаблонов, что является абсолютно необходимым навыком для анализа системных логов.

Перейти к просмотру - УРОК №17.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)