Linux常用命令速查与避坑:目录文件、日志排查、压缩安装 简介这份 PDF 面向 Linux 初学者、运维入门者及需要快速查漏补缺的开发者围绕日常使用与服务器维护场景梳理高频命令帮助读者建立从目录文件操作到系统管理的知识框架。压缩包仅含 1 个 PDF 文件大小约 796KB轻量便携适合放在手机或电脑中随时查阅。内容按目录操作、文件操作、文件内容查看与编辑、系统日志定位、软链接、压缩解压、权限管理、Docker 常用命令、运维排错及内核参数优化等模块组织并配有命令示例与使用说明便于对照练习和实际排查。已有 6171 人学习可作为入门速查手册和日常运维参考适合需要快速定位常用命令、巩固基础操作与排查思路的读者。1. 先搞懂一件事Linux 常用命令到底是在跟谁说话很多人第一次连上 Linux 服务器屏幕上只有一个黑窗口和一闪一闪的光标不知道该敲什么也不敢敲生怕一按回车就把别人的环境弄坏。这份整理好的 Linux 常用命令资料本质上是一本“你跟系统说话时说什么、怎么说”的短语手册从怎么看目录、怎么改配置到怎么看日志、怎么装软件、怎么查端口一共十几类覆盖了日常绝大多数场景。它适合刚接触 Linux 的新手、要从图形界面转到服务器上干活的开发者以及偶尔需要登上去排查问题的人。你不需要先懂内核也不需要先会编程把里面最常用的二三十条命令练熟就能独立完成大部分日常操作了。2. 从站在门口到走进房间目录与文件的基本操作刚上手最难受的不是命令难而是“我不知道自己在哪”。图形界面里你打开一个文件夹位置一目了然命令行里没有地址栏全靠几条命令自己报位置。所以目录操作要放在最前面练它是后面所有操作的地基。地基没打好后面复制、删除、改配置全是瞎猜一旦猜错就是踩坑现场。2.1 先建立方位感pwd、ls、ll 与 cd 的四个方向打开终端第一件事先问系统“我在哪”。pwd就是回答这个问题的它把当前工作目录的完整路径打印出来。很多人习惯跳过这一步直接rm结果删错了地方这种血泪经验在运维群里几乎每周都能看到一次。pwd # 打印当前所在的完整目录路径 ls # 简单列出当前目录下的内容 ll # 列出详细内容权限、大小、时间是 ls -l 的别名 clear # 清空屏幕让画面重新变干净ll这一条要特别说一句它在你自己的机器上可能不存在因为它是很多发行版预置的别名等价于ls -l。如果敲了提示“command not found”直接用ls -l就行效果一样。看到的那一长串输出里第一个字符是文件类型-是普通文件d是目录后面九位是权限这个我们在第 5 章会专门讲现在只要知道“能看出谁大谁小、谁是什么类型”就够了。接下来是换位置。cd有四个最常用的写法背下来比查文档快得多cd ~ # 回到当前用户的家目录 cd / # 回到整个系统的根目录 cd - # 回到上一次待过的目录来回跳很好用 cd .. # 回到上一级目录cd -是新手最容易忽略、但用过就回不去的一条。你在两个目录之间反复切换时不用一遍遍敲完整路径cd -直接把你送回去。cd ..里的两个点是“上一级”一个点.则是“当前目录”这两个符号后面会反复出现先记住它们的含义。2.2 再学会动手mkdir、touch、cp、mv、rm 的最小可用集认路了就该动手造东西。建目录用mkdir建空文件用touch这两条几乎没有风险可以随便练mkdir aaa # 在当前目录下创建 aaa 目录相对路径 mkdir ./bbb # 同样在当前目录下创建 bbb./ 表示当前目录 mkdir /ccc # 在根目录下创建 ccc绝对路径通常需要权限 mkdir -p temp/nginx # 递归创建temp 不存在时一并建出来 touch testFile # 创建一个空文件已存在则更新时间戳-p这个参数值得多花两句。不加它你要创建temp/nginx必须保证temp已经存在否则直接报错。加了-p中间缺的目录会被一层层自动补齐而且目标已存在时也不报错。建多层目录时我基本都带-p省得先建父目录再建子目录来回两趟。复制和移动是日常用得最频繁的两条也是最容易出岔子的两条。先看复制cp -r /aaa /bbb # 把 /aaa 整个目录复制到 /bbb 下名字仍叫 aaa cp -r /aaa /bbb/aaa # 复制到 /bbb 下并明确指定名字为 aaa-r是递归复制目录必须带复制单个文件可以不带。新手常见的困惑是“为什么我复制完目录名字变了或者层级多了一层”原因是目标路径存不存在、结尾有没有具体名字决定了复制过去之后叫什么。记住一个判断方法目标是一个已存在的目录源就会被塞进去保留原名目标路径最后一段在目标目录里不存在那一段就被当成新名字。移动和重命名在 Linux 里是同一条命令mv改名字就是不换目录地“移动”mv tomcat001 tomcat # 同目录下改名tomcat001 变成 tomcat mv /aaa /bbb # 把 /aaa 移到 /bbb 下进入后仍叫 aaa mv bbbb usr/bbb # 移到 usr 下并改名为 bbb变化点在最后一段如果目标目录里没有同名项那就是移动加改名如果有同名文件会被直接覆盖且不提示。这一点要留心覆盖了是没有后悔药的。删除是这组里唯一需要敬畏的命令rm -r a.java # 普通删除删除每个文件前会询问 y/n rm -rf a.java # 强制删除单个文件不再询问 rm -rf /bbb # 强制删除整个目录含所有子目录不提示 rm -rf ./a* # 强制删除当前目录下以 a 开头的所有内容慎用-r是递归进目录-f是强制不询问两个一合体就是“悄无声息地删干净”。它有一个很要命的特性命令敲下去就执行了中间没有确认环节。所以我的习惯是凡是要删的路径先拿ls把同样的路径打一遍看清楚里面到底是什么再改成rm -rf。多花三秒能挡掉绝大多数事故。找文件也用得上这一组find是搜索的主力find / -name b # 从根目录开始找名字正好是 b 的文件和目录 find / -name b* # 名字以 b 开头的都找出来* 是通配符 find . -name *.pyc -exec rm -rf {} \; # 找出所有 .pyc 文件并删除最后那条把搜索和删除串起来了看着吓人拆开就好懂.是从当前目录开始找-name *.pyc是按名字匹配-exec ... \;是对每一条找到的结果执行后面的命令{}是结果占位符。第一次用建议把-exec rm -rf {} \;换成-print先看看会命中哪些文件确认无误再换成删除。3. 把黑匣子打开看文件内容、改配置、追日志服务器上出问题九成以上的排查动作最后都落在“看文件”上看配置写错没、看日志报了什么、看进程还在不在。所以文件内容操作是第二块必须练熟的东西。这一章的命令看起来多但分工其实很清楚有的是“全看”有的是“看头看尾”有的是“边跑边看”还有的是“在文件里捞一句话”。3.1 cat、head、tail、more、less 各管哪一段先按“看多少”来分。cat是把整个文件一次性倒出来适合短文件比如刚写的一个配置cat a.java # 一次性输出整个文件内容 cat /etc/redhat-release # 查看操作系统版本输出很短用 cat 正合适文件一长cat就会刷满屏幕往上翻都翻不到头。这时候换分页查看的more和lessmore a.java # 从第一页开始看回车下一行空格下一页q 退出 less a.java # 同上但支持上下方向键和 PageUp/PageDown 翻页这两条的区别新手可以这么记more只能往前走看到后面想退回去就没办法了less能前后自由翻而且它不一次性把整个文件读进来打开大文件更快退出后屏幕也不会被残留内容刷掉。所以现在我的习惯是直接上lessmore只在极老的机器上才用。再按“看哪一段”来分。日志动辄几百兆你只关心最新的报错那就用head和tailhead a.java # 看文件前 10 行 head -n 7 a.java # 看前 7 行-n 后面跟行数 tail a.java # 看文件后 10 行 tail -n 7 a.java # 看后 7 行 tail -f a.java # 实时跟踪文件新增内容会不断打印出来tail -f是排查线上问题的核心工具-f是 follow 的意思它会一直挂着你这边什么都不用做程序往日志里写一行它就显示一行。看完按Ctrl C退出。如果日志正在被切割或者换文件还有tail -F可以跟着文件名走入门阶段先记住-f足够用。3.2 vim 的三个模式和第一次改配置文件看到内容之后下一步就是改。改配置文件躲不开vim而vim是新手最容易懵的地方明明按了字母屏幕上却跳出一堆奇怪的符号或者想保存却怎么都退不出去。原因在于它有不同的模式。入门只要认清三个vim a.java # 打开文件此时处于「一般模式」按键是命令而非输入进入后按i键左下角出现-- INSERT --就进了插入模式这时候敲键盘才是往文件里写字。写完按Esc回到一般模式再输入冒号开头的命令来保存或退出:wq # 保存并退出 :q! # 不保存强制退出 :q # 退出没改过内容时可用改过会提示Esc这个键要形成肌肉记忆。任何时候你发现按键不对劲了先按两三下Esc退回一般模式再想下一步。我见过太多人卡在插入模式里拼命敲:wq结果那几个字符被原样写进了文件里这就是典型翻车。改配置文件还有一条保险做法改之前先备份。cp /etc/sysctl.conf /etc/sysctl.conf.bak # 改之前先留一份原件 vim /etc/sysctl.conf # 再动手改 sysctl -p # 让内核参数配置重新生效备份这一步看起来多余但配置改错了导致服务起不来的时候一条cp就能回滚比对着屏幕一行行找错快得多。3.3 grep 加管道和重定向让命令互相喂数据文件里内容成千上万行你要找的那一句怎么办用grep按内容搜grep under 123.txt # 在文件里搜 under区分大小写显示匹配行 grep -n under 123.txt # 加行号方便定位 grep -i under 123.txt # 忽略大小写 grep -v under 123.txt # 反向显示「不包含」under 的行 grep -ni under 123.txt # 忽略大小写并显示行号-v这条反向匹配很多人一开始不理解它的用处其实很实用日志里混了一堆健康检查的噪音你只想要剩下的-v就能把噪音过滤掉。grep真正的威力在于能和别的命令接起来靠的是管道符|。它的作用是把前一条命令的输出直接当成后一条命令的输入ps -ef | grep mysql # 在所有进程里筛出和 mysql 相关的 cat /etc/passwd | grep root # 在用户文件里找出 root 那一行 netstat -tunlp | grep 8080 # 在端口列表里找 8080 这一条 history | grep es # 在历史命令里找包含 es 的查自己以前敲过什么 ps aux | grep ssh # 过滤出 ssh 进程管道可以串很多层思路就是“上一步的结果 → 下一步再筛”。写这种命令时建议一层层加先敲ps -ef看看输出长什么样确认字段了再补| grep mysql。一次性把长命令敲完再回车出错你都不知道是哪一段的问题。另一个类似的东西是重定向它把输出写进文件而不是显示在屏幕上echo Hello World /root/test.txt # 覆盖写入文件不存在则创建这里要明确区分和单个大于号是覆盖文件原有内容全没了两个大于号是追加接在文件末尾。刚上手时写错一个符号把配置文件写成一行这种事故并不少见动手前先确认自己到底想要哪种。顺带把两个中断键也认一下它们看着像行为完全不同提示Ctrl C是强制中断当前程序进程直接结束Ctrl Z只是把任务挂起进程还在之后可以用fg调回前台、用bg放到后台继续跑。发现按错了用fg把任务找回来。4. 打包、搬运、装东西压缩解压、软连接、yum 与传文件前三章练的是“在机器里活动”这一章开始处理“东西怎么进出、怎么组织”。服务器上你总要传代码包、解压安装包、把某个目录挂到另一个位置、装个新软件这几件事的频率高到几乎每天都会碰到。它们的共同点是参数多、写法像光靠背很容易记混所以要抓住“哪个字母管什么”这个线索去记。4.1 tar 和 zip压缩解压记住四组就够了tar的参数多但入门只需要盯住三个字母c是创建createx是解开extractf是指定文件名filev是显示过程z是走 gzip 压缩。记住“打包用 c解包用 x后面永远跟 f”就够了tar -cvf start.tar a.java b.java # 把两个文件打包成 start.tar不压缩 tar -cvf start.tar ./* # 把当前目录所有内容打包 tar -zcvf start.tar.gz ./* # 打包并 gzip 压缩后缀是 .tar.gz tar -xvf start.tar # 解开 tar 包到当前目录 tar -xvf start.tar -C usr/local # 解到指定目录-C 大写且中间不能有空格 tar -zxvf start.tar.gz # 解开 .tar.gz 包到当前目录 tar -zxvf start.tar.gz -C usr/local # 解到指定目录 tar xf node-v12.18.1-linux-x64.tar.xz # 解 .tar.xz现代 tar 能自动识别压缩格式最容易记混的是-C它大写而且和路径之间要留空格写错了就报“无法找到文件”。另外解压.tar.xz这种格式时其实不用特意加z或J新版本的tar会自己判断直接用xf最省事。zip系列是另一套和 Windows 打交道时用得多zip lib.zip tomcat.jar # 压缩单个文件 zip -r lib.zip lib/ # 压缩整个目录必须带 -r zip -r lib.zip tomcat-embed.jar xml-aps.jar # 多个文件压进同一个包 unzip file1.zip # 解压到当前目录 unzip -d /usr/app/ com.lydms.english.zip # 解压到指定目录-d 后面跟路径判断该用哪套很简单发给用 Windows 的同事用zip在 Linux 服务器之间传用tar.gz体积小、权限信息保留得更好。还有一个不太常见但很实用的split用来把大文件切成小份比如日志太大不好传输时split -b 10k date.file # 按每份 10KB 切分 split -b 10k date.file -d -a 3 # -d 用数字后缀-a 3 表示后缀 3 位 split -b 10k date.file -d -a 3 split_file # 顺便指定前缀名 split -l 10 date.file # 按每份 10 行来切切出来的文件是xaa、xab这种加了-d就变成x000、x001合并时按顺序cat到一起即可。参数里-b是按字节大小切-l是按行数切两个选一个用。4.2 软连接的那条斜杠创建与删除的差别软连接类似于 Windows 的快捷方式指向另一个位置。它最常见的用途是不改程序配置把数据目录指到另一块盘上ln -s /usr/local/app /data # 创建软连接让 /data 指向 /usr/local/app这里有个细节必须说清楚创建时源目录后面不要加斜杠。/usr/local/app和/usr/local/app/在ln眼里是两回事加了斜杠它可能理解成“指向这个目录下面的东西”结果连接建出来指向错了地方排查起来特别玄学。删除更容易出事rm -rf /data # 删除软连接本身 rm -rf /data/ # 注意加了斜杠删的是连接指向的真实目录内容差别就在最后一个斜杠上。前者删掉的是“快捷方式”后者顺着快捷方式进去把真东西删了。这条我建议直接抄在便签上贴屏幕边因为一旦敲错损失的可能是整个应用的数据目录。4.3 yum 装软件与 lrzsz 传文件装软件用yum几条命令覆盖九成场景yum install iptables-services # 安装一个软件包 yum list # 列出当前系统已安装的包 yum search package_name # 在仓库里搜某个包 yum update package_name # 更新指定的包 yum remove package_name # 卸载 yum clean all # 清掉缓存的包和头文件装不上时先试这个装不上包的时候第一反应不要是怀疑网络先跑一遍yum clean all再装缓存坏了是很常见的原因。另外yum update不带包名是更新全系统风险比带包名大得多新手别顺手就敲。本地和服务器之间传小文件最省事的是lrzszyum install -y lrzsz # 装好之后才有 rz 和 sz 两个命令 rz # 在终端里执行弹出窗口从本机选文件上传 sz 文件名 # 把服务器上的文件下载到本机它只适合几兆以内的小文件传大包还是走wget或者专门的传输工具更稳。wget https://mirrors.huaweicloud.com/elasticsearch/7.8.0/elasticsearch-7.8.0-windows-x86_64.zipwget后面直接跟下载地址文件就落在当前目录。想放到别的位置先cd过去再执行或者用-P指定目录。5. 新手最容易翻车的几处排查与避坑前面四章讲的都是“怎么做”这一章专门讲“哪里会出错”。命令本身不难难的是出错之后你不知道该看哪里。下面这几条是按“现象 → 原因 → 解决”整理的几乎每条我都亲眼见过有人中招遇到问题时对着翻一遍能省很多时间。5.1 路径和删除相关的三个坑坑一rm -rf ./*敲在了错误的目录现象是执行完发现文件全没了而且没有任何提示。原因是./表示当前目录你对哪个目录执行就删哪个目录下的所有内容而-f又把确认环节关掉了。解决方式执行前先pwd确认位置再用ls看一遍要删的东西确认无误才换成rm -rf。要删某个具体目录写完整路径比写./安全得多。坑二软连接删成了真实目录现象是删完软连接发现原目录里的数据也没了。原因就是上一节说的rm -rf /data/结尾多了个斜杠删除操作顺着连接进到了真实目录。解决方式删软连接一律不带结尾斜杠删之前用ls -l看一眼输出里带-箭头的才是连接箭头指向的才是目标。坑三find ... -exec rm范围写得太大现象是本来只想删.pyc缓存文件结果把别的也删了。原因是find .从当前目录往下递归如果当前目录正好是项目根目录或者更上层命中范围会远比预想大。解决方式把-exec rm -rf {} \;换成-print先跑一遍把要删的列表看过一遍确认数量级对得上再改成删除。find . -name * -size 145800c -print # 先只打印看看命中哪些 find . -name * -size 145800c -exec rm -rf {} \; # 确认后再删这里-size 145800c的c表示单位是字节不加c默认按块算结果会差很多这也是新手常算错的地方。5.2 权限、端口与日志的两个坑坑四脚本执行提示 Permission denied现象是./test.sh敲下去返回“权限不够”。原因是文件默认没有执行权限看一眼ll的输出就明白了。解决方式chmod ux test.sh # 给文件拥有者加执行权限 chmod 755 test.sh # 或者用数字方式拥有者读写执行其他用户读和执行ll输出里那九位权限位前三位的rwx分别是读、写、执行中间三位是同组用户后三位是其他人。chmod ux里的u就是拥有者g是同组o是其他人。数字方式里 4 是读、2 是写、1 是执行加起来 7 就是读写执行这个换算练两次就顺了。坑五服务起不来但看不出为什么现象是启动命令敲下去没报错或者报了一句很笼统的失败访问端口还是不通。原因通常是日志没看对地方或者端口被别的进程占着。解决方式按这个顺序走一遍netstat -tunlp | grep 8080 # 先确认端口有没有被占用、被谁占用 lsof -i:8080 # 另一种查法直接看占用该端口的进程 tail -f /var/log/message # 跟踪系统日志看有没有报错 df -h # 磁盘满了也会导致服务起不来顺手看一眼日志位置要记几个常用的/var/log/message是系统启动后的信息和错误日志/var/log/secure是安全相关/var/log/cron是定时任务/var/log/boot.log是守护进程的启动停止记录。另外cat .bash_history能看到这个用户之前敲过的命令接手别人的机器时特别有用相当于一本操作记录。如果还想看某个进程内部在干什么可以顺着 PID 往下查ps -ef | grep java # 先找到进程 jstack 2246 | grep 0x9eb -A 50 # 再看这个进程里某个线程的堆栈ps aux和ps -ef都能列进程前者偏 BSD 风格后者偏 System V 风格日常混着用问题不大。ps -au看到的是从进程启动开始计算的平均资源占用想看实时占用得用top。top 的两个区域怎么看top的输出分上下两块。上面是统计信息区第一行是系统时间和已运行时长load average后面三个数字分别是最近 1、5、15 分钟的平均负载Tasks那行看总进程数、运行中、睡眠中、僵尸进程数%CPU(s)那行重点看id空闲百分比和wa等待输入输出的时间占比wa高说明卡在磁盘上而不是算力不够下面KiB Mem和KiB Swap是内存和交换分区情况。下面是进程信息区PID是进程号%CPU和%MEM是两个最该看的列COMMAND是命令名。发现某个进程吃满 CPU记下它的 PID用kill -9 PID结束掉但这一步要慎重先弄清楚它是什么再动手。6. 下一步学什么三条能自己往下走的路把前面这些练到不用查资料大概需要两三个晚上。接下来的路怎么走取决于你日常要干什么我给三个方向选一个往下扎就行不用三个一起上。第一条是“把文件系统彻底摸熟”。把find的常用参数、chmod的数字权限换算、du和df的区别练到条件反射。特别是存储这块du -sh看当前文件夹占多少、du --max-depth1只看一层、df -h看整块盘的使用率这三条组合起来磁盘告警时能第一时间定位到是哪个目录在膨胀。du -sh # 当前文件夹总占用 du -lh # 当前目录下各子项分别占多少 du --max-depth1 # 只看一层别往下钻 df -h # 整块磁盘的使用率第二条是“把服务跑起来”。学着用yum装服务、用systemctl或service管理启停再练着看端口、看进程、看日志这三件套。像service mysql start、service mysql status、service mysql stop这种多起停几次就有感觉了。想再进一步就摸一下docker它的命令和 Linux 原生命令的思路是通的docker images看本地有哪些镜像docker search mysql去仓库里找docker run -di --namefirst -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot 镜像ID跑起来docker ps看运行中的docker ps -a看全部docker stop、docker start、docker rm管生命周期。参数看着多其实就四件事起个名字、映射端口、传环境变量、指定镜像。命令作用新手最该注意的参数docker run -di --namefirst -p 3306:3306后台启动容器并映射端口-d后台-p宿主端口:容器端口docker ps/docker ps -a看运行中 / 看全部容器-a才会显示已停止的docker stop/docker start/docker rm停止 / 启动 / 删除容器删之前先停不然要加-fnetstat -tunlp | grep 端口查端口占用-tTCP-uUDP-n数字显示-l监听-p显示进程第三条是“练排查的手感”。给自己造几个故障练故意把配置改错、故意把权限改乱、故意占住一个端口然后不看答案自己找出来。这种练法比看十篇教程管用因为排查能力是靠“见过”堆出来的不是靠“记住”堆出来的。第一次学的时候我图省事跳过pwd和ls确认这一步直接对着一个路径敲了rm -rf结果删掉的是另一个项目正在用的上传目录恢复花了大半天。从那以后我每次执行删除、覆盖、移动这三类命令都强制走一遍“pwd看位置、ls看内容、复制一份备份”的流程哪怕明知道没问题也照走。这个习惯救过我很多次也是我最想推荐给你的第一条规矩。希望帮到你。本文还有配套的精品资源点击获取