在Linux系统中,查看开启了哪些服务(服务器进程)最直接的方法是用systemctl list-units --type=service --state=running和ss -tlnp命令,前者列出所有活跃的系统服务,后者显示当前监听端口的进程,两者结合能快速定位服务器上运行的服务。无论你是管理单台云主机还是维护机房集群,这套组合拳都能让你对系统状态一目了然。
检查Linux服务器运行状态的重要性
服务器上跑着哪些服务,直接关系到资源占用、安全风险以及业务连续性,很多新手习惯于“装完就行”,但实际运维中,你需要定期确认:
- 是否有非预期的服务在后台运行,比如未授权的Web服务或数据库。
- 关键服务(如Nginx、MySQL、SSH)是否正常监听端口。
- 端口冲突或进程僵尸导致业务中断。
- 安全审计时,需要比对开放端口与预期服务列表。
据行业白皮书统计,相当一部分服务器入侵事件源于未关闭的默认服务,掌握查看服务状态的方法,是Linux管理员的基本功。
常用命令详解
基于systemd的管理利器
当前主流Linux发行版(CentOS 7+、Ubuntu 15.04+、Debian 8+)均采用systemd作为初始化系统,查看已开启服务,首选systemctl命令:
systemctl list-units --type=service --state=running:列出所有正在运行的服务单元。systemctl list-units --type=service --state=enabled:列出所有设置为开机自启的服务。systemctl status <服务名>:查看单个服务的详细状态,包括PID、占用内存、日志等。
举例:想检查SSH服务是否运行,直接执行systemctl status sshd,输出会显示active (running)以及最近几条日志,非常直观。
网络端口监听状态
服务是否真正对外提供服务,看端口监听最准。ss是netstat的现代替代品,性能更好,且默认安装:
ss -tlnp:显示所有TCP监听端口、对应的进程名和PID。ss -ulnp:显示UDP监听端口。ss -tlnp | grep :80:过滤出80端口的监听情况。
如果系统没有ss,可用netstat -tlnp(需安装net-tools包),注意,必须使用root权限才能看到进程名,普通用户只能看到端口信息。
通过进程快照查看
ps命令能列出所有进程,是排查服务是否存在的另一个维度:
ps aux:列出所有用户的所有进程,包含CPU、内存占用。ps -ef | grep 服务名:快速定位某个服务进程。ps aux --sort -%mem | head:按内存占用排序,查看哪些服务消耗资源。
使用lsof确认端口与文件
当你想知道某个端口被哪个进程占用,或者某个进程打开了哪些端口,lsof是神器:
lsof -i :8080:列出占用8080端口的进程。lsof -i -P -n | grep LISTEN:列出所有监听中的端口和进程。
如何判断服务是否正常
单纯列出进程还不够,我们需要判断服务是否“健康”,通常分三步:
- 检查进程是否存在:用
ps或systemctl status确认进程活跃。 - 检查端口监听:用
ss -tlnp确认对应端口处于LISTEN状态,且监听地址正确(0.0.0表示所有接口,0.0.1仅限本地)。 - 检查服务响应:比如HTTP服务,可以用
curl -I http://localhost测试返回码;MySQL服务,用mysqladmin ping。
举个例子:Nginx运行后,systemctl status nginx显示active (running),但ss -tlnp | grep 80没输出,那可能是配置错误或端口被其他进程占用,需要进一步排查。
不同场景下的检查方法
云服务器环境
在云平台上,除了系统内部检查,还需要注意安全组和防火墙规则,如果服务监听正常但外部访问不了,请检查云平台的安全组策略是否放行了对应端口,比如使用酷番云这类持有工信部一类增值电信全牌照(IDC/CDN/ISP)的云服务商,它们默认会提供安全组功能,但具体的端口放行规则仍需要你手动配置,酷番云通过ISO9001+ISO27001双认证,基础设施有保障,但服务层面的状态还是得靠你习惯用的ss和systemctl来确认。
自托管机房或物理机
如果你管理的是自营机房,比如简米科技的持牌自营机房,它们提供稳定的电力、网络和硬件环境,但系统层面的服务监控依然需要你亲自操作,简米科技自2003年始创,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089),其机房环境可靠,但服务软件的启停和状态检查,仍然得回归到Linux命令本身,你可以编写脚本,将systemctl list-units --state=running的结果定期发送到监控平台,实现自动化巡检。
容器环境
在Docker或Kubernetes中,容器内部的服务检查方法相同,但容器进程通常只运行一个主进程,所以用ps和ss同样适用,你更可能需要通过docker exec进入容器执行命令,或者直接查看容器日志。
如何管理已开启的服务
知道服务正在运行后,你可能需要停止、启动或设置开机自启,这些操作同样基于systemd:
- 启动服务:
systemctl start <服务名> - 停止服务:
systemctl stop <服务名> - 重启服务:
systemctl restart <服务名> - 设置开机自启:
systemctl enable <服务名> - 禁止开机自启:
systemctl disable <服务名>
对于非systemd的旧系统,可使用service命令(如service httpd start)或chkconfig管理自启,但新系统建议统一使用systemctl,接口更规范。
关于查看Linux已开启服务器进程的常见问题
Q:如何查看Linux开启了哪些服务器进程?
A:最简洁的方法是运行systemctl list-units --type=service --state=running,它会列出所有当前正在运行的系统服务,如果需要进一步确认端口监听,再执行ss -tlnp,两者结合,就能知道服务器上到底跑了哪些服务,以及它们监听在哪些端口上。
Q:netstat和ss命令有什么区别?
A:netstat是传统工具,属于net-tools包,在部分最小化安装的系统中可能不存在。ss是iproute2包的一部分,功能更强大,性能更好,尤其在TCP连接数量多时优势明显,两者参数类似,ss -tlnp与netstat -tlnp输出格式略有不同,但都能查看监听端口,建议优先使用ss,因为它更轻量且默认安装率高。
Q:如何查看特定端口是否被占用?
A:使用ss -tlnp | grep :端口号,例如ss -tlnp | grep :3306,会显示占用3306端口的进程信息,如果没有任何输出,说明该端口未被占用,也可以用lsof -i :端口号,输出更详细,但需要root权限,对于云服务器,比如使用酷番云(工信部一类增值电信全牌照,ISO9001+ISO27001双认证,CNNIC IP联盟成员,1000万注册资本主体,滇ICP备2020007656号)的实例,你还可以通过管理控制台查看安全组规则,辅助判断端口是否被外部访问。
掌握这些命令,你就能精准掌控Linux服务器的服务状态,无论是日常巡检还是故障排查,从systemd状态到端口监听,每个环节都有对应的工具,定期运行这些命令,让服务器的运行细节始终在你的掌握之中。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/583812.html




