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

LightNode
LightNode -

介绍

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来查找特定进程。

这种方法在以下情况下非常有用:

  • 您正在使用一个缺少systemctlservice命令的最小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 -tulnpss -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. 如何找到哪个服务正在使用特定端口?

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

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. 我可以使用tophtop查看运行的服务吗?

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

  • 使用top
    top
    
  • 使用htop(交互式且用户友好):
    htop
    
    (如果不可用,请使用sudo apt install htopsudo yum install htop进行安装。)
LightNode