Как я могу попросить journalctl показать записи для всех юнитов, кроме одного?

Вопрос или проблема

journalctl -u ssh выводит все записи, связанные с юнитом ssh. Но как мне получить все записи, не связанные с юнитом ssh? Варианты, которые не работают: journalctl -u '!ssh'; journalctl '!_SYSTEMD_UNIT=ssh'; journalctl '_SYSTEMD_UNIT!=ssh'. Документация не утверждает, что это возможно, но я все еще надеюсь. 😉

Ответ или решение

Чтобы просмотреть записи системного журнала с использованием journalctl, исключая записи, связанные с определённой единицей (например, с ssh), необходимо использовать подходы, которые не подкрепляются стандартными флагами. Ваша задача усложняется тем, что journalctl не предоставляет прямой возможности фильтровать записи по принципу "всё, кроме". Тем не менее, это можно сделать с помощью других средств и методов.

Способы исключения единиц из вывода journalctl

  1. Фильтрация через grep:
    Вы можете воспользоваться утилитой командной строки grep для фильтрации вывода journalctl. Вот команда, которая позволит вам вывести все записи, за исключением связанных с ssh:

    journalctl | grep -v 'ssh'

    В данном случае -v говорит grep исключить все строки, содержащие слово ssh. Однако имейте в виду, что такой подход не идеален, так как он не учитывает уникальные идентификаторы служебных единиц, а просто отсекает все строки с вхождением ssh, что может привести к потере некоторой информации.

  2. Использование journalctl с фильтрацией системных единиц:
    Другая, более точная команда заключается в использовании -t (tag) вместе с возможностью указать конкретные идентификаторы для других единиц. Это потребует знания о доступных единицах:

    journalctl -t [другие_единицы]

    Этот метод не исключает ssh, но позволяет явно задать, какие единицы вы хотите включить в вывод.

  3. Создание кастомного скрипта:
    Если вышеуказанные методы не дают желаемого результата, можно создать bash-скрипт, который будет использовать journalctl, объединять вывод, а затем исключать ненужные записи. Пример такого скрипта:

    #!/bin/bash
    
    journalctl --no-pager | grep -v 'ssh'

    Сохраняя этот скрипт, вы можете запускать его каждый раз, когда вам нужно исключить записи ssh из вывода.

Заключение

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

Для поддержания эффективности этой работы всегда следите за обновлениями документации systemd и journalctl, так как новые функции могут быть добавлены в будущем.

Оцените материал
Добавить комментарий

Капча загружается...