
简介《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 -fmore 的价值只剩“某些精简系统里只装了 more”的兜底场景。对比如下命令回看支持加载方式退出后屏幕残留cat无一次性全读残留more不支持回翻分页加载残留less支持回翻按需加载清除tail -f只看追加流式持续输出直到 CtrlC3.2 tail 与 grep实时日志定位的组合拳排障时最常用的组合是 tail 加 grep。tail -f 会持续跟随文件末尾适合看日志滚动如果日志量太大刷得太快先 CtrlC 停下来再配合 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 编辑、重定向与 CtrlC/CtrlZ 的差异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都是这里延伸出来的常见用法。CtrlC 和 CtrlZ 的区别资源里讲得很清楚CtrlC 是强制中断程序执行进程直接终结CtrlZ 是挂起任务进程还在内存里处于 stopped 状态可以用 fg 恢复到前台、bg 放到后台继续跑。误按 CtrlZ 导致端口没释放、服务起不来的情况在运维里非常常见排查时先 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 --namefirst -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot 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 命令二次确认目标指向。坑 2CtrlZ 挂起的进程占着端口现象重启服务时提示端口被占用但 ps -ef 看不到相关进程。原因CtrlZ 只是挂起不是结束进程还在内存里处于 stopped 状态端口自然没释放。解决jobs -l 查看挂起任务列表找到 PID 后 kill -9 处理或 fg 恢复后正常退出排查端口占用先想起 lsof -i 或 netstat -tunlp | grep 端口而不是直接怀疑来了新进程。坑 3docker rm 删不掉运行中的容器现象docker rm first 报错提示容器正在运行。原因rm 默认拒绝删除运行中的容器。解决先 docker stop first 再 docker rm first赶时间用 docker rm -f first 强制删除。日常维护建议养成“先停再删”的习惯避免误删后丢数据。坑 4find 删除命令执行完发现删多了现象一条 find -exec rm -rf 清理完发现匹配规则太宽把不想删的文件也清掉了。原因-name 匹配写得太宽或者 -size 的单位理解错删之前完全没有确认环节。解决删除前先跑不带 -exec 的 find确认输出列表执行时保留 -print 让每个被删文件都可见。清理命令先在测试目录演练一遍把匹配规则精确到能预测结果为止。坑 5tar 的 -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 和 zombiezombie 数量持续上涨说明父进程没有正常回收子进程多半是程序有 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_forward1 用于开启 IP 转发写进配置文件后 sysctl -p 立即生效且重启保留临时验证可以用 sysctl -w 直接写。改内核参数前先查看当前值和系统默认值改完后观察一段时间再固化到文件里不要为了性能盲目照抄网上的“优化合集”很多参数在特定场景下反而是负优化。说个我自己的教训有次误把软连接删除写成了带末尾斜杠的写法几百 GB 的缓存数据直接清空好在有备份但恢复花了一整天。从那以后我每次执行 rm -rf 前都强制走一遍 ls -l 确认类型、按两次 Tab 核对路径的流程软连接操作默认不加末尾斜杠find 删除先 -print 再 -exec这套习惯也救回过几次差点翻车的操作。这份速查 PDF 里类似的关键细节还有很多建议下载后在测试机上一组一组敲过去把每条命令的边界和坑标出来再上生产希望帮到你。本文还有配套的精品资源点击获取