资讯动态

Linux核心命令实战:从理解Shell到高效运维

发布时间:2026/10/17 16:06:38 来源:尧图企业网站定制
说实话做运维和开发这行最绕不开的就是Linux命令。不管你用哪个发行版天天跟终端打交道核心命令就是你吃饭的家伙。很多人觉得命令多、参数杂、记不住其实问题不在记忆力在于没有理解命令背后的体系和逻辑。这篇东西我不打算给你罗列一堆参数表而是把我这些年实际使用中觉得最重要、最常用的核心命令按照真实工作场景重新串一遍讲清楚每条命令在什么时候用、为什么这么用、常见坑在哪里。适合刚入门的运维新手、转行开发的同学也适合那些已经会敲一些命令但始终感觉不成体系的从业者。1. 核心命令的整体认知先搞清楚它们是怎么组织起来的1.1 命令、Shell与内核的关系很多人一开始就被各种命令搞晕总觉得要背很多东西。其实Linux命令本质上是人跟内核打交道的中介。内核负责分配CPU、内存、磁盘这些硬件资源但内核本身不会直接跟你对话它只提供系统调用接口。普通用户不可能直接去调系统调用于是Shell就成了翻译官——你敲一条命令Shell解析它找到对应的程序程序再去调用内核完成实际操作。明白这层关系之后有几个核心推论很重要命令其实就是程序文件放在PATH环境变量指定的目录下比如/bin、/usr/bin、/usr/local/bin。你敲命令就是在执行这些程序。Shell本身就内置了一部分常用命令比如cd、echo、export这些不依赖外部程序所以叫Shell内建命令。为什么有时候同样的命令行为不一样可能就是外部命令和内建命令的差异比如printf在bash里是内建在系统里也有独立的/usr/bin/printf程序。理解这点你的排查思路会瞬间清晰。比如命令提示not found你先想到的是这个程序是否安装了而不是怀疑自己的语法写错了。这是排查问题的第一步也是最重要的一步。1.2 命令的通用结构理解了就不再死记硬背绝大多数Linux命令遵循一个统一的格式命令名 [选项] [参数]比如最简单的lsls -l /etc命令名是ls选项-l表示长格式输出参数/etc表示目标路径。选项可以短横线加一个字母也可以双减号加完整单词例如ls --all等价于ls -a。两者功能相同只是可读性不同脚本里多用长选项手敲图快用短选项。参数有时是文件路径有时是目标主机名有时是关键字完全取决于命令本身的定义。列目录的参数就是路径pkill的参数就是进程名。你可以通过man命令查看手册通过--help快速获取帮助。我个人习惯先是--help它排版简短一眼抓到常用参数遇到细节问题再看man把完整文档读完。理解了命令结构后你不太需要逐字背参数。你要背的其实是每条命令能解决什么问题以及高频参数对应什么场景。参数用多了自然记住用不上的根本没记忆的必要。2. 文件与目录操作日常使用频率最高的命令2.1 定位与浏览pwd、ls、cd文件操作是Linux使用中最核心的部分。刚开始用终端的第一件事就是搞清楚自己在哪、目录里有什么、要去哪里。pwd命令告诉你当前所在的工作目录。这听起来简单但实际写脚本、配置服务时特别容易出问题——你以为自己在某个目录执行了相对路径操作结果操作在了别的目录下。所以养成习惯重要操作之前先pwd确认位置这个习惯能避免很多灾难。ls命令用来列出目录内容。基础用法直接敲ls就行但我几乎永远用ls -l或ls -al。前者显示权限、属主、大小、修改时间后者连隐藏文件一起显示。需要注意的是Linux里以点开头的文件默认不显示很多配置文件都是隐藏的比如.bashrc、.ssh目录。不加-a参数排查问题时会漏掉一堆关键信息。cd是切换目录。这里有几个必须烂熟于心的快捷用法cd ~ 或直接敲cd回到当前用户的家目录。cd - 回到上一次所在目录。在两个目录之间来回切换时非常好用。cd .. 返回上一级目录。在实际操作中我经常用cd /etc某个子目录配合ls去快速确认配置文件位置。反复cd会降低效率所以更高阶的做法是直接敲绝对路径或者在脚本里用find定位文件后直接基于全路径操作。2.2 增删改与移动touch、mkdir、cp、mv、rm在目录间穿梭之后接下来就是创建和操作文件。这些命令看着基础但每个都有隐藏的门道。touch命令用来创建空文件或者更新文件的时间戳。我经常用它快速生成一个测试文件比如touch /tmp/test.txt还有一个场景某些服务依赖日志文件存在才能启动先touch一个空文件占位是常见操作。mkdir用来创建目录最关键的参数是-p。比如mkdir -p /data/logs/nginx没有-p的情况下如果/data和/data/logs都不存在这条命令会报错。加上-p之后自动创建所有不存在的父目录脚本里几乎必用。cp复制文件mv移动或重命名文件rm删除。这里要重点提醒几个坑cp复制目录时必须加-r参数比如cp -r /etc /backup/etc不然会报错。这是新手的头号报错来源。mv在同一个文件系统内只是改名瞬间完成跨文件系统才会真正复制再删除。所以用mv移动大文件时要留意磁盘空间和时长。rm是危险的。rm -rf这个组合在脚本和手动操作中毁掉过无数人的数据。-r表示递归删除目录-f表示强制不提示。我给自己立了条规矩凡是rm命令尤其是带-rf的先ls确认目标路径再执行绝不直接在命令里拼接变量。如果你要删除的路径包含变量变量为空时命令就变成rm -rf /这个后果想想都头皮发麻。2.3 查找与归档find、locate、tar文件一多查找就成了刚需。find是最强大的文件查找命令它不靠索引直接在文件系统里搜索。命令结构灵活示例find /data -name *.log -mtime -7这条命令的含义是在/data目录下查找文件名匹配*.log、修改时间在7天以内的文件。find的参数非常多-name按名字找-mtime按修改时间找-type按文件类型找-size按大小找。最常见的组合是-name加-type f限定只找普通文件避免夹杂目录。locate命令基于预建索引查找速度远快于find但索引更新有延迟。新创建的文件需要执行updatedb更新索引后才能被locate找到。对于日常快速搜索locate是很好的补充对于脚本和精确操作还是find更靠谱。tar是打包归档工具它本身不压缩只是把多个文件和目录打包成一个文件。我记得第一次使用tar时有个误区以为tar.gz是tar自动完成的其实需要额外指定压缩参数tar -czvf backup.tar.gz /data tar -xzvf backup.tar.gz-c创建归档-z表示通过gzip压缩-v显示过程-f指定归档文件名。解压时把-c换成-x就行。这个组合拳在备份、迁移环境、分发代码时几乎是每天都要用到的。实际工作中有个细节tar打包最好用相对路径而不是绝对路径不然解压时文件会直接被释放到绝对路径对应的位置可能覆盖系统文件相当危险。3. 文本处理三件套这是一种思维而不只是命令3.1 文件内容查看cat、less、head、tailLinux下大量配置和信息以文本形式存在查看文本就成了日常操作。cat命令直接输出整个文件内容到屏幕。对于小文件没问题但日志文件动辄几百兆直接cat会把终端刷爆。所以对于大文件我基本用less。less支持分页浏览、上下翻页、按/搜索关键字查看大日志时体验好很多。还有个常用技巧按G跳到文件末尾按g回到开头配合日志尾部排查非常顺手。head和tail分别查看文件头和文件尾。最经典的组合是tail -f它持续跟踪文件的新增内容。排查日志、实时观察应用输出时这个命令几乎是标准姿势tail -f /var/log/nginx/error.log按CtrlC退出跟踪。如果只想看最后100行再退出用tail -n 100文件名。这里注意tail -f在会滚动输出如果你要复制日志内容分析先取消-f模式再用tail -n取固定行数不然复制的数据一直在变。3.2 文本过滤与正则grep的核心用法grep是我认为所有文本工具中优先级最高的一个因为日志分析和配置排查都离不开它。它的作用是在文本中匹配关键字并输出匹配的行。基础用法grep error /var/log/messages进阶用法是配合管道操作把前一条命令的输出过滤一遍cat /var/log/messages | grep ERROR | grep -v timeout这段命令先查看日志第一个grep筛出包含ERROR的行第二个grep用-v参数排除包含timeout的行得到的就是不含timeout的ERROR记录。管道符|是整个Linux命令组合的灵魂它把前一个命令的标准输出接到后一个命令的标准输入一条命令的处理结果可以作为下一条命令的输入来源。grep中正则表达式是绕不开的关卡。^匹配行首$匹配行尾.匹配任意单个字符*表示重复前面的字符。比如grep ^192\.168\.1\. /etc/hosts表示匹配所有以192.168.1.开头的行。注意点号在正则里有特殊含义需要前面加反斜杠转义。很多人问为什么grep命令里的点不像普通字符用其实就是正则规则这是新手最容易困惑的地方。grep的常用参数需要熟练掌握-r递归搜索目录、-i忽略大小写、-n显示行号。特别是加入-n之后vi编辑器里按行号跳转定位问题就非常方便。3.3 sed与awk批量分析与高效取数sed和awk是让我当年觉得Linux天花板很高的两个工具。它们不复杂但思维方式和普通命令完全不同。sed是一个流编辑器它逐行读入、处理、输出。最常见的用法是替换文本sed -i s/old/new/g config.conf含义是把config.conf中所有的old替换为new。-i表示直接在文件里修改不加-i只会把修改结果输出到屏幕文件本身不变。这个参数经常被忽略导致有人跑了命令却看不到文件变化以为命令没执行。awk则更适合结构化文本处理。它的默认思维是每一行是一条记录每一列是一个字段字段用$1、$2来表示。经典场景是从命令输出里提取某一列ps aux | awk {print $2}这条命令打印所有进程的PID也就是第二列。实际工作中我经常用awk结合条件筛选比如列出RSS内存占用超过100MB的进程ps aux | awk $6 102400 {print $11, $6}$6是RSS列102400是KB单位下100MB的数值$11是进程名。这就是awk作为文本分析工具的价值。sed和awk可以组合使用但建议刚开始不要追求复杂写法先掌握单一场景等用顺手了再慢慢把复杂逻辑拆进脚本里。4. 权限与进程管理理解Linux的安全骨架4.1 权限体系与关键命令chmod、chown、umaskLinux是一个多用户系统所以权限管理是绕不开的。每个文件都有属主、属组和权限位。权限位由三组rwx组成分别对应所属用户、所属组、其他用户的读、写、执行权限。chmod命令用来修改权限。初学者最怕数字权限表示法其实理解起来不难。r4w2x1把三个数字加起来就得到一个权限位值。比如755表示属主有rwx4217属组有r-x415其他人有r-x5。755是目录和脚本最常见的权限配置。实际部署项目时有一个很典型的场景某应用需要读取配置文件里的密钥但运行用户又不是文件的属主。这时就要考虑chown修改属主属组把文件归属调整给运行用户chown -R appuser:appgroup /data/app-R参数是递归修改目录下所有文件和子目录。权限设置错了最常见的现象是Permission denied但很多新手第一反应是去改防火墙其实先检查权限才是正道。umask命令决定创建文件和目录时的默认权限。比如umask值是022那么新建文件默认权限是644777-022但文件默认去掉执行权限所以是644新建目录默认权限是755。原理就是系统用777和666作为基础值减去umask中对应位。这个默认值看起来不起眼但如果你搭了一个共享目录希望团队成员都能编辑新文件umask值就需要调整比如设为002这样新文件权限变成664组内成员就能写入了。4.2 进程管理与系统资源观测ps、top、kill、jobs进程管理是运维的核心工作之一。服务起不来、CPU飙高、内存耗尽都跟进程直接相关。ps命令列出当前进程快照。最常用组合是ps aux和ps -ef。两者的输出格式略有不同但核心信息一致如PID进程ID、CPU占用、内存占用、启动时间、命令。我习惯ps aux配合grep查找进程比如ps aux | grep nginx这能快速确认Nginx进程是否存在、是否启动了多个worker进程。top命令是一个实时监控工具相当于任务管理器里的进程页。top启动后第一行显示系统运行时间、登录用户数和负载平均值第二行是进程总数、运行数、休眠数第三四行是CPU和内存占用汇总下面的进程列表才是具体进程的CPU和内存占用量。按q退出。如果发现某个进程CPU占用异常记录PID然后进一步排查。排查阶段我常按大写P按CPU排序按大写M按内存排序这比肉眼扫描靠谱得多。kill命令用来终止进程基础用法是kill PID。但有些进程默认不响应普通TERM信号这时需要强制kill -9 PID-9表示强制杀死直接终止进程不给它完成清理工作的机会。所以不到万不得已不要用-9先尝试普通kill让它优雅退出实在不行再用-9。这对数据库这类有持久化状态的进程尤其重要直接-9可能导致数据文件损坏。终端里的并发任务由jobs管理。启动一个任务后按CtrlZ挂起到后台用jobs命令查看任务列表用bg让挂起任务在后台运行用fg把后台任务调回前台。加让任务直接后台执行也常见sleep 100 这里有个容易忽略的点后台任务在终端关闭后可能会收到挂断信号而终止。要想终端关闭后任务继续跑标准做法是用nohupnohup command logfile 21 这条命令让程序忽略挂断信号把标准输出和错误输出都重定向到logfile最后丢到后台执行。我们部署脚本任务时经常用这种方式可以说是生产环境的后台任务标配。5. 磁盘、内存与网络排查问题出现时靠它们定位5.1 磁盘与内存占用df、du、free磁盘空间和内存是所有服务器最基础的资源也是故障的高发区。我遇到过很多次日志把磁盘写满导致服务崩溃的情况所以监控命令的熟练度很关键。df命令查看文件系统整体使用量df -h-h参数把容量换算成易读的K、M、G。输出结果里重点关注Use%列当达到80%以上就需要警惕了90%以上基本要立即处理否则可能导致服务写日志失败甚至进程崩溃。找到了磁盘分区快满了接下来就要定位是哪些目录占用了空间这是du的强项du -sh /var/log/*-s表示汇总-h表示易读格式后面跟路径。这条命令会显示/var/log下每个子目录或文件的占用总量帮你快速定位大头。定位到具体目录后再用du -sh一步步向下细分这是排查磁盘占用的标准操作。free命令用来查看内存使用情况。注意输出里有个现象free值很小但系统并不卡。这是因为Linux会把空闲内存用作文件缓存这部分缓存在内存吃紧时可以被回收所以真正的可用内存要结合总的可用情况看。判断内存是否紧张要看实际Swap的使用量和应用的真实占用而不是只盯着free那一行发呆。5.2 网络状态与连通性ss、ping、curl网络排查是运维工作中另一个高频场景。机器之间连不上、端口不通、接口超时这些都要靠网络命令来验证。ping命令用来测试网络连通性ping -c 4 www.example.com-c参数限定发送4个ICMP包后自动停止。不加-c的话ping会一直运行直到手动CtrlC打断。如果目标主机禁了ICMPping不通也不代表服务不健康这时候需要换用其他方式验证。端口状态主要用ss命令查看。ss是netstat的替代品输出更快信息更全ss -tlnp这个组合的含义是-t显示TCP端口-l显示监听中的端口-n直接显示数字地址和端口不解析域名-p显示监听端口的进程信息。这套参数是我排查端口占用和确认服务监听状态时首选。一条命令就能看到某个端口被哪个进程占用避免先查PID再查端口来回确认的麻烦。curl则是测试HTTP接口的利器curl -I https://example.com-I参数只看响应头快速判断服务是否正常返回HTTP状态码。如果要看完整响应体直接不加-I。调试接口时会搭配-i显示响应头加响应体用-d传POST数据用-H设置自定义头部用-o保存输出到文件。对于后端开发来说curl是仅次于grep的高频工具。6. 常见问题与排查技巧实录6.1 命令找不到与PATH环境变量描述现象明明在某个目录下看到了可执行文件执行时却提示command not found。这个报错绝大多数不是文件不存在而是Shell找不到这个程序。Shell只会在PATH变量指定的目录列表里查找命令。当你在当前目录有一个脚本my.sh时执行它需要加路径前缀./my.sh点代表当前目录后面紧跟斜杠。同样有时安装软件后总是提示命令找不到大概率是安装目录没有加入PATH。你把新增目录追加到PATH即可export PATH$PATH:/usr/local/myapp/bin这种方法终端关闭后失效。永久生效需要写入环境配置文件比如在~/.bashrc里加同一行再执行source ~/.bashrc重载配置。另外别忘了文件需要有执行权限否则即使找到了也会提示Permission denied。6.2 操作被拒绝与sudo的正确使用场景新装系统后执行apt install或yum install提示权限不足是因为普通用户无权修改系统目录。此时需要临时切到root权限或使用sudosudo apt install nginxsudo执行的原理是当前用户具备sudo授权时可以临时以root身份运行命令。但不应什么操作都sudo。日常运维有个基本原则能用普通用户完成的就不要提权。频繁使用sudo或直接切换到root去跑日常命令容易因为一次手误删除系统关键文件酿成大错。如果确实需要管理员操作建议细粒度授权只开放特定命令的sudo权限。6.3 磁盘写满但du看不到大文件有一种情况很隐蔽df显示磁盘已满但du统计的目录占用却不匹配。这种差异通常由已删除但仍在被进程占用的文件造成。进程打开了一个文件你把文件名删了但进程还持有该文件的句柄磁盘空间不会真正释放。排查方法lsof | grep deletedlsof命令会列出所有打开的文件过滤标记为deleted的记录就能找到那些已删除但仍被占用的文件对应PID就是占用者。重启占用进程或用kill使其退出后空间才会被真正释放。这个坑在日志轮转和临时文件管理时特别容易遇到记下来能省很多排查时间。6.4 端口冲突与确认服务监听情况启动服务时提示端口已被占用是常见问题。先用ss确认端口占用情况ss -tlnp | grep 8080看到PID之后用ps -p PID -o comm确认是什么进程然后决定是调整配置换端口还是终止旧进程。如果端口看起来没人监听但curl访问超时那很可能服务监听了内网地址但没有对外开放或者防火墙规则拦截了入站请求。此时建议先看ss的监听地址是0.0.0.0还是127.0.0.1再结合系统防火墙策略确认放行情况这是排查端口访问问题的完整思路链。写在最后我的学习顺序建议如果你现在刚开始接触Linux命令我的建议是不要想着把所有参数背完。先把第2章和第3章的日常命令用熟再逐步扩展到权限、进程和系统排查。核心命令的数量其实非常有限二三十条就足以覆盖绝大多数工作内容剩下的需求靠man和--help现查现用。每条命令都多想想它输出什么、什么场景下能用、有没有替代品远比机械记忆参数有价值。命令就像积木先掌握单块积木的作用才有能力组合出解决复杂问题的方案。

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

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

免费获取报价 →
↑