Вопрос или проблема
Я хотел бы перебрать имена сервисов systemd, но не могу найти опцию, чтобы выводить только имена сервисов. Я пытался использовать cut, но безуспешно.
._. systemctl list-units | cut -f 1 -d=
UNIT LOAD ACTIVE SUB DESCRIPTION
...
thermald.service loaded active running Thermal Daemon Service
...
Как я могу это сделать?
- Для справки,
systemctl list-units --quiet --plain | cut -f1 -d\
работает лучше. - Без
--plain
символ предупреждения в первом столбце сбивает с толку подсчет столбцов с помощьюcut
. --quiet
подавляет легенду внизу.
.
Ответ или решение
Чтобы вывести только имена сервисов systemd и пройти по ним в цикле, необходимо воспользоваться командой systemctl
в сочетании с утилитами текстовой обработки. Рассмотрим подробное и пошаговое решение этой задачи.
Шаг 1: Вывод списка юнитов systemd
Команда systemctl list-units
по умолчанию выводит полный список юнитов с множеством информации ( например, статус и описание). Чтобы извлечь только интересующие нас имена сервисов, следует использовать следующие ключи:
--type=service
– выводит только сервисы, исключая таймеры, сокеты и другие юниты.--all
– включает в список и неактивные и активные сервисы, если это необходимо.--quiet
– подавляет легенду внизу таблицы.--no-pager
– отключает использование прокрутки через пейджер.
Шаг 2: Извлечение только имен сервисов
После получения списка юнитов необходимо извлечь только первый столбец, содержащий имена сервисов:
systemctl list-units --type=service --quiet --no-pager --all | awk '{print $1}'
В этом примере используется awk
, чтобы извлечь первый столбец. Это более надежный метод по сравнению с cut
, особенно в ситуациях, где пробелы или другие символы могут усложнить разделение данных.
Шаг 3: Проход по именам сервисов в цикле
Используйте команду for
для перебора полученного списка сервисов:
for service in $(systemctl list-units --type=service --quiet --no-pager --all | awk '{print $1}'); do
echo "Processing service: $service"
# добавьте любой код, который необходимо выполнить с каждым сервисом
done
Оптимизация и бизнес-контекст
Данный подход обеспечивает чистый и надежный способ работы со списком сервисов.
- Эффективность: Использование
awk
гарантирует точное извлечение данных, минимизируя вероятность ошибок, которые могут возникнуть из-за нестандартных символов. - Универсальность: Скрипт остается гибким и может использоваться в различных сценариях администрирования.
- Автоматизация: Данное решение можно легко интегрировать в более сложные скрипты или инструменты управления системой, что особенно важно в задачах DevOps.
Таким образом, представленный метод не только решает заданную задачу, но и предоставляет прочную основу для автоматизации и управления сервисами в системах Linux с использованием systemd.