Ты сидишь за сервером, в консоли, и нужно найти тот чертов файл. Или кучку файлов. Или наоборот — удалить все говно, которое засрало диски. Вот тут на помощь приходит команда find. Если ты ещё не юзал её по-настоящему, ты просто тратишь время и пальцы.

find — не просто команда, это швейцарский нож в руках того, кто понимает, как копать глубже в файловой системе. Да, есть GUI и всякие ребята с милыми интерфейсами, но мы-то с тобой не про цветочки, а про результат. Ты хочешь искать, фильтровать, удалять, менять права — и делать это быстро, без цирка.

Что такое find и почему он такой крутой

Короче, find — это твой штурмовой отряд по поиску в каталоге и подкаталогах. Хочешь — ищи файлы по имени, по типу, по размеру, по дате, по владельцу, по разрешениям — всем, чем хочешь. А хочешь — делай с найденным файлом что угодно: удаляй, меняй владельца, запускай скрипты.

Команда примерно такая:

find [параметры] [путь для поиска] [условия] [действия]

Пример — ищем все .js файлы в /var/www и лезем по ссылкам:

find -L /var/www -name "*.js" 

Флаг -L — заставляет find следовать символическим ссылкам. Без него ты можешь пропустить кучу нужного мусора.

Поиск по имени — классика жанра

Чтобы найти конкретный файл, не мудрствуя лукаво:

find /home/www-php -type f -name file.docx

Если хочешь забить на регистр, используй -iname. Вот пример:

find /home/www-php -type f -iname file.docx

Поиск по расширению — когда тебе нужны все логи, а не эти дурацкие tmp-файлы

Найти все .log.gz в /var/log/nginx:

find /var/log/nginx -type f -name '*.log.gz' 

Если не хочешь эти .log.gz, а хочешь все остальное — добавь -not:

find /var/log/nginx -type f -not -name '*.log.gz' 

Кавычки обязательны, иначе shell съест звездочку раньше, чем find увидит.

По типу файлов — обычные файлы, каталоги, ссылки, устройства

В Linux всё — файл, но разного типа. Вот какие типы тебе пригодятся:

  • f — обычный файл
  • d — каталог
  • l — символическая ссылка
  • c, b — устройства (char/block)
  • p — FIFO
  • s — сокет

Например, чтобы найти все каталоги в текущей папке:

find . -type d

Вот классика для веб-сайта — меняем права:

find /var/www-php -type d -exec chmod 0755 {} \;
find /var/www-php -type f -exec chmod 0644 {} \;

По размеру — если надо найти файлы весом от и до

Размер можно указывать с суффиксами: c — байты, k — килобайты, M — мегабайты, G — гигабайты.

Найти файлы ровно в 1024 байта в /tmp:

find /tmp -type f -size 1024c

Меньше 1MB:

find . -type f -size -1M

Больше 1MB:

find . -type f -size +1M

Диапазон между 1 и 2 мегабайтами — тупо и эффективно:

find . -type f -size +1M -size -2M

По дате — будь то последняя модификация или доступ

Варианты простые:

  • -mtime N — файл изменён ровно N дней назад
  • -mtime +N — больше N дней назад
  • -mtime -N — меньше N дней назад

Пример: найти конфиги в /etc/dovecot/conf.d, изменённые 5 дней назад:

find /etc/dovecot/conf.d -name "*.conf" -mtime 5

Или найти файлы, старше 30 дней:

find /home -mtime +30 -daystart

По разрешениям — кто может читать, писать, выполнять

Флаг -perm помогает искать файлы по точным или частичным правам.

Например, все файлы с правами 644 в /var/www/html:

find /var/www/html -perm 644

Или все файлы с любым правом на чтение у кого угодно:

find . -perm /444

Требуем, чтобы владелец и группа имели чтение и запись, остальные — только чтение:

find . -perm -664

По владельцу и группе

Чтобы найти всё, что принадлежит юзеру www-php:

find / -user www-php

Если нужно сменить владельца файлов от www-data на nginx:

find / -user www-data -type f -exec chown nginx {} \;

И удаление — как не лажануться

Удалить все .temp файлы из /var/log можно так:

find /var/log/ -name '*.temp' -delete

Но тут не шутки — сначала убедись, что ты не собираешься сжечь свой сервер дотла. Лучше сначала выведи список:

find /var/log/ -name '*.temp' 

И только если уверен — добавляй -delete. Не тупи.

Итог

find — это не просто команда, а твоя палка-выручалка. Если ты хочешь понять, где твой файл, кто его сменил, сколько он весит, и даже тихо избавиться от ненужного хлама — учись не просто запускать find, а заставлять её работать за тебя.

И да, никаких тебе графических приблуд — когда ты в Linux, то ты в окопе, а не в уютном офисе с кофе и скроллом мышки.