Сортировка сервисов в Linux

1

У меня есть несколько серверов Linux, на которых запущены разные сервисы. Когда я бегу service --status-allЯ получаю пару экранов вывода. Я думал, что я буду умным и передам это sortи посмотрите в группе, какие службы запущены, не запущены или неизвестны. Я выполнил команду, но она только отсортировала [ ? ] записи наверху, и все [ - ] а также [ + ] Все записи объединены в один беспорядок!

Команда, которую я использовал, была service --status-all | sort, Есть ли лучший способ также сортировать знаки плюс и минус?

Это специально для коробки Debian, запускается только из командной строки

Canadian Luke
источник

Ответы:

2

Похоже, что service --status-all пишет [ + ] а также [ - ] результаты в стандартный вывод, но [ ? ] результаты к stderr. Поэтому использовать sort чтобы отсортировать их все, вам нужно объединить потоки stdout и stderr следующим образом:

service --status-all 2>&1 | sort

На сортировку влияет значение LC_COLLATE, который по умолчанию совпадает с вашим LANG установка. Если вы не хотите менять значение LC_COLLATE для всех ваших приложений, но вы хотите, чтобы этот список был отсортирован по +, - а также ?, затем используйте эту команду вместо:

service --status-all 2>&1 | LC_COLLATE=C sort

Установить LC_COLLATE для всех ваших приложений, поместите это в свой ~/.profile, ~/.bash_profileили любой другой скрипт для установки вашей среды при входе в систему:

export LC_COLLATE=C
garyjohn
источник
Только что попробовал, он вообще не сортировал вывод :(
Canadian Luke
Я проверил его на своей системе Ubuntu 10.04 перед тем, как опубликовать, и он сначала отсортировал все +, затем -, затем -? Если это не работает для вас, это может быть ваша настройка LC_COLLATE. Мой "С". Я просто попытался установить его в "en_US.UTF-8", и тогда он тоже не сортировался для меня, так что это должно быть. Попробуйте выполнить LC_COLLATE=C, а затем попробуйте снова отсортировать.
garyjohn
Добавлен вывод в мой вопрос (слишком долго для комментария)
Canadian Luke
Вы не экспортировали LC_COLLATE. Я забыл упомянуть эту часть.
garyjohn
ОК, это работает. Я не думаю, что я должен был сделать это раньше
Canadian Luke