news 2026/10/6 8:32:16

Linux常用命令实战指南:从Shell原理到服务器运维排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux常用命令实战指南:从Shell原理到服务器运维排查

刚接触Linux那会儿,我在终端里敲下第一条ls的时候,完全没意识到后面几年吃饭的本事,几乎都押在这些看似零散的指令上了。做运维、写脚本、排查线上故障,几乎每一天都在跟Linux指令打交道。这篇文章不打算把man手册抄一遍给你,而是把日常使用频率最高、踩坑最多、面试也常问的那批常用指令,按真实的工作场景重新梳理一遍。适合刚开始用Linux的开发者,也适合准备运维面试、或者工作中经常要上服务器操作的同事,拿来对照参考。能动手敲的,别只看;能记到脑子里的,别靠搜索——这是我想在这篇里传递的第一件事。

1. 先补三个底层概念:指令是什么、去哪找、坏了怎么查

很多人一上手就在背命令,背了很多却不知道怎么组合,遇到报错更是一头雾水。我的建议是:先花三分钟搞清楚指令运行的底层逻辑,后面学什么都快。

1.1 指令的本质和Shell的工作方式

Linux里的所谓“指令”,严格来说分两类。一类是Shell自带的内部命令,比如cd、echo、export;另一类是存放在/bin、/usr/bin、/usr/local/bin等目录下的独立可执行程序,比如ls、grep、tar。你在终端输入的命令,实际上是由Shell这个解释程序接收,然后去PATH变量定义的路径里逐个查找匹配的可执行文件,找到就运行,找不到就报“command not found”。

这就解释了为什么有时候你明明安装了某个软件,却敲不了它的命令——大概率是安装路径没加进PATH。我排查过不少类似问题,最后都指向同一句话:先看看echo $PATH输出什么。用which或type可以快速确认命令的真实位置,例如which nginx,它会把/usr/sbin/nginx这种完整路径给你打出来。搞懂了这一层,以后遇到任何“找不到”的问题,第一反应就不会是瞎重装,而是先检查路径。

1.2 指令帮助体系的正确打开方式

很多新手上来就问“这个命令怎么用”,其实Linux自带一套完整的帮助体系。最常用的是man,比如man ls会打开ls的完整手册;其次是info,内容更详细但结构更复杂;第三是大多数命令都支持的--help参数,适合快速扫一眼常用选项。我的习惯是:拿不准某个参数时先--help,想了解原理和细节再看man。

这里有个小技巧:man手册打开后,按/可以搜索关键词,按q退出。很多面试题喜欢考“某个参数的含义”,其实在man页里都能找到原话,关键是你要养成查文档的习惯。还有一种场景是老手也会遇到的——同一个命令在不同发行版上选项有差异。比如ps aux和ps -ef输出的字段风格就不一样,这跟POSIX规范和BSD风格有关,没必要争谁对谁错,跟着你手头系统的man走就对了。

2. 文件与目录操作:每天用量最高的那批指令

文件操作是Linux的日常基本功,也是各类面试题里出镜率最高的部分。这部分我不打算只罗列参数,我想把“什么场景用什么组合”讲明白。

2.1 目录切换与状态确认:pwd、cd、ls

pwd打印当前工作目录,cd切换目录,ls列出目录内容。这三个看起来简单,组合起来却有很多讲究。cd -可以快速回到上一次所在目录,我经常在A目录和B目录之间来回切换排查问题,靠的就是这一下;cd ~回到当前用户的家目录;cd ..回到上一级。ls的几个常用变体要形成肌肉记忆:ls -l看详细属性,ls -a显示隐藏文件,ls -lh把文件大小变成人类易读的K、M、G,ls -lt按修改时间排序,方便找最新改过的文件。

ls -l输出的第一列是文件类型和权限,类似drwxr-xr-x。第一个字符d代表目录,-代表普通文件,l代表软链接。后面九个字符每三个一组,分别对应属主、属组、其他人的权限。这个知识在后面的权限管理还会展开,但你在看文件列表的时候就要开始有意识地读这一列,而不是只看文件名。

2.2 文件复制、移动与删除的高危操作意识

