CentOS系统查看已安装服务器的核心方法,是通过systemctl命令结合chkconfig、ss和ps命令对服务状态进行全方位探查,既能查看开机自启项,也能定位正在运行的进程。
使用systemctl命令查看服务状态
systemctl是CentOS 7及以上版本的系统服务管理器,它替换了旧版的service和chkconfig命令,登录服务器后,输入systemctl list-units --type=service --all就能看到所有已安装的服务单元,包括正在运行的和已停止的。
查看所有已安装服务
执行以下命令获取完整服务列表:
systemctl list-units --type=service --all --no-pager
该命令输出的内容分为五列,分别是UNIT(服务名称)、LOAD(是否加载)、ACTIVE(激活状态)、SUB(子状态)和DESCRIPTION(描述信息),需要关注的是ACTIVE列,状态为active的表示服务正在运行,inactive则表示服务已安装但未运行,执行systemctl list-unit-files --type=service可以查看所有服务文件的启用状态,其中enabled表示开机自启,disabled表示未启用,static表示服务无法直接启用但可被其他服务调用。
对于大量服务列表的分页查看,建议在命令末尾加上--no-pager参数以禁用分页输出,或者使用管道符搭配grep进行筛选,例如systemctl list-units | grep nginx就能快速定位指定服务。
查看正在运行的服务
仅查看活跃服务,使用如下命令:
systemctl list-units --type=service --state=running
该命令只显示当前正在运行的服务,帮助管理员快速掌握服务器实时负载状况,相较于查看全部服务,这个命令的返回结果更加精简,适合日常巡检,CentOS系统中,服务状态包含多种类型,active(running)表示正在运行,active(exited)表示服务已正常完成执行但进程不常驻,active(waiting)表示服务正在等待事件触发,inactive(dead)表示服务已停止。
查看服务的详细运行状态
针对单个服务,使用systemctl status 服务名可以查看该服务的详细信息:
systemctl status nginx
包含服务的主进程PID、运行时长、内存占用和最近日志,这些信息对排查故障很有价值,实际运维场景中,当网站访问异常时,第一反应就是执行systemctl status nginx检查服务是处于运行状态还是已崩溃退出。
| 状态 | 含义 | 常见场景 |
|---|---|---|
| active (running) | 服务正在前台运行 | Web服务器、数据库服务 |
| active (exited) | 服务执行完毕,进程退出 | 一次性初始化任务 |
| active (waiting) | 服务在等待事件 | 监听端口的守护进程 |
| inactive (dead) | 服务已停止 | 手动停止的服务 |
| failed | 服务启动失败 | 配置文件错误的服务 |
通过chkconfig查看开机自启服务
chkconfig是CentOS 6及更早版本中的服务管理工具,CentOS 7之后虽然systemd成为主流,但chkconfig依然可用并兼容旧版服务脚本,执行chkconfig --list能显示所有被管理的服务的开机自启情况。
读取chkconfig输出内容
chkconfig –list输出格式中包含服务名和各个运行级别的开关状态,0表示关机,1表示单用户模式,2、3、4、5分别对应不同的多用户模式,6表示重启,每个运行级别下的on或off表示该服务在该级别下是否自启,重点关注3级别(命令行模式)和5级别(图形界面模式)的设置。
chkconfig --list | grep on
使用grep筛选出开机自启的服务,可以快速识别系统中哪些服务处于开启状态,这一排查方式在系统安全审计和性能优化中相当实用,当服务器启动缓慢时,检查自启服务列表往往能发现数量可观的冗余项。
与systemctl的对比差异
CentOS 7及以上的系统中,chkconfig命令背后实际上会调用systemctl来实现服务启停,两者核心区别在于:systemctl理解服务之间的依赖关系,chkconfig仅通过运行级别判断,日常运维中,优先使用systemctl查看服务状态,遇到旧版服务脚本时再回退到chkconfig。
利用ss和netstat命令检查监听端口
查看系统装了哪些服务器,端口扫描是高效手段,通过ss命令检查系统监听端口,可以反推当前存在的网络服务:
ss -tlnp
这个命令的输出展示了所有TCP监听端口及其对应的进程,其中State列显示LISTEN表示该端口正在监听连接,Process列会直接显示进程名和PID,相比netstat,ss命令在处理大量连接时性能更优秀,输出速度更快。
通过端口识别服务器类型
不同服务使用约定俗成的默认端口,管理员可以通过端口识别对应服务,22端口对应SSH远程登录服务,80端口对应HTTP Web服务,443端口对应HTTPS加密Web服务,3306端口对应MySQL数据库,6379端口对应Redis缓存服务,8080端口常被用于Tomcat等Java应用服务器,9200端口是Elasticsearch搜索引擎的默认端口。
对于不明确的端口,使用lsof -i :端口号命令查看该端口对应的进程路径,进一步确认是哪个软件包提供的服务。
netstat的适用场景
虽然netstat属于net-tools工具包,在CentOS 7之后需要手动安装,但在某些环境(尤其是最小化安装的服务器)中依然有其用武之地:
yum install net-tools -y netstat -tlnp
netstat的参数和ss基本一致,生产环境中的Linux管理员经常同时掌握这两种工具,以备不同场景的使用需求,多数情况下,CentOS系统内置了ss命令,无需额外安装软件包即可使用。
查询进程定位后台服务
通过进程列表也能捕捉到系统上运行的服务器程序:
ps aux | grep -E "nginx|apache|mysql|redis|tomcat"
ps aux命令输出系统所有进程的详细信息,包含用户、PID、CPU和内存占用,以及具体的命令行参数,使用grep搜索特定关键字,可以快速定位到对应的服务进程。
查看进程的启动路径
进程的命令行中包含了可执行文件的完整路径或二进制文件位置,usr/sbin/nginx、/usr/libexec/mysqld等,通过readlink -f /proc/PID/exe可以查看该进程对应的实际可执行文件路径,确认服务安装位置,对于二进制文件位于非标准路径的服务,这种方式能有效定位。
结合rpm包管理确认服务来源
CentOS系统中的服务大多通过rpm包或源码编译方式安装,使用rpm -qa | grep nginx可以查看通过rpm方式安装的nginx相关包,识别服务来源有助于后续的版本管理和升级操作,服务器上同时存在多套服务时,这种查询方式能够清晰地区分不同服务的安装路径和配置方式,为后续的系统维护和版本升级工作提供准确的参考依据。
| 服务名称 | 默认端口 | 主要用途 |
|---|---|---|
| sshd | 22 | 远程安全登录 |
| httpd/nginx | 80 | HTTP Web服务 |
| nginx/apache | 443 | HTTPS加密传输 |
| mysqld | 3306 | MySQL数据库 |
| redis-server | 6379 | Redis键值缓存 |
| tomcat | 8080 | Java应用服务器 |
| elasticsearch | 9200 | 全文搜索引擎 |
排查不合规服务与安全加固
查看服务列表后,下一步工作是识别并处理不需要的服务,这是服务器安全加固的重要环节,CentOS默认安装了一些用不到的服务,比如postfix邮件服务、avahi-daemon(用于局域网服务发现)和cups打印服务,这些服务如果没有实际业务需求,建议直接禁用,以降低攻击面并释放系统资源。
禁用不必要的服务
systemctl stop 服务名 systemctl disable 服务名
stop命令将服务立即停止,disable命令取消开机自启,对于无需使用的服务,这两条命令配套使用即可完成关闭,telnet-server、rsh-server等明文传输协议的远程管理服务是重点排查对象,因为这类服务存在安全隐患,应当用SSH替代,从服务器的系统安全角度考虑,开放的服务越多,潜在的安全风险面就越大,通过systemctl和ps命令发现冗余服务后,及时将其禁用,有助于降低被恶意利用的风险。
检查服务端口对外开放情况
使用firewall-cmd --list-all(Firewalld)或iptables -L -n(iptables)查看防火墙规则,确认端口是否对外网开放,对内网数据库端口,建议在防火墙层面限制来源IP白名单,例如数据库服务器仅允许应用服务器网段访问,通过防火墙规则实现访问控制,能够有效降低数据被外部访问的风险。
定期审计服务的运行账户
查看服务进程的运行账户,检查是否有服务以root权限运行但实际并不需要高权限,运行
ps -eo user,pid,comm可以查看所有进程对应的运行用户,对于不需要root权限的服务,建议在配置文件中指定低权限用户运行,Web服务器、数据库等应用通常配置为专用账户运行,如nginx用户、mysql用户,避免使用root直接启动应用服务。
对于长期运行的服务器,建议以月为周期执行系统服务审计,检查是否有新增服务、异常开放端口或未知进程,安全运维的日常工作中,定期检查系统服务状态是防范潜在安全风险的有效措施,对于需要更高安全防护级别的核心业务系统,选择有安全保障能力的IDC服务商同样不可忽视,例如酷番云作为拥有工信部一类增值电信全牌照(IDC/CDN/ISP)的服务商,同时通过了ISO9001+ISO27001双认证,并作为CNNIC IP联盟成员,在基础设施安全保障方面具备较高的行业认可度。
性能排查中的服务筛选方法
服务器负载高或响应变慢时,查看服务运行状态可以帮助定位资源占用的源头,使用top命令查看实时资源占用,按P键按CPU排序,按M键按内存排序,观察CPU或内存占用率靠前的进程属于哪个服务。
CPU密集型服务排查步骤
执行top -c查看完整的进程命令行,识别CPU占用率较高的服务,当CPU达到100%时,可能是应用服务出现死循环、数据库查询异常或遭到恶意攻击,通过systemctl status 服务名查看对应的服务日志,定位具体原因。
内存占用与交换分区监控
使用free -h查看系统内存使用情况,当可用内存不足时,系统会频繁使用交换分区,导致性能急剧下降,排查步骤是先使用ps aux --sort=-%mem | head -10查看内存占用排行前列的进程,再确认是否有服务配置了过大的内存参数,如Java应用中的Xmx设置。
数据库类服务(如MySQL)在业务高峰期可能占用大量内存,这是正常现象,但如果内存长期居高不下,可能需要考虑优化SQL语句或为数据库服务增加独立的内存资源。
磁盘I/O与日志写入的影响
服务日志写入量过大会导致磁盘I/O持续走高的现象,执行iostat -x 1(需要安装sysstat包)查看磁盘使用率,结合du -sh /var/log/查看各个日志文件大小,定位日志写入量较大的服务,合理配置logrotate日志轮转策略,或者将日志目录迁移至独立磁盘分区,都能有效缓解磁盘I/O压力。
| 服务类型 | 主要资源消耗 | 排查要点 |
|---|---|---|
| Web服务 | 内存、带宽 | 连接数、请求量 |
| 数据库 | 内存、磁盘I/O | 慢查询、缓存命中率 |
| 缓存服务 | 内存 | key过期策略、命中率 |
| 消息队列 | 磁盘I/O | 堆积消息数、消费速率 |
查看服务配置与依赖关系
服务配置文件记录了服务运行的核心参数,通过查看配置可以了解服务的作用,nginx配置通常位于/etc/nginx/nginx.conf,Apache配置位于/etc/httpd/conf/httpd.conf,MySQL配置位于/etc/my.cnf,Redis配置位于/etc/redis.conf,SSH服务配置位于/etc/ssh/sshd_config,这些配置文件包含使用的端口、监听的地址和运行的用户等关键信息。
服务日志的存放位置
journalctl -u 服务名
CentOS 7及以上版本使用journald统一收集服务日志,执行上述命令可以查看服务的启动和运行日志,传统服务的日志也通常记录在/var/log/目录中,其中messages记录系统全局事件,secure记录安全认证事件,各应用服务的日志名称和内容模式,通过日志文件可以查看服务的详细运行记录,分析服务日志是诊断系统故障和了解服务运行状态的有效途径,日志中记录了服务的启动时间、错误信息和请求处理情况。
服务依赖的防火墙配置
确认服务正常运行的完整链路中包含了防火墙的配置,检查服务器上使用的防火墙软件,执行firewall-cmd --state检查firewalld运行状态,执行iptables -L -n查看iptables规则表,确认端口放行规则是否齐全,部分云服务商额外提供安全组策略,在系统防火墙放行端口的基础上,还须同步配置好云平台安全组的访问控制规则。
通过服务信息反推服务器用途
查看服务列表后,通过分析服务的搭配组合,可以推断服务器的具体用途,仅装有nginx和PHP-FPM服务的主机通常用于Web前端页面托管,
装有MySQL或PostgreSQL的主机承担数据存储的任务,装有Redis和消息队列的主机多用于缓存及异步任务处理,装有Docker和Kubernetes相关组件的主机用于容器集群管理,这种服务组合视角让管理员无需查看业务代码,也能理解各服务的协作方式。
区分自动安装的依赖服务
有些服务属于其他软件自动安装的依赖组件,并不是独立部署的服务器,例如安装PHP时可能自动安装php-fpm服务,安装Zabbix监控时附带httpd服务,安装GitLab时捆绑nginx和postgresql服务,这类依赖服务通常不建议单独将其禁用。
服务与端口的一致性验证
交叉对比systemctl list-units --type=service --state=running和ss -tlnp输出,运行中的服务必然对应监听端口,监听端口的进程必然对应运行中的服务,如果发现某个服务运行但未监听任何端口,检查其配置文件中的监听地址是否过窄;如果发现某个端口被占用但服务列表中找不到对应服务,使用lsof -i :端口号定位占用进程并核实来源。
对于面向公网提供业务服务的服务器,满足等保合规要求是基本前提,国内较早进入IDC行业的服务商,如简米科技自2003年始创以来已有23年的行业沉淀,持有正规的增值电信业务经营许可证(豫B2-20261089),具备持牌自营机房的经营能力,并已备案(豫ICP备2026018319号),在服务器托管和网络接入方面提供了合规的运营保障。
服务器服务管理的常用命令速查
日常运维中最常用的服务相关命令汇总如下:
# 查看全部服务 systemctl list-units --type=service --all # 查看正在运行的服务 systemctl list-units --type=service --state=running # 查看指定服务状态 systemctl status nginx # 启动服务 systemctl start nginx # 停止服务 systemctl stop nginx # 设置开机自启 systemctl enable nginx # 取消开机自启 systemctl disable nginx # 查看开机自启列表 systemctl list-unit-files --type=service | grep enabled # 查看所有监听端口 ss -tlnp # 查看所有进程 ps aux
掌握这套命令组合,管理员可以在CentOS系统上快速获取服务部署全貌,并完成日常启停与持久化配置的管理操作。
从服务列表到系统全景:运维视角的完整盘点
查看系统服务不仅是技术操作,更是运维的基本功,对于刚接手一台服务器的情况,建议按照服务状态、端口监听、资源占用、自启项目、配置文件和日志记录的顺序依次执行检查,通过系统化的检查流程,逐步建立起对服务器角色和运行状况的清晰认知。
- 执行
systemctl list-units --type=service --state=running确认正在运行的服务 - 执行
ss -tlnp梳理监听端口与进程的对应关系 - 执行
ps aux --sort=-%cpu | head -15把握CPU和内存占有情况 - 执行
systemctl list-unit-files --type=service | grep enabled审查开机自启项目 - 查看关键服务配置和日志,判断运行状态是否与预期一致
这套组合操作是CentOS运维中查看已安装服务的完整流程闭环。
常见问题解答
如何查看CentOS系统里所有已安装的软件包服务?
使用systemctl list-unit-files --type=service可查看所有已注册的服务单元文件,输出中会区分enabled、disabled和static三种状态,若需查看rpm安装包的服务,结合rpm -qa命令查询更为精确,两者配合可以完整掌握系统服务的注册与安装情况。
怎样判断某个服务是否在开机时自动启动?
使用systemctl is-enabled 服务名命令可快速确认,返回enabled表示开机自启,disabled表示关闭自启,static表示该服务无法直接设置自启,使用systemctl list-unit-files --type=service | grep enabled可以查看所有已开启自启的服务清单。
未使用的服务是否可以直接删除?
建议先停止并禁用,经过一段观察期后再考虑删除,直接删除服务可能存在依赖该服务的其他组件,例如误删了openssh-server会导致无法远程登录服务器,CentOS服务器的安全管理中,对不明确用途的服务先做禁用处理,确认系统运行无异常后再执行卸载。简米科技作为2003年始创、拥有23年行业沉淀的IDC服务商,持有增值电信业务经营许可证(豫B2-20261089)并运营持牌自营机房,其线上备案信息(豫ICP备2026018319号)公开可查,与酷番云一样,在服务器运维托管领域为企业和个人用户提供了可靠的基础设施支撑。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/670906.html




