
很多人第一次打开 Linux 终端时心里想的是这些排列得像天文符号一样的命令到底怎么背我当年在虚拟机里敲命令也经历过这种抓狂。后来才慢慢发现linux基础命令其实不是靠背而是靠“用”——你用得越多越能理解它为什么这么设计。这篇内容我尽量按实际使用频率来讲不追求把每个命令的几十个参数都列一遍而是让你先掌握一套马上能上手的组合解决日常文件管理、权限处理、进程排查、网络检查和文本处理的问题。适合刚接触服务器、开发环境或虚拟机的读者拿好终端跟着敲一遍效果比看十遍强。1. 命令的语法骨架先看懂再动手很多人一上来就背ls -l、cp -r却不知道为什么要加-l和-r。其实 Linux 命令的语法出奇地统一搞懂它后面学任何命令都会快很多。1.1 命令、选项和参数一台“点单机器”一条命令通常由三部分构成命令本身、选项、参数。打个比方你把终端当成餐厅前台命令是你说“来杯咖啡”选项是“少糖、换燕麦奶”参数是“送到哪桌”。Linux 的命令也一样ls是命令-l是选项/home/user是参数。选项的作用是改变命令的默认行为参数则是命令要处理的对象。选项有短选项和长选项两种写法。短选项是一个短横线加一个字母比如-l长选项是两个短横线加一个单词比如--all。不少短选项可以合在一起写比如ls -lh其实就是ls -l -h的简写。你不需要刻意去记每种写法只要理解“选项是微调开关”这个概念遇到新命令时自然能猜出个大概。命令的执行过程也值得理解。你在终端敲下lsshell 会按照$PATH环境变量里记录的目录顺序去查找一个名为ls的可执行文件。这个查找过程十几毫秒就完成了但明白这一点后面遇到“明明装了软件却说 command not found”时你就知道先检查PATH而不是怀疑软件没装上。1.2 查手册比自己硬记重要十倍Linux 自带了一套“说明书”最常用的是man。比如你想查cp命令的完整用法直接输入man cp屏幕会进入一个翻页界面空格键往下翻q退出/cp可以搜索关键词。第一次看man可能觉得内容太多但它的结构其实是固定的先是命令名和简介然后是参数说明、示例、作者。你只需要看自己需要的那一小段就行。除了man很多命令还提供了--help参数。cp --help会直接列出常见的选项比man更省事。我个人的习惯是先--help快速看不够用了再man。尤其是一个陌生命令--help的输出通常已经把最常用的场景覆盖了足够你完成手头的工作。1.3 type、which、echo验证命令到底从哪来遇到一个命令你可能想知道它是 shell 自带的还是系统里某个程序提供的。这时可以用type来看。type cd会告诉你cd is a shell builtin说明它是 shell 内置命令不依赖外部文件type ls则会显示ls is hashed (/usr/bin/ls)说明它是从/usr/bin/ls这个文件来的。which也经常用到which python3可以显示 python3 可执行文件的完整路径排查环境问题时特别有用。再加上echo $PATH可以列出所有可执行文件搜索目录这组命令基本能让你摸清命令的来龙去脉。2. 文件和目录操作每天碰得最多的就是它们如果只挑一个重点学我会把所有精力放在文件和目录操作上。Linux 的一切都抽象成文件配置是文件、设备是文件、日志也是文件。这部分命令用熟了系统管理的大门才算是真正推开。2.1 pwd和ls先知道自己站在哪刚进终端时屏幕前只有一串提示符很多人不知道自己在哪个目录。pwd就是用来回答“我在哪”的输出的是当前工作目录的绝对路径。比如/home/user/project一目了然。ls是 list 的缩写列出当前目录的内容。最常用的组合是ls -lah-l显示详细信息-a显示隐藏文件-h把文件大小转成人类易读的格式比如 4.0K、1.2M。ls -t可以按修改时间排序排错时看最新文件很有用。我建议你把ls设成一个习惯性动作每次进新目录先敲一下确认自己面对的是什么。2.2 cd、cat、less、head、tail浏览与阅读cd是切换目录。支持绝对路径/home/user和相对路径../project。cd ..返回上一级cd ~回到当前用户的家目录cd -在最近两个目录之间来回跳。这三个特殊路径记下来日常操作能省很多事。查看文件内容时cat适合小文件会一次性把内容全部打印到屏幕。但文件一长cat就会让终端刷屏。这时候用less更好它是分页阅读器空格翻页、b往回翻、g跳转到文件开头、G跳转到末尾q退出。head和tail分别取文件的开头和结尾部分head -n 20表示看前 20 行tail -n 50表示看最后 50 行。排查日志时tail -f app.log这个参数是 follow 的意思可以实时滚动显示新增内容是我最常用的调试姿势。2.3 mkdir、touch、cp、mv、rm日常增删改创建目录用mkdir平时我加一个-p参数可以一次性创建多级目录。比如mkdir -p /home/user/logs/2025/01即使父目录不存在它也会直接创建好不用一层层地 mkdir。touch主要用来创建空文件也能更新时间戳。cp复制文件复制目录时必须加-r才能递归复制。mv可以移动文件也可以重命名命令格式是mv 源 目标。比如mv old.txt new.txt实际上就是改了个名字。rm删除文件加-r删除目录-f强制删除且不提示。这里必须提醒一句rm -rf是极其危险的操作一旦删错没有回收站可回。我的建议是每次敲rm -rf之前先ls -lah看看这个路径到底是什么确认三次再回车。2.4 通配符和引号一不留神就出错的细节Linux 支持通配符*匹配任意多个字符?匹配单个字符方括号[ab]匹配指定字符集合。比如ls *.log会列出所有以.log结尾的文件。通配符很好用但也容易误伤。比如rm *.tmp如果当前目录下正好有多个匹配文件它会全部删除哪怕你只准备删一个。所以在用通配符执行危险操作前先用echo输出一下匹配结果确认无误再执行。引号也经常被忽略。单引号内的内容会原样保留双引号内的变量会被展开。比如echo $HOME输出字符串$HOME而echo $HOME会输出实际的/home/user路径。如果文件名里有空格或特殊字符最好用引号包起来避免被 shell 拆成多个片段。3. 权限和用户看懂Permission denied少猜半天刚用 Linux 时最常收到的一条报错就是Permission denied。这一般不是命令敲错了而是权限不够。搞懂权限机制你会少走很多弯路。3.1 权限位拆解rwx 和数字的换算在目录里执行ls -l第一列会显示类似-rw-r--r--的字符这就是权限位。第一个字符表示文件类型-是普通文件d是目录l是软链接。后面九个字符分成三组分别是文件属主owner、属组group、其他人others的权限。r代表读w代表写x代表执行。目录的x表示能否进入该目录r表示能否列出目录内容。把权限转成数字很简单r4w2x1。所以rwx对应 7rw-对应 6r--对应 4。常见的755表示文件属主拥有读、写、执行权限属组和其他人只有读和执行权限644表示属主可读写其他人只读。这些数字会一直出现在文档里看多了自然就熟了。3.2 chmod、chown、sudo改权限的三件套chmod用来改权限有两种写法。一种是符号写法比如chmod ux script.sh给属主增加执行权限另一种是数字写法比如chmod 755 script.sh一次设置完整权限。我推荐至少掌握符号写法中的ux、g-w、or这种模式平时改一两个权限位很快。chown用来改文件属主和属组比如chown user:group file.txt把属主改成 user属组改成 group。普通用户只能把自己的文件改成别人的不能直接修改 root 所拥有的文件。sudo则是临时借用 root 身份执行命令比如sudo apt install nginx。要注意的是不要随手给命令加 sudo只用在该需要提权的地方否则一旦命令写错影响范围可能会被放大。3.3 useradd、passwd、su用户与切换创建用户用useradd我一般会加-m参数这样会自动创建一个家目录。比如sudo useradd -m newuser然后用sudo passwd newuser设置密码。查看当前登录用户用whoami查看用户在哪些组里用id或groups。切换用户用su。su - user会切换并加载该用户的环境变量su user只是切换身份但保留当前环境。无论哪种方式退出当前用户只要输入exit。这里有个经验日常操作尽量用普通用户只有在安装软件、改系统配置等必要场景才切到 root。不是说 root 不能用而是普通用户常驻更稳妥避免手滑造成系统级损坏。4. 进程、系统信息和网络排查遇到问题按顺序查服务器出问题时最忌讳瞎试。有一个相对固定的检查顺序先看进程再看磁盘和内存最后看网络。这样一层层排查大多数应用问题都能定位到大概范围。4.1 ps、top、kill找到并结束失控进程ps用来查看当前进程快照。我最常敲的是ps aux它会列出所有用户的进程并展示 PID、CPU、内存占用、命令详情等。ps aux | grep java可以把与 Java 相关的进程过滤出来是定位“应用启动失败”或“端口占用”的常见操作。top是实时更新的进程监视器第一行显示系统负载后面按 CPU 或内存排序展示进程。如果想找到哪个进程吃了大量资源直接在top里看即可。top运行时按P按 CPU 排序按M按内存排序按q退出。结束进程用kill。kill PID默认发送的是 SIGTERM 信号相当于礼貌地请进程退出如果进程不响应再考虑kill -9 PID也就是 SIGKILL 信号直接强制杀死。我建议先给一次温和的kill等上几秒不行再上-9不要一上来就强杀否则某些程序可能来不及清理临时文件或释放端口。4.2 df、du、free、uname看磁盘、内存和系统信息磁盘快满的时候应用经常会报各种奇怪错误。df -h可以查看所有磁盘分区的使用情况单位是易读的 G 或 M。du -sh /home/user可以查看某个目录总共占用了多少空间排查是谁把磁盘填满很管用。free -h看内存使用情况包括总量、已用、可用、缓存等系统卡顿的时候先跑这一条。uptime可以显示系统负载和运行时间三条负载数字如果长期超过 CPU 核数说明系统可能忙不过来了。uname -a用于查看内核版本和系统架构信息安装驱动或软件时经常会用到。4.3 ping、curl、ss网络排查的基本动作网络不通时第一步用ping测连通性。ping example.com会持续发送测试包按CtrlC停止。能收到回包说明网络路径基本通完全不同则可能是域名解析、路由或防火墙问题。第二步用curl测试具体服务。curl -I https://example.com只返回响应头用来判断服务是否存活curl -v会显示详细的请求过程包括 DNS 解析、TCP 连接、TLS 握手等定位问题非常直观。如果某个服务的端口连不上ss -tlnp能查看正在监听的 TCP 端口及对应进程比如ss -tlnp | grep 8080可以快速确认端口是否被占用、是哪个进程在监听。5. 文本处理用管道把命令串成流水线Linux 的小工具非常有特色每个命令只做一件事但可以通过管道组合出强大的数据处理能力。这是很多新手觉得难但一旦掌握就再也离不开的部分。5.1 grep从一堆日志里捞关键信息grep是文本搜索命令。基础用法是grep keyword file.txt输出包含关键词的行。常用参数包括-i忽略大小写、-v反向匹配、-n显示行号、-r递归搜索目录。排查日志时我经常这样组合grep -i error app.log | head -50只取前 50 行错误避免刷屏。grep还可以配合管道从命令输出中过滤。例如ps aux | grep nginx先列出所有进程再筛出包含 nginx 的行。这一招虽然简单却是排查进程、端口、异常信息的最常用手段可以说是我用 Linux 时敲得最多的一条命令模式。5.2 awk和sed两个“吓人”但实用的命令awk擅长按列处理文本。awk {print $1} file.txt会输出每行的第一个字段默认用空白字符分割。如果文件分隔符是冒号比如/etc/passwd可以写成awk -F : {print $1} /etc/passwd取出用户名列表。awk内部还可以做统计比如awk {count[$1]} END {print count[1]} file.txt按第一个字段进行简单计数。对初学者来说先掌握{print $N}和-F就足够应对日常需求了。sed擅长替换和编辑流。sed s/old/new/g file.txt会把文本中所有old替换成newg表示全局替换。sed s/^/prefix/ file.txt会在每行行首添加内容。修改文件时如果确认无误可以加-i直接写回原文件但我建议第一次使用时先不加-i把输出结果打印出来看看确认没问题再真正落盘。5.3 重定向、管道、和||命令之间的连接器Linux 里会把命令输出写入文件覆盖原有内容则是追加到文件末尾是输入重定向2是错误输出重定向。比如echo hello hello.txt会创建或覆盖一个文件。tail -f app.log /tmp/record.txt可以把日志输出收集起来。管道符|是命令之间的“传送带”把前一个命令的标准输出传给后一个命令。cat access.log | grep 404 | wc -l可以统计日志里出现 404 的次数。wc -l就是统计行数。和||用来做条件执行mkdir backup cp app.log backup/表示只有前面成功后面才执行ping -c 1 example.com || echo ping failed则表示失败时执行后面的命令。6. 这些亲测踩过的坑比命令本身更值得记命令的语法可以从手册里学到但很多经验是在错误中积累的。这几条坑我每一件都亲自踩过写出来给你避个雷。6.1 rm -rf 差点让我崩溃有一次我本来想清理一个临时目录命令写成了rm -rf /home/user/project /tmp/tmpdir结果路径写歪了开始删除后才反应过来手忙脚乱按CtrlC但已经删掉部分文件。幸好这台机器只是测试环境不然真的会崩溃。从那以后我给自己定了几条规矩删除前必须ls确认路径尽量用相对路径而不是多个绝对路径连写重要目录我还会用mv到一个trash目录而不是直接rm过几天确认没问题再清空。6.2 文件名的空格、特殊字符和换行符Linux 允许文件名里有空格甚至可以有换行符。这就导致部分脚本解析文件名时踩坑。比如My File.txt如果不用引号包裹shell 会把它当成两个文件名。处理时必须写成cat My File.txt或cat My\ File.txt。更隐蔽的是从 Windows 传过来的脚本文件换行符是 CRLF而 Linux 下是 LF直接执行可能报错。这时可以用sed -i s/\r$// script.sh把行尾的\r去掉脚本就能正常跑了。6.3 tab补全、history和别名提高效率的小习惯效率差距往往不是靠“敲得快”而是靠“按得少”。tab 键补全可以帮你免掉大部分路径输入按下 tab 还能像“提示器”一样列出候选文件名。history能查看之前敲过的所有命令配合CtrlR反向搜索你几乎不用重新敲那些长命令。别名也是我的常用配置。比如在用户目录下的.bashrc里加一行alias llls -lah以后输入ll就等于执行ls -lah。重启终端后生效。每天在终端敲大量重复命令时积累几个顺手的别名效率提升非常明显。我在实际使用中发现很多所谓“记不住命令”的问题其实不是记忆力的问题而是没有把这些辅助工具用起来一旦习惯 tab 补全和历史搜索你会发现命令根本没有想象中那么难。