Команды Linux и навыки работы с оболочкой
find: Поиск Linux, который делает все
find — самая опасная команда на рабочем сервере, и именно поэтому она заслуживает мастерства. Он перечисляет, фильтрует и выполняет в одном выражении, и каждый классический случай '/var here be Dragons' восходит к предварительному просмотру, который кто-то пропустил. Привычки механические: сначала пройтись с помощью -print или -ls, выполнить пакетную обработку с помощью -exec ... +, передать через -print0 в xargs -0 и рассматривать -delete как решение второго прохода, а не как первый черновик.
Главное
- Фильтруйте метаданные, а не только имя: -type f, -mtime +30, -size +100M и -perm -o+w находят нечетные файлы, которые пропускают соглашения об именах и отчеты о возрасте.
- Предварительный просмотр каждого деструктивного запроса: сначала найдите /var/www/uploads -name 'core.*' -ls, замените -ls на -delete только после того, как вы действительно прочтете список; предварительный просмотр — это проверка безопасности, а не предложение.
- -exec cmd {} + группирует файлы в несколько вызовов и превосходит \; формируются на больших деревьях; тот же синтаксис позволяет «обработать каждый соответствующий файл в одном процессе» без ошибки «слишком длинный список аргументов».
- Нулевой вывод по умолчанию: find . -name '*.old' -print0 | xargs -0 rm -v; простые каналы в xargs — это известный пример потери данных в тот день, когда имя файла содержит пробел.
- -xdev и -maxDP сохраняют честность: они не позволяют find следить за монтированием и снимками, что спасает как время выполнения, так и ваши предположения об «этом каталоге».
- Временные окна являются точными, если их точно задать: -mmin -1440 для последних 24 часов, -newermt '2026-01-01' для периода с определенной даты, и помните -xtime означает 'n полных 24-часовых периодов назад', прежде чем цитировать его в заявке.
- Обрезайте намеренно: найдите . -path '*/node_modules' -prune -o -name '*.js' -print пропускает один каталог, который в противном случае перевешивает остальную часть дерева по размеру и времени.
- Ожидайте ненулевых выходов в нечитаемых каталогах; Строки stderr, такие как «Отказано в разрешении», представляют собой пропущенные файлы, а не данные, поэтому сценарии либо допускают статус завершения find, либо проверяют его явно, вместо того, чтобы предполагать чистый обход.
Заметка из практики
Наша худшая история find-delete началась с шаблона -name без кавычек, который вторая оболочка расширила до трех слов перед find. Правило с тех пор простое: -сначала печатать, всегда цитировать, а -delete никогда не используется в команде при первом запуске.
Частые вопросы
Моя находка нашла файлы, но нижестоящая команда ничего не сделала. Почему?
Почти всегда цитирование или пустой ввод: шаблон был расширен оболочкой до того, как find его увидел, или xargs ничего не получил. Цитируйте шаблоны и каждый раз соединяйте -print0 с xargs -0.
-удалить или rm после находки?
-удаление происходит прямо, быстро и беспощадно; его нельзя смешивать с -exec в одном выражении. Сначала запустите соответствующий -print и прочитайте его; в этом вся дисциплина.
Почему в системных каталогах обнаруживаются ошибки разрешений на печать?
Компоненты, которые вы не можете считывать ошибки печати в stderr и сделать вывод ненулевым; фильтруйте с помощью 2>/dev/null для интерактивного удобства и никогда не интерпретируйте эти ошибки как отсутствие файлов.
Опять разница между -mtime и -ctime?
-mtime — изменение контента, -ctime — изменение метаданных (разрешения, переименование, количество жестких ссылок); chown или ход сдвигают ctime, не затрагивая mtime, что сбивает с толку ровно один отчет в квартал.
Как мы берём на себя команды linux и навыки работы с оболочкой
Вам не обязательно становиться экспертом в команды linux и навыки работы с оболочкой: Команды и сценарии сценариев, которые решают, управляет ли администратор сервером или борется с ним: поиск, преобразование, передача и контроль текста и процессов с помощью инструментов, которые есть в каждой базовой установке. Именно для этого и существует наша услуга Безопасность серверов Linux и Администрирование серверов — настройка, усиление защиты, мониторинг и живой человек на связи днём и ночью.