资讯动态

Linux命令行实战教程:从基础命令到Shell脚本自动化

发布时间:2026/9/10 6:53:18 来源:尧图企业网站定制
我见过不少朋友装好Linux之后第一件事是找图形界面里的文件管理器第二件事是问“怎么右键新建文件”。这种用法不能说错但真的浪费了Linux最值钱的那部分。真正让Linux跑起来的是命令行真正能让你在服务器上活下来的也是命令行。我自己的经历很朴素第一次认真用Linux是因为一台服务器磁盘只剩不到2GB线上日志还在疯涨图形界面根本连不上只能靠终端一条命令一条命令地清。从那次以后我就明白图形界面能帮你完成80%的桌面操作但遇到问题和自动化任务命令行才是唯一的答案。这篇教程不是把命令大全搬过来堆给你看而是按我这些年实际折腾服务器的经验整理出一条更省时间的学习路径。适合刚接触Linux的学生、准备运维岗面试的求职者、以及工作中经常要登录服务器的研发。学完以后你至少能做到熟练操作文件和权限、会用管道把命令串起来、能用grep/sed/awk处理文本、能排查常见系统故障还能把重复工作写成脚本自动执行。1. 为什么说命令行是Linux真正的入口1.1 图形界面只是门面命令行才是内核的“普通话”Linux的底层哲学是“一切皆文件”配置是文件、设备是文件、进程信息也在文件里。图形界面相当于给内核配了个翻译你用鼠标点击图形界面再替你转换成系统调用。这样做的好处是上手容易坏处也很明显一旦图形界面自己出了问题或者你要在一台没有桌面的服务器上操作整套能力就归零了。命令行是Linux内核的“普通话”。你敲的每一条命令本质上都是在直接和内核对话没有中间层绕路。举个真实的例子文件夹里有个文件名带换行符或特殊字符图形界面里你根本点不动它但在命令行里可以用引号、转义符或者精确匹配轻松处理。再比如批量重命名一千个文件鼠标操作能让人崩溃命令行一条rename就完了。这些场景不是少数而是服务器运维里的日常。还有一点经常被忽略命令行操作天然可记录、可回放。你在终端里敲过的命令history都能看到写进脚本以后还能重复执行。图形界面则完全不具备这种可追溯性你做过的操作别人无法审计出问题了也很难排查。所以企业服务器几乎清一色只装命令行环境原因不是省钱而是可管理性和确定性。1.2 学习曲线没有想象中陡核心命令只有三四十个很多新手被吓住是因为打开man bash看到上百页文档立刻觉得学不完。实际上日常使用中高频命令就那么三四十个。文件操作一组文本查看一组权限管理一组进程和网络一组组合起来已经能覆盖大部分运维场景。你不需要记住每个命令的所有参数只需要知道“有这么个工具能解决这类问题”用到时再查参数完全来得及。打个比方学命令行就像学做菜。你不需要先背完整本菜谱才能下厨只要会洗菜、切菜、开火、调味这几件事就能做出一桌家常菜遇到新菜式再查菜谱做两次就记住了。命令行也是这样从最基础的cd、ls、cat开始每天敲几十次肌肉记忆很快就能建立起来。真正难的从来不是命令本身而是遇到问题的时候你能想起来“哪个工具可以派上用场”这才是我在文章里反复强调“按场景学命令”的原因。2. 先搭好实验环境虚拟机、WSL2与物理机怎么选2.1 三种环境对比按目的选择最省事学习Linux命令行第一件事不是背命令而是先有一个能随便折腾的实验环境。我推荐三种方案虚拟机、WSL2、物理机安装。它们各有各的用途不一定要分出高下。方案优点缺点适合人群虚拟机VMware/VirtualBox隔离性好快照可以随便回滚能模拟多台机器组网启动慢占内存和磁盘想练习服务器部署、做集群实验的人WSL2启动快和Windows共享文件系统资源占用小和原生Linux有细微差异早期systemd不默认启用日常练命令、写脚本、跑Python最合适物理机安装性能最好最接近真实生产环境装坏了可能影响日常使用需要额外准备机器有闲置电脑想彻底切换Linux桌面的人如果是第一次接触Linux我个人的建议是先上WSL2。原因很直接你不需要为了学命令去装一个完整系统Windows保持不动随时打开终端就能进入Linux环境。尤其是现在的WSL2已经不是“玩具”它跑的是真正的Linux内核绝大多数命令行为都和服务器一致。等你把文件、权限、脚本这些基础打好再开虚拟机练网络和服务部署效率会高很多。2.2 装好环境后的初始化三件事不管用哪种方案装好系统以后别急着炫技先把三件事做完。第一更新软件源。Debian/Ubuntu系执行sudo apt update sudo apt upgrade -y这一步能把系统自带的软件索引刷新到最新避免后面安装工具时遇到依赖问题。如果是CentOS/RHEL系对应命令是sudo yum update -y或sudo dnf update -y。第二安装常用基础工具。新系统缺的东西比想象中多我一般第一轮先装这些sudo apt install -y vim curl wget git tree net-tools unzip p7zip-full这里强调一下vim在很多系统里默认只有vi体验差别很大curl和wget是下载文件的两个主力tree能让你一眼看清目录结构net-tools提供ifconfig、netstat这些老牌命令虽然被ip和ss替代了但很多老文档还在用装了不亏。第三创建一个普通用户别整天拿root操作。命令行世界里权限区分很重要root权限能删库跑路也能把系统搞挂。日常练习用一个普通用户只有需要安装软件时才用sudo这个习惯越早养成越好sudo adduser yourname sudo usermod -aG sudo yourname2.3 不同发行版差别大吗经常有人问“Ubuntu和CentOS命令一样吗”“国产系统能不能用同一套命令”。我的回答是命令主体完全一样区别主要在包管理器。Debian系用aptRed Hat系用yum/dnfArch系用pacman但它们内部的ls、grep、awk、sed都是同一套GNU工具。Linux生态里的桌面发行版不管是国际版本还是国内团队维护的发行版底层都是Linux内核加开源软件栈命令行逻辑是通用的。所以你不需要纠结“我该学哪个发行版”。选一个社区活跃、文档多的先用起来比如Ubuntu或者Fedora把命令行的通用能力练好换发行版只是适应包管理器差异而已。真正到企业环境里你会发现不同服务器可能混着好几种系统但你能依仗的永远是命令行那套通用知识。3. 高频基础命令文件、目录、权限与用户3.1 文件和目录操作必须形成肌肉记忆文件操作是整个命令行的地基。这里我不打算逐个命令罗列只把最常用的一组操作和它们的关键参数整理出来。命令常见场景关键参数ls查看目录内容-l详细列表-a查看隐藏文件-h显示可读大小cd切换目录-返回上次目录~回家目录cp复制文件或目录-r递归复制目录-i覆盖前询问mv移动或重命名同分区内移动很快跨分区本质是复制加删除rm删除文件或目录-r递归删除-i删除前确认-f强制mkdir创建目录-p一次性创建多级目录touch创建空文件或更新时间戳常用于快速造测试文件举两个高频组合。第一个查看目录下所有文件大小并排序ls -lhSS参数让文件按大小从大到小排列排查大文件时非常好用。第二个创建多级目录mkdir -p project/src/utils不加-p的话如果project不存在会直接报错。这个细节写脚本时能救你无数次。关于rm -rf我多说一句它能删得干干净净也能让你追悔莫及。新手最容易犯的错是习惯性敲rm -rf 目录/多一个斜杠、多一个空格都可能指向错误的目标。建议在家里目录练习时给rm加上别名alias rmrm -i虽然每次多一步确认但能挡掉很多脑抽操作。3.2 查看文件内容别再只用cat很多新手看文件第一反应是cat filename这个命令在小文件中没问题但看日志时文件可能几百MBcat会把屏幕刷到怀疑人生。正确姿势是按文件大小和用途选工具。less大文件必用支持上下翻页和搜索按/输入关键词回车就能定位。看完按q退出。head和tail分别看文件头部和尾部。看动态日志用tail -f filename它会持续输出新增内容服务日志排错神器。wc统计行数、单词数、字节数配合管道非常有用。file判断文件类型尤其适合刚下载的二进制文件或者压缩包省得瞎猜。日志排错的标准操作是先用tail -n 100 app.log看最后100行再用grep过滤关键词。这两个命令组合起来能处理90%的日志排查场景。比如tail -n 2000 app.log | grep -E ERROR|Exception | tail -n 50把错误信息从两万行日志里捞出来这就是命令行组合拳的初步形态。3.3 用户与权限新手最容易翻车的地方Linux的权限模型是“读r、写w、执行x”三件套外加用户、用户组、其他人三个维度。ls -l看到的-rw-r--r--可以拆解成四个部分第一个字符是文件类型后面每三个字符为一组分别代表所属用户、所属组、其他用户的权限。常用命令只有四个chmod 755 script.sh chown user:group file.txt chgrp group file.txt umaskchmod可以用数字也可以用符号。比如chmod ux script.sh表示给当前用户加执行权限chmod -R 755 dir/表示递归修改目录下所有文件的权限。数字的对应关系是r4、w2、x1755就是用户可读写执行组和其他人可读执行。这个规则我强烈建议背下来因为面试题里几乎必出。创建和管理用户的命令也要熟练sudo adduser newuser sudo userdel -r newuser sudo usermod -aG docker newuseradduser会交互式创建用户比useradd省心得多-aG把用户加到附加组是给用户授权常用手段。比如想让某人有sudo权限就把它加进sudo组。权限这块是安全事故的高发区记住一句话给权限时尽量给最小够用的别图方便直接给root。4. 管道、重定向与Shell的思维转换4.1 标准输入输出程序之间怎么交换数据很多命令学会以后发现单独用效率不高真正厉害的是把它们串起来。要串起来先得理解Linux程序的标准输入、标准输出和标准错误。简单理解程序从标准输入读数据结果写到标准输出错误信息写到标准错误默认都是终端。重定向符号改变这些通道的方向echo hello output.txt echo error 2 error.log echo append output.txt会覆盖文件内容追加2捕获错误信息。还有一个高频操作是把不想要的信息丢进“黑洞”command /dev/null 21这句的意思是标准输出和标准错误全部丢弃。在脚本中批量执行命令时不希望刷屏这句很好用但注意别把重要错误信息也扔了。4.2 管道一个命令的输出是另一个命令的输入管道符|是Linux命令行最重要的一个符号。它把前一个命令的标准输出接到后一个命令的标准输入实现数据在命令之间流动。用管道可以把一堆单一功能的命令组合成一把瑞士军刀。举个例子查看系统里有没有nginx进程ps aux | grep nginxps aux输出所有进程grep nginx从中筛选包含nginx的行。再比如统计历史命令里最常用的20条history | awk {print $2} | sort | uniq -c | sort -rn | head -20这条命令把历史记录拆出命令名排序统计重复次数再按次数倒序取前20。第一次看懂这条管道你会意识到命令行的表达能力比图形界面高一个维度。热词里有一个“按分隔符按行输出”实际就是用cut或awk按指定分隔符切分。例如查看/etc/passwd里所有用户名字段以冒号分隔cut -d: -f1 /etc/passwd-d指定分隔符-f指定取第几列。这个操作在日志分析、配置文件处理里极其常见面试也会考。4.3 引号、转义与命令替换管道解决的是命令之间的连接引号和命令替换解决的是参数表达问题。单引号和双引号的行为不一样单引号里的内容原样输出双引号里的变量和命令会被解析。看这个对比echo $HOME echo $HOME第一条输出的字面量$HOME第二条输出用户家目录路径。写脚本时弄混这个变量传递会出很诡异的问题。命令替换的另一种写法是$(命令)比如echo 今天的日期是 $(date %F)在复杂的命令行里命令替换可以嵌套使用。还有反引号也是命令替换但可读性差嵌套也不方便我一般推荐使用$(...)。实际场景里文件名字带空格是常态命令行处理时必须加引号cd My Documents cat a b.txt不加引号Shell会把它当成两个参数。同样道理ls一个以-开头的文件时需要用--告诉命令“后面不是选项”。比如删除一个叫-file的文件rm -- -file。这些细节初看很烦但接触得越多越会觉得Shell的规则其实相当统一理解一遍就能举一反三。5. 文本处理grep、sed、awk就是不写代码的Excel5.1 grep日志过滤的第一选择服务器上的日志、配置文件、命令输出本质都是文本。grep就是干这个的主力。最基础的是按字符串过滤grep ERROR app.log进阶用法包括用-E启用扩展正则匹配多个关键词grep -E ERROR|FATAL app.log用-v排除某个关键词比如过滤错误但不想看到超时grep -E ERROR|FATAL app.log | grep -v timeout用-A和-B显示匹配行的上下文排查异常时经常需要看错误前后的内容grep -A 5 -B 2 NullPointerException app.log还有一些辅助参数-c只统计匹配行数-i忽略大小写-r递归搜索目录。我排查问题时的标准路径是先用grep -c估算问题次数再用grep -A看上下文定位原因最后用tail -f | grep实时跟踪日志。5.2 sed流式替换与批量编辑sed是流编辑器最常用的两个场景是替换和按行提取。替换的语法是sed s/旧内容/新内容/g file.txtg表示全局替换不加的话每行只替换第一个匹配。需要注意sed默认不会修改原文件只会把结果输出到屏幕。想真正改文件可以加-i但建议先加-i.bak备份sed -i.bak s/192.168.1.10/192.168.1.11/g config.properties这条命令会生成config.properties.bak备份文件确认改错还能恢复。批量修改配置、替换IP、统一格式这都是sed的主场。按行提取也很常用比如取第20到40行sed -n 20,40p app.log-n关闭默认输出p打印指定行。这个操作和head/tail互补需要取文件中间某段时会用到。sed的规则初看有些绕但你只要记住“s替换、d删除、p打印、-i修改文件”这四个点基本够用。5.3 awk按列处理比Excel方便awk是命令行里最像Excel的工具它在处理“按列组织的文本”时尤其强大。默认按空白字符分隔也可以用-F指定分隔符awk -F: {print $1} /etc/passwd这和上面cut -d: -f1效果类似但awk能做更复杂的处理。比如统计某个日志文件的总行数awk END {print NR} app.logNR是当前行号END表示处理完所有行之后执行所以这个命令输出总行数。awk还能做求和、求平均值、条件判断。举个例子统计文件里第三列数值的总和awk {sum $3} END {print sum} data.txt这个能力在分析性能数据、统计流量时非常实用。热词里提到的“linux面试题”经常会出现类似需求给定一个日志文件统计每种状态的次数。用awk加sort组合可以这么写awk {print $状态列} app.log | sort | uniq -c | sort -rn你没有看错这基本就是面试官期望的标准答案。awk的内容其实很深有语言成分在里面但入门阶段你只需要掌握指定分隔符、取字段、累加、END输出对付日常工作已经足够。6. 系统监控与网络排查命令行在关键时刻救命6.1 进程管理设备卡死时的最后出路服务器卡死、内存飙升、CPU被打满这些场景没人能靠鼠标解决。进程管理命令是运维的第一防线。查看进程用ps和topps -ef topps -ef输出所有进程的静态快照配合grep查特定进程top是动态刷新能看CPU和内存占用排行。按P按CPU排序按M按内存排序这是两个最常用的快捷键。关闭进程用kill默认发TERM信号请求进程正常退出kill 进程号 kill -9 进程号-9是强杀直接通知内核终止该进程。能用默认kill解决的尽量不要用-9因为强杀可能导致数据没有落盘或配置文件损坏。批量结束进程用pkill比如结束所有java进程pkill -f java-f表示匹配完整命令行而不是只匹配进程名。注意pkill很猛一定要确认匹配规则不会误杀其他进程。我见过有人pkill -f python结果把正在跑的自动化脚本全部干掉场面在深夜特别惨烈。6.2 磁盘与内存系统突然变慢先查这两样系统响应变慢第一个要查的往往是磁盘或者内存。磁盘使用率命令是df和dudf -h du -sh * | sort -rh | head -20df -h看分区使用率du -sh *统计当前目录下每个子目录大小。排查“磁盘满了”的标准步骤是先df -h确认哪个分区满了再进入对应目录用du逐级排查大文件最后清理日志或临时文件。另外还有一个经典命令lsof | grep deleted用来查找被删除但仍被进程占用的文件这种文件会占着磁盘空间不放光rm没用必须找出相关进程重启。内存检查用free -hfree -h重点看available这一列它才是系统实际可用内存。used很大不一定有问题因为Linux会尽量利用空闲内存做缓存。如果你发现available不断下降且swap占用升高那才是真正需要关注的内存压力信号。顺带说一句热搜词里有“linux设置磁盘寻道算法”这类I/O调优通常不需要普通用户折腾。但如果你好奇可以查看当前调度器cat /sys/block/sda/queue/scheduler这里输出的内容会列出可用调度器方括号里的就是当前生效的。这类参数在老硬件上改起来有意义但现代服务器默认值通常已经够好不建议新手轻易动。6.3 网络排查组合拳网络出问题的时候命令行组合工具更能体现价值。我最常用的排查链路是先看IP是否正常再看端口是否监听最后抓请求验证。查看IP地址ip addr show老命令ifconfig还有大量文档在用但新系统默认可能没有建议直接习惯ip。查看端口监听状态ss -lntp-l只看监听端口-n用数字显示端口和地址-t只看TCP-p显示占用进程。比如查8080端口被谁占了ss -lntp | grep 8080这个命令在解决“端口被占用”的问题时能一次定位到进程。请求验证用curlcurl -v http://localhost:8080/health-v输出完整请求和响应头后端返回了什么状态码、响应头对不对都一目了然。还有DNS排查用dig或nslookup追踪网络路径用traceroute。把这一套流程走完大部分网络问题都能定位到大概范围。远程登录方面SSH也是命令行的高频场景。生成密钥并拷贝到服务器ssh-keygen -t ed25519 ssh-copy-id userserver_ip配好密钥后每次登录就不需要输密码了这在管理多台服务器时节省的时间非常可观。7. 命令行实战里的高频翻车现场7.1 解压文件乱码与压缩加密解压一个Windows发来的zip发现文件名全是乱码这是几乎每个人都遇到过的事。原因很简单zip包里的文件名用的是GBK编码而Linux默认用UTF-8。解法有两个如果你用的unzip支持-O参数直接指定编码unzip -O GBK 文件名.zip更省心的方案是安装unar它能自动检测编码sudo apt install unar unar 文件名.zipunar会尝试识别压缩包编码并用正确的编码解压基本不用记参数。压缩文件时7z是个好选择命令行加密压缩是这样7z a -p你的密码 -mheon backup.7z /path/to/data-p设置密码-mheon加密文件头。注意文件头加密后别人用工具看压缩包内容也看不到文件名比简单加密内容更安全。解压时直接7z x backup.7z它会提示输入密码。7.2 find -exec与批量重命名批量删除老日志、批量改文件权限find是最常用的前端工具。结合-mtime可以按修改时间过滤find /var/log -name *.log -mtime 7 -delete这条命令删除7天前修改的log文件。-delete很直接建议先不加-delete跑一遍确认列出的是你想删的文件再加上去执行。复杂一点的批量操作可以用-execfind . -name *.txt -exec chmod 644 {} \;{}代表找到的每个文件\;是命令结束标记。整个-exec在功能上相当于给每个文件执行一次指定命令。还有个更快的办法是用xargs但要注意文件名字带空格时容易出错稳妥做法是用-print0和-0组合find . -name *.txt -print0 | xargs -0 chmod 644-print0让find用空字符分隔文件名-0让xargs同样按空字符读取这样即使文件名带空格或换行也不怕。这个细节属于“不踩一次坑不会重视”的类型但理解了以后能帮你规避很多脚本事故。7.3 命令行参数传递的隐藏坑热词里有“maven命令行clean install”说明很多人已经在用命令行构建工具但参数传递有几个很隐蔽的坑值得单独说。第一个坑是选项和参数顺序。大多数命令行工具遵循“选项在前、参数在后”的约定但也有些工具解析规则很奇怪。遇到工具行为不符预期时先用--help确认参数格式而不是盲目改参数。第二个坑是--分隔符。前面提过rm -- -file用--告诉命令后续内容不是选项。类似的场景在grep、sed里也常见当你搜索的内容以-开头时记得用--。第三个坑是环境变量和引号。命令行传递含空格或特殊字符的参数时最好用双引号包起来。例如mvn clean install -Dmaven.test.skiptrue -Dargsparam1 param2参数值里一旦带了空格不加引号就会被拆成两个参数程序根本接不到完整值而且这种错误报错还不明显排查起来特别浪费时间。7.4 危险操作的前置保险最后说一个用命换来的经验高危命令一定要先加保险。所谓保险就是把可能造成不可逆破坏的操作“降级”成可预览、可确认的形式。删除之前先ls比如要rm -rf dir先ls -la dir看清楚里面有什么。用rm -i或mv到临时目录代替直接删除很多老手会先mv dir /tmp/to_delete过几天确认没问题再清空这也是一层保险。清空文件用truncate而不是rm后重建truncate -s 0 app.log日志文件被进程占用时rm掉再新建可能让日志写入失效而truncate能直接清空内容并保留文件句柄。配置脚本里迁移目标路径时多用绝对路径少用相对路径。相对路径在定时任务里经常失效因为cron的工作目录和你手动执行时不一样。8. 从命令到脚本让命令行自动干活8.1 第一个Shell脚本命令行单条命令再强重复劳动还是得靠脚本来消除。Shell脚本其实并不神秘就是把多条命令写进一个文件按顺序执行再加一点变量、条件和循环。写一个最简单的备份脚本#!/bin/bash BACKUP_DIR/backup/$(date %F) mkdir -p $BACKUP_DIR tar czf $BACKUP_DIR/data.tar.gz /home/user/data find /backup -type f -mtime 30 -delete echo backup done: $BACKUP_DIR第一行#!/bin/bash指定解释器BACKUP_DIR是变量$(date %F)自动取当天日期。后面几行分别是创建目录、打包、删除30天前的备份。保存为backup.sh后加执行权限即可运行chmod x backup.sh ./backup.sh写脚本时有一个重要习惯所有变量尽量加双引号比如$BACKUP_DIR。如果路径里带空格不加引号会出现莫名其妙的错误。这个习惯能筛掉一大半新手脚本的坑。8.2 crontab定时任务脚本写好了怎么让它到点自动跑答案是crontabcrontab -e第一次执行会提示选择编辑器选vim或nano都行。然后按这个格式添加任务分 时 日 月 周 命令 0 2 * * * /home/user/backup.sh /tmp/backup.log 210 2 * * *表示每天凌晨2点整执行。五个字段分别代表分钟、小时、日、月、星期*表示不限制。 /tmp/backup.log 21把输出和错误都追加到日志这样任务执行情况有据可查。定时任务最常见的坑是环境变量。cron执行时的PATH和手动登录终端不一样所以你脚本里用到的命令最好写绝对路径比如用/usr/bin/tar而不是tar。排查cron不执行时第一反应应该是看日志grep CRON /var/log/syslog或journalctl -u cron大多数时候问题不是脚本本身而是环境或权限。8.3 给想靠命令行吃饭的人一些个人体会最后这段不是教程内容算是我自己踩坑后的一点体会。很多人学命令行喜欢收藏命令大全这没问题但收藏完一定要落到实际场景里用一遍。分类学命令不如按场景学命令比如“磁盘满了怎么办”“端口被占了怎么办”“日志怎么快速找错误”每个场景背后都是一组命令的组合。把场景记下来命令自然就记住了。浏览热词的时候我发现很多人关心“linux面试题”。面试官爱问的命令行题其实很少考生僻参数更多是考你理解不理解管道、权限、文本处理和管理进程。这些基本功恰恰是平时多敲命令、多写脚本练出来的突击背诵反而效果一般。我的建议是日常能开终端解决的问题就别绕到图形界面能写成脚本的重复操作就别每次都手动敲。这句话听起来像废话但坚持半年你和命令行之间的默契会完全不同。等你把基础命令用顺了自然会往更深处走阅读别人的脚本、优化命令性能、学习网络排查。命令行这条路没有尽头但只要你迈过最开始那道坎后面的收获会远远超过你付出的时间。现在去开一个终端敲下第一条命令吧。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价