Linux常用命令结构化掌握:路径、文本、运行态与高频避坑
发布时间:2026/10/29 16:31:56 锦皓数字建站

简介面向Linux初学者与运维入门者的命令速查PDF针对命令分散、参数易忘、上手路径不清晰的问题按使用场景归类整理常用操作。内容以目录操作、文件操作、文件内容处理为主线延伸到系统日志查看、软链接创建与删除、tar压缩解压、文件类型与权限设置并补充Docker容器查看与启动、netstat端口排查、yum软件包管理、top与ps进程监控、用户和组管理、内核参数调整及rpm安装等模块。每个知识点配有可直接套用的命令示例与参数说明如find按名称检索、chmod修改权限、sysctl调整内核参数便于边学边查、对照实践。压缩包共1个PDF文件约796KB单文件结构轻便适合在电脑或移动端快速打开检索。已有6170人学习可作为日常运维查漏补缺的随身手册也适合零基础读者建立Linux命令的整体框架。1. 从三类对象出发Linux 常用命令的整体结构「10 分钟掌握 Linux 常用命令」听起来有点标题党但把十几类命令摊开看它们其实只围着三类对象转路径目录与文件、文本配置与日志、运行态进程、端口、服务、用户。增删改查解决路径问题查看、检索、编辑解决文本问题排查与授权解决运行态问题。很多人参数背了一堆真上机器还是只会cd和ls问题不在记性而在于没把「这条命令动的是哪类对象、动完怎么验证」串起来。后面几章按这条线推进先理清路径层的mkdir、mv、cp、rm、find再进文本层的cat、less、tail、grep、vim与日志落点然后是打包、软连接、权限位这三块「看着会、动手就错」的模块最后用易错点和一份自测清单收尾。正在复习面试或刚接手一台服务器的人可以把这份结构当成一张可查漏补缺的地图。2. 目录与文件操作路径四态、mv/cp 的目标判定与 rm 的递归边界这一章是整份笔记里最容易被轻视的部分。目录和文件的命令就那么几个但线上事故里出镜率最高的恰恰是它们——rm -rf少一个空格、mv的目标目录没建、cp -r忘了带-r都是几秒钟就能造成不可逆后果的操作。复习的目标不是记住参数而是形成一套固定判断这条命令的源在哪、目标存不存在、递归开没开。2.1 路径四态绝对路径、相对路径、家目录与上一次目录cd的四个高频写法对应四种「落点」混淆它们是最常见的低级错误。pwd用来确认自己在哪clear清屏ll看当前目录内容多数发行版里是ls -l的别名权限位、属主、大小、时间一次看全。写法落点典型用途cd ~当前用户家目录找不到方向时先回原点cd /根目录从绝对路径重新开始cd -上一次访问的目录在两个目录间来回切cd ..上一级目录逐层退出去创建目录同样有三种写法区别只在路径类型mkdir aaa是相对路径在当前目录下建mkdir ./bbb也是相对路径./只是显式声明「当前目录」mkdir /ccc是绝对路径会落在根目录下普通用户往往没有权限会直接报错。真正需要记牢的是mkdir -p temp/nginx-p会把中间缺失的父目录一起建出来写成mkdir temp/nginx则因为temp不存在而失败。注意cd -依赖 shell 记录的上一跳位置新开的会话里第一次执行通常回到空目录或直接报错别在脚本里依赖它。2.2 mv 与 cp目标存不存在语义完全不同mv和cp的语义不是由命令本身决定的而是由「目标位置是否已存在」决定的这一点几乎所有人第一次都会判断错。mv tomcat001 tomcat是最简单的一类同目录下改名。mv /aaa /bbb的目标/bbb已存在结果是/aaa被整体移进/bbb路径变成/bbb/aaa目录名不变。mv bbbb usr/bbb则是移动并改名把当前目录下的bbbb移到usr下同时名字改成bbbmv bbb usr/aaa同理移动到usr下并改名为aaa。总结成一句目标存在则「进目录」目标不存在则「变成那个名字」。cp的判定规则一致但多了递归开关。cp -r /aaa /bbb在/bbb已存在时得到的是/bbb/aaa如果想让复制过去的名字也变写成cp -r /aaa /bbb/aaa显式指定。少了-r复制目录会直接失败这不是权限问题是命令本身不接受目录作为普通文件处理。命令目标已存在目标不存在mv /aaa /bbb变成/bbb/aaa/aaa被重命名为/bbbcp -r /aaa /bbb变成/bbb/aaa创建/bbb并复制其内容cp -r /aaa /bbb/aaa复制为/bbb/aaa同名覆盖合并若/bbb不存在则报错2.3 rm 的递归边界-r 与 -f 是两个独立开关把rm的两个参数拆开理解比死记组合更安全。-r表示递归进入子目录-f表示强制不询问。两者叠加才是不留后悔药的rm -rf。rm -r /bbb是普通递归删除会逐个问你「是否删除」输入 y 才继续rm -rf /bbb全程静默连子目录一起清掉。删单个文件时rm -r a.java也会问rm -rf a.java不问。真正危险的是通配符rm -rf ./a*删当前目录下所有以 a 开头的文件rm -rf ./*删当前目录下所有内容——后者在输入时少一个点或多了个空格删的就是上一层。更稳妥的做法是「先找、再删」让find把清单打印出来确认再加-exec执行# 先只看不删打印当前目录下所有 .pyc 文件 find . -name *.pyc -print # 确认清单无误后再对这些结果执行删除 find . -name *.pyc -exec rm -rf {} \; # 按大小清理145800c 表示 145800 字节-type f 限定只匹配文件 find . -name * -type f -size 145800c -print find . -name * -size 145800c -exec rm -rf {} \;这段命令的关键在参数含义-name *.pyc按名称匹配-type f限定类型为普通文件避免把同名目录也匹配走-size 145800c里的c是字节单位不带c默认按块计算量级会差很多-print只输出路径-exec ... {} \;把前面查到的每个结果填进{}并执行结尾的\;是分隔符写成则是批量拼接执行速度更快但报错不够直观。整个表达式末尾的分号一定要转义否则 shell 会先把它吃掉。2.4 find 与 split定位与切分两个高频动作find / -name b是在根目录及所有子目录中查找名称恰好为 b 的文件或目录find / -name b*则匹配所有以 b 开头的名字。前者精确、后者模糊写错一个*就可能因为遍历整个根目录而卡住几分钟因此实际使用时通常会把起点收窄到具体业务目录。split解决的是另一个场景日志文件太大想看却打不开或者要分片传输。默认按字节切输出文件以xaa、xab这类字母后缀命名。# 每片 10KB后缀自动递增xaa xab ... xaj split -b 10k date.file # -d 用数字后缀-a 3 指定后缀长度为 3 位x000 ... x009 split -b 10k date.file -d -a 3 # 自定义前缀输出 split_file000 ... split_file009 split -b 10k date.file -d -a 3 split_file # 按行切每个文件 10 行适合按记录处理的日志 split -l 10 date.file参数表值得抄下来-b按字节切单位可以是 k、m-l按行数切-d后缀改为数字-a指定后缀长度默认 2 位超过 99 片就会错乱-C限制每片单行的最大字节数处理超长单行日志时才用得上。选-b还是-l取决于后续是否需要逐行解析——按行切出来的片段可以直接喂给脚本按字节切的最后一行往往是断的。3. 查看、检索与编辑cat/less/tail/grep 的选型与六类系统日志落点文本层是日常使用频次最高的部分看配置、翻日志、改参数。命令本身不难难的是「什么时候用哪个」。一个实用的判断标准是先问自己三个问题文件多大、我要看头看尾还是全文、我是在找某个关键字还是通读。3.1 五个查看命令的选型表命令行为适用场景cat a.java一次性输出全文直接刷到最后一页小文件、配置文件快速确认more a.java从第一页开始回车逐行、空格逐页q 退出中等文件通读只看不改less a.java分页查看支持 PageDown/PageUp 上下翻大文件、日志通读最常用head a.java默认前 10 行看配置文件的头部、脚本声明tail a.java默认后 10 行看日志最新写入、程序启动尾部more和less的四点差异值得单独记less支持上下方向键more只能往前less不必读完整文件就能显示加载更快less退出后屏幕上不留内容more会留下more无法后退。需要精确定位行数时加-nhead -n 7 a.java看前 7 行tail -n 7 a.java看后 7 行。tail -f a.java是最常用的一个变体-f表示跟随文件增长持续输出实时盯日志基本靠它。它的问题是默认只显示 10 行排查时经常需要往前多看一段于是有了tail -n 100 -f app.log这种写法。3.2 grep 的四个参数与管道组合grep的核心是「在文件里筛出匹配行」。原始用法grep under 123.txt只显示匹配到的行加上-n显示行号方便回到编辑器里定位-v反向选择显示不匹配的行排查时用来过滤掉刷屏的健康检查日志-i忽略大小写-ni就是两者叠加。# 在 123.txt 中搜索 under大小写敏感只显示匹配行 grep under 123.txt # 显示匹配行与行号-v 反向显示不匹配的行-i 忽略大小写 grep -n under 123.txt grep -v under 123.txt grep -ni under 123.txt # 实战组合盯日志的同时只看错误行 tail -f app.log | grep -i error管道|的作用是把前一个命令的输出当作后一个命令的输入像管子一样把命令串起来。上面最后一条命令里tail -f持续产出新行grep -i error逐行过滤只有命中才打印。这类组合还常用于进程排查比如ps -ef | grep java、cat /etc/passwd | grep root、history | grep es。注意ps -ef | grep java的结果里通常包含 grep 自己的那一行看进程号时别把它当成业务进程。3.3 vim 的三个模式与重定向、作业控制vim a.java进入的是一般模式此时按键是命令而不是输入。按i进入插入模式开始编辑按ESC退回一般模式shift :调起命令行输入框:wq保存退出:q!不保存退出有改动时用:q不保存退出没有改动时才生效。这三个退出方式的区别是改配置时最容易慌乱的点——改了内容却想:q会被拒绝这不是卡死是编辑器在提醒你有未保存修改。重定向用或把命令的输出改道到文件文件不存在会新建# 把字符串写进 test.txt覆盖原内容 echo Hello World /root/test.txt # 追加重定向用 不会清空原文件 echo Hello Again /root/test.txt是覆盖是追加混用的后果是配置文件被清空成一行。作业控制常和重定向一起出现Ctrl C强制中断程序执行Ctrl Z只是把任务挂起进程还在只是暂停挂起后用bg放到后台继续跑用fg拉回前台。分不清这两个键就会在「日志还在写但终端没输出」时误判程序已经死掉。3.4 六类系统日志与历史命令溯源排查问题时先知道日志在哪比会多少命令都重要。常见的落点如下日志路径记录内容/var/log/message系统启动后的信息与错误日志最常用/var/log/secure与安全相关的日志登录、认证/var/log/maillog邮件相关/var/log/cron定时任务执行记录/var/log/spoolerUUCP 与 news 设备相关/var/log/boot.log守护进程启动与停止消息不同发行版上文件名可能差一个字母message与messages不确定时先ls /var/log看一眼再tail比凭记忆硬敲更省时间。查系统版本用cat /etc/redhat-release一行就能确认自己在什么环境里。溯源用户操作则看.bash_historycat .bash_history打印历史命令history看当前会话带编号的记录history | grep es把与某关键字相关的命令筛出来。线上出了状况先翻历史命令往往比翻文档快——上一个操作者做了什么这里记得清清楚楚。4. 打包、软连接与权限tar 六字符、ln -s 斜杠与 rwx 九位这一章集中了三个「看一遍觉得会、动手就翻车」的模块。它们有一个共同特征正确与错误之间只差一个字符或一个符号而报错信息又往往语焉不详。4.1 tar 的六个字符与 -C 的位置tar的参数看着多其实就六个字母在组合c创建、x解压、z走 gzip、v显示过程、f指定文件名、C指定解压目录。# 打包把当前目录下 a.java、b.java 打成 start.tar tar -cvf start.tar a.java b.java # 打包当前目录下所有文件并压缩成 start.tar.gz tar -zcvf start.tar.gz ./* # 解压 tar 到当前目录 tar -xvf start.tar # 解压到指定目录-C 大写后面紧跟路径中间不能有空格 tar -xvf start.tar -C usr/local # 解压 tar.gz 到当前目录 tar -zxvf start.tar.gz # 解压 tar.gz 到指定目录 tar -zxvf start.tar.gz -C usr/local # 现代写法不带 ztar 会自动识别压缩格式node 这类 tar.xz 尤其省事 tar xf node-v12.18.1-linux-x64.tar.xz两个细节决定成败-C必须大写写成-c就变成了「创建」语义完全反转-C与路径之间不能有空格-C usr/local是参数与值-C usr/local写成-C usr/local多空格在部分实现上仍可用但习惯上紧贴更稳。另外tar xf不写z也不会报错因为 tar 会读文件头自动判断格式这条规则能省掉一半「解压 tar.xz 用什么参数」的纠结。4.2 zip 与 unzip跨平台场景的备选和服务器、Windows 之间来回传文件时zip 格式的兼容性更好。压缩单个文件用zip lib.zip tomcat.jar压缩目录必须带-rzip -r lib.zip lib/多个文件可以并列写zip -r lib.zip tomcat-embed.jar xml-aps.jar。解压用unzip file1.zip落到当前目录指定目录用unzip -d /usr/app/ xxx.zip。对比项tar.gzzipLinux 原生支持好几乎所有发行版自带部分精简镜像需额外安装跨平台解压需工具Windows 双击即可压缩目录-zcvf直接支持必须加-r解压到指定目录-C大写-d小写-C和-d一个大小写差异是命令混用时最高频的翻车点记法可以粗暴一点tar 的目录参数大写zip 的小写。4.3 ln -s创建与删除的斜杠规则软连接相当于快捷方式指向真实路径。创建写法是ln -s 源路径 链接路径# 把 /usr/local/app 挂到 /data 上data 相当于一个入口 ln -s /usr/local/app /data # 查看链接指向 ls -l /data关键在末尾斜杠。创建时源目录后不加/ln -s /usr/local/app/ /data会变成寻找其下一级目录链接指错位置。删除时同理rm -rf /data删的是这个软连接本身真实目录/usr/local/app毫发无损一旦写成rm -rf /data/末尾斜杠让系统顺着链接进到目标目录里删掉的是真实文件。这条规则可以概括成一句话斜杠意味着「进去」不意味着「删掉这个」。注意源路径尽量写绝对路径。用相对路径建链接链接的解析基准是执行ln时的当前目录换一个目录访问就会指向不存在的位置。4.4 ls -l 的九位权限与 chmod 两种写法ll的典型输出是这样的-rw-r--r-- 1 root root 34942 Jan 19 2018 bootstrap.jar第一个字符-表示普通文件d是目录l是链接后面九位分三组每组三位位置归属本例取值含义第 1-3 位文件拥有者 userrw-可读、可写、不可执行第 4-6 位所属组 groupr--可读第 7-9 位其他用户 otherr--可读再往后是硬链接数、属主、属组、字节大小、修改时间、文件名。r读、w写、x执行对应数值 4、2、1三组相加就得到八进制表示755是rwxr-xr-x644是rw-r--r--。chmod有两种改法。符号法针对单组chmod ux web.xml给拥有者加执行权限结果---x------chmod gx web.xml给同组加执行------x---。数字法是九位一起重写chmod 111 web.xml得到---x--x--xchmod 222 web.xml得到--w--w--w-chmod 444 web.xml得到-r--r--r--。数字权限串常见用途755rwxr-xr-x脚本、目录的常规权限644rw-r--r--普通配置文件600rw-------私钥、含敏感信息的配置444r--r--r--只读锁定4.5 用户与组的最小闭环权限的另一半是「谁在操作」。创建一个带家目录的用户标准做法是指定家目录并让系统自动建# -d 指定家目录-m 表示家目录不存在时自动创建 useradd -d /usr/sum -m sum # 设置密码 passwd sum # 授予 sudo 权限执行 visudo在文件中加一行 # sum ALL(ALL) ALL # 删除用户与其家目录 userdel sum rm -rf /usr/sum # 切换用户与返回 su sum exituseradd的常见参数不止两个-u指定 UID传统上普通用户从 500 起且不能与已有用户冲突-g指定默认组可以是组名或 GID组必须真实存在-G指定附加组-c写注释信息-d指定家目录。建组用groupadd groupname删组用groupdel groupnamecat /etc/group看全量id看当前用户自己的分组。/etc/passwd一行的字段顺序要认得用户名、密码占位真实密码在/etc/shadow、UID、GID、注释、家目录、登录 shell。加了 sudo 权限后同一行里的 UID 会从 1000 变成 0这个变化是判断「权限到底生效没有」最直接的证据。用visudo而不是直接vim /etc/sudoers原因只有一个语法写错时 visudo 会在保存前拦住你而 vim 会直接写进去之后所有 sudo 操作全部失效。5. 易错点复盘删除、打包、端口与配置的五处高频翻车前面几章按模块走完了这一章换一种组织方式按「实际出错的现场」来复盘。下面五条是从命令清单里筛出来的高频问题每一条都按「错在哪、为什么容易漏、怎么补」三段处理。复习时可以拿它当反向清单用——能说出每条的正确做法说明前面几章真的吃进去了。5.1 路径类rm 的末尾斜杠与 mv/cp 的目标判定易漏点rm -rf /data与rm -rf /data/rm -rf ./a*与rm -rf ./*mv /aaa /bbb在/bbb不存在时变成重命名。为什么漏这四组写法在视觉上几乎没差别但语义差一个量级。末尾斜杠在删除软连接时代表「进去删内容」通配符前少一个点代表「删当前层而不是全部」mv的目标是否存在决定了「移动」还是「改名」。这几个判断都需要在执行前先确认目标状态而人一旦手快就会跳过确认。怎么补把「删除前先看」固化成动作而不是靠记性。删目录前先ls 目标路径看一眼或者用find . -name xxx -print打印清单确认后再把-print换成-exec rm -rf {} \;。做移动和复制前先ls -d 目标路径确认目标存不存在或者干脆用绝对路径写全让语义无歧义。软连接的删除单独记一条不带斜杠删链接带斜杠删内容。5.2 打包类tar 的 -C 与 unzip 的 -d易漏点tar -xvf start.tar -C usr/local写成-c或者-C和路径中间加了空格导致路径被当成另一个文件参数unzip -d /usr/app/想解压到指定目录却漏了包名。为什么漏tar 的参数是大小写敏感的字母组合-c和-C在终端里字形接近报错又常常只是「找不到文件」这类间接提示unzip 的问题则是-d后面跟的是目录包名必须放在最后顺序写反就报错。怎么补记住两句话就够了——tar 里只有解压到目录用大写-C其余全小写zip 解压到目录用小写-d。不确定时先tar -tvf 包名只看内容不解压确认包里的顶层目录结构再决定加不加-C。养成一个习惯本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。