Как просмотреть запущенные службы в Linux: Полное руководство для всех систем инициализации

2025-02-12

Введение

Службы Linux — это фоновые процессы, которые работают непрерывно для выполнения системных задач, таких как управление сетями, обработка входа пользователей или работа веб-серверов. Эти службы можно управлять с помощью различных инструментов, в зависимости от используемого дистрибутива Linux и системы инициализации.

Знание того, как просматривать запущенные службы, имеет важное значение для системных администраторов и разработчиков. Это помогает в:

  • Устранении неполадок — Проверка, работает ли критически важная служба или она вышла из строя.
  • Мониторинге производительности — Определение ресурсоемких служб.
  • Аудите безопасности — Обеспечение того, чтобы активными были только необходимые службы.

Использование systemctl (для систем на базе Systemd)

Большинство современных дистрибутивов Linux, включая Ubuntu (16.04+), CentOS (7+), Fedora и Debian (8+), используют systemd в качестве системы инициализации. Команда systemctl является основным инструментом для управления и просмотра служб в этих системах.

Проверка состояния одной службы

Чтобы проверить, работает ли конкретная служба, используйте:

systemctl status <service-name>

Например, чтобы проверить, работает ли веб-сервер nginx:

systemctl status nginx

Вывод покажет, активна ли служба (active (running)), неактивна или вышла из строя, а также логи для отладки.

Просмотр всех активных служб

Чтобы просмотреть все запущенные службы, используйте:

systemctl list-units --type=service --state=running

Эта команда отображает таблицу всех текущих запущенных служб вместе с их состоянием.

Просмотр всех служб (включая неактивные)

Если вы хотите увидеть все службы, независимо от того, работают они или нет:

systemctl list-units --type=service

Это будет включать службы, которые активны, неактивны, вышли из строя или находятся в других состояниях.

Фильтрация служб по состоянию

Вы можете фильтровать службы по их состоянию, используя:

systemctl list-units --type=service --state=failed

Это выведет только вышедшие из строя службы, что может быть полезно для устранения неполадок.

Просмотр служб, включенных при загрузке

Чтобы проверить, какие службы настроены на автоматический запуск при загрузке:

systemctl list-unit-files --type=service | grep enabled

Пример вывода

Типичный вывод команды systemctl list-units --type=service --state=running может выглядеть так:

UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
cron.service                loaded active running Regular background program processing daemon
networking.service          loaded active running Raise network interfaces
ssh.service                 loaded active running OpenBSD Secure Shell server
systemd-logind.service      loaded active running Login Service

Резюме

  • Используйте systemctl status <service>, чтобы проверить состояние одной службы.
  • Используйте systemctl list-units --type=service --state=running, чтобы просмотреть активные службы.
  • Используйте systemctl list-units --type=service, чтобы увидеть все службы.
  • Используйте systemctl list-unit-files --type=service, чтобы просмотреть службы, включенные при загрузке.

Использование ps и grep для запущенных процессов

Если вы хотите просмотреть запущенные службы, не полагаясь на systemctl или другие инструменты управления службами, вы можете использовать ps (статус процесса) вместе с grep, чтобы найти конкретные процессы.

Этот метод полезен, когда:

  • Вы работаете на минимальной системе Linux, в которой отсутствуют команды systemctl или service.
  • Вы хотите проверить, работает ли конкретный процесс, независимо от системы инициализации.

Просмотр всех запущенных процессов

Команда ps aux отображает все запущенные процессы в системе:

ps aux

Это создаст обширный список всех запущенных процессов, включая их идентификаторы процессов (PID), использование CPU, использование памяти и имена команд.

Поиск конкретной службы

Чтобы проверить, работает ли определенная служба, используйте ps aux | grep <service-name>:

ps aux | grep nginx

Это выведет строки, содержащие "nginx", показывая, работает ли он. Вывод может выглядеть так:

root      1034  0.0  0.3  49536  3412 ?        Ss   12:34   0:00 nginx: master process /usr/sbin/nginx
www-data  1035  0.0  0.2  49536  2824 ?        S    12:34   0:00 nginx: worker process
user      2045  0.0  0.0  14856   900 pts/0    S+   12:35   0:00 grep --color=auto nginx

Здесь:

  • Первые две строки указывают на то, что служба nginx работает.
  • Последняя строка (grep --color=auto nginx) — это сама команда grep. Вы можете исключить ее, используя:
ps aux | grep nginx | grep -v grep

Отображение процессов в иерархическом формате

Для более структурированного представления используйте:

ps fax

Это покажет древовидную структуру запущенных процессов, что облегчает определение, какие службы работают и какие у них дочерние процессы.

Поиск служб по порту

Если вы подозреваете, что служба работает на определенном порту, но не уверены в названии службы, используйте:

netstat -tulnp | grep :80

или, если netstat недоступен:

ss -tulnp | grep :80

Это выведет процесс, использующий порт 80 (обычно используемый веб-серверами, такими как Nginx или Apache).

Резюме

  • Используйте ps aux, чтобы просмотреть все запущенные процессы.
  • Используйте ps aux | grep <service-name>, чтобы проверить конкретную службу.
  • Используйте ps fax для древовидного представления процессов.
  • Используйте netstat -tulnp или ss -tulnp, чтобы найти службы, работающие на определенных портах.
Как просмотреть запущенные службы в Linux

Часто задаваемые вопросы (FAQ)

1. Как проверить, работает ли служба в Linux?

Вы можете использовать различные методы в зависимости от вашего дистрибутива Linux:

  • Для систем на базе systemd:
    systemctl status <service-name>
    
  • Для систем на базе SysVinit:
    service <service-name> status
    
  • Используя ps и grep:
    ps aux | grep <service-name>
    

2. Как просмотреть все запущенные службы?

  • Для систем на базе systemd:
    systemctl list-units --type=service --state=running
    
  • Для систем на базе SysVinit:
    service --status-all
    
  • Используя команду ps:
    ps aux
    

3. Как я могу проверить, запускается ли служба при загрузке?

  • Для systemd:
    systemctl is-enabled <service-name>
    
  • Для SysVinit (системы на базе RHEL):
    chkconfig --list <service-name>
    

4. Как перезапустить службу?

  • Для систем на базе systemd:
    sudo systemctl restart <service-name>
    
  • Для систем на базе SysVinit:
    sudo service <service-name> restart
    

5. Как остановить или отключить службу?

  • Чтобы временно остановить службу:
    sudo systemctl stop <service-name>
    
  • Чтобы предотвратить запуск службы при загрузке:
    sudo systemctl disable <service-name>
    

6. Как я могу узнать, какая служба использует конкретный порт?

Вы можете использовать netstat или ss, чтобы найти службы, работающие на конкретном порту:

netstat -tulnp | grep :80

или

ss -tulnp | grep :80

7. Что делать, если systemctl не найден?

Если вы получили ошибку, такую как command not found: systemctl, это означает, что ваша система может не использовать systemd. Попробуйте использовать:

service --status-all

или

ps aux | grep <service-name>

8. Как просмотреть вышедшие из строя службы?

Для систем на базе systemd выполните:

systemctl list-units --type=service --state=failed

9. Как включить ведение журнала для конкретной службы?

Чтобы проверить логи для службы, управляемой systemd, используйте:

journalctl -u <service-name>

Чтобы просмотреть логи в реальном времени:

journalctl -u <service-name> -f

10. Могу ли я использовать top или htop, чтобы увидеть запущенные службы?

Да! top и htop предоставляют живой обзор запущенных процессов:

  • Используйте top:
    top
    
  • Используйте htop (интерактивный и удобный):
    htop
    
    (Установите с помощью sudo apt install htop или sudo yum install htop, если он недоступен.)