cp复制文件,mv移动或重命名文件,rm删除文件。我在实际工作中见过太多因为这三个命令翻车的案例,所以必须单独拎出来说。cp -r复制目录时记得加递归参数,cp -p保留原文件的权限和时间戳,这在备份配置文件的时候特别有用。mv在同文件系统内基本是瞬间完成的,因为只是改了个目录项指针;跨文件系统移动才会真正复制再删除,耗时完全不同,这个原理值得记一下。

rm是最危险的指令之一,尤其是rm -rf组合,网络上各种段子基本都源于此。我的实操原则是:删除之前先ls确认当前路径;能用相对路径就不用绝对路径;关键操作前先tar打包备份。另外,别小看rm -i的交互提示,它在批量删除时能救命。还有一个真实教训:路径末尾多打一个空格再加*,匹配范围可能完全不同,这种低级错误一旦发生就是灾难。

2.3 文件查看与内容过滤:cat、tail、find、grep

查看文件内容,cat适合看完整小文件,less适合分页阅读大文件,head看前几行,tail看后几行,tail -f则能实时跟踪日志输出,排查线上问题时我几乎天天用它盯着应用日志。grep是文本过滤的神器,grep keyword /path/to/file直接打印匹配行,grep -r递归搜索目录,grep -i忽略大小写,grep -v反向匹配。

find是文件查找的终极方案,但很多人用不熟。我常用的思路是:按名字找find /data -name "*.log",按大小找find / -size +500M,按时间找find /tmp -mtime -3(三天内修改过的文件)。再进阶一点,find还能直接接-exec执行后续命令,比如批量清理三天前的日志:find /var/log -name "*.log" -mtime +3 -exec rm {} \;。这个语法第一次看会懵,但其实{}就是find找到的每个文件名,\;表示命令结束。能理解并安全使用这条命令,你的效率会明显提升。

3. 权限与用户管理:理解Linux安全模型的钥匙

3.1 权限位、数字法与常见权限组合

Linux的权限模型其实不复杂:每个文件有三个身份维度(属主、属组、其他人),每个维度有三种权限(读r、写w、执行x)。数字法是对这三类权限的二进制编码:r=4,w=2,x=1。chmod 755等于给属主rwx、属组rx、其他人rx;chmod 644等于属主rw、属组r、其他人r。

我给了个生活化类比:权限就像一套公寓的门禁卡。属主是房东,有全套权限;属组是合租室友,能开门能住但不能改变房屋结构;其他人是访客,只能看看。理解这个之后,你看到-rwxr-xr-x就不会再觉得是乱码。需要加执行权限时用chmod +x script.sh,要给整个目录及内部所有文件统一改权限用chmod -R。但要注意,-R会递归修改所有子文件,生产环境慎用,因为有些程序文件对权限极其敏感,改错可能导致服务起不来。

3.2 用户创建、密码与身份切换的实际操作

用户管理相关的指令在面试里经常一起考。useradd创建用户,passwd设置密码,usermod修改用户属性,userdel删除用户。创建用户时,我习惯这样写:

useradd -m -s /bin/bash zhangsan

-m自动创建家目录,-s指定登录Shell。如果不加-m,很多发行版不会自动建家目录,用户登录后落在根目录,各种配置写不进去,很容易被误认为“系统坏了”。创建之后立刻passwd zhangsan设置密码。查看用户信息用id zhangsan,能看到uid、gid和所属组列表,排查权限问题时这个命令非常关键。

多用户环境里,临时切换身份用su,普通用户提权执行单条命令用sudo。区别在于:su -会完全切换到另一个用户的登录环境,需要知道目标用户的密码;sudo是当前用户用自己的密码以root权限执行命令。生产服务器上我推荐尽量用sudo,因为sudo的每一条执行记录都会写进日志,出了事能追溯。sudo权限配置在/etc/sudoers文件里,修改它必须用visudo命令,因为visudo会做语法校验,防止你写错把sudo搞挂。

3.3 别滥用root:权限边界是最好的保护

刚接触Linux的人喜欢干什么都用root,图省事。但生产环境的规矩恰恰相反:能用普通用户做的操作,绝不用root;能用sudo完成的,绝不直接登录root。原因很简单,root的权限没有任何限制,一个误操作比如rm -rf /(虽然现在很多系统有保护),或者写错配置文件,可能直接导致整台服务器不可用。

