Skip to content

约 3 分钟阅读

Linux 常用命令 ​

订单导出失败,先确认日志在哪里、哪个请求出错,再检查进程、端口、权限与磁盘。命令应围绕一个可验证的问题使用:输入是什么、操作哪个对象、输出能证明什么。此处以 Linux 上常见的 GNU 工具、procps、iproute2 和 Bash 为例,BusyBox、BSD/macOS 的选项可能不同。

从现象找到操作对象 ​

从订单故障定位文件、进程、网络与权限证据

例如应用报“无法写入导出文件”,先确认有效身份和实际输出路径,再看父目录权限、挂载点容量与 inode。给文件加执行位或重启 Nginx,都没有回答这个问题。

要做的事阅读入口
识别目录、复制产物、理解链接文件基础
找到路径或配置文件查找
看大日志、编辑并验证配置文件查看与编辑
提取字段、统计、比较结果文本处理、文本比较
查 CPU、内存、磁盘与系统版本系统信息、系统监控
查进程、后台任务和退出进程管理、进程速查
查连接、DNS、HTTP和路由网络命令、基础连接、配置与诊断
解释文件权限、ACL与访问失败文件权限、访问诊断
管理身份、环境和执行入口用户管理、环境配置
归档、恢复和安装依赖归档、压缩速查、软件包

读命令时先看范围 ​

bash
ls -lh -- /var/log

这里的动词是 ls,对象是 /var/log,选项要求长格式和易读大小;-- 结束选项解析。路径以 - 开头时尤其需要明确边界。变量和可能含空格的路径要加双引号,通配符则由 shell 在程序启动前展开。

bash
log_file="./order api.log"
tail -n 80 -- "$log_file"
grep -n -F -C 3 -- 'req-2048' "$log_file"

-F 按固定字符串搜索,避免把请求编号中的点号、括号当正则。读取末尾和上下文只缩小调查范围,不会自动得出根因。Bash 的 type -a 命令 可区分别名、函数、内建命令和外部程序;找不到命令时再看 PATH 与软件包。

三条有结果的排查路径 ​

接口不通 ​

在对应主机或命名空间内,先确认监听地址与端口,再发实际请求并对齐服务日志。由 systemd 管理的服务才使用 systemctl;普通应用容器应查容器运行状态和标准输出。

bash
ss -lntp 'sport = :8080'
curl --connect-timeout 3 --max-time 10 -v http://127.0.0.1:8080/

无监听、HTTP 404、HTTP 500和连接超时是不同证据。404说明该请求得到HTTP响应;不能因此认定目标业务成功。ping被禁也不代表HTTP必然不可用,代理与TLS路径还需按网络页分析。

磁盘写入失败 ​

bash
df -h -- /实际输出目录
df -i -- /实际输出目录
du -xhd1 -- /实际输出目录

容量与inode分别回答字节空间和文件数量问题,du只统计能遍历到的目录项。df高而du低时,还要查已删除但仍打开的文件、挂载视图和权限。不要直接清空整个 /tmp;先定位业务对象、保留期限及使用者,清理后复验同一次写入。

导出结果不对 ​

先按请求编号读日志,再比较输入、输出和退出码。压缩程序返回非零时,即使文件已存在也不能标记成功;读取不到配置时,要以服务身份验证路径权限。最终用同样的订单输入复验,不以“命令没有报错”代替业务验收。

输出与退出码要一起看 ​

grep 返回0表示匹配,1表示无匹配,通常2表示错误;diff 返回1表示有差异,2表示执行错误。脚本不能把所有非零一律归为同一故障,也不能把stderr全部重定向丢弃后声称检查通过。

Bash管道默认返回最后一条命令的状态;前面的查找失败,后面的统计仍可能成功。自动化需明确是否采用 set -o pipefail、如何处理预期无匹配和SIGPIPE,并保留原始错误。需要批量操作任意文件名时,用 find -exec ... {} + 或NUL分隔,不解析ls输出。

本目录把概念与命令绑定到具体任务。先读有关机制,再在临时目录或明确的服务范围内执行,最后检查实际结果。

别急,先让缓存热一下。