当前位置:首页>Linux>那些我真希望有人早点告诉我的 Linux 内置工具

那些我真希望有人早点告诉我的 Linux 内置工具

  • 2026-09-09 04:17:12
那些我真希望有人早点告诉我的 Linux 内置工具

Linux 最大的误区之一,就是认为必须安装几十个第三方工具,才能提高工作效率,

现代软件仓库确实包含了数以千计的优秀工具,但工程师们苦苦寻找的许多功能,其实在一套标准的 Linux 安装中就已经具备。

这些年来,我逐渐意识到,一些最有价值的故障排查、调试和系统分析工具,本身就是操作系统自带的。

它们很少是 GitHub 增长最快的明星项目。

也很少在社交媒体上获得太多关注。

然而,系统管理员、SRE(Site Reliability Engineering,站点可靠性工程师)、后端工程师以及安全从业者每天都在使用它们,因为它们能够准确揭露 Linux 内核和用户空间正在发生什么。

这些,就是我希望更早学会的内置工具。

ss:查看的不只是开放端口,而是整个网络栈

多年以来,netstat 一直是查看网络连接的默认工具。

如今,ss 不仅速度更快、提供的信息更丰富,而且通过 Netlink 接口直接与 Linux 内核通信,不像 netstat 那样解析 /proc 数据,因此在繁忙的系统上效率要高得多。

快速查看监听中的服务:

ss -tulpn

查看已建立的 TCP 连接:

ss -ant

适用于以下场景:

  • 意外的对外连接
  • 服务状态验证
  • 连接泄漏排查
  • 安全事件响应
  • 网络故障诊断

当一个应用程序看起来“卡住”时,ss 能够告诉你,它是不是正在等待网络响应。

lsof:一切皆文件

在 Linux 中,被表示为文件的远不止文档。

  • Socket(套接字)

  • Pipe(管道)

  • 设备

  • 目录

  • 共享库

每个进程都会为自己访问的资源维护文件描述符(File Descriptor)。

lsof 可以将这些关联关系完整展示出来。

查看某个进程打开的文件:

lsof -p

查看哪个进程占用了某个 TCP 端口:

lsof -i :443

一个特别实用的排查命令:

lsof | grep deleted

已经删除的日志文件,只要仍然被运行中的进程持有文件描述符,就依然会占用磁盘空间。

这也解释了为什么很多时候 df 显示文件系统已经满了,du 却找不到这些被占用的空间。

journalctl:结构化的系统日志

传统的 Linux 日志通常需要在 /var/log 下翻阅多个日志文件。

采用 systemd 系统,则会通过系统日志(Journal)统一管理日志。

无需逐个搜索日志文件,就可以按服务查询:

journalctl -u nginx

查看最近的日志:

journalctl --since ”30 minutes ago”

查看当前启动周期(Boot)的日志:

journalctl -b

由于日志与系统元数据、时间戳、进程 ID 以及服务单元(Service Unit)保持关联,因此排查服务失败的问题会轻松得多。

vmstat:内存问题,看起来往往不像内存问题

很多工程师在服务器变慢时,第一反应是查看 CPU 使用率。

vmstat 往往能揭示真正的瓶颈。

vmstat 1

重点关注:

  • r —— 可运行进程数
  • b —— 被阻塞进程数
  • si —— Swap 换入
  • so —— Swap 换出
  • wa —— I/O 等待

如果系统大量时间都在 RAM 与存储之间交换内存页(Swap),即使 CPU 利用率不高,系统也可能无法使用。

它的表现很像 CPU 已经被耗尽。

但真正的原因,其实是内存压力过大。

dmesg:倾听内核的声音

应用程序只能报告它所观察到的现象。

内核则会告诉你,在操作系统层面发生了什么。

查看最近的内核事件:

dmesg -T | tail

重点关注:

  • 硬件故障
  • 磁盘 I/O 错误
  • OOM(内存不足)终止
  • 驱动初始化失败
  • 文件系统问题
  • 网络设备重置

忽略内核日志,意味着错过系统变得不稳定时最早出现的证据。

find:远不只是搜索文件

大多数人认为 find 只是用来查找文件名。

事实上,它的过滤能力远不止如此。

查找最近一天修改过的文件:

find /var/log -mtime -1

查找超过指定大小的文件:

find / -type f -size +500M

查找属于指定用户的文件:

find /home -user alice

在安全事件响应中,find 是定位异常文件、可疑可执行程序以及最近生成痕迹(Artifacts)的高效工具。

xargs:把输出变成工作流

许多 Unix 工具都会产生输出。

xargs 可以把这些输出转换成另一个命令的输入。

例如:

find . -name ”*.log” | xargs grep ”ERROR”

或者删除所有空目录:

find . -type d -empty | xargs rmdir

很多原本需要编写 Shell 脚本完成的重复性管理任务,都可以用几条简洁的命令管道来实现。

tee:观察,而不中断流程

命令管道通常会隐藏中间输出。

tee 可以复制数据流。

例如:

journalctl -u nginx | tee errors.log

日志会一边显示在终端,一边写入文件。

在故障排查过程中,如果你希望保留现场证据,同时又不想重新执行命令,这一点尤其有用。

watch:持续观察

不断按“方向键↑”再按 Enter 重复执行命令,很快就会变得令人厌烦。

不如这样:

watch -n 2 ”ss -ant”

或者:

watch -n 1 ”free -h”

命令会按照固定时间间隔自动执行。

这使得你能够在部署、性能分析或故障响应期间进行轻量级实时监控,无需部署专门的监控平台。

diff:比较,而不是猜测

配置漂移(Configuration Drift)是生产环境问题的常见来源。

与其肉眼逐行比较文件,不如直接:

diff nginx.conf nginx.conf.backup

很多时候,一个看似不起眼的小差异,就足以导致系统行为发生巨大变化。

在部署过程中,比较配置文件,往往比翻阅应用日志更快找到问题根源。

env:你的运行时配置

很多应用程序之所以表现不同,不是因为代码发生了变化,而是环境变量变了。

查看当前运行环境:

env

在调试容器化应用、CI/CD 流水线或 systemd 服务时,检查环境变量应当是最早进行的排查步骤之一。

缺失的密钥(Secret)、错误的路径,或被修改的配置值,都是导致应用行为异常的常见原因。

这些工具有一个共同特点

仔细观察这些工具,你会发现它们有一个共同点。

它们都不会修改系统。

它们只是观察系统。

它们能够揭示:

  • 网络状态
  • 进程行为
  • 内存压力
  • 文件描述符使用情况
  • 内核活动
  • 系统配置
  • 运行时环境

经验丰富的工程师,在修改系统之前,首先会弄清楚系统当前的真实状态。

这些工具,正是帮助他们做到这一点的利器。

在扩展操作系统之前,先学会操作系统

Linux 拥有世界上最丰富的软件生态之一。

安装专业工具,很多时候确实是正确的选择。

但许多工程师忽略了一个重要的事实。

操作系统本身,早已提供了一套成熟、高效且经过充分验证的工具,足以应对大多数日常问题的排查与分析。

无论你是在调试生产环境故障、追踪资源消耗、调查安全事件,还是仅仅想弄清楚一台陌生服务器的运行情况,这些内置工具都能直接让你看到 Linux 真正是如何工作的。

回头看,在不断给系统安装更多软件之前,我本应该花更多时间,把那些早已存在系统中的工具学会。

因为,Linux 最有价值的工具,往往正是那些你从来不需要安装的工具。

参考

https://medium.com/@fatihaali093/the-built-in-linux-tools-i-wish-someone-had-shown-me-earlier-4621005dffa9

最新文章

随机文章