我踩过一次印象深刻的坑:在一个业务目录里用root执行了一个chown -R,把目录属主改错了,结果业务进程因为无法写日志直接崩溃。从那之后我给自己定了几条铁律:登录服务器用普通用户;需要特权时用sudo;执行批量修改之前先ls -l看清楚对象;涉及属主属组的操作先用--dry-run或test -e验证路径存在。权限不是阻碍效率的枷锁,它是你操作的最后一道保险栓。

4. 进程、服务与系统资源:运维排查的主战场

4.1 查看进程的黄金组合:ps、top

ps是进程查看指令,最常用的组合是ps aux和ps -ef。ps aux输出的列包括USER、PID、CPU%、MEM%、STAT、COMMAND等。这里的STAT字段值得关注:S表示休眠,R表示运行,Z表示僵尸进程。如果系统里出现大量Z进程,说明父进程没有正确回收子进程,通常需要排查父进程的逻辑或者直接重启相关服务。

top是动态刷新版的进程查看器,按CPU或内存排序能快速找出资源占用大户。进入top后按P按CPU排序,按M按内存排序,按q退出。我排查应用卡顿问题时,第一步就是top看整体负载,第二步ps aux --sort=-%cpu | head -20看具体是哪个进程在吃资源。

4.2 kill、进程信号与“杀不死”的进程

kill通过发送信号来控制进程,默认发的是SIGTERM(编号15),相当于礼貌地请求进程自行退出。如果进程不响应,再用kill -9发SIGKILL,强制终止。经验之谈:别一上来就-9。-9是最后手段,因为它不给进程任何清理资源的机会,可能导致数据丢失、端口未释放、临时文件残留。我建议的顺序是kill <pid>,等几秒看进程还在不在,实在不行再kill -9 <pid>。

还有一种常见面试题:端口被占用了怎么办。通常先ss -tlnp | grep 端口号或lsof -i :端口号找到占用进程的PID,然后按上面的方式处理。这里要注意,lsof在某些精简系统里没预装,需要先yum install lsof或apt install lsof,而ss是iproute2自带的,一般都有。

4.3 systemctl:现代Linux的服务管理标准

现在的主流发行版基本都用systemd管理服务,systemctl就是它的客户端。常用命令有:systemctl start nginx启动服务,systemctl stop nginx停止,systemctl restart nginx重启,systemctl enable nginx设置开机自启,systemctl status nginx查看运行状态。status输出里会包含进程PID、最近日志、以及Active状态是running还是failed,排查服务起不来时第一件事就是看它。

服务配置文件存放在/etc/systemd/system和/usr/lib/systemd/system目录下,修改后要执行systemctl daemon-reload重新加载。还有一个经常考的场景:systemctl list-units --type=service可以列出所有已加载的服务单元,systemctl list-units --failed能直接看到启动失败的服务。这条命令在服务器批量迁移后特别有用,能快速发现哪些服务没起来。

5. 网络与端口排障:从连通性到监听状态

5.1 ping、ip、ss:网络问题三板斧

网络排查的第一步永远是确认基础连通性。ping能测IP层的通断,ip addr查看本机IP地址和网卡状态,ip route查看路由表。这些指令的输出虽然枯燥,但每一个字段都对应一个网络环节:IP地址是否配置对、默认网关是否存在、DNS是否可达。

第二步是看端口监听状态。ss -tlnp是查看TCP监听端口的首选,-t只看TCP,-l只看监听状态的端口,-n用数字显示地址和端口(不做反向解析,速度快),-p显示对应的进程信息。我想强调一下:ss已经取代了老的netstat,在新系统上用netstat可能提示未安装,直接用ss就好。把ss -tlnp练熟,比背一堆netstat参数更实用。

5.2 连通、端口、防火墙、DNS的排查顺序

我处理过不少“网页打不开”的工单,总结了一套固定排查顺序。第一,ping目标IP,如果ping不通,检查本机IP和网关;第二,telnet 目标IP 端口或用curl -v测试端口连通性,连不上就查防火墙和安全组;第三,systemctl status firewalld看本机防火墙是否拦截;第四,nslookup 域名排查DNS解析是否正常;第五,ss -tlnp确认服务进程有没有在监听正确的端口。

这套顺序看起来简单,却解决了我至少80%的网络问题。有个容易忽略的点:云服务器上除了操作系统防火墙,还有云平台安全组;两边都放行了才算真正放行。凡遇到端口不通,先别急着改防火墙,把整个链路过一遍再动手,往往能省下不少无用功。

