Linux下查看“运行的服务器”,最直接的方法是先用systemctl或ps查看进程,再用ss或netstat看端口,最后结合HTTP响应头判断Web服务器类型。这套组合拳能让你快速定位机器上到底跑了什么服务,是Nginx、Apache还是其他守护进程。
linux查看服务器运行了什么服务:从进程到端口
你登录一台Linux服务器,第一反应肯定是”这机器上到底跑了什么?”别急着装监控工具,系统自带命令就够了,咱们分三步走,先看进程,再看端口,最后看服务状态。
用systemctl查看守护进程
如果你的系统是CentOS 7+、Ubuntu 16.04+这类使用systemd的发行版,最省事的命令是:
systemctl list-units --type=service --state=running
这个命令会列出所有正在运行的服务单元,比如nginx.service、mysqld.service、docker.service等,输出包含服务名和简要描述,一眼就能扫出大概,想更精简?加上--no-pager避免分页卡住:
systemctl list-units --type=service --state=running --no-pager
如果你怀疑某个服务挂了,用systemctl status 服务名查看它的运行状态、主进程PID和最近日志,这是linux查看服务器运行了什么服务最规范的路径。
用ps命令看所有进程
systemctl只管系统服务,但有些程序不走systemd,比如你手动编译的二进制、用户态的Java进程,这时用ps全量扫描:
ps aux
输出列表里COMMAND列就是进程名,看到nginx: master process说明在跑Nginx,看到java -jar app.jar则是Java应用,要过滤关键词,直接接grep:
ps aux | grep -E "nginx|apache|mysql"
但grep自己也会出现在结果里,习惯性加grep -v grep或者用pgrep更干净:
pgrep -a nginx
端口占用:ss和netstat
进程名可能被伪装或混淆,但端口骗不了人,用ss查看当前监听端口:
ss -tlnp

解释一下参数:-t只看TCP,-l仅显示监听状态,-n用数字显示端口,-p显示进程信息,你会看到类似:80、:443这样的行,对应的users:(("nginx",pid=1234,fd=...))直接告诉你PID和进程名。
有些老系统没有ss,用netstat替代:
netstat -tlnp
如果你的系统连netstat都没有,先装net-tools,或者用lsof -i :端口号更精准,比如查80端口被谁占用:
lsof -i :80
这条命令在排查端口冲突时特别管用,它会列出占用该端口的进程PID和完整命令行。
linux怎么看web服务器是nginx还是apache
很多人所谓”看服务器”,其实是想知道网站后端用的是Nginx还是Apache,这俩是当前最常见的Web服务器,但分辨它们并不难,结合linux查看服务器类型命令的常见用法,我给你三个判断角度。
直接看进程名
最简单的办法是查进程:
ps aux | grep -E "nginx|apache|httpd"
出现nginx字样,就是Nginx;出现httpd或apache2,基本就是Apache,如果你用宝塔面板或军哥LNMP一键包,Nginx几乎是标配。
抓取HTTP响应头
进程名可能被改,但HTTP响应头里的Server字段很难伪装,在服务器本地执行:
curl -I http://localhost
看返回的响应头。Server: nginx/1.24.0就是Nginx,Server: Apache/2.4.57 (Unix)就是Apache,如果后面还跟着OpenSSL/1.1.1之类的,那是编译时加的模块信息,不影响判断。
如果你想要更隐蔽的判断,还可以用curl -I -H "User-Agent: test"避免某些WAF拦截,行业共识认为,响应头是识别Web服务器最权威的信号,因为它是服务器主动发出来的。
查看配置文件目录
每个Web服务器有自己固定的配置路径,Nginx通常装在/etc/nginx/,Apache在/etc/httpd/(CentOS系)或/etc/apache2/(Ubuntu系),直接ls一下:

ls -d /etc/nginx /etc/httpd /etc/apache2 2>/dev/null
哪个目录存在,就说明哪个服务装过,这个方法在你想确认服务器是否装了web服务但又不想启动它时特别好用。
区分不同层面的”服务器”:硬件、系统、Web服务
“服务器”这个词在不同语境下指的东西完全不同,有人问”linux怎么看运行的什么服务器”,其实是在问物理机配置;有人问的是操作系统版本;还有人只关心Web服务,这三个层面要分开看。
看操作系统版本和内核
想知道系统是CentOS还是Ubuntu,用一行命令:
cat /etc/os-release
输出里NAME和VERSION字段直接告诉你发行版名称和版本号,对于老的CentOS 6或Ubuntu 14,可以看cat /etc/redhat-release或cat /etc/issue。
内核版本用uname -a查看,Linux version后面的字符串包含内核版本、编译时间和架构信息,这有助于判断是否需要升级内核以支持新硬件。
看CPU、内存和磁盘
硬件信息方面:
lscpu free -h df -h
lscpu显示CPU型号、核心数、架构;free -h以人类可读格式显示内存总量和剩余量;df -h查看磁盘分区挂载和剩余空间,这几条命令组合,20秒内就能摸清机器配置,如果你买了云服务器,也可以用云厂商控制台看配置,但在系统里直接查更实时准确。
云服务器和物理机怎么分辨
云服务器通常有虚拟化特征,用systemd-detect-virt可以检测是否为虚拟机:
systemd-detect-virt
输出kvm、xen或vmware说明是云主机,输出none多半是物理机。dmidecode -s system-manufacturer能看到厂商信息,Alibaba Cloud”或”Tencent Cloud”,这在对比价格和配置时能帮你确认自己买的是不是云主机。
常见场景实操:排查端口占用和资源异常
知道服务器跑什么服务,不是为了看个热闹,更多时候是为了排查问题,我再说两个高频场景。

端口被占用了怎么找元凶
比如你启动服务时提示bind: Address already in use,说明端口被别的进程占了,这时用:
lsof -i :8080
或者:
fuser 8080/tcp
fuser -k 8080/tcp可以强制杀掉占用进程,但用之前得确认这个进程不是你的数据库,业内专家指出,生产环境上不要盲目kill,先ps -fp PID看看进程的具体信息再动手。
查看哪个服务吃内存或CPU
如果系统卡顿,怀疑某个服务异常,用top命令按CPU或内存排序,进入top后按M键按内存排序,按P键按CPU排序,或者用一行非交互命令:
ps aux --sort=-%mem | head -10
这条命令直接把内存占用前10的进程列出来,定位问题进程非常直观,搭配systemctl status 服务名能很快决定是重启还是优化配置。
Q&A:linux怎么看运行的服务器常见问题
问:怎么知道Linux服务器上跑了哪些服务?
答:优先用systemctl list-units --type=service --state=running查看系统服务,再用ss -tlnp查看所有监听端口对应的进程,两者结合基本覆盖了所有常驻服务,包括Docker容器内的进程。
问:如何区分Nginx和Apache,尤其是当两者都在运行时?
答:用ps aux | grep -E "nginx|apache|httpd"看进程列表,或者用curl -I localhost查看HTTP响应头的Server字段,两者同时运行时,通常Nginx监听80和443作为前端,Apache监听其他端口如8080作为后端,ss -tlnp会显示各自的监听端口。
问:查看服务时遇到Permission denied怎么办?
答:部分进程信息需要root权限,在命令前加sudo,比如sudo ss -tlnp或sudo lsof -i :80,普通用户只能看到自己启动的进程信息,系统级守护进程的完整命令行需要提权,sudo之后就能看到PID和完整命令。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/853712.html


评论列表(1条)
读了这篇文章,我深有感触。作者对服务器的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!