Как просмотреть запущенные службы в Linux: Полное руководство для всех систем инициализации
Введение
Службы 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, чтобы найти службы, работающие на определенных портах.
Часто задаваемые вопросы (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(интерактивный и удобный):
(Установите с помощьюhtopsudo apt install htopилиsudo yum install htop, если он недоступен.)