6. 打包压缩、管道与脚本:从单条指令走向自动化

6.1 tar:打包和压缩一套搞定

tar是Linux最核心的归档工具。常用组合:tar -czvf app.tar.gz /opt/app把目录打包并用gzip压缩,tar -xzvf app.tar.gz解压,tar -tzvf app.tar.gz不解压只查看内容。参数含义:c创建归档,x解包,z启用gzip压缩,v显示过程,f指定归档文件名。f必须放在最后,因为它后面紧跟文件名,这个顺序很多人记混过。

解压到指定目录用-C:tar -xzvf app.tar.gz -C /opt/deploy。这个选项在部署发布时太常用了。再补充一个实用的:tar -czvf backup_$(date +%F).tar.gz /var/lib/mysql——用命令替换把当天日期拼进备份文件名,配合cron定时任务,就能实现每天自动备份。日期格式%F是%Y-%m-%d的简写,运维脚本里出现频率极高。

6.2 管道、重定向与tee:指令之间的“接线”

管道符|是把前一条命令的标准输出,作为后一条命令的标准输入。比如ps aux | grep nginx就是在全部进程输出里筛出nginx相关行。grep还能过滤掉grep自身进程:ps aux | grep nginx | grep -v grep,虽然用pgrep更专业,但面试和临时排查中管道写法更普及。重定向符号也有讲究:>覆盖写,>>追加写,2>把错误输出重定向到文件,2>&1把标准错误合并到标准输出。

tail -f /var/log/app.log | grep ERROR是我盯日志最常用的姿势,等于实时过滤只看错误行。还有一个好东西tee:echo "hello" | tee test.txt能在把内容写到文件的同时打印到终端,部署脚本里要“既留档又可见”时很顺手。初学者最容易懵的是2>&1的位置,我提供一个简单的记忆方式:把1想成正常出口,2想成报错出口,2>&1就是让报错走正常出口的路,这样|和>才能接住报错信息。

6.3 第一个实用脚本:从手动操作到一键执行

把多条指令写进一个以.sh结尾的文件,再加执行权限,就得到最简单的自动化脚本。开头的#!/bin/bash叫shebang,用来告诉系统用哪个解释器执行。举个例子:一个日志清理脚本。

#!/bin/bash LOG_DIR=/var/log/myapp DAYS=7 find "$LOG_DIR" -name "*.log" -mtime +$DAYS -exec rm {} \; echo "$(date): 已清理 $LOG_DIR 下超过 $DAYS 天的日志" >> /var/log/cleanup.log

执行前先chmod +x clean_logs.sh,然后./clean_logs.sh。脚本里建议加上变量定义,别把路径直接写死在命令里,这样换环境只要改顶部的变量就行。配合crontab定时执行:

crontab -e 0 2 * * * /root/clean_logs.sh

表示每天凌晨两点执行一次。写脚本时有个原则我强调过很多次:所有命令尽量写绝对路径,因为cron运行时的环境变量和你手动登录终端时不一样,PATH可能不完整,用相对路径或裸命令经常导致脚本在cron里静默失败。

7. 常见问题速查与避坑实录

7.1 高频报错的排查套路

Linux指令用多了,会发现报错翻来覆去就那么几类。第一类是command not found,先确认命令是否安装:which 命令或type 命令,没有输出就安装对应软件包,比如yum install -y vim。第二类是Permission denied,要么文件没有执行权限,要么当前用户对目录没有写权限,用ls -l和id对照着看,必要时chmod或sudo。第三类是No such file or directory,可能是路径拼写错,也可能是脚本里的解释器路径写错了,比如在脚本里写#!/usr/bin/python但系统实际安装在/usr/local/bin/python。

