Справочник команд терминала для системного администрирования и расследований

11

Команда в терминале не удаляет и не копирует данные сама по себе. Она передаёт инструкции ядру через системные вызовы, и результат зависит от прав, файловой системы и текущего состояния дескрипторов. Понимание механики выполнения предотвращает случайную потерю журналов и ложные выводы при анализе инцидентов. https://seberd.ru/25671

Как ядро обрабатывает запросы на удаление файлов

Утилита find запускает обход каталогов. Программа последовательно сравнивает метаданные файлов с заданными критериями. Совпадение имени и времени модификации активирует флаг выполнения. Системный вызов unlink удаляет запись из каталога. Инод остаётся выделенным в таблице файловой системы до тех пор, пока какой-либо процесс удерживает открытый дескриптор.

Дисковое пространство не возвращается операционной системе. Логи продолжают писаться в удалённый файл. Аналитик теряет доступ к видимой структуре каталога, но данные сохраняются в памяти буферов ядра. Пространство освободится только после закрытия дескриптора или перезапуска службы. Ручной запуск команды без предварительной проверки стирает часть аудита.

Замена -exec на -print выводит список кандидатов. Администратор сверяет результаты с активными сервисами. Ротационные скрипты используют блокировки и сигналы SIGUSR1 для безопасного переключения потоков. Понимание связи между каталоговой записью и открытым дескриптором предотвращает случайную потерю записей.

Виртуальная файловая система ядра поддерживает эту связь до явного закрытия файла. Расследование требует проверки открытых хендлов перед любой операцией удаления.

Команда или действиеСистемный вызовПоведение ядраПрактическое ограничение
find ... -exec rm {} \;unlinkУдаляет ссылку в каталоге, инод жив пока открыт дескрипторСкрытые данные остаются в кеше записи до сброса на диск
find ... -deleteunlinkatПрямое удаление без вызова внешней утилитыНе работает с каталогами, содержащими скрытые файлы
logrotate с copytruncateopen, write, truncateКопирует данные, затем обнуляет оригиналПотеря записей возможна между копированием и усечением
systemctl restart serviceclose (внутри сервиса)Закрывает старые дескрипторы, сервис открывает новыеДескрипторы освобождаются только после полного перезапуска

Контроль процессов и сетевых соединений

Команда ps aux --sort=-%mem | head -n 10 читает виртуальную файловую систему /proc. Ядро формирует снимок состояния процессов в момент запроса. Сортировка по полю потребления памяти выделяет наиболее ресурсоёмкие задачи. Высокие значения часто указывают на растущие внутренние буферы или незакрытые соединения. Операция фиксирует один момент времени. Долгосрочный мониторинг требует непрерывного опроса состояния. Утилиты top и htop запрашивают /proc с заданным интервалом. Они отображают динамику изменения потребления ресурсов. Утилита ss -tulpn | grep <порт> обращается к подсистеме netlink напрямую.

Ядро возвращает структуру сокетов без промежуточного парсинга. Команда требует прав суперпользователя для сопоставления дескрипторов с идентификаторами процессов. Старые инструменты читали текстовые файлы в /proc/net/tcp.

Такой подход создавал задержки и пропускал быстрые изменения состояний. Фильтрация по номеру порта показывает слушающие службы и установленные соединения. Формат вывода зависит от версии ядра и конфигурации сетевого стека. Неверная интерпретация статуса приводит к ошибочным выводам об открытых портах.

Всегда проверяйте активные соединения дополнительными запросами к ядру. Сетевой фильтр пакетов обрабатывает трафик до передачи в пользовательское пространство. Различия между уровнями обработки объясняют расхождения в отчётах мониторинга.

ИнструментИсточник данных в ядреТребуемые праваТочность в реальном времени
netstat/proc/net/tcp, /proc/net/udpОбычный пользовательНизкая, парсит текстовые дампы
ssNetlink сокет SOCK_DIAGОбычный пользователь, root для PIDВысокая, прямое чтение структур ядра
ps/proc/[pid]/status, /proc/[pid]/statОбычный пользовательМоментальный снимок, не обновляется
lsofТаблица дескрипторов процесса, /procRoot для полных данныхЗависит от загрузки системы, сканирование медленное
strace -pptrace интерфейсRoot или CAP_SYS_PTRACEТочная трассировка, блокирует выполнение на каждый вызов

Анализ журналов и агрегация данных

Утилита journalctl -u nginx.service --since "2 hours ago" -p err запрашивает бинарный журнал. Служба journald индексирует записи по временным меткам, идентификаторам юнитов и уровням приоритета. Поисковые запросы выполняются быстрее чтения плоских текстовых файлов. Команда возвращает структурированные записи без ручного парсинга.

Сервисы, пишущие напрямую в /var/log, обходят этот индекс. Они требуют традиционных инструментов обработки текста. Конвейер awk '{print $1, $4, $7}' access.log | sort | uniq -c | sort -nr | head обрабатывает данные потоково. Утилита разбивает строки по пробелам. Она извлекает указанные колонки.

