
1. 这门课到底在教什么先搞懂Linux命令的本质很多同学第一次坐进Linux课堂的时候心里是有点发怵的。屏幕上不再是熟悉的图标和窗口光标一闪一闪旁边是一串看不懂的字符。然后老师敲了几行命令屏幕刷刷滚动那一刻大部分人脑子里只有一个想法这玩意儿到底在干什么我上了这么多年Linux课最想先跟你们说的一件事是命令不是用来背的是用来理解动作的。Linux命令本质上是你在跟操作系统“说话”。你想看当前在哪就说pwd你想看看文件夹里有什么就说ls你想换个地方就说cd。这不是英语考试不需要死记硬背每一个参数。你只需要理解每个命令背后对应的人类动作然后用它去完成你真实想做的事。这堂课的目标不是让你成为“命令背诵大赛冠军”而是让你形成一种“用命令解决问题的直觉”。我知道现在网上随便一搜就有“Linux常用命令大全”“Linux面试题”之类的东西列表很长几百条命令塞得满满当当。但如果你没有理解这些命令之间的关系背一百条也是白搭过三天全忘。这堂课我给自己定的任务很简单把最常用的命令按“上课、作业、学期项目”这条主线重新整理一遍讲清楚每个命令解决什么场景问题以及背后的判断思路。你如果能把这篇内容真正吃透课堂作业、实验报告、面试基础题基本都能扛得住。这门课适合谁适合刚开始接触Linux的在校学生、准备转行做运维或后端开发的初学者也适合那些用过Linux但始终觉得“命令好乱”的朋友。我把课上会反复碰到的知识点拆成几大块路径与导航、文件操作、内容查看与搜索、vim编辑、重定向与管道、脚本基础、系统与权限每一块都是后面学习的基础。你现在花一节课的时间把地基打牢后面跑什么实验都不慌。2. 课堂上的第一条主线认路、转身、看东西2.1 我先得知道自己站在哪儿pwd 和 cd 的关系绝大多数学Linux出问题的同学第一个拦路虎不是命令不会敲而是不知道自己当前在哪个目录。你在Windows里知道自己在C盘还是D盘因为路径写得很清楚。Linux里也有一套路径系统但终端不会默认把完整路径怼在你眼前很多人就迷路了。pwdprint working directory就是用来回答“我现在在哪”的命令。你输入pwd系统会把当前目录的绝对路径打出来。比如$ pwd /home/student这表示你现在位于home目录下的student目录里。上课时我经常看到有人实验做一半说“老师我文件不见了”一问pwd发现自己在/tmp下创建了一堆东西。后来我养成了一个习惯每次执行重要操作之前先敲一遍pwd看看自己在哪。这不是多此一举这是所有Linux老手的肌肉记忆。cdchange directory负责移动位置。学习cd的时候最重要的是区分绝对路径和相对路径。绝对路径是从根目录/开始写起的完整路径比如cd /etc/nginx无论你人在哪都能一步跳到目标位置。相对路径则是从当前目录出发的走法比如当前在/home/student你敲cd Documents实际上到的是/home/student/Documents。相对路径里有几个特殊符号上课必考、平时必用符号含义例子.当前目录cd ./scripts等于cd scripts..上一级目录cd ..返回上一层~当前用户的家目录cd ~回到home-上一次所在的目录cd -在两地之间反复横跳特别是cd -这个用法很多教材都不提但实际用起来特别爽。你在/etc/nginx和/home/student之间来回改配置文件的时候敲一个cd -比重新输入一长串路径快得多。学命令就是这样多知道一个冷门参数操作体验就上一个台阶。2.2 想看目录里有什么ls 的三种核心用法ls这个命令看起来简单但很多人只会一个裸的ls这就有点浪费了。课上我会强调ls至少要掌握三种玩法第一种是ls -l查看文件的详细信息包括权限、属主、大小、修改时间。你后面学权限管理靠的就是这个输出。第二种是ls -a显示所有文件包括以.开头的隐藏文件。Linux里隐藏文件不是为了防止你看到而是约定俗成表示“配置文件平时就别拿来烦我了”。真正排查问题的时候ls -a能帮你发现很多藏在眼皮底下的东西。第三种是ls -lhh表示human-readable把文件大小显示成K、M、G这种人类好读的单位。组合命令也很重要。ls -lah是我平时敲得最多的组合之一一条命令同时拿到隐藏文件、完整信息和友好体积。你还可以用ls -lt按时间排序找最近改过的文件。2.3 课堂高频考点为什么要用clear、history和Tab上课时经常有同学问我屏幕输出乱糟糟的怎么办答案就是clear把终端清干净。这个命令没有任何参数也没有任何副作用就是帮你换一块干净的“黑板”。history命令也很重要。你可以在终端里输入history看到自己敲过的所有命令记录。上课的时候我特别喜欢用这个功能帮同学复盘你刚才到底敲了什么按时间顺序全在列表里。history配合!编号可以重复执行某条历史命令比如!42就是重新执行编号42的那条命令。这个技巧在你反复调试一条长命令时非常方便也不需要重新敲一遍。然后是Tab键。我上第一节课就立了个规矩凡是用Tab键能补全的绝对不允许手敲完整路径。原因很简单手敲容易拼错而Tab键会根据你输入的前几个字符自动补全文件名、目录名或命令名按两下还能列出所有可能的候选。这个习惯能帮你省下大量时间也大幅减少因拼写错误导致的“command not found”。一个Linux用户的熟练程度很多时候从看他按不按Tab就能看出来。3. 课堂上的第二条主线文件操作与内容查看3.1 创建文件别用鼠标touch、mkdir、rmdir上课第一天很多同学会下意识地问“怎么右键新建文件”在Linux终端里创建一个空文件的命令是touch。比如touch linux_notes.txt这条命令会创建一个名为linux_notes.txt的空文件。如果同名文件已经存在它的效果则是更新文件的时间戳。课堂上的用处主要是快速搭建实验用的临时文件。创建目录用mkdir。注意mkdir默认只能在已存在的路径下创建一层目录如果你想一次创建多级嵌套目录要加-p参数mkdir -p project/backend/controller不敲-p的话如果上级目录不存在系统会直接报错。这个参数在写脚本、搭建项目目录结构的时候几乎是必备。删除空目录用rmdir但说实话这个命令用处有限因为现实中你更多要删的不是空目录而是“里面塞满了东西”的目录。那时候就要用rm -r。3.2 复制、移动、删除cp、mv、rm 的底线和红线文件操作三兄弟cp、mv、rm是课堂作业里出现频率最高的命令。先分清它们各自负责的事情cp source.txt backup.txt # 复制源文件还在 mv oldname.txt newname.txt # 移动/重命名源文件没了 rm temp.txt # 删除没地方后悔cp复制目录要加-rrecursive比如cp -r project project_backup。很多人第一次复制整个目录忘记加-r结果系统提示omitting directory当场愣住。这个-r的含义是递归处理目录下的所有内容是目录类命令操作里最常见的参数。mv既可以移动文件到别的目录也可以重命名文件。它的执行效率比“复制再删除”高得多因为实际只是修改目录记录而已不需要搬动数据。课上我会让大家通过mv来理解Linux中“重命名”的本质——它不是一个特殊的操作而是把文件从一个名字“移动”到另一个名字。rm是这三兄弟里最需要敬畏的。我在课上跟学生反复强调一句话rm是一条没有后悔药可吃的命令。你把它敲下去文件不会进回收站而是直接从文件系统里消失。尤其是配合-rf参数的时候比如rm -rf加上目标目录那真是一删一个准。-r表示递归删除目录-fforce表示强制删除、不询问确认。课堂上我允许同学用rm但必须先想清楚路径对不对。我自己的习惯是重要的删除操作先用ls确认目标存在再执行删除宁可多花两秒钟也不要变成事故现场。3.3 查看文件内容cat、less、head、tail 谁更合适查看文件内容初学者第一个学会的通常是cat。它的名字来源于concatenate连接最原始的功能是把文件内容全部输出到屏幕上。如果文件只有几十行用cat看没问题但如果文件是几千行的日志直接cat会把终端刷得面目全非。这时候你就需要less了。less是分页查看工具打开一个文件后可以用方向键上下滚动按空格翻页按q退出。它的好处在于不会把整个文件一次性灌进屏幕而是按需加载。课堂讲配置文件时我会让同学用less /etc/nginx/nginx.conf去看内容配合斜杠/搜索关键词比如输入/root就能快速定位到root相关配置。查日志、查配置、读源码less才是主力。如果你只想知道文件末尾新增了什么内容那就用tail。最经典的场景是看持续写入的日志文件tail -f app.log-f参数会持续跟踪文件新增的内容实时刷新。我在课堂上演示过很多次启动一个服务然后用tail -f盯着日志服务报错信息立刻呈现。还有一个高频用法是tail -n 100 app.log查看最后100行。对应的head用来查看文件开头部分默认显示前10行。head -n 20可以指定行数。看日志开头、看配置文件的头部说明它都很有用。课上有同学问过我到底该用cat还是less我的判断标准很简单文件短用cat文件长用less盯着动态输出用tail。工具是用来解决问题的不是用来显摆技术深度的。3.4 在文件里翻东西grep 是命令里的搜索引擎grep应该是课堂里很受欢迎的命令因为它本质上就是终端里的搜索引擎。它能按关键词、正则表达式在一个或多个文件中查找匹配的行并把结果打印到屏幕上。最基本的用法grep error server.log这条命令会把server.log中所有包含error的行显示出来。要忽略大小写就加-i要显示行号用-n要递归搜索整个目录用-rgrep -rn main /home/student/project/grep最厉害的地方是它支持正则表达式。比如你想找所有以数字开头的行可以写grep ^[0-9] file.txt。虽然初学者听到正则表达式会有点慌但你可以先把它理解为“描述文本模式的规则”。课堂上不需要一次吃透全部正则用法只要掌握^表示行首、$表示行尾、.表示任意单字符遇到需求时现查现用慢慢就有感觉了。我在实际教学里发现grep配合管道后面要讲的|才是它的完全体。比如先列出文件再过滤关键词就能快速定位到你想找的东西。这一招在排查日志、查找配置项时每天都在用。4. 课堂上的第三条主线文本编辑与命令组合4.1 vim 入门不逃不躲掌握这八个操作就够了很多同学一听到vim就头皮发麻理由是“进去不知道怎么退出”。这个梗流传太广了以至于每年都有学生在课堂上现场表演死磕vim。我的态度是vim必须学但真不需要你马上变成vim大师。课堂上掌握一小部分操作就足够应付所有编辑需求了。vim的模式概念是核心。你打开vim默认处于普通模式Normal mode此时键盘上的按键不是用来输入文字的而是用来移动和操作文本的。要输入文字你得按i进入插入模式Insert mode输入完成按Esc回到普通模式。要保存退出在普通模式下输入:wqwrite and quit只退出不保存用:q!。我只要求学生练熟这几件事需求按键含义进入编辑i光标当前位置进入插入模式保存Esc然后:w保存不退出保存并退出Esc然后:wq保存并退出vim不保存退出Esc然后:q!放弃修改退出删除当前行dd在普通模式下连按两次d撤销上一步u按u撤销移动光标hjkl左、下、上、右搜索/关键词输入斜杠加关键词回车很多人觉得vim难是因为想一步到位学完所有快捷键。真没必要。你先把上面这张表练熟了能在终端里顺利编辑文件、保存退出就已经解决90%的课堂问题了。随着你使用次数增多自然会慢慢接触yy复制行、p粘贴、gg跳转到第一行、G跳转到最后一行这些更高阶的操作。4.2 重定向把输出送到该去的地方在终端里执行命令结果会打印到屏幕上。但很多时候你想把结果保存到文件里或者把文件内容作为另一个命令的输入。这就用到重定向了。表示把命令的输出写入文件如果文件已存在则覆盖表示追加到文件末尾不覆盖原有内容。ls -l filelist.txt echo hello notes.txt表示从文件读取内容作为命令的输入但在终端交互里用得不算多更多是在脚本里出现。初学者把握和的差异就够了。课堂教学里有个非常好的实验把history的输出重定向到文件里生成一份自己的命令记录档案。我常说重定向是脚本编程的第一块敲门砖没有它命令和命令之间就无法建立“文件级”的连接。4.3 管道把命令串起来干活管道是命令行的精髓之一。管道符是竖线|它把前一个命令的输出当作后一个命令的输入。相当于在两条命令之间搭了一根“传输带”。history | grep vim ls -l /etc | head -n 10 ps aux | grep nginx我强烈建议课堂上多练管道思维先想清楚你要什么数据再看数据在哪个命令的输出里最后用grep、less、head这些命令做过滤和处理。比如你想看系统里有没有某个进程在跑ps aux输出所有进程然后管道接grep一下子就筛出来了。管道配合重定向能写出很优雅的命令链。比如history | grep git git_history.txt这条命令把历史记录里所有跟git相关的行提取出来保存到文件里。一个大任务被拆解成“一个管一个”的小步骤这就是命令行的组合艺术。4.4 脚本基础把多条命令装进一个文件上课到了中段就该接触shell脚本了。脚本的本质是把多条命令按顺序写进一个文件然后让bash逐行执行。这也是命令从“临时敲一敲”走向“自动执行”的转折。创建一个最简单的脚本#!/bin/bash echo start backup mkdir -p backup cp -r project backup/project_$(date %Y%m%d) echo done第一行#!/bin/bash叫Shebang它告诉系统用哪个解释器来执行这个脚本。$(date %Y%m%d)是命令替换把date命令的输出拼进文件名里结果类似project_20250601。保存这个脚本后给它加上执行权限chmod x backup.sh然后用./backup.sh执行。如果脚本文件本身没有执行权限你可以用bash backup.sh强制用bash运行但课堂实验我会要求学生理解chmod的存在意义——Linux的权限体系跟Windows完全不一样你要让系统允许文件作为程序执行就必须把执行位打开。脚本里常见的语法还有循环和判断。比如批量创建文件#!/bin/bash for i in {1..10}; do touch file_$i.txt done还有判断文件是否存在#!/bin/bash if [ -f config.txt ]; then echo config exists else echo no config fi课堂上的建议是先把顺序执行的脚本写熟练再攻克循环和判断。脚本不是额外负担它恰好是把你前面学的命令有机串联起来的最佳载体。5. 课堂上的第四条主线权限、进程、网络与包管理5.1 看懂权限串rwx到底在说什么每次用ls -l查看文件时你会看到类似-rw-r--r--的输出。很多学生第一次看到这十个字符觉得像乱码其实拆开看很清晰。第一个字符表示文件类型-是普通文件d是目录l是软链接。后面九个字符拼成三组分别代表**属主user、属组group、其他人other**的权限。每组里头有三个位置r表示读w表示写x表示执行。拿-rw-r--r--来说属主能读能写不能执行属组只能读其他人也只能读。就是这样一个三段式结构界定了谁可以对文件做什么。修改权限用chmod。最容易被接受的学法是数字法r记作4w记作2x记作1把三个数字加起来就是一组权限。chmod 755 script.sh这条命令中7421表示属主可读可写可执行541表示属组和其他人可读可执行。chmod 755是脚本文件最常见的权限配置。如果想把权限收紧只有自己能读写执行用chmod 700。课堂上做实验的时候我会让学生多对比700、755、644这三种权限组合的输出结果亲手记录权限变化比死背表格管用。5.2 查看进程ps 和 top 帮你摸清系统状态程序运行起来就变成进程。最常见的查询命令是ps。课堂上我会教ps aux这个组合它显示所有用户的所有进程并带着CPU、内存、命令行等详情。如果你想专门找某个进程加上grep过滤就好。ps aux | grep pythontop是动态监控工具它像刷新中的仪表盘实时显示CPU占用率、内存占用、进程列表。进入top界面后按q退出。实际操作中系统卡顿的时候第一反应就是打开top看看哪个进程在吃CPU或内存。如果发现某个进程占资源异常可以用kill命令结束它。先kill 进程ID温和地请求退出要是没反应再kill -9 进程ID强制终止。注意-9是在进程死活不听命令的情况下才用的狠招日常环境先给普通kill一次机会。5.3 网络命令ping、curl、ss 的基本功上课做实验的时候网络是绕不开的话题。ping用来测试主机连通性但这个命令会有持续输出课堂演示时用ping -c 4指定发送四个请求包后自动停止不要无限ping下去。curl是网络请求利器向服务器发送HTTP请求并显示返回内容。最简单的用法curl http://example.com-I参数只需要HTTP头部信息、-o可以把响应体保存到文件、-X POST可以指定请求方法。后面学到API调试、数据抓取时curl几乎是必备工具。查看本机监听的端口和服务用ss -tlnp。这个命令能显示所有TCP监听端口-n表示用数字显示地址和端口、-p显示对应进程。排查“端口被占用”“服务没起来”这类课堂实验问题基本上靠它就能定位。5.4 包管理命令安装软件别只会下源码不同Linux发行版用的包管理工具不一样。Debian/Ubuntu系列的aptCentOS/RHEL系列的yum或dnf课堂里常见的是apt。安装软件前先更新索引sudo apt update sudo apt install nginx卸载软件用sudo apt remove nginx搜索软件包用apt search 关键词。用yum的发行版对应操作是yum install、yum remove语法逻辑基本一致。课堂演示时经常有人问我系统里某个命令不存在怎么办——比如如果提示 command not found第一反应不是怀疑人生而是检查自己的包管理仓库里装了没有。上课用的虚拟机里绝大多数软件都能用一句安装命令搞定不用费劲去官网下载源码包。5.5 系统与服务管理systemctl 的高频用法现代化Linux发行版基本都用systemd管理服务。课堂里常见的操作是启动、停止、查看服务状态systemctl start nginx systemctl stop nginx systemctl status nginx要设置服务开机自启用systemctl enable nginx不想自启用systemctl disable nginx。上课演示“为什么重启虚拟机后nginx没跑起来”的时候这个知识点就是答案——服务根本没被设为开机启动。查看系统时间和同步状态date timedatectldate显示当前时间timedatectl可以查看系统时间设置和NTP同步状态。如果虚拟机里时间不对排查时先想到这两个命令。6. 课堂高频问题与排查实录6.1 总提示 command not found怎么办这是每年课堂提问率最高的报错之一。遇到command not found思路应该是按顺序排查三件事拼写是否正确、命令所在的路径是否在PATH环境变量里、这个命令对应的软件有没有安装。先看拼写。初学者最容易犯的是大小写错误Linux命令严格区分大小写LS和ls完全不同。再看依赖有些命令单独用不了比如ifconfig在很多新系统上已经不再默认安装需要改用ip addr。最后看PATH用echo $PATH查看系统搜索命令的路径列表。如果某条命令在/usr/sbin下而你的PATH里没有这个目录就会出现“文件明明存在但你敲不了”的诡异情况。课堂实验里我曾让学生故意制造这种情况把某个可执行文件放在自己的home目录下直接执行文件名报not found加上./前缀就能运行。原因就在于当前目录默认不在PATH搜索范围内执行当前目录下的程序必须显式写./文件名。这个知识点虽然基础但理解了它你对命令搜索机制就彻底通了。6.2 权限不够Permission denied怎么破解permission denied是课堂第二大高频报错。看到这个错误首先想清楚你是这个文件的属主吗属组匹配吗其他人有没有权限如果是别人的文件或系统级配置文件最直接的办法是通过管理权限执行sudo cat /root/secret.txt但强调一点sudo是特殊权限不是万能钥匙。课堂上我会提醒学生能用普通用户做实验就不要随便加sudo先把权限模型吃透别养成“卡了就sudo”的习惯。真正要修改文件归属时用chown修改权限用chmod这比强行提权规范得多。还有一个常见的坑文件权限没问题但文件所在目录没有执行权限导致无法进入该目录。Linux里目录的执行权限意味着“能否穿过这个目录访问内部内容”这个细节很多人不知道课上遇到这个坑我会专门拿出来分析一遍。6.3 删除文件夹的命令到底怎么写“Linux删除文件夹命令”几乎是每个联网搜索Linux的人都会搜的问题。答案很简单rm -r 文件夹名如果该目录下文件太多且系统反复确认加-frm -rf 文件夹名但这里必须再次强调rm -rf是高度危险的组合谨慎使用。课堂上我的规定是先ls看清楚当前目录再执行删除写路径时尽量用相对路径并录入完整目标绝不允许出现“我少敲一个斜杠结果删错目录”的事故。网上流传过很多手滑事故案例绝大多数都跟rm连在一起。这不是命令设计有问题而是使用者没有提前确认目标。6.4 vim打开文件后不会退出如果你被卡在vim里第一反应不要慌。按下Esc确保回到普通模式然后输入冒号命令。想安全退出但不想保存修改按顺序敲:q!回车。想保存修改后退出敲:wq回车。实在分不清的话Esc之后连续按三下通常能回到普通模式输入:q!总能出来。课堂上我会让大家专门练五分钟“进去、编辑、退出”的流程就是为了把肌肉记忆建立起来。等练熟了vim就不会是恐惧源反而成为写命令和改配置的高效工具。6.5 历史命令的妙用history、CtrlR和别名课堂快结束时我通常会分享几个提升效率的习惯。第一个是history它能查看历史命令列表也可以配合grep过滤。第二个是CtrlR在终端里按下之后进入反向搜索模式你输入几个字符系统会从历史命令中找到最匹配的一条。这比从头翻history快得多。第三个是自定义别名alias。比如你总是敲ls -lah可以写成alias llls -lah以后敲ll就等于执行完整命令。但这个别名只在当前会话有效想永久生效要写进~/.bashrc文件。课堂上我会演示一遍如何用echo alias llls -lah ~/.bashrc追加到配置再执行source ~/.bashrc让配置立即生效。这种习惯一旦养成操作效率会有明显提升。6.6 命令和实验都没问题的最后一招学会看帮助很多同学卡住之后的第一反应是问老师或者搜网络这没问题。但我希望大家先学会自己看帮助。任何命令加上--help或者-h系统都会显示该命令的用法、参数和示例。另外还有一个更详细的工具是man比如man ls会打开完整的手册页按q退出阅读。课堂上我经常观察学生的操作习惯发现牛人和新手的显著区别之一就是牛人遇到不认识的命令第一反应xxx --help新手则是先蒙圈、再求助。这个差距并不难弥补就靠习惯养成。你不需要记得所有参数但你要知道“系统自带说明书在哪里”。7. 快下课时想跟大家说的几件事每次课快结束我都会留几分钟聊点心得。懂不懂Linux命令说起来不是你天赋有多高而是你有没有把命令当成工具而不是考试内容。命令的记法有规律可循但真正牢固的记忆来自高频使用和踩坑复盘。我个人实际带过不少零基础学生总结出的经验是每天只在终端里练十分钟好过一周突击三小时。命令的熟练度和手指记忆有关你敲得多了自然顺。遇到问题先把报错信息整个读一遍。很多时候解决方案就在错误提示的字里行间不用急着去搜搜索引擎。记笔记的时候不要把完整命令原样抄一遍而是记场景、记思路、记参数含义。看笔记时才能回忆起“为什么这样做”而不是“当时好像敲过”。大胆操作但重要操作之前想三秒。删文件、改配置文件、提权操作这三类动作养成交叉确认的习惯能帮你躲开绝大多数事故。课堂上的Linux命令学到最后你会发现真正值钱的不是某几条语法而是你用命令行组织信息、拼接操作、自动化处理重复劳动的方式。这种思维一旦建立后面学shell脚本、学运维自动化、学嵌入式系统都是顺水推舟的事。最后再分享一个小技巧把你常用的命令组合工具放在显眼位置——建议用alias整理自己的“迷你命令库”再配合history和CtrlR快速召回。比如我会在.bashrc里放一排自己定义的简写cl清理终端、gp查看git状态、lsl列出最近修改的文件。课堂上你可以先模仿着设置两三个最合自己习惯的后面用着用着这套命令库就成了你个人的工具箱。这堂课如果只留一个概念在你的脑海里我希望是命令不是背出来的是用出来的。现在就可以打开终端敲第一个pwd、建一个自己的目录、创建一份笔记文件把你在这个课堂学到的第一组命令变成真正运行过的内容。