如何列出Linux上的运行服务:适用于所有初始化系统的完整指南
介绍
Linux服务是持续运行的后台进程,用于执行系统任务,例如管理网络、处理用户登录或运行Web服务器。这些服务可以通过各种工具进行管理,具体取决于所使用的Linux发行版和初始化系统。
了解如何列出运行中的服务对于系统管理员和开发人员至关重要。它有助于:
- 故障排除 – 检查关键服务是否正在运行或已失败。
- 性能监控 – 识别资源占用较高的服务。
- 安全审计 – 确保只有必要的服务处于活动状态。
使用systemctl(适用于基于Systemd的系统)
大多数现代Linux发行版,包括Ubuntu(16.04+)、CentOS(7+)、Fedora和Debian(8+),使用systemd作为初始化系统。systemctl
命令是管理和列出这些系统中服务的主要工具。
检查单个服务的状态
要检查特定服务是否正在运行,请使用:
systemctl status <service-name>
例如,要检查nginx Web服务器是否正在运行:
systemctl status nginx
输出将显示服务是活动(运行中)、非活动还是失败,并附带调试日志。
列出所有活动服务
要列出所有运行中的服务,请使用:
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来查找特定进程。
这种方法在以下情况下非常有用:
- 您正在使用一个缺少
systemctl
或service
命令的最小Linux系统。 - 您想检查特定进程是否正在运行,而不考虑初始化系统。
列出所有运行中的进程
ps aux
命令显示系统上所有运行的进程:
ps aux
这将生成一个包含所有运行进程的详细列表,包括它们的进程ID(PIDs)、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等Web服务器使用)。
总结
- 使用
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
(交互式且用户友好):
(如果不可用,请使用htop
sudo apt install htop
或sudo yum install htop
进行安装。)