Сортировка группирует одинаковые последовательности. Подсчёт дубликатов показывает частоту событий. Операции не загружают файл в оперативную память целиком. Пайплайн ломается при использовании нестандартных разделителей. Кавычки или экранированные пробелы сбивают нумерацию колонок.

Настройка разделителя исправляет ошибку. Обработка больших массивов требует тестирования шаблона на выборке. Текстовые журналы хранят информацию в сыром виде. Бинарные форматы ускоряют поиск за счёт предварительной индексации. Выбор инструмента зависит от источника записей и требуемой скорости анализа. Понимание различий в хранении логов упрощает построение конвейеров фильтрации.

Этап конвейераКоманда или утилитаЗадачаВлияние на ресурсы
Разбор строкawk -FВыборка колонок по разделителюНизкая, потоковая обработка
ГруппировкаsortУпорядочивание для подсчётаСредняя, требует временных файлов при больших данных
Подсчётuniq -cАгрегация соседних дубликатовНизкая, работает только с отсортированным вводом
Ранжированиеsort -nrОбратная числовая сортировкаСредняя, держит результат в памяти до обрезки
Ограничение выводаhead -nВывод только верхних строкМинимальная, прекращает чтение после достижения лимита

Работа с блочными устройствами и кешем памяти

Команда dd if=/dev/zero of=/dev/sdX bs=4M status=progress выполняет поблочный ввод-вывод. Она записывает нули последовательно по всему устройству. Операция игнорирует структуры файловой системы. Она уничтожает таблицы разделов и заголовки восстановления. Контроллеры твердотельных накопителей используют выравнивание износа и резервные блоки.

Запись нулей в логический адрес не гарантирует физическое стирание ячеек. Слой трансляции перенаправляет данные в свежие блоки. Старая информация сохраняется до запуска сборки мусора. Безопасное стирание требует blkdiscard или аппаратных команд Secure Erase. Запись echo 3 > /proc/sys/vm/drop_caches запускает освобождение памяти ядра. Команда очищает кеш страниц, каталогов и инодов.

Операция освобождает временные буферы, но не исправляет утечки в приложениях. Производительность системы снижается на несколько секунд, пока ядро перестраивает кеш. Запуск на рабочих серверах вызывает задержки отклика. Архивация tar -czf backup_$(date +%F).tar.gz --exclude='cache' /app/data сжимает поток на лету. Исключения применяются относительно корня архива. Динамические имена файлов предотвращают перезапись.

Проверка содержимого требует запуска tar -tzf. Установка прав chmod 600 ~/.ssh/id_rsa ограничивает биты доступа владельцем. Демон SSH проверяет разрешения перед загрузкой ключей. Более широкие права вызывают отказ в использовании. Настройка защищает от локального перечисления, но не исправляет слабые алгоритмы генерации. Различия между блочным и файловым уровнями определяют последствия операций. Управление памятью ядра влияет на отклик системы. Понимание этих механизмов предотвращает необратимые изменения и ложные выводы.

Метод очистки или работы с хранилищемУровень воздействияПодходит для SSDГарантия физического удаления
dd if=/dev/zeroФайловая система / блочныйНетНет, данные мигрируют контроллером
blkdiscardКоманда TRIM / ATAДаДа, помечает ячейки для сборки мусора
fstrimФоновая оптимизация ФСДаЧастичная, зависит от поддержки контроллера
drop_cachesКеш страниц ядраНетНе применимо, работает только с ОЗУ
shredПосекторная перезаписьНетНет, SSD игнорирует точные адреса записи

Приоритеты проверки при расследовании

Начните с анализа открытых дескрипторов. Сопоставьте хендлы с активными процессами до остановки служб. Проверьте сетевые состояния прямыми запросами к ядру. Обрабатывайте логи потоковыми конвейерами для исключения переполнения памяти. Тестируйте разрушающие команды в режиме симуляции. Фиксируйте каждый шаг. Ядро сохраняет состояние до явного закрытия. Реконструкция зависит от сохранения этого состояния.

Используйте strace -p <PID> -f -o trace.log для перехвата системных вызовов зависших процессов. Утилита подключается через ptrace и записывает обращения к ядру. Каждый вызов блокирует выполнение. Производительность падает.

Применяйте инструмент на тестовых стендах или при отладке критических зависаний. Синхронизация каталогов rsync -avz --delete --dry-run src/ dest/ сравнивает метадаты. Флаг симуляции обязателен перед реальным запуском. Удаление файлов в приёмнике происходит при отсутствии аналогов в источнике. Неправильное направление аргументов стирает данные.

Проверка порядка параметров исключает потерю информации. Расследование требует чёткого понимания порядка операций. Ядро выполняет инструкции последовательно. Ошибка в аргументах приводит к непредсказуемым последствиям. Документируйте конфигурацию окружения. Фиксируйте версии утилит и параметры ядра. Воспроизведение сценария зависит от точного совпадения условий. Понимание механики системных вызовов превращает рутинные команды в инструменты точного контроля.

Оставьте комментарий