简介:《10分钟让你掌握Linux常用命令》是一份面向Linux初学者与运维人员的速查型PDF文档,覆盖目录操作、文件操作、文件内容查看、软连接、压缩解压、Docker容器、系统日志、权限管理、内核优化等高频命令场景,并配有大量即抄即用的示例,可帮助读者在短时间内建立常用命令知识框架。资源为单个PDF文件,大小约796KB,便于离线查看与打印;内容按功能模块分类组织,命令解释简洁,适合零基础入门和日常查阅。已有6169人学习下载。通过该文档可系统掌握mkdir、cd、find、grep、tar、chmod、docker ps、yum、wget等常用工具的使用思路,同时了解日志查看、端口检测、用户权限设置及内核参数调整等运维技巧,是一份实用性强、上手快的Linux命令学习材料。
1. Linux 常用命令速查:一份能直接照着敲的运维笔记
第一次拿到这份《10分钟掌握Linux常用命令》PDF时,我以为又是那种只列命令名的入门清单,翻完才发现它是从真实运维场景里攒出来的速查卡。目录操作、文件查找、日志定位、软连接、压缩解压、Docker容器、端口排错、内核优化,几乎覆盖了后端和运维每天要碰的所有操作,每条命令都带路径示例和输出结果,不是那种给个命令名就结束的水货。对刚上手服务器的新手,它是一张可以照着敲的路线图;对常年在终端里排障的老手,它是防止“突然想不起来参数”的后悔药。这篇笔记按“命令是什么、怎么用、坑在哪”的顺序把里面关键内容拆开讲,你拿到 PDF 后可以边看边在虚拟机里复现。
2. 目录与文件操作:高频命令里的隐藏参数与安全边界
2.1 cd、pwd、mkdir:路径切换与目录创建的几种写法
别看目录操作简单,生产环境里出事的经常就是这些“不用过脑子”的命令。先看目录这一组的完整写法:
pwd # 查看当前工作目录 clear # 清除屏幕 cd ~ # 切换到当前用户目录 cd / # 切换到根目录 cd - # 切换到上一次访问的目录 cd .. # 切换到上一级目录 ll # 查看当前目录下的内容 mkdir aaa # 在当前目录下创建 aaa,相对路径 mkdir ./bbb # 在当前目录下创建 bbb,显式写出相对路径 mkdir /ccc # 在根目录下创建 ccc,绝对路径 mkdir -p temp/nginx # 递归创建,父目录不存在会一并创建 touch testFile # 创建空文件 testFilecd - 是最容易被忽略的一个:在两个很深的路径之间来回切换时,一条 cd - 比重复输入一长串路径快得多,这也是我平时用得最多的快捷键。mkdir 部分真正值钱的是 -p 参数。普通 mkdir 在父目录不存在时直接报错,而 mkdir -p 会一层层把路径建出来;更关键的是它具备幂等性,目录已经存在时不会像普通 mkdir 那样提示 File exists。这个特性让 -p 成为脚本里创建目录的默认姿势,不管目录在不在,执行结果都一样。
ll 实际上等于 ls -l 的别名,会把权限、属主、大小、修改时间一起列出来。看文件细节时用 ll,只想知道目录里有什么时用 ls 就够了。注意 ll 在某些最小化安装的发行版里未必默认存在,如果没有,用 ls -l 效果一样。touch 创建空文件这个动作很多人知道,但它还有个隐藏用途:刷新已存在文件的时间戳,在 make 构建场景里常被用来触发重新编译,这一点往往比新建文件更实用。
2.2 find 与 rm:先查后删的安全链路
资源里最有含金量的是 find 与删除的组合,尤其适合清理构建产物、临时文件和垃圾日志:
find / -name 'b*' # 在根目录下查找以 b 开头的目录和文件 find / -name 'b' # 查找名为 b 的文件或目录 find . -name '*.pyc' -exec rm -rf {} \; # 递归删除当前目录下所有 .pyc 文件 find . -name "*" -size 145800c -print # 查找大小为 145800 字节的文件并打印 find . -name "*" -size 145800c -exec rm -rf {} \; # 删除上述大小的文件 find . -name "*" -size 145800c -print -exec rm -rf {} \; # 边打印边删除这一组的核心是 find 的三种动作:-print 把结果打出来、-exec 对每个结果执行命令、两者可以组合。如果只想查文件不想查目录,加 -type f 限一下类型,避免把同名目录也捞进删除范围。-size 145800c 里的 c 表示字节,如果不带 c,数字默认按 512 字节的块来算,这是最容易踩的坑之一:想删“刚好 145800 字节”的文件,漏写 c 结果完全不一样。
-exec 的结尾必须写成 {} ;,花括号是结果占位符,分号前面的反斜杠是告诉 shell 不要把它当成命令分隔符。我一般会先跑一遍不带 -exec 的 find,确认查出来的文件就是我想清理的,再加 -exec;对有把握的删除保留 -print 输出,至少能看到删了哪些。资源里最后一条“边打印边删除”就是这种安全写法的体现。
单独用 rm 时风险同样在这:rm -rf a.java 强制删除不询问,rm -r a.java 会逐个文件确认,rm -rf ./a* 删掉当前目录下所有以 a 开头的文件,而 rm -rf ./* 直接清空当前目录。最后一条命令在生产环境敲下去是没有反悔余地的,执行前务必确认当前目录,我在 pwd 没输出之前不会碰它。
2.3 mv 与 cp:重命名、移动和覆盖的边界
文件操作组里翻车率最高的其实是 mv,很多人分不清“移动进去”和“改名”的区别:
mv tomcat001 tomcat # 重命名:当前目录下 tomcat001 改名为 tomcat mv /aaa /bbb # 将根目录下的 aaa 移动到 /bbb 目录下,名字仍叫 aaa mv bbbb usr/bbb # 将当前目录下的 bbbb 移动到 usr 目录下,并重命名为 bbb mv bbb usr/aaa # 将 bbb 移动到 usr 下并重命名成 aaa cp -r /aaa /bbb # 将 /aaa 复制到 /bbb 目录下,名字仍叫 aaa cp -r /aaa /bbb/aaa # 复制到 /bbb/aaa,相当于复制并指定新名字mv 的行为取决于目标路径是否存在:如果目标是已存在的目录,源就会被搬进这个目录里;如果目标不存在,那就相当于重命名。资源里那句“有目录剪切到指定目录下,没有的话剪切为指定目录”说的就是这个规则。很多人把 mv a b 当成“总是把 a 移动到 b 里面”,结果 b 不存在时直接改了名,后续脚本找不到路径就翻车了。
cp -r 同理,-r 表示递归复制整个目录,没有 -r 时对目录复制会直接报错,而对单文件复制不需要 -r。复制大目录时建议加 -v 参数看进度,否则一条长命令卡在那里,你分不清是在复制还是挂住了。另外 cp 覆盖已存在文件时默认不提示,批量覆盖前先确认目标目录没有同名重要文件,这个习惯能省掉很多麻烦。
3. 文件内容查看与日志排查:cat、more、less、tail 怎么选
3.1 四种查看命令的取舍逻辑
资源把文件内容查看单独列了一章,因为这几个命令名字看着像,行为差别很大。先看基础操作:
cat a.java # 一次性把文件全部内容输出到屏幕 more a.java # 从第一页分页查看,回车逐行、空格翻页,q 退出 less a.java # 分页查看,支持 PageDown/PageUp 和上下方向键 head -n 7 a.java # 只看前 7 行 tail -n 7 a.java # 只看后 7 行 tail -f a.java # 实时跟踪文件末尾,新写入的内容持续输出cat 适合小文件一口气看完,遇到几百 MB 的日志它会直接把终端刷爆,所以要养成“大文件先看行数规模再决定用哪个命令”的意识。more 是最古老的分页器,能往下翻但不能往回翻,退出后屏幕上还留着刚才的内容。less 是加强版,支持上下回看、按需加载、退出后屏幕干净。
资源里对比 less 和 more 的四点差异其实都是结论,背后的原因是:less 不必读整个文件就能开始显示,所以加载大文件更快;more 会把已显示内容留在终端缓冲区,less 退出时会恢复。日常我基本只用 less 和 tail -f,more 的价值只剩“某些精简系统里只装了 more”的兜底场景。对比如下:
| 命令 | 回看支持 | 加载方式 | 退出后屏幕残留 |
|---|---|---|---|
| cat | 无 | 一次性全读 | 残留 |
| more | 不支持回翻 | 分页加载 | 残留 |
| less | 支持回翻 | 按需加载 | 清除 |
| tail -f | 只看追加 | 流式 | 持续输出直到 Ctrl+C |
3.2 tail 与 grep:实时日志定位的组合拳
排障时最常用的组合是 tail 加 grep。tail -f 会持续跟随文件末尾,适合看日志滚动;如果日志量太大刷得太快,先 Ctrl+C 停下来,再配合 grep 过滤:
tail -f a.java # 实时查看文件末尾,持续跟踪 grep -n under 123.txt # 在 123.txt 里搜 under,大小写敏感,显示行号 grep -i under 123.txt # 忽略大小写搜索 grep -v under 123.txt # 反选,显示不匹配的行 grep -ni under 123.txt # 忽略大小写并显示行号grep 的 -n(行号)、-i(忽略大小写)、-v(反选)是日常最高频的三个参数。-v 常用来过滤无意义的刷屏行,比如 grep -v "^#" 可以排出配置文件的注释行;-i 在搜索日志关键字时能避免被大小写差异坑到。要按时间窗口看某段日志,可以先 tail -n 1000 把尾巴拉出来再用 grep 过滤,或者反过来先 grep 筛关键字再 head。
注意 tail -f 和 tail 的区别:不带 -f 只输出一次,带 -f 会一直挂着。资源里把 head/tail 和 grep 放在同一章是有道理的,排日志的顺序通常是:先用 tail 定位大概位置,再用 grep 精确过滤,最后用 head/tail 的 -n 取上下文窗口。配合 less 打开大日志后按 / 输入关键字搜索,则是另一种不刷屏的定位方式。
3.3 vim 编辑、重定向与 Ctrl+C/Ctrl+Z 的差异
vim 和 echo 重定向属于改配置时的高频动作:
vim a.java # 进入一般模式 i # 进入插入模式,可编辑内容 ESC # 退出插入模式回到一般模式 :wq # 保存退出,先按 shift+: 调起命令行 :q! # 强制不保存退出(内容改过也能退) :q # 不保存退出(仅当没有修改时可用) echo 'Hello World' > /root/test.txt # 把输出重定向写入文件,不存在则创建vim 打开文件后默认在一般模式,按 i 才能编辑,按 ESC 回一般模式,最后 shift+: 调出底部命令行再敲 wq。这套流程新手最容易卡在“不知道怎么输 :wq”,其实是 shift 加分号键。:q! 的 ! 表示强制,内容是改过的情况下普通 :q 会拒绝退出。改系统配置文件前先 cp 一份备份,这个习惯能省掉大量后悔时间。
重定向符号 > 会把左侧命令的输出写入右侧文件,文件不存在就创建,文件存在则直接覆盖清空;想追加就改成 >>。用 echo 写测试文件、用 > 快速清空大日志(比如 > nohup.out)都是这里延伸出来的常见用法。
Ctrl+C 和 Ctrl+Z 的区别资源里讲得很清楚:Ctrl+C 是强制中断程序执行,进程直接终结;Ctrl+Z 是挂起任务,进程还在内存里处于 stopped 状态,可以用 fg 恢复到前台、bg 放到后台继续跑。误按 Ctrl+Z 导致端口没释放、服务起不来的情况在运维里非常常见,排查时先 jobs -l 看看有没有挂起的进程,再决定 kill 还是恢复。
4. 压缩解压与软连接:打包分发里的参数细节
4.1 tar:打包是分离的,压缩是叠加的
tar 命令的难点在于参数是叠加的,先看资源里的标准组合:
tar -cvf start.tar a.java b.java # 只打包不压缩 tar -zcvf start.tar.gz ./* # 打包并 gzip 压缩当前目录所有文件 tar -xvf start.tar # 解包到当前目录 tar -xvf start.tar -C usr/local # 解包到指定目录,-C 大写 tar -zxvf start.tar.gz -C usr/local # 解压 .tar.gz 到指定目录 tar xf node-v12.18.1-linux-x64.tar.xz # 解压 .tar.xz,不需要 -ztar 本身只做打包,-z 是叠加 gzip 压缩,所以解压时看到文件名后缀带 .gz 就要加 -z,带 .xz 则直接用 tar xf 就能解,现代 tar 会自动识别 xz 格式。-c 创建、-x 解包、-v 显示过程、-f 后跟文件名,这四个是基础组合。-C 指定解压目标目录时必须是大写,小写 -c 是创建,写错命令含义就反了。目标目录不存在时先 mkdir -p 建好,否则解压会报错。
打包时排除某些文件用 --exclude,比如 tar -zcvf app.tar.gz ./app --exclude='*.log',这是实际部署时几乎必用的补充。想先看看压缩包里有什么而不解压,用 tar -tvf 包名列出内容清单,比盲解压再删要稳妥。资源里的命令都简洁,但生产上我建议把 -v 保留,至少能看到打包进度和解压过程,遇到大包卡住时心里有数。
4.2 zip、unzip 与 split:分发场景的补充工具
tar 在 Linux 之间流转最方便,但和外部协作、或者需要按大小分割传输时,zip 和 split 更直接:
zip lib.zip tomcat.jar # 把单个文件压缩成 lib.zip zip -r lib.zip lib/ # 递归压缩整个目录 unzip file1.zip # 解压到当前目录 unzip -d /usr/app/english.zip # 解压到指定目录 /usr/app/ split -b 10k date.file # 按大小分割,每个 10KB,生成 xaa/xab... split -b 10k date.file -d -a 3 # 数字后缀,长度 3 位,生成 x000/x001... split -l 10 date.file # 按行数分割,每 10 行一个文件zip 加 -r 才能压缩目录,压缩多个文件时依次列在后面。unzip -d 指定解压目录,不写就解到当前目录,容易把一堆文件散落在当前位置,所以分发 zip 时我习惯先建一个接收目录再解。split 是处理超大日志的利器:-b 按字节、-l 按行数,-d 用数字后缀、-a 控制后缀长度。分割后的文件在接收端用 cat x?? > original.file 按原顺序合并回去,整个流程就是“大文件拆小、传输、合并”,比用编辑器硬扛几 GB 文件靠谱得多。
4.3 ln -s 软连接:末尾斜杠决定生死
软连接的坑在资源里用一句话点到了:创建时路径不要加斜杠,删除时也不能加斜杠。先看基本命令:
ln -s /usr/local/app /data # 创建软连接,/data 指向 /usr/local/app rm -rf /data # 删除软连接本身提示:创建和删除软连接时,源路径和目标路径都不要写末尾斜杠。
创建时 /data 不加斜杠表示“创建名为 data 的软连接,指向 /usr/local/app”;如果写成 ln -s /usr/local/app /data/,系统会按“往目录里放连接”去解析,行为完全不一样。删除时更危险:rm -rf /data 删除的是连接本身,rm -rf /data/ 会顺着连接去删除目标目录里的真实文件,等于把 /usr/local/app 下面的东西全清了。我第一次遇到这个行为时真觉得是玄学,后来搞明白原理就再也不敢省略确认步骤了。判断一个路径是不是软连接,先 ls -l 看第一列是不是 l 开头,再决定怎么删,这个细节在后面避坑章节还会重点说。
5. 运维排查与避坑实录:端口、进程、容器的实战链路
5.1 端口与连通性排查:ping、telnet、netstat、lsof 的分工
端口不通是出现频率最高的生产告警,定位链路里几个命令分工明确:
ping -c 4 192.168.1.100 # 发 4 个 ping 包检查主机连通性 telnet 192.168.1.100 8093 # 检查指定 IP 的 8093 端口是否可达 netstat -lt # 列出所有处于监听状态的 TCP 端口 netstat -tulpn # 查看所有端口信息,包含 PID 和进程名 netstat -tunlp | grep 8080 # 查看 8080 端口被哪个进程占用 lsof -i:8080 # 用 lsof 直接看 8080 端口的进程ping 负责主机层面通不通,telnet 负责端口层面通不通。telnet 连上目标端口后如果服务正常,会进入一个黑屏窗口,看起来像卡住,其实是连接已建立;显示 connection refused 才是端口没在监听或防火墙在拦截。很多最小化安装的系统默认没有 telnet,需要先 yum install -y telnet 装一下,这是排查的第一步前置条件。
netstat 的 -tulpn 每个字母都有含义:t 只看 TCP、u 只看 UDP、l 只看监听、p 显示进程、n 用数字显示地址端口。grep 8080 是为了从一长串列表里锁定目标端口。lsof -i:8080 输出更直白,直接给进程名和 PID,两条命令可以互为补充验证。注意 netstat 在新版系统里可能被 ss 取代,如果提示命令不存在,用 ss -tulpn 效果相同。
查询连接状态分布是另一类高频需求,资源里给了一行 awk 统计:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'这行的思路是:netstat -n 输出里以 tcp 开头的行,最后一个字段 $NF 是连接状态,用数组 S 对每种状态计数,最后遍历输出。执行结果会列出每种状态的连接数量。TIME_WAIT 大量堆积通常和服务端主动关闭连接过快有关,CLOSE_WAIT 堆积则往往说明应用没有正确关闭 socket。这个统计在排查连接泄漏时是第一个要看的数字。
5.2 进程定位与日志清单
定位问题的完整链路是“从端口找 PID、从 PID 找进程、从进程找日志”:
ps -ef | grep mysql # 查看与 mysql 相关的进程 ps aux | grep 'ssh' # 过滤当前系统中的 ssh 进程 netstat -nap | grep 进程PID # 根据 PID 反查端口 jstack 2246 | grep '0x9eb' -A 50 # 根据 PID 查看 JVM 线程堆栈 kill -9 2630 # 强制结束指定 PID 的进程 df -h # 查看硬盘使用情况 du -sh # 查看当前目录占用大小 du -lh # 查看当前目录下各目录占用ps -ef 的输出里第二列就是 PID。拿到 PID 后,常见的做法是查 /proc/PID/cwd 看进程的工作目录,再配合 netstat -nap | grep PID 看它占用哪些端口,两步就能把“这是哪个项目的哪个服务”拼出来。jstack 那条是 Java 应用专用的,0x9eb 是线程 nid 的十六进制表示,-A 50 表示显示匹配行之后 50 行,定位线程卡死时很管用。
日志位置资源里列出了标准路径,整理成表:
| 路径 | 作用 |
|---|---|
| /var/log/messages | 系统启动后的信息和错误日志,排障首选 |
| /var/log/secure | 安全相关日志,登录、认证记录都在这里 |
| /var/log/maillog | 邮件服务日志 |
| /var/log/cron | 定时任务执行日志 |
| /var/log/boot.log | 守护进程启动和停止记录 |
| .bash_history | 当前用户的历史命令(在用户家目录下) |
messages 和 secure 是两个排障入口:系统异常先翻 messages,怀疑认证问题先翻 secure。.bash_history 是审计利器,能还原之前执行过哪些命令,但要注意它默认在交互式 shell 退出时才刷新,正在运行的终端未必能看到最新记录。确认发行版和内核版本用 cat /etc/os-release 和 uname -a,这是跨发行版通用的做法,比记特定发行版路径省心。
5.3 Docker 容器与防火墙基础命令
资源里 docker 那组是“从镜像搜索到容器删改”的完整闭环:
docker images # 查看本地已下载的镜像 docker search mysql # 搜索可用镜像 docker run -di --name=first -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root 26d26dsfsd31a docker ps # 查看运行中的容器 docker ps -a # 查看所有容器,包括已停止的 docker stop first # 停止容器 docker start first # 启动容器 docker restart first # 重启容器 docker rm first # 删除容器run 参数拆开看:-d 后台运行、-i 保留交互、--name 指定容器名、-p 3306:3306 把宿主机的 3306 映射到容器的 3306、-e 传入环境变量、最后的 26d26dsfsd31a 是镜像 ID 的简写。启动 MySQL 这类容器时密码通过 -e 传,比进容器再改省事。docker ps -a 和 docker ps 的差别在排障里很关键:容器被 stop 后 docker ps 就看不见了,但容器其实还在,加 -a 才能看到全部。
防火墙那组命令在资源里和系统操作放在一起:
service iptables stop # 临时关闭防火墙 chkconfig iptables off # 设置开机不启动防火墙 service iptables status # 查看防火墙状态service 是传统管理方式,chkconfig 控制开机启动。注意新版系统里很多已经换成 systemctl 体系,如果执行 service iptables status 提示无法识别,先确认发行版用的是 iptables 还是 firewalld。这套命令的价值在于:排查端口不通时先关防火墙验证是不是它挡的,确认后再针对性放行,不要长期裸奔。系统操作里 shutdown -h now 关机、shutdown -r now 重启这两个命令在生产上敲下去没有反悔余地,执行前先确认负载和任务状态。
5.4 避坑实录:五条翻车常客
下面五条是我在维护环境里翻过车、或者看别人翻过车攒下来的血泪经验,每条按“现象、原因、解决”整理,值得单独记忆。
坑 1:软连接带尾斜杠,删掉了真实目录
现象:执行 rm -rf /data/ 想删软连接,结果 /usr/local/app 里的真实文件全没了。
原因:rm -rf 的路径带了末尾斜杠,系统把软连接当成目录入口,顺着它删了目标目录的内容。
解决:删除软连接一律不写末尾斜杠,写 rm -rf /data;删之前先 ls -l /data 确认第一列是 l(链接),再用 file 命令二次确认目标指向。
坑 2:Ctrl+Z 挂起的进程占着端口
现象:重启服务时提示端口被占用,但 ps -ef 看不到相关进程。
原因:Ctrl+Z 只是挂起不是结束,进程还在内存里处于 stopped 状态,端口自然没释放。
解决:jobs -l 查看挂起任务列表,找到 PID 后 kill -9 处理,或 fg 恢复后正常退出;排查端口占用先想起 lsof -i 或 netstat -tunlp | grep 端口,而不是直接怀疑来了新进程。
坑 3:docker rm 删不掉运行中的容器
现象:docker rm first 报错,提示容器正在运行。
原因:rm 默认拒绝删除运行中的容器。
解决:先 docker stop first 再 docker rm first;赶时间用 docker rm -f first 强制删除。日常维护建议养成“先停再删”的习惯,避免误删后丢数据。
坑 4:find 删除命令执行完,发现删多了
现象:一条 find -exec rm -rf 清理完,发现匹配规则太宽,把不想删的文件也清掉了。
原因:-name 匹配写得太宽,或者 -size 的单位理解错,删之前完全没有确认环节。
解决:删除前先跑不带 -exec 的 find,确认输出列表;执行时保留 -print 让每个被删文件都可见。清理命令先在测试目录演练一遍,把匹配规则精确到能预测结果为止。
坑 5:tar 的 -C 写成小写,解压位置完全不对
现象:tar -xvf package.tar -c /目标目录 报错,或直接解到了当前目录。
原因:-c 是创建,-C 才是切换目录,大小写一写错,命令语义完全不同。
解决:解压固定写 tar -xvf 包名 -C 目标目录,C 保持大写;目标目录不存在时先 mkdir -p 建好,再执行解压。
6. 进阶习惯:读懂 top 输出,再调内核参数
top 是资源里单独占一章的命令,执行结果分统计信息区和进程信息区。统计信息区前几行是判断系统健康状况的关键:load average 后面三个数分别是 1、5、15 分钟的平均负载,这个值超过 CPU 核数时说明任务在排队,系统已经算不过来了。Tasks 行里重点关注 running 和 zombie,zombie 数量持续上涨说明父进程没有正常回收子进程,多半是程序有 bug。%Cpu(s) 里的 wa 是等待 IO 的占比,wa 长期偏高说明磁盘或网络 IO 是瓶颈,这时候加 CPU 没用,先查存储。内存部分要分清 used 和 buff/cache,很多新手看到 buff/cache 占了一大半就以为内存不足,实际缓存可以被系统自动回收,不是泄漏。
进程信息区里最常看的是这几列:PID 进程号、USER 属主、%CPU 和 %MEM 占用率、RES 物理内存、COMMAND 命令名。排障时在 top 界面按 P 按 CPU 排序、按 M 按内存排序,比一条条 ps 命令快得多;按数字 1 可以展开每个逻辑核的使用率,确认瓶颈是不是集中在单核上。top 交互键记不住没关系,按 h 可以看帮助,按 q 退出,这两个至少先记住。
内核参数这块,资源给的是最保守的用法:改 /etc/sysctl.conf 后执行 sysctl -p 重载。比如 net.ipv4.ip_forward=1 用于开启 IP 转发,写进配置文件后 sysctl -p 立即生效且重启保留;临时验证可以用 sysctl -w 直接写。改内核参数前先查看当前值和系统默认值,改完后观察一段时间再固化到文件里,不要为了性能盲目照抄网上的“优化合集”,很多参数在特定场景下反而是负优化。
说个我自己的教训:有次误把软连接删除写成了带末尾斜杠的写法,几百 GB 的缓存数据直接清空,好在有备份,但恢复花了一整天。从那以后我每次执行 rm -rf 前都强制走一遍 ls -l 确认类型、按两次 Tab 核对路径的流程,软连接操作默认不加末尾斜杠,find 删除先 -print 再 -exec,这套习惯也救回过几次差点翻车的操作。这份速查 PDF 里类似的关键细节还有很多,建议下载后在测试机上一组一组敲过去,把每条命令的边界和坑标出来再上生产,希望帮到你。
本文还有配套的精品资源,点击获取