Linux常用命令速查手册:文件操作、文本处理与系统监控实战指南
发布时间:2026/9/10 12:42:43 锦皓数字建站

Linux 命令这东西属于典型的“用时方恨少查完就忘掉”。我日常跟服务器、跟嵌入式设备、跟一堆跑在虚拟环境里的实例打交道很多命令说实话不是“记不住”而是“没必要全记在脑子里”。真正高效的用法是脑子里建立一张索引图知道什么场景该查什么命令、去哪里查、怎么组合着用剩下的事交给手册和 man page 就行。但很多刚接触 Linux 的朋友包括一些写了一两年脚本的同事卡住的往往不是某个具体参数而是“不知道有这个东西存在”或者“知道命令但不知道它还有这种玩法”。这篇博文就按我自己的使用习惯把 Linux 常用命令从文件操作、文本处理、系统监控、网络排查到权限与存储整理成一份能直接放进书签的速查手册尽量覆盖运维、开发和日常折腾的高频场景。这份手册解决什么问题说直白点帮你把 Linux 命令从零散的碎片拼成一张可复用的知识网。它适合刚上手 Linux 的新手快速建立全局认知也适合有经验的人放在手边当工具书翻找面试前拿来做一轮系统回顾同样很合适。我不打算罗列几百条命令把你劝退而是只讲真正高频、真正能解决实际问题的那些并说明每条命令背后的思路和常用组合玩法。1. 整体思路与命令学习的三层逻辑1.1 为什么很多命令你记不住先纠正一个误区记不住命令不是记忆力问题是大脑对“没有逻辑关联的信息”天然排斥。你硬背tar -zxvf和unzip的区别当然容易混但如果你意识到“压缩解压”这条线上Linux 的工具设计逻辑是“压缩算法”和“归档格式”两件事分开处理脑子里有了这个框架遇到新格式也能猜个大概。我用下来最顺手的组织方式是把命令分成三个层次第一层文件与目录操作。这是地基SSH 登上一台新服务器80% 的操作都围绕文件在转。第二层文本处理与内容分析。Linux 哲学是“一切皆文件一切皆文本”日志、配置、输出结果全是文本会处理文本就等于会跟系统对话。第三层系统状态与网络排查。前面两层让你能“干活”这一层让你能“看病”对整台机器当前的状态做到心里有数。每次遇到新命令你先往这三层框架里放一放再补上它对“输入”“输出”的处理方式记忆负担会小很多。下面每个章节我都按这个逻辑展开。1.2 命令速查的三个核心技巧学会少走半年弯路第一个技巧用man不如先学“看什么”。很多人知道man ls可以看手册但打开后被一堆英文说明淹没。我的习惯是先看man页里的EXAMPLES段落大部分 GNU 工具在末尾都有示例那是精炼过的用法。没有 EXAMPLES 的直接搜关键词/加你要找的功能比如想知道怎么按时间排序就输入/sort by time。第二个技巧善用--help快速试错。比起翻整篇 manls --help这种输出更紧凑适合确认某个参数是否存在。实际操作中我经常是先--help快速确认需要深挖再进 man。第三个技巧建立自己的速查笔记。这不是废话。遇到一条解决了实际问题的命令花 10 秒把它连同场景一起记进自己的笔记里。我自己的笔记里就有很多这种条目比如“用du -sh * | sort -rh找出目录里占空间最大的几个文件”这类组合命令比单一命令价值高得多也是本手册想给你的核心资产。2. 文件与目录操作命令详解2.1 高频命令速查表覆盖日常工作 80% 场景文件操作是 Linux 最基础的能力先把最常用的列成一张表每条后面附上我实际使用时的高频组合。命令核心用途我常用的组合/参数实际场景pwd显示当前路径无刚登服务器先确认自己在哪cd切换目录cd -返回上次目录在两个目录间反复横跳时极好用ls列出文件ls -lh人性化大小ls -lt按时间倒序看最新日志文件cp复制文件/目录cp -r复制目录cp -a保留权限属性备份配置目录mv移动/重命名无注意跨文件系统时会变成复制删除rm删除文件/目录rm -rf强制递归删除慎用清理无用目录mkdir创建目录mkdir -p a/b/c递归创建创建多层项目结构touch创建空文件/更新时间戳无快速生成占位文件ln创建链接ln -s软链接无参数为硬链接给可执行文件做软链到 PATH这里我想特别强调一下rm -rf的威力。很多事故都是rm -rf /或者rm -rf /*这种手滑操作造成的。我自己的安全习惯是在 root 用户下rm一律先ls看一眼再删删除变量拼接的路径先用echo $VAR确认变量值是否符合预期。别嫌多此一举这个习惯在线上环境救过我很多次。2.2 文件权限、属主与特殊位理解这套模型才算入门ls -l输出的第一列像-rw-r--r--这 10 个字符的含义很多新手背了又忘因为没理解它的设计模型。本质上是三组权限属主 u、属组 g、其他人 o每组三位读 r4、写 w2、执行 x1前一位是文件类型-普通文件、d目录、l软链、c字符设备。数字法修改权限是最高频的操作chmod 755 file表示属主可读写执行、属组和其他人只读执行。这个 755 是怎么来的7421所以属主全权限541只读加执行。如果想让脚本只能被自己修改、其他人只能执行或读取那chmod 755就是默认首选。再往前一步是特殊权限位。chmod 4755 file中的4是setuid表示执行该文件时进程获得文件属主的权限。典型例子是/usr/bin/passwd普通用户能通过它修改自己的密码因为 passwd 文件只有 root 能写setuid 让 passwd 程序以 root 身份运行。排查服务器安全时find / -perm -4000 2/dev/null找出所有 setuid 程序是标准动作这类程序是提权攻击的高发点。目录权限的坑也要单独说一下目录的r权限只决定能不能列出目录内容能不能进入目录取决于x权限。所以有时候你会遇到ls 提示权限不足但能cd进目录的情况反过来也一样。想给用户一个只能进出、不能列内容的目录就可以设置成chmod 711 dir。2.3 文件查找三件套which、locate、findwhich查的是 PATH 里的可执行文件位置最常用于确认某个软件是否安装、安装在哪。type比which更全能区分出别名alias、内建命令和外部命令比如type ls会告诉你它可能是ls --colorauto的别名。locate基于预建索引查询极快但索引可能过期。新装系统后第一件事就是更新索引。多数发行版没默认装locate需要安装mlocate或plocate包。它适合找“已知名字但不知道放哪”的文件。find是真正的重度工具精通它要花不少功夫但掌握几个核心场景就够用# 按名字查 find /etc -name *.conf # 按大小查大于 100MB 的文件 find / -size 100M # 按时间查最近 7 天内修改过的文件 find . -mtime -7 # 按类型查目录 find /var -type d -name log* # 找到后直接执行操作删除 30 天前的 .log 文件 find /opt/apps/logs -name *.log -mtime 30 -exec rm {} \;这里重点说-exec和-delete。-delete简单直接但没法加条件外的操作-exec rm {} \;中{}是每一条搜索结果的占位符\;表示命令结束。批量操作文件时这个组合比写循环脚本更简洁。但要注意-exec对每个文件都会启动一次新进程文件很多时性能差可以用-exec ... 优化成“尽量一次性传递多个文件给命令”。3. 文本处理与内容分析命令进阶必学3.1 grep、sed、awk 三件套自定义数据提取加工流水线服务器上的日志、配置、命令输出全是文本处理文本的能力直接决定工作效率。grep、sed、awk 这三件套我当作战术武器来用。grep负责“按行筛选”最简单的场景是找日志里的错误grep ERROR app.log grep -i error app.log # 忽略大小写 grep -E ERROR|WARN app.log # 扩展正则多个关键词 grep -A 5 Exception app.log # 匹配行后 5 行 grep -B 2 Exception app.log # 匹配行前 2 行 grep -c ERROR app.log # 统计出现次数grep -E支持扩展正则我用到频率最高的是^行首匹配、$行尾匹配、[0-9]字符集、.*任意字符。排查日志时我经常用grep 2026-01-15 10: app.log | grep -v heartbeat这种管道串联把时间范围锁死再去掉噪声关键词很快能定位问题窗口。sed是流编辑器核心职能是“按规则增删改”。最常用的是替换sed -i s/old/new/g file.conf # 替换文件内所有 old 为 new sed -n 10,20p app.log # 打印第 10 到 20 行 sed -i /^#/d file.conf # 删除所有注释行以 # 开头-i直接修改原文件在脚本里批量改配置很常用。但这里有个处理技巧不要在没备份的情况下直接sed -i动生产配置。我一般先cp file.conf file.conf.bak再操作或者用sed -i.bak s/.../.../ file.conf让 sed 自动生成.bak备份文件。这个后缀名可以自定义sed -i.bak就会生成一个原名加.bak的备份。awk是三者中最复杂的但不需要学完全部才能用它解决实际问题。日常用得最多的是“取列”# 打印第一列和第三列 awk {print $1, $3} data.txt # 以冒号为分隔符处理 /etc/passwd 文件 awk -F: {print $1, $6} /etc/passwd # 统计文件行数 awk {count} END {print count} app.logawk 的-F参数指定分隔符不指定时默认是空格/制表符。有一个我经常用的例子从df -h输出里提取根分区的使用率df -h / | awk NR2 {print $5}NR2表示只处理第二行也就是df输出的数据行第一行是表头$5就是使用率百分比。这种“命令输出接 awk 提取字段”的模式在监控脚本里出现频率非常高。3.2 查看文件内容cat、less、tail、head 的正确打开方式查看文件内容谁都会但不同场景有不同的正确姿势。小文件预览用cat没问题但cat一个几百 MB 的日志会把整个终端刷爆这时候就该用less。我几乎不用cat看大文件less支持上下翻页、/搜索、G跳到最后一行、g跳到第一行阅读体验和对大文件的友好程度都是最优的。tail是我在工作中最依赖的命令之一因为绝大多数问题都发生在“最新产生的数据”里tail -n 50 app.log # 看最后 50 行 tail -f app.log # 实时跟踪文件新增内容 tail -f -n 100 app.log # 先显示最后 100 行再持续跟踪tail -f是排查实时日志的首选启动服务、接收请求、观察报错直接开着这个窗口等输出即可。跟它对应的是head -n看文件开头部分比如查看配置文件的头部注释和默认设置。这里补一个真实场景tail -f在文件被改名或清空时可能停止输出或显示奇怪内容此时可以加-F大写它会检测文件被重建后自动重新打开。典型场景是 logrotate 日志轮转后tail -f还在跟踪旧的已被改名文件用tail -F就能避免这个坑。3.3 文本统计、去重、排序sort、uniq、wc、cut 的组合拳处理日志和分析数据时这几个命令经常串在一起用。我举一个实际例子统计一份访问日志里出现次数最多的 10 个 IP 地址。cat access.log | awk {print $1} | sort | uniq -c | sort -rn | head -n 10这条命令链的每一步都值得拆开讲awk {print $1}提取第一列的 IPsort把相同 IP 排到一起uniq -c只能统计相邻行所以必须先排序uniq -c给每个去重后的值加上出现次数sort -rn按数字逆序排-r倒序、-n按数字而非字典序最后head -n 10取前十条。wc最常用的是-l统计行数比如确认日志文件有多少行、配置文件里有多少个非空行wc -l /var/log/syslog grep -v ^$ file.conf | wc -l # 过滤空行后统计行数cut在字段提取上跟 awk 有重叠但更轻量。cut -d: -f1 /etc/passwd可以取所有用户名cut -c1-10 file取每行前 10 个字符。字段结构规整的纯文本用 cut 更直观结构复杂或需要同时处理多分隔符时交给 awk。4. 系统状态监控与性能排查命令4.1 用 top、free、df、ps 快速判断服务器健康状况新接手一台服务器或者线上服务出问题时我一般按这个顺序快速摸底先看负载均衡是否健康再登主机看top、free和df确认 CPU、内存、磁盘三大核心资源。top打开后是动态刷新的进程视图我重点看两处第一行 load average 的三个数字分别代表 1 分钟、5 分钟、15 分钟的平均负载。虽然负载不完全等于 CPU 使用率但三个数字同时偏高且呈上涨趋势基本可以判断系统正在经历压力。按P键按 CPU 排序进程按M键按内存排序这两个快捷键是标配。现代系统我更多用htop操作更直观但很多精简服务器默认没装所以top的基础一定不能丢。free -h看内存-h参数让输出变成人类可读的 MB/GB 单位。看内存有个常见的误区只关注free列把buff/cache当成“已用”。实际上 Linux 会把空闲内存拿来缓存磁盘数据这部分在内存紧张时会被自动回收。更合理的判断方式是看available列它才是估算“还可用多少”的可靠指标。df -h看磁盘分区使用率df -i看 inode 使用率。inode 是文件系统里记录文件元数据的结构有时候磁盘明明还有空闲但报“No space left on device”原因就是 inode 被大量小文件占满了。清理那种由错误脚本产生的海量小文件比清理大文件更紧急df -i是排查这类问题的关键命令。ps查进程细节ps -ef和ps aux是两个最常用的风格。两者内容基本一致-ef是 Unix 风格aux是 BSD 风格。我常用ps aux --sort-%cpu | head按 CPU 使用率排序看最耗资源的进程。4.2 网络排查黄金命令ping、ss、netstat、traceroute网络问题排查有一套标准路径从“通不通”到“谁在监听”再到“数据走了哪条路”。首先是ping确认目标主机是否可达、延迟大致多少。ping通说明三层连通性没问题但不代表应用正常ping不通也不一定是对端宕机很可能只是禁了 ICMP。端口监听状态用ss或老牌的netstatss -tlnp # 查看所有监听中的 TCP 端口及对应进程 netstat -tulnp # 老命令参数含义ttcp, uudp, llistening, n不解析域名, p显示进程排查“端口被占用”时ss -tlnp | grep 8080能直接显示占用 8080 端口的 PID 和进程名。-p参数需要 root 权限才能显示自己之外的进程信息非 root 用户看到的是users:((java,pid1234,fd...))这样的部分信息可能因权限不足隐藏进程名。traceroute看数据包从本机到目标经过的路由节点-n参数不解析主机名输出更干净。如果你在国内网络环境traceroute 时某些节点超时是常态不一定是网络故障需要结合整体链路判断。它主要解决的是“数据到底卡在哪一跳”的问题跨机房运维定位问题边界很实用。4.3 磁盘与 I/O 排查du、iostat、lsof 的实战组合磁盘空间排查是日常运维最高频的场景之一。定位大文件的链路一般是df -h # 先看哪个分区满了 du -sh /var/* 2/dev/null | sort -rh | head # 查 /var 下哪个目录最大 du -sh /var/log/* 2/dev/null | sort -rh | head # 继续往下钻du -sh *中的s是 summary 汇总、h是人性化大小管道接sort -rh按大小倒序一下就能看到“罪魁祸首”。还有一条我从线上问题总结出来的命令在某个目录里找出所有超过 1GB 的文件。find /var -xdev -type f -size 1G -exec ls -lh {} \; 2/dev/null-xdev限制不跨越文件系统挂载点避免去扫/proc、/sys这类虚拟文件系统。注意虚拟文件系统里的文件显示大小是 0 或特殊值查实际占用时一定要排除。磁盘性能问题用iostat它能看到每个磁盘的读写速率、IOPS 和等待队列长度。iostat -x 1每秒刷新一次重点看%util列是否长期接近 100%接近则说明磁盘基本在满负荷运转。如果应用本身忙但有卡顿感而 CPU、内存都正常那大概率是磁盘 I/O 在拖后腿。lsof是个被低估的好工具。lsof | grep deleted可以找出“已被删除但还被进程占用”的文件。这类文件在df里看不到空间被释放因为进程还持有句柄常见于运行中的服务把日志文件删了但没重启。新版系统上用lsof L1也有类似效果。线上磁盘满了却找不到大文件时多半就是这个原因。处理办法是把对应进程重启或者truncate -s 0 /proc/pid/fd/n清空句柄指向的文件。5. 用户管理、权限配置与安全加固常用命令5.1 用户和用户组操作useradd、usermod、passwd 的完整用法服务器安全管理的第一道关是账号管理。常规操作用useradd创建用户-m自动创建家目录-s指定登录 shell-G指定附加组useradd -m -s /bin/bash -G docker zhangsan passwd zhangsan # 设置或修改密码 usermod -aG sudo zhangsan # 把用户加入 sudo 组Debian/UbuntuDebian/Ubuntu 与 RHEL/CentOS 在用户组上有差异Ubuntu 的 sudo 用户加入的是sudo组CentOS 上是wheel组。用错组名不会报错但用户没法 sudo查错会绕不少弯。想让新建用户加入多个组-G参数可以跟逗号分隔的多个组名。另外useradd只是创建账号默认不带任何权限至于创建后要不要设密码、要不要允许登录就看实际需求了。批量创建用户时可以用循环脚本处理。比如根据用户列表批量创建并统一初始化密码for u in zhangsan lisi wangwu; do useradd -m -s /bin/bash $u echo $u:初始密码123 | chpasswd donechpasswd从标准输入读取用户名:密码格式批量设密码比逐个passwd高效得多。实际使用中初始密码应该设为一次性密码并强制用户下次登录修改这就是chage -d 0 username的用途。5.2 用 sudo 和日志审计管好提权行为避免 root 满天飞很多新手习惯直接用 root 干活权限是够了但风险极大。误操作、被入侵后面临的权限扩散、多人共用 root 密码导致无法追溯都是生产中真实踩过的坑。正确做法是给需要权限的人开普通账号通过sudo按需提权。visudo打开/etc/sudoers编辑界面常见配置片段# 允许 wheel 组所有成员执行所有命令 %wheel ALL(ALL) ALL # 允许用户 zhangsan 无需密码执行 systemctl 相关命令 zhangsan ALL(ALL) NOPASSWD: /usr/bin/systemctl # 只允许执行特定命令 lisi ALL(ALL) /usr/bin/systemctl restart nginxsudo 日志默认记录在/var/log/auth.logDebian/Ubuntu或/var/log/secureRHEL/CentOS查看这些日志能审计谁在什么时候执行了什么提权操作。启用 sudo 日志审计的核心价值在于出了问题能回查给团队立好“所有敏感操作通过 sudo 执行并在日志留痕”的规矩比事后抓瞎强得多。我自己有个习惯尽量不给任何人开无密码的 NOPASSWD sudo 权限。这条规则看起来很省事但失去的是一次二次确认的机会对于危险性极高的rm、dd这类命令尤其不该放开。5.3 文件特殊权限与安全排查常用审计命令速查安全相关的排查命令我在这里一并整理成清单面试或做安全巡检时可以直接对照使用who和w查当前登录用户及其操作。w能显示负载、登录时间、当前执行的命令判断是否有人偷偷登进来。last查看登录历史记录last -n 20看最近 20 条。lastb查看失败的登录尝试爆破攻击后这里会有一大串记录。find / -perm -4000 -type f 2/dev/null查找所有 setuid 文件重点检查这些文件的属主是否正常。find / -nouser -o -nogroup 2/dev/null查找属主或属组已不存在的文件可能是残留账号或异常文件的线索。cat /etc/passwd和cat /etc/shadow检查是否存在异常账号或空密码账号。/etc/shadow中密码字段为空表示未设置密码这种账号极其危险。ss -tlnp确认对外监听的端口是否都在预期内防止后门监听在奇怪端口上。安全巡检的核心理念不是“装多贵的安全软件”而是定期执行几条简单命令并理解输出。我见过不少服务器被入侵的案例其实早期都有端倪比如异常账号、异常监听端口、/tmp下的可疑文件只是没人定期看。6. 网络配置与传输操作curl、scp、rsync 实战6.1 接口测试与文件下载用 curl一条命令解决跟 HTTP 有关的一切curl是处理 HTTP 请求最强大的命令行工具接口调试、模拟请求、下载文件全靠它。我最常用的是这些组合curl -I https://example.com # 只看响应头 curl -i https://example.com # 响应头响应体 curl -X POST -H Content-Type: application/json \ -d {name:test,age:18} https://example.com/api curl -k https://example.com # 跳过证书验证测试自签证书时用 curl -o file.zip https://example.com/file.zip # 下载到指定文件名-X POST指定请求方法-H添加请求头-d传请求体。连 RESTful API 时我经常直接拿它测接口连不连得通返回的状态码和三方工具看到的基本一致。-k跳过证书验证这个参数在测试环境里很有用但生产环境别乱用会掩盖证书问题。curl 断点续传下载用-C -大文件下载一半断网了重新执行会在上次的位置继续。这个参数老版本和新版本行为略有差异但常规使用都没问题。6.2 用 scp 和 rsync 传文件从简单复制到增量同步服务器之间传文件最简单的姿势是scpscp file.txt userremote:/tmp/ scp -r /data/app userremote:/data/ scp -P 2222 file.txt userremote:/tmp/ # 指定 SSH 端口注意-P是大写-p小写是保留文件时间戳这个大小写问题坑过不少人。scp适合一次性、单文件、量不大的传输场景。多人协作或目录经常变更时rsync是更好的选择。它最核心的优势是增量传输第一次全量以后后续只传变化的部分对大目录同步效率极高# 本地同步到远程-a 归档模式保留权限-v 显示过程-P 显示进度并支持断点 rsync -avP /data/app userremote:/data/ # 排除某些目录不传 rsync -avP --exclude logs/ --exclude *.tmp /data/app userremote:/data/ # 从远程拉取 rsync -avP userremote:/data/app /data/ # 删除源端已被删除的文件保持两端完全一致慎用 --delete rsync -avP --delete /data/app userremote:/data/--delete参数要特别谨慎。它的含义是让目标目录变得跟源目录完全一致源端删掉的文件目标端也会删除。在自动化同步脚本里它很管用但如果你只是想把文件拷过去备份加了--delete反而可能把目标端本应该保留的文件删掉。我第一次用 rsync 时就在这里吃过亏现在凡是带--delete的命令我都会在测试环境先跑一遍--dry-run-n参数看看到底会删什么确认无误再加真参数执行。6.3 系统更新与软件包管理apt、yum 的对照速查软件包管理命令不同发行版不一样Debian/Ubuntu 用aptRHEL/CentOS 用yum或dnf底层都是解决依赖关系的包管理器。核心操作对照如下操作Debian/UbuntuRHEL/CentOS更新软件源列表apt updateyum makecache升级所有包apt upgradeyum update安装软件apt install 包名yum install 包名卸载软件apt remove 包名yum remove 包名搜索软件apt search 关键词yum search 关键词查看已安装apt list --installedyum list installedapt用熟后处理依赖关系的工作量少了一大截。安装编译类软件之前我习惯先搜一下有没有 dev 包可以直接装apt search能省掉很多手动编译依赖的痛苦。如果要从源码安装 Python比如在服务器上编译安装新版本流程通常是先apt install build-essential libssl-dev zlib1g-dev装齐编译依赖再去 Python 官网下载源码包解压./configure --enable-optimizations配置最后make make install。这里有个易错点源码安装的 Python 默认不在 PATH 里经常需要手工做软链接或修改 PATH 变量。7. 实用技巧与问题排查实录7.1 管道、重定向与历史命令大幅提升效率的小习惯Linux 命令设计最精妙的地方就是管道|和重定向、。管道把前一个命令的输出作为后一个命令的输入一层层传递下去。很多复杂的操作其实都是简单命令的组合。重定向的三个方向必须分清覆盖写追加写2把错误输出写入文件。我调试脚本时经常用到./deploy.sh deploy.log 2121表示把标准错误重定向到标准输出所在的文件这样正常输出和错误输出都进了同一个日志。如果不加这个错误信息会在终端里一闪而过脚本挂了你都看不到报错在哪。老手写脚本都会用21新手经常漏掉排查问题时就缺了最关键的线索。历史命令的高效玩法history列出之前的命令!123重新执行编号为 123 的历史命令CtrlR进入反向搜索输入关键字模糊匹配历史命令。我每天在终端里输入CtrlR的次数比很多命令都多尤其是那种“昨天明明跑过但没记住”的长命令搜一下直接回车效率翻倍。还有一个细节是 Tab 键自动补全。不要只补命令名路径、参数、变量名都能补。补全出多个选项时连按两次 Tab 会列出所有可能这个习惯在文件操作时尤其有用。7.2 常见问题排查实录踩过的坑全记录问题一磁盘空间显示满了但du找不到大文件。最开始我用du -sh /一层层往下钻发现每层目录加起来跟总占用对不上。后来怀疑是有文件被删了但进程还持有句柄执行lsof | grep deleted果然找到了一个被删除的几百 MB 日志文件PID 属于正在运行的 Java 服务。解决办法是将服务重启或者定位/proc/pid/fd下对应的文件句柄用ls -l /proc/pid/fd | grep deleted找出来再清理空间。问题二文件权限明明给了777程序还是报“Permission denied”。后来发现是挂载的分区用了noexec选项文件根本不允许执行。用mount查看挂载参数确认后调整/etc/fstab里对应分区的挂载选项。从这个案例我总结出两个排查顺序先看文件属主和权限再看父目录权限最后检查挂载选项和 SELinux/AppArmor。问题三在 WSL 里删除了大文件Windows 磁盘空间没有释放。WSL2 使用虚拟磁盘文件删除文件后空间不会自动还给宿主机。常见思路是重启 WSL 让系统清理一遍或者手动压缩 vhdx 文件先wsl --shutdown再以管理员身份运行diskpart选择虚拟磁盘文件并执行 compact 操作。这类问题本质上是虚拟磁盘的“瘦身”机制不是删除操作本身出错。问题四解压文件出现中文乱码。通常是压缩包的编码跟系统默认不一致。Linux 下许多 zip 包用 GBK 编码打的中文文件名直接 unzip 会乱码。解决办法是用支持指定编码的工具unzip -O GBK file.zip这个-O参数在部分 unzip 版本里可用如果没有该参数可以用 Python 脚本或安装unzip的补丁版本。还有一个方案是解压后用convmv批量转换文件名编码。总之遇到乱码先判断是文件名乱码还是文件内容乱码两者处理思路完全不同。问题五刚学 Linux 时在 /etc 下瞎改配置导致系统起不来。那台机器最后只能用单用户模式进去修复。从那以后我给自己立了一条死规矩所有系统配置文件改动前先备份能不动/etc就不动即便要动也是先cp一份.bak然后修改、验证、确认没问题后再保留。7.3 面试前如何系统复习 Linux 命令高频考点清单Linux 命令是面试必考项这里把高频考点整理成方便自查的清单文件操作ls -l每个字段含义ln -s与硬链接区别find的-name/-size/-mtime/-exec。文本处理grep常用参数sed替换awk取列与分隔符sort和uniq配合wc -l。权限管理chmod 数字法原理setuid/setgid/sticky bitsudo与visudo配置。系统监控top与htop的区别free中 available 的含义df与du的对比ps -ef与ps aux。网络排查ping、ss、telnet/nc的适用场景curl 的-I/-X/-H/-d参数。软件与服务systemctl 的 start/stop/restart/enable 操作apt/yum 常见命令对照。性能分析会看top里 load average知道iostat、sar能查什么遇到 CPU 飙高能说出top按 CPU 排序的排查路径。面试答题时除了背命令还要能说清“为什么”。比如除了写cat access.log | awk {print $1} | sort | uniq -c | sort -rn | head还要能解释uniq -c为什么必须先 sort、sort -rn为什么能按数字倒序这样面试官才会觉得你是真用过而不是死记硬背。8. 日常使用中的效率提升建议8.1 配置个性化 shell 环境alias 与 .bashrc我每次拿到新服务器第一件事就是整理~/.bashrc把高频命令缩写成语义清晰的别名。以下是我个人最常用的几组alias llls -alF alias lals -A alias lls -CF alias grepgrep --colorauto alias egrepegrep --colorauto alias dudu -h alias dfdf -h alias ..cd .. alias ...cd ../.. alias clscleargrep --colorauto这个别名对排查日志的帮助很大匹配内容会在终端里高亮扫报错时肉眼能快速聚焦到关键字段。ll在大部分发行版默认已有但有些精简系统里没有手动设置能保证体验一致。别名之外~/.bashrc还可以追加自定义函数。比如我常用的“在指定目录下启动一个简易 HTTP 服务方便局域网内传文件”alias servepython3 -m http.server 8000一执行这台机器的 8000 端口就开了一个文件服务同事直接在浏览器访问http://ip:8000就能下载当前目录的文件。团队协作时这个操作非常省事但也提醒一句用完后记得关掉不然等于给局域网开了个匿名共享。8.2 用 systemd 管理服务运维工作更省心现代主流发行版的服务管理都交给了 systemd核心命令是systemctl。至少要把这些掌握到手systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl enable nginx # 设置开机自启 systemctl disable nginx # 取消开机自启 systemctl status nginx # 查看服务状态 systemctl daemon-reload # 重载配置文件 journalctl -u nginx -f # 查看服务日志并实时跟踪排查服务起不来时systemctl status只给一部分信息核心排查动作要看journalctl -u 服务名 -n 50直接看最近 50 行日志。很多新手只盯着 systemctl status 的红字忽略了真正记录报错的 journal 日志绕了不少弯。如果服务配置被改动过别忘了先daemon-reload再 restart否则改动可能不会生效。除了系统自带服务自己写的小程序也可以用 systemd 守护。在/etc/systemd/system/myapp.service放一个 Unit 文件定义启动命令、工作目录、日志输出路径然后 enable start 就能托管。它自动处理崩溃重启、开机自启、标准输出采集比自己写 nohup 脚本优雅得多。8.3 压箱底命令清单这些命令关键时刻能救命最后分享几条不那么常见、但每个都可能在极限时刻救你一把的命令# 找出当前目录占用空间最大的 20 个文件 find . -type f -printf %s %p\n | sort -rn | head -20 # 快速杀掉名为 chrome 的全部进程注意精确匹配 pkill -f chrome # 查看系统开机时间与运行时长 uptime # 查看系统发行版信息 cat /etc/os-release # 实时查看系统整体 CPU/内存占用 vmstat 1 5 # 查看某个进程的线程数 ps -L -p PID | wc -l # 查看端口连接状态统计有利于排查 TIME_WAIT 过多问题 ss -ant | awk {print $1} | sort | uniq -c # 从文本中提取所有 IP 地址 grep -oE [0-9]{1,3}(\.[0-9]{1,3}){3} access.log | sort | uniq # 定时任务编辑 crontab -ess -ant统计连接状态是我排查高并发服务 TIME_WAIT 过多时的常用手段。TIME_WAIT 本身不是错误但数量异常高时说明连接释放频率异常可能需要调内核参数这一条在性能排查里很有价值。我自己还有一个强烈推荐的习惯每条“救命命令”都配一条注释记清楚是在什么场景下写的。几个月后翻笔记看到注释才知道当初为什么要这么做比光秃秃的命令有用得多。9. 从记命令到用命令最后分享一点个人体会Linux 命令的学习曲线其实不陡难的是从“看得懂”到“用得顺”的那道坎。我自己跨过这道坎的标志不是背下来几百条命令而是开始不自觉地用管道把简单命令组合成一条“小流水线”去解决一个实际问题比如拿find定位文件、grep过滤内容、awk提取字段、sort加uniq统计分析。这种组合能力靠看手册是学不来的只有多上手、多踩坑、多把笔记本里的碎片拼起来。如果你现在刚入门我的建议是不要贪多先把文件操作、文本处理、系统状态这三块吃透。你不需要一开始就会所有命令但最好从第一天就养成两个习惯一是所有重要文件操作前三思而后行二是遇到不认识的输出先试试--help和man。时间久了很多命令自然就长在身上了。这份速查手册只是起点真正的速查表是你自己的笔记。碰到一条让你豁然开朗的命令就记下来配上当时的使用场景。半年后翻一翻你会发现自己已经积累下一笔谁都没法拿走的财富。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。