Linux本机上的服务器,本质上是运行在系统中的守护进程,最常见的包括Web服务器(Nginx/Apache)、数据库服务器(MySQL/PostgreSQL)、SSH远程登录服务,以及Docker容器运行环境,这些服务通过监听特定端口对外提供能力,想要全面盘点本机服务器,核心思路就是查系统服务、查监听端口、查进程占用三件事。
用systemctl命令摸清本机服务器家底
大多数现代Linux发行版都使用systemd作为初始化系统,它管理着所有后台服务的生命周期,查看本机有哪些服务器,最直接的操作是打开终端,执行systemctl list-units --type=service --state=running,这条命令会列出当前正在运行的所有服务单元。
输出结果中,后缀为.service的就是服务器进程,比如nginx.service代表Web服务器在跑,mysqld.service说明数据库服务正常,sshd.service表示远程登录服务处于监听状态,如果服务名称带符号,比如php-fpm@80.service,通常表示动态配置的实例,需要结合具体路径查看配置。
区分系统服务与业务服务器的差别
执行systemctl list-units会看到几十行输出,其中相当一部分是系统基础服务,比如systemd-journald(日志服务)、systemd-networkd(网络管理)、dbus.service(IPC通信),它们不是传统意义上的业务服务器,但确实守护进程。
行业共识认为,判断一个服务是否属于“服务器”,看两点:是否监听网络端口,是否响应外部请求。ss -tlnp命令能准确显示当前所有TCP监听端口和对应的进程PID,这才是定位业务服务器的关键命令。
用端口反推本机运行的服务器类型
网络端口是服务器对外提供服务的门牌号,执行netstat -tlnp或socket statistics工具,可以看到本机所有处于LISTEN状态的端口,常用端口和服务器类型对应关系如下表:
| 端口 | 常见服务器 | 主要用途 |
|---|---|---|
| 22 | SSH服务 | 远程管理本机 |
| 80/443 | Nginx/Apache | Web页面访问 |
| 3306 | MySQL/MariaDB | 数据库连接 |
| 5432 | PostgreSQL | 关系型数据库 |
| 6379 | Redis | 缓存与键值存储 |
| 8080 | Tomcat/SpringBoot应用 | Java应用服务 |
查看是否安装了常见的linux服务器软件
想知道本机有没有装某种服务器,可以用which nginx、which mysql或dpkg -l | grep apache(Debian系)来检查,另外systemctl status命令能查看单个服务的运行状态,比如执行systemctl status nginx会返回该服务的运行状态、主进程PID、最近日志摘要。
实操场景: 假设你准备部署一个Web项目,但不确定这台装有Linux系统的主机是否已经有现成的Web服务器,可以执行以下两步排查:
- 运行
ss -tlnp | grep :80查看80端口是否被占用 - 运行
ps aux | grep nginx确认进程是否存在
如果80端口被占但进程名不是Nginx,则可能是Apache或Tomcat占用,用lsof -i:80可以锁定具体进程名称。
区分本机服务与Docker容器中的服务
在使用了容器化技术的生产环境里,很多业务服务器运行在Docker容器内部,这种场景下,systemctl list-units只能看到docker.service,容器内的Nginx或Redis则看不到,需要执行docker ps查看正在运行的容器,再进入容器内部执行ps aux查看实际启动的进程。
注意: 容器内服务的端口映射,用docker port 容器名查看宿主机到容器的转发关系,如果宿主机某个端口被监听但systemctl里找不到对应服务,很可能是容器端口映射导致,也可能是编译安装的服务(源码包安装默认不会注册到systemd)。
常见服务器类型的识别方法
根据服务器功能的不同,配置文件路径和启动方式也有明显差异,掌握这些特征能快速判断“这台Linux正在对外提供什么服务”。
Web服务器识别
执行nginx -v看版本,nginx -T能输出完整配置,包括全部虚拟主机(server块)和监听端口,Apache则用apache2ctl -S查看虚拟主机列表,用浏览器访问本机IP,看到页面内容通常能反向确认对外的Web服务类型。
数据库服务器识别
数据库服务器在工作时持有大量内存缓存。ps aux | grep mysqld能看到mysqld进程常驻,配置一般位于/etc/mysql/my.cnf或/etc/my.cnf。mysqladmin status命令能获取运行时长和连接数,反映数据库服务器的活跃程度。
缓存与消息队列服务器
Redis和RabbitMQ这类中间件服务器,默认不对外网开放,只监听内网或回环地址(127.0.0.1),执行redis-cli ping,如果返回PONG表示Redis服务正常。rabbitmqctl status则有节点信息和运行状态报告。
本机服务器排查的日常用法
真正运维一台Linux服务器,掌握三个层面的信息就能搭建本机全部服务器清单:
- 服务状态层:
systemctl list-units(当前活动服务) - 端口监听层:
ss -lntup(所有UDP/TCP端口) - 文件系统层:
ls /etc/init.d/或ls /usr/local/bin(旧式脚本与自定义二进制)
实用命令组合
登录一台陌生的生产环境Linux主机,建议按顺序执行以下命令建立认知:
hostnamectl查看系统发行版版本信息systemctl list-units --type=service --state=running --no-pager列出运行中服务ss -tlnp | awk '{print $4}' | cut -d: -f2 | sort -u提取所有监听端口号ps -eo pid,cmd | grep -E 'nginx|apache|mysql|redis|tomcat' | grep -v grep筛选知名服务器进程
通过这组命令,可以对比本机已安装的linux服务器软件和系统服务,精确掌握资源占用情况。
关闭不需要的服务器以提升安全性
如果发现本机运行着不需要的FTP服务或Telnet服务,建议立即关闭,用systemctl stop vsftpd停止服务,再用systemctl disable vsftpd禁止开机启动。安全基线配置应遵循最小权限原则,只保留业务必需的服务器进程,能有效降低被入侵的风险。
linux服务器场景解答
明确本机服务器清单
执行ss -tlnp查看端口,结合systemctl确认服务名,再把进程名对应到具体软件类型,三步走能解决百分之九十的“linux本机有哪些服务器”疑惑,在云服务器上排查时,还需要额外查看云平台控制台的安全组规则,确认哪些端口放行到了公网。
linux本地服务器搭建最常用的方式
多数初学者在本地用虚拟机(如VirtualBox、VMware)安装Linux镜像,再在虚拟机内部署Nginx和PHP环境,通过端口映射让宿主机访问,这种方式适合学习和测试,想模拟云服务器体验,可以安装Webmin或宝塔面板,提供图形化界面管理本机服务器。
linux服务器怎么查端口被谁占用
具体排查路径:先运行netstat -tlnp | grep 端口号,找到PID后执行ps -p PID -o comm,args,就能看到完整的进程启动命令,如果端口被非root用户占用,说明该服务是以普通用户权限启动的,这在共享主机环境里较常见。
云服务器和物理本机跑服务有何差异
云服务器本质是虚拟机,创建时会自动分配固定公网IP和磁盘,相比自建机房物理机,省去了网络配置和硬件维护成本,本机(物理机)跑服务受制于家庭宽带的上行带宽,出口速度往往有限,同时缺少固定公网IP,这是不少场景选择云服务器的主要原因。
核心观点收束:查询Linux本机服务器的过程,就是与系统对话的过程,掌握systemctl、ss、ps和lsof这四类命令,面对任何交付到手里的Linux主机,都能在五分钟内理清它跑着哪些服务、监听着哪些端口、占用了多少资源,这是运维排查的基础功,也是架构设计的起点,记住开篇三件事查服务、查端口、查进程,所有服务器信息都在终端里等着你调取。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/796854.html


