如何列出Linux上的运行服务:适用于所有初始化系统的完整指南

如何列出Linux上的运行服务:适用于所有初始化系统的完整指南

介绍

Linux服务是持续运行的后台进程,用于执行系统任务,例如管理网络、处理用户登录或运行Web服务器。这些服务可以通过各种工具进行管理,具体取决于所使用的Linux发行版和初始化系统。

了解如何列出运行中的服务对于系统管理员和开发人员至关重要。它有助于:

故障排除 – 检查关键服务是否正在运行或已失败。

性能监控 – 识别资源占用较高的服务。

安全审计 – 确保只有必要的服务处于活动状态。

使用systemctl(适用于基于Systemd的系统)

大多数现代Linux发行版,包括Ubuntu(16.04+)、CentOS(7+)、Fedora和Debian(8+),使用systemd作为初始化系统。systemctl命令是管理和列出这些系统中服务的主要工具。

检查单个服务的状态

要检查特定服务是否正在运行,请使用:

systemctl status

例如,要检查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 检查单个服务的状态。

使用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

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 检查特定服务。

使用ps fax查看进程的树状图。

使用netstat -tulnp或ss -tulnp查找运行在特定端口上的服务。

常见问题解答(FAQ)

1. 如何检查Linux上某个服务是否正在运行?

您可以根据您的Linux发行版使用不同的方法:

对于基于systemd的系统:

systemctl status

对于基于SysVinit的系统:

service status

使用ps和grep:

ps aux | grep

2. 如何列出所有运行中的服务?

对于基于systemd的系统:

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

对于基于SysVinit的系统:

service --status-all

使用ps命令:

ps aux

3. 如何检查某个服务是否在启动时启动?

对于systemd:

systemctl is-enabled

对于SysVinit(基于RHEL的系统):

chkconfig --list

4. 如何重启服务?

对于基于systemd的系统:

sudo systemctl restart

对于基于SysVinit的系统:

sudo service restart

5. 如何停止或禁用服务?

要临时停止服务:

sudo systemctl stop

要防止服务在启动时启动:

sudo systemctl disable

6. 如何找到哪个服务正在使用特定端口?

您可以使用netstat或ss查找在特定端口上运行的服务:

netstat -tulnp | grep :80

ss -tulnp | grep :80

7. 如果找不到systemctl怎么办?

如果您收到类似command not found: systemctl的错误,这意味着您的系统可能没有使用systemd。尝试使用:

service --status-all

ps aux | grep

8. 如何列出失败的服务?

对于基于systemd的系统,运行:

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

9. 如何为特定服务启用日志记录?

要检查由systemd管理的服务的日志,请使用:

journalctl -u

要实时查看日志:

journalctl -u -f

10. 我可以使用top或htop查看运行的服务吗?

可以!top和htop提供了运行进程的实时视图:

使用top:

top

使用htop(交互式且用户友好):

htop

(如果不可用,请使用sudo apt install htop或sudo yum install htop进行安装。)

相关推荐

英语六级准备多长时间能考过?经验分享来了
365体育手机版app下载

英语六级准备多长时间能考过?经验分享来了

📅 10-24 👁️ 4991
如何快速连接高铁上的WIFI网络?
365app官方版下载

如何快速连接高铁上的WIFI网络?

📅 10-07 👁️ 6838
“藏蓝色”穿搭今年夏天太火了!谁穿谁高级
365app官方版下载

“藏蓝色”穿搭今年夏天太火了!谁穿谁高级

📅 10-01 👁️ 2063