日常运维中,经常需要快速摸清Linux服务器的“家底”——系统版本、内核、CPU、硬盘、内存、网络,这些基础信息一个都不能少。下面就把最实用的几组命令串起来讲,每条都配了截图,方便对照操作。
基础系统信息查看
1. 查看系统版本
直接用 lsb_release -a,结果会清晰显示发行版名称、版本号和描述信息。

2. 查看内核版本
uname -a 一口气输出内核版本、主机名、硬件架构等全部内容,是排查兼容性问题的首选。

3. 查看CPU型号
cat /proc/cpuinfo 会列出每个逻辑核的详细信息,其中 model name 就是CPU型号。如果想只看一行,加个 grep "model name" | head -1 就行。

4. 查看硬盘空间情况
df -h 以人类可读的单位(G、M)显示各分区的已用、可用和挂载点,一眼看出磁盘压力。

5. 查看内存信息
free -m 以MB为单位输出总内存、已用、空闲以及缓存/缓冲的使用情况。换成 free -h 会更直观。

6. 查看网络信息
ifconfig 显示每个网卡的IP、MAC、收发数据包统计。很多新系统推荐用 ip addr 替代,但 ifconfig 依然经典够用。

常用的查看Linux环境信息的命令
(以下命令中,假设进程号为 pid,端口号为 port。)
1. CPU占用率
top -p pid,看 %CPU 列,单位百分比。
2. 物理内存使用量
top -p pid,看 RES 列,单位KB。
3. 虚拟内存使用量
top -p pid,看 VIRT 列,单位KB。
4. 进程队列长度
直接执行 top,看 load a verage 行,三个数值分别代表最近1分钟、5分钟、15分钟的平均活跃进程数。数值除以CPU核心数可粗略判断是否过载。
5. 打开的socket及其状态
netstat -an | grep port,输出中第4列是源IP,第5列是目的IP,第6列是状态(LISTEN、ESTABLISHED、TIME_WAIT等)。高并发场景下推荐用 ss 替代,性能更好——不过需要加载内核模块(见下面)。
加载内核模块示例:
insmod /lib/modules/2.6.18-164.el5/kernel/net/ipv4/inet_diag.ko insmod /lib/modules/2.6.18-164.el5/kernel/net/ipv4/tcp_diag.ko insmod /lib/modules/2.6.18-1.2.0.0-xen/kernel/net/ipv4/inet_diag.ko insmod /lib/modules/2.6.18-1.2.0.0-xen/kernel/net/ipv4/tcp_diag.ko
6. I/O使用率
iostat -x,看 %util 列,单位百分比。该值接近100%表示磁盘已接近饱和。
7. 磁盘读写速率
iostat -k,其中 kB_read/s 是每秒读出的KB数,kB_wrtn/s 是每秒写入的KB数。
8. 最近使用的系统调用及其耗时
strace -f -tt -T -p pid,第一列是系统调用名称,最后一列是该调用耗费的时间(秒)。非常适合定位进程卡顿的根本原因。
9. 打开的文件描述符数量
ls /proc/pid/fd | wc -l,用于判断是否存在文件句柄泄漏。
10. 进程地址空间
pmap -d pid,展示进程各内存映射段的详细分布。
11. 环境变量
cat /proc/pid/environ,以null分隔的原始环境变量串,可用 tr '\0' '\n' 美化输出。
12. 进程各模块的内存使用情况
cat /proc/pid/smaps,比pmap更细粒度的内存分析,包含共享、私有、脏页等维度。
13. 进程状态信息
cat /proc/pid/status,输出包含:State(运行/睡眠/僵尸)、SleepA VG(睡眠时间比例)、Tgid(线程组ID)、PPid(父进程ID)、FDSize(最大文件描述符数)、VmSize(虚拟地址空间大小)、VLck(锁住不能交换的物理内存大小)、VmRSS(正在使用的物理内存大小)、VmData(数据段大小)、VmStk(用户态栈大小)、VmExe(可执行代码段大小,不含库)、VmLib(映射的库大小),以上单位均为KB。另有SigQ(待处理信号数)、SigBlk(被阻塞信号)、SigIgn(被忽略信号)、SigCgt(被捕获信号)。
14. 进程的线程数量
ls /proc/pid/task | wc -l,统计该进程下轻量级进程(线程)的个数。
15. 启动该进程的命令行
cat /proc/pid/cmdline,得到启动时完整的命令和参数(以null分隔)。
16. 列出当前系统打开了哪些文件以及对应的进程
sudo lsof -n,不解析主机名,快速定位谁在占用某个文件或端口。
17. 使程序主动生成core dump文件
gdb -p pid -batch -ex "generate-core-file",在不终止进程的情况下生成core文件,方便事后分析崩溃现场。
