尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux核心指令实战指南:从入门到运维排障的完整路径

Linux核心指令实战指南:从入门到运维排障的完整路径 我接触Linux也快十个年头了从当年在虚拟机里折腾双系统到后来真把开发环境整个搬上去最深的体会就一句话指令才是这套操作系统的灵魂。你鼠标点得再溜界面玩得再花等到了服务器上、到了远程终端里、到了生产环境排障时真正能救你的还是命令行那几行指令。这篇是Linux操作系统系列文章的第二篇我就把最核心、最日常、最绕不开的一批基本指令拆开揉碎了讲配合我实际踩过的坑和积累的小技巧让刚入门的读者能顺着这条线把终端用顺手。网上讲Linux指令的帖子多如牛毛但大多数只是把ls、cd、cp这些命令列一遍参数就完事了看完转头就忘。我不打算这么写。这一篇我会先把学习指令的正确思路捋清楚再按“目录与文件操作 → 文件内容处理 → 用户权限与系统状态 → 综合实操 → 问题排查”这条主线展开确保你学完不只是“看过”而是真能上手干活。不管你是刚开始学操作系统课程的大学生、想转行运维的开发新人还是单纯想把电脑上的Linux环境用起来这篇都能给你一套可以照着敲、照着练的完整路径。1. 先把学习指令的思路理顺再开始敲键盘1.1 为什么指令值得花大力气学很多刚接触Linux的朋友会有个疑问图形界面不是挺方便的吗为什么非要用命令行我打一个比方你就明白了。图形界面好比你家小区的电梯按个按钮就能到楼层确实省力但命令行就像楼梯间的钥匙串看起来朴素却能在电梯坏掉、停电、甚至你根本不知道电梯在哪栋楼的时候让你依然有办法到达任何一层。服务器环境里绝大多数时候没有图形界面而且自动化运维、批量处理、脚本编排这些场景图形界面根本做不了。三条指令组合起来几千个文件几秒钟就能批量搞定这在图形界面下是不可想象的。所以指令不是Linux的备选方案而是核心能力。1.2 先理解指令的“三段式”结构所有Linux指令都有一个统一的基本格式命令名 [选项] [参数]。命令名是你想做的事情选项是调整做法的开关参数是操作的对象。我用一个生活化的例子帮你记忆命令名是“做饭”选项是你选“红烧”还是“清蒸”参数是你拿出来的“鱼”。比如ls -l /home这条指令中ls是命令-l是选项要求用详细列表格式显示/home是参数要看哪个目录的内容。明白这个结构之后你再去看任何指令都不会慌。遇到不认识的命令先看man 命令名或命令名 --help看它支持哪些选项、接收哪些参数基本就能自己摸通了。我见过太多新手拿着一张命令大全表格死记硬背背了忘、忘了背根本原因就是没理解这个通用结构。理解了结构你会发现绝大多数新命令都是老朋友换个名字而已。1.3 我的建议优先掌握高频少数的核心指令Linux指令有上千条但日常用到频率最高的其实不超过三五十条这就是所谓的“二八定律”。我建议新手不要试图一次学完所有指令而是先把出现频率最高、组合能力最强的那批吃透。比如这篇我讲的pwd、cd、ls、mkdir、touch、cp、mv、rm、cat、less、head、tail、grep、find、tar、chmod、useradd、ps、top、df、du足以覆盖你日常80%以上的操作场景。先把这批练熟了其他冷门指令在用的时候现查现学效率反而更高。2. 目录与文件操作每天打得最多的核心指令2.1 认清自己在哪里pwd 与 cd 的配合使用打开终端之后很多人第一反应是“我在哪”。这就得靠pwdprint working directory指令它会把当前所在的绝对路径直接打印出来。我在带新人时发现一个特别常见的现象敲了一通cd之后完全迷路了不知道自己在哪个目录然后后面所有相对路径的操作全部出错。所以我的习惯是每换一个工作目录先敲一下pwd确认位置再干下一个操作。cd命令用于切换目录常用玩法有这么几种cd # 回到当前用户的home目录等价于 cd ~ cd .. # 回到上一级目录 cd ../.. # 回到上两级目录 cd /etc # 绝对路径切换不管在哪都能直接过去 cd /home/user/project # 绝对路径可以一步到位 cd ~/project # 波浪号表示当前用户的home目录 cd - # 回到上一次所在的目录这个超好用这里要特别强调一下绝对路径和相对路径的区别。绝对路径是从根目录/开始写的完整路径比如/etc/nginx/nginx.conf无论你现在在哪个目录它都指向同一个地方。相对路径是相对于当前目录的路径比如当前在/home/user你要去/home/user/project直接cd project就行。新手最容易犯的错就是把这两种路径搞混在一个目录下用另一个目录的相对路径结果系统提示“No such file or directory”。判断方法很简单路径第一个字符是/就是绝对路径不是就是相对路径。2.2 看目录内容ls 的几个高频组合ls可能是你用得最多的指令它的选项组合我建议至少掌握这几组ls # 仅列出文件名 ls -l # 详细列表权限、链接数、属主、属组、大小、修改时间 ls -a # 显示所有文件包括以 . 开头的隐藏文件 ls -lh # 带单位显示大小比如 K、M、G可读性极佳 ls -lt # 按修改时间从新到旧排列 ls -R # 递归显示子目录内容目录树一目了然我特别推荐把-l和-h组合使用也就是ls -lh因为默认的字节数一串长数字看着特别累加上-h之后会显示成 4.0K、2.3M一眼就能读出文件大小。ls -la也是排查问题的利器很多配置文件都是隐藏文件你不加-a根本看不见它自然就会觉得“文件怎么不见了”。看ls -l的输出时最左边那串字符比如drwxr-xr-x是权限位共10个字符。第1位是文件类型d表示目录、-表示普通文件、l表示软链接。后面9位每3个一组分别对应属主、属组、其他用户的读r、写w、执行x权限。后面用法上我会再讲chmod怎么改权限这里你能看懂含义即可。2.3 创建、复制、移动与删除mkdir、touch、cp、mv、rmmkdir用于创建目录touch用于创建空文件或更新时间戳cp负责复制mv负责移动或重命名rm用于删除。这五个指令是文件操作的基本功。mkdir mydir # 创建单级目录 mkdir -p a/b/c # 递归创建多级目录父目录不存在时会自动创建 touch index.html # 创建一个空文件 cp file1 file2 # 复制文件 cp -r dir1 dir2 # 递归复制整个目录 cp -i file1 file2 # 覆盖前询问确认 mv file1 file2 # 重命名相当于改名字 mv file1 /tmp/file1 # 移动文件到指定目录 rm file.txt # 删除文件 rm -r mydir # 递归删除目录 rm -f file.txt # 强制删除不询问这里必须多说一句rm -rf是双刃剑威力巨大但极其危险。-r是递归删除目录内所有内容-f是强制删除且不提醒。我曾经在生产服务器上因为手滑在一个错误目录里敲了rm -rf *差点把整个项目删光幸亏及时发现 CtrlC 才拦住。从那之后我给自己定了一条铁律删除之前先ls看清当前目录实在不确定就先用mv移到/tmp备份确认没问题再删。这条建议看起来慢实际上能救你很多次。3. 文件内容查看与处理从能看内容到会查内容3.1 查看内容要分场景cat、less、head、tail查看文件内容是日常操作里躲不开的一环但很多新手只认识一个cat见什么都cat一下文件稍大一点就刷屏刷到怀疑人生。正确的做法是分场景选工具cat 文件名 # 适合查看内容较少的小文件 less 文件名 # 适合查看大文件可以上下翻页、搜索按 q 退出 head -n 20 文件名 # 只看前面20行比如快速浏览配置文件的头部 tail -n 20 文件名 # 只看末尾20行非常适合看日志最新动态 tail -f 文件名 # 持续跟踪文件新增内容日志排障神器以查看Nginx错误日志为例tail -f /var/log/nginx/error.log会实时刷新输出每来一条新错误就立刻显示。排查线上问题时开一个终端窗口挂着tail -f然后另一个窗口复现问题你就能亲眼看到错误日志一条条蹦出来定位效率直接翻倍。less这个工具也很值得练熟它比cat更适合查看大文件按/输入关键词可以向下搜索按n跳到下一个匹配项退出按q这是Linux运维人员的标配动作。3.2 搜索与统计grep、wc、find如果说只允许我教一个排障指令我选grep。grep的作用是在文本中按模式匹配并输出符合条件的行它像是给文本做“扫描检视”。最基本的用法是grep 关键词 文件名grep error /var/log/nginx/error.log # 在日志中查找包含error的行 grep -i error app.log # 忽略大小写 grep -n error app.log # 显示匹配行和行号 grep -r config /etc/nginx/ # 递归搜索目录下所有文件 grep -v ^# nginx.conf # 反向匹配排除以#开头的注释行这里面的进阶用法特别实用。比如排查配置时grep -v ^# nginx.conf | grep -v ^$可以把所有注释行和空行过滤掉只看有效配置整个配置文件瞬间清爽。再比如排查程序输出里的异常ps -ef | grep java能立刻找到与Java相关的进程行——注意这里grep后面跟着一个管道符|把前一个命令的输出作为后一个命令的输入这属于Linux指令组合的基本功叫管道。wc用于统计行数、单词数和字节数find用于按条件查找文件。这两个同样高频wc -l 文件名 # 统计文件有多少行 find /var/log -name *.log # 按文件名查找 find /home/user -type d -name node_modules # 按类型名字查找目录 find /var -mtime -7 -name *.conf # 查找7天内修改过的.conf文件 find /tmp -size 100M # 查找大于100M的大文件我排查磁盘空间问题时最常用的组合就是find / -size 1G 2/dev/null直接扫出全盘超过1G的大文件。注意后面带了一个2/dev/null它的作用是把权限不足的错误输出丢到黑洞里因为普通用户扫描/根目录时必然会有很多无权访问的目录不这样处理的话屏幕上刷满报错根本看不清有用的结果。3.3 打包压缩与解压tar 的正确打开方式打包压缩是Linux里绕不开的操作上传项目、备份数据、来回传文件都离不开它。Linux下最常用的打包工具是tar它本身只负责“打包”压缩则依靠gzip对应参数-z或bzip2对应参数-j等工具。我平时用得最多的就是下面这几条tar -czvf backup.tar.gz /home/user/project # 打包并gzip压缩 tar -xzvf backup.tar.gz # 解压gzip压缩包到当前目录 tar -cjvf backup.tar.bz2 /home/user/project # 打包并bzip2压缩 tar -xjvf backup.tar.bz2 # 解压bzip2压缩包 tar -tzvf backup.tar.gz # 不解压查看压缩包内容列表 tar -xzvf backup.tar.gz -C /tmp/restore # 解压到指定目录注意参数顺序和含义c是创建createx是解压extractt是查看列表z对应gzip压缩格式j对应bzip2格式v是显示过程verbosef后面必须紧跟压缩包文件名。因为f表示“后边这个是文件名”所以它一定是参数串里靠后的那个写成tar -cvzf但是把f放前面就会报错。这个顺序问题我见过太多人栽过跟头记住“f要当队长站在最后面”就完事了。解压时还有一个很磨人的坑——中文文件名乱码。在Windows系统上压缩的zip包到Linux上一解压中文文件名全变成乱码。这是因为Windows的zip默认使用了GBK编码而Linux默认用UTF-8。解决办法是安装unzip后使用unzip -O GBK file.zip指定编码解压。如果解压后已经乱码了可以用convmv -f GBK -t UTF-8 --notest -r 目录名/批量转换文件名编码。这个问题几乎每个人都会遇到一次提前知道能省好多时间。4. 用户、权限与系统状态三张安全网要织好4.1 用户与组创建用户没那么简单Linux是多用户操作系统日常工作经常需要创建新用户、分配权限。很多初学者稀里糊涂地useradd username一下就觉得完事了结果用新用户登录时发现密码不对。这里的关键在于useradd只是创建了一个用户账号并不会给这个用户设置初始密码。你必须接着执行passwd username才能为它设置密码不然这个账号处于“有用户无密码”的状态根本无法正常登录。sudo useradd -m newuser # -m 参数自动创建home目录 sudo passwd newuser # 设置或修改用户密码 sudo userdel -r newuser # 删除用户及home目录然后是su和sudo的区别这个事我当年也迷惑了很久。简单讲su username是直接切换成另一个用户需要输入那个用户的密码sudo 命令则是用当前用户的身份临时以root权限去执行某一条命令需要输入的是当前用户的密码并且当前用户必须在sudo组里才有权限。日常操作中我更推荐用sudo因为它只给单条命令提升权限代码可追溯、安全可控而su切到root之后容易忘记自己的身份误操作的概率会高很多。4.2 权限管理chmod 的数字玩法Linux权限的核心是“读r4、写w2、执行x1”三种权限对应数字分别是4、2、1组合起来就是它们的和。比如7421表示可读可写可执行642表示可读可写不可执行541表示可读可执行不可写。这就是chmod数字法的底层逻辑chmod 755 script.sh # 属主7(读写执行)属组5(读执行)其他5(读执行) chmod 644 config.conf # 属主6(读写)属组4(只读)其他4(只读) chmod 700 private_dir # 属主7(读写执行)其他人无任何权限 chmod x script.sh # 给脚本添加执行权限日常最常用我为什么要强调数字法因为见过不少新人只知道chmod 777不管你三七二十一什么东西都往777上靠。这里必须提醒777意味着所有用户都能读、写、执行安全性极差。在正式环境里配置文件用644、脚本和可执行文件用755、敏感目录用700或750才是常规操作。养成权限最小化的习惯比出问题了再补救要强得多。4.3 看系统状态ps、top、df、du、free系统出问题的时候很多人第一反应是“卡死了”“没空间了”但具体怎么查就没方向了。这几条看系统状态的指令就是你的诊断工具ps -ef # 查看当前所有进程的完整信息 ps aux # 同类的进程列表比较直观 top # 实时查看CPU、内存占用排行按 q 退出 free -h # 查看物理内存和交换分区使用情况 df -h # 查看磁盘分区空间使用情况 du -sh 目录名 # 统计目录总大小比如排查“磁盘满了”这个问题我会先用df -h看到底哪个分区满了再用du -sh /目录/*逐层往下找定位到具体是哪个目录占了大头最后配合前面讲的find -size 500M找出大文件。这套组合拳打下来90%的磁盘问题都能找到根因。ps -ef | grep 进程名则是定位“这个进程到底还活着没”的黄金指令写脚本时也常用它来判断服务状态。5. 一次完整实操模拟真实任务的指令串联5.1 模拟场景与目标光讲单个指令大家还是容易看完就忘。这一章我构造一个真实任务场景假设我刚拿到一台新装好的Linux机器用户名是dev01我要在这台机器上搭建一个Web项目的基础目录结构把代码源码放置好做一份压缩备份再创建一个日常发布用的账号最后检查机器整体资源是否够用。这个流程覆盖了pwd、cd、mkdir、touch、cp、mv、find、tar、useradd、chmod、df、free等多条指令相当于把前面的内容全部串起来练一遍。5.2 逐步操作过程第一步登录机器后先确认身份和位置whoami pwd ls -la输出大概会显示当前用户是dev01当前目录是/home/dev01目录里可能有几个隐藏文件如.bashrc。这步的意义是建立“我现在在哪儿、我拥有什么权限”的基本认知避免后面路径写错。第二步创建项目目录结构mkdir -p ~/webapp/{html,logs,backup,scripts} touch ~/webapp/html/index.html echo Hello Linux ~/webapp/html/index.html这里mkdir -p会一次性把webapp下四个子目录都建好touch建一个入口文件再把一行文本写进去。如果你执行完ls -R ~/webapp就会看到一个树状的目录结构。第三步对项目做一个备份压缩包cp -r ~/webapp/html ~/webapp/backup/html_bak tar -czvf ~/webapp/backup/webapp_$(date %Y%m%d).tar.gz ~/webapp第一行把html整个目录复制一份作为备份第二行把整个项目打包成带日期的压缩包。这里我用了$(date %Y%m%d)来动态生成当天日期这样每天的备份包文件名不会冲突是个在脚本里很常用的写法。第四步为同事创建一个发布账号sudo useradd -m release sudo passwd release sudo mkdir -p /srv/webapp sudo chown -R release:release /srv/webapp创建用户后马上设置密码再建一个公共发布目录并把属主改成release用户这样对方就能在这个目录下执行发布操作。注意这里全程用了sudo而不是切换到root再操作这样安全又可控。第五步确认机器资源情况df -h free -h ps aux | grep nginxdf -h看磁盘余量free -h看内存余量最后一条看看Nginx进程是否存在。整套流程走完你会发现自己已经能独立完成“建目录、放文件、做备份、建用户、看资源”这些最常见的日常任务了。5.3 过程中的经验备注这套流程我执行过无数遍有几个小细节值得拿出来单独说。mkdir -p里花括号展开{html,logs,backup,scripts}是bash的语法糖新手可能觉得奇怪但它能让你一条命令建四个目录效率高很多建议直接记住。还有tar -czvf备份时我习惯把目标压缩包放在项目目录之外这里是backup子目录里但源路径包含整个~/webapp要注意避免把备份包本身再打包进去虽然tar默认不打包正在写入的文件但路径没规划好时确实会出现“包里有包”的混乱所以备份输出路径放在项目目录之外或专门的backup目录是最稳的。6. 新手最常踩的坑与排查经验6.1 command not found先检查拼写和环境变量看到command not found很多人第一时间慌了。其实多半是两种情况一是命令拼写错了比如把services写成service二是命令存在但不在当前用户的环境变量PATH里。可以先echo $PATH看看有哪些目录再用which 命令名或find / -name 命令名 2/dev/null找命令的绝对路径。另外要记得Linux命令和文件名都是区分大小写的LS和ls不是一回事。6.2 rm -rf 误删预防比补救更重要我前面提过一次这里再展开说。误删文件后不是完全没有补救空间但前提是文件系统没有被大量写入覆盖。所以一旦误删第一时间要做的是停止对相关磁盘分区的写入操作然后找专业的数据恢复工具尝试。但说真的生产环境里数据恢复的成功率并不稳定很多企业数据根本没救回来。真正靠谱的方案是养成备份习惯重要目录定期打包删除时用rm -i交互确认再用mv到/tmp代替直接删除过几天确实不需要了再清空/tmp。这些“笨办法”才是最高效的止损方式。6.3 vim 进去出不来先学怎么退出这是个几乎人人都会经历的笑话在终端里敲了vim进去之后发现不会退出只能无奈地关闭终端窗口。解决办法其实很简单按两次Esc确保退出编辑模式然后输入冒号:再输入q回车就是退出如果修改过文件想不保存退出用:q!想保存并退出用:wq。!在这里表示“强制”强制退出就是放弃所有修改。把这个记牢你就再也不会被vim卡住了。6.4 权限不足出现 Permission denied 怎么办这个问题新手几乎每天都会遇到。看到Permission denied第一反应是看当前操作自己对目标文件/目录是否有对应权限用ls -l看属主和权限位。如果是文件属主是root而你当前是普通用户就加sudo提升权限执行如果是普通用户之间的文件共享可以用chmod调整权限或用chown改属主。但切记不要一个chmod 777解决所有问题那相当于把门锁全拆了下一回被人闯进来说不定你都不知道怎么丢的数据。6.5 文件路径带空格命令变得很奇怪Windows上习惯了文件名带空格一到Linux里就出问题。比如my document.txt这个文件名直接cat my document.txt会被解析成两个参数。解决办法是用双引号包住整个文件名cat my document.txt或者用反斜杠转义空格cat my\ document.txt。我个人的习惯是创建文件时一律用下划线或连字符代替空格少给自己找麻烦。把这几个坑记住了你的Linux学习之路会顺畅很多。这些经验没有一条是书本上主动教你的全是实际操作中一遍遍踩出来的。我自己的体会是学Linux指令没有太多捷径就是要多敲、多用、多犯错。犯错不可怕可怕的是犯了错不知道原因。每次报错都是系统在给你提示报错信息里往往藏着答案——不怕报错就怕你不读报错。你也可以像我一样准备一个文档专门记录自己踩过的坑时间长了这就是你个人专属的“Linux排障手册”比任何网上的命令大全都更贴合你的实际工作。
返回列表