第四类是磁盘满了,df -h看挂载点使用率,再用du -sh /var/log/*排查具体目录。很大概率是某个日志文件疯狂增长,常见处理是> /var/log/app.log直接清空而非rm,因为进程还在写这个文件,删了以后空间也可能不释放,这是很多新手踩过的坑。

7.2 几个容易“看起来很对”但实际很危险的操作

第一个是rm -rf /以及rm -rf /*这种带通配符的写法,虽然部分系统有保护,但不要在关键机器上赌这个概率。第二个是chmod -R 777,它会开放所有用户的所有权限,等于把安全门拆了,正常场景给755或644就够了。第三个是kill -9无差别解决一切进程问题,实际上可能留下半写状态的临时文件,导致下次启动失败。第四个是在生产环境直接编辑正在运行的脚本文件而不备份,一旦语法写错,定时任务会在下次执行时报错,可能引发连锁问题。

7.3 我的几条实操铁律

长期跟Linux打交道,我给自己定了几条铁律,也推荐给你参考。第一,执行任何删除、覆盖、批量修改之前,先ls确认对象;第二,改配置前先cp备份,并且编号保存,比如nginx.conf.bak20250101;第三,使用sudo前先history看看自己刚才敲了什么,防止上下文错乱导致误操作;第四,写脚本时变量加引号,例如"$LOG_DIR",防止路径里有空格时命令被拆断。

这里再补充两个让我效率提高不少的小习惯。一个是alias:比如在~/.bashrc里写alias ll='ls -lh'、alias gv='grep -v grep',下次登录直接用短别名。另一个是history:先history查看历史指令,再用!编号快速复用某条历史命令,配合Ctrl+R反向搜索,能省下大量重复输入。我在实际使用中发现,把这些指令练成本能反应比背下所有参数更重要——因为真正的排查场景根本不会给你查文档的从容时间,靠的是平时积累和肌肉记忆。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 8:32:06

Java手机APP统计分析系统设计与数据链路实战

简介&#xff1a;这套基于Java的手机APP信息统计分析系统源码&#xff0c;面向移动应用开发者、大数据学习者及产品运营人员&#xff0c;用于采集APP用户行为日志&#xff0c;完成清洗、聚合与可视化分析&#xff0c;为优化产品体验提供数据支撑。资源共57个文件&#xff0c;包…

作者头像 李华
网站建设 2026/10/6 8:31:16

汽车租赁系统源码拆解:工程结构、启动脚本与避坑指南

简介&#xff1a;这是一份基于Java技术栈的汽车租赁系统完整项目包&#xff0c;主要面向计算机相关专业毕业设计、课程设计以及Java Web开发初学者&#xff0c;也适合希望快速上手完整业务系统的后端工程师参考。系统围绕车辆档案、客户管理、租赁订单、续租还车、费用结算等核…

作者头像 李华
网站建设 2026/10/6 8:30:57

SpringBoot3+Vue3论坛管理系统实战:前后端分离与权限认证全解析

SpringBoot3 Vue3 这个组合&#xff0c;最近几年在毕业设计、课程实训里的出现频率高得离谱。我见过太多人一上来就搜"论坛管理系统源码"&#xff0c;下载下来跑不起来&#xff0c;或者跑起来了看不懂&#xff0c;最后答辩时被老师问两句就卡壳。这个项目的价值不在…

作者头像 李华
网站建设 2026/10/6 8:30:57

SpringBoot3+Vue3协同过滤旅游景点推荐系统实战与毕设指南

最近后台总有读者问我&#xff0c;有没有既能把毕业设计应付过去、又能真正学到东西的项目。我手里这套 SpringBoot3 Vue3 协同过滤在线旅游景点推荐系统&#xff0c;就是为这种需求准备的。它不是那种只能截图交差的玩具&#xff0c;核心推荐功能由协同过滤算法实时计算&…

作者头像 李华
网站建设 2026/10/6 8:30:24

Git Flow分支模型全解析:从五类分支到发布与热修复的工程实践

1. 为什么要重新认识 Git Flow Git Flow 这个名字在团队协作里被反复提及&#xff0c;但我发现很多人对它的理解停留在“一套分支规范”这个层面。老实说&#xff0c;这样的认识太浅了。Git Flow 是一套把软件开发流程、发布节奏、热修复机制全部纳管起来的完整工程实践&#x…

作者头像 李华
网站建设 2026/10/6 8:27:37

信恒支付源码部署与第四方支付系统实战解析

简介&#xff1a;这是一套完整的第四方支付系统源码&#xff0c;适用于PHP开发者、支付平台二次开发人员及中小型金融科技团队&#xff0c;用于快速搭建或研究聚合支付底层架构。资源基于ThinkPHP框架开发&#xff0c;完整保留宝塔环境下的部署结构与配置逻辑&#xff0c;支持L…

作者头像 李华