新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux常用命令大全:从语义地图到故障排查实战

发布时间:2026/10/1 3:14:40来源:尧图网络
Linux常用命令大全:从语义地图到故障排查实战
当时那一幕我记得特别清楚周一刚上班就有同事在群里喊系统响应慢一堆人围在一起盯着终端半天没人说话。有人敲了个ps -ef | grep java发现Java进程还在又敲了个free -h看到内存也没满就卡住了。我过去直接输了三行命令top -Hp PID看线程jstack PID抓线程栈再加上一条grep -A 20 nid过滤三分钟定位到是某一个线程在死循环——对方当场愣住问我平时是不是把Linux常用命令大全背下来了。其实真不是背出来的。我是把命令按场景和语义串起来记的这次趁着整理《Linux系列》第六篇把平时最常用、面试最爱问、运维最容易用到的Linux常用命令从头到尾捋了一遍包括每个命令背后的原理、常见的坑以及不同场景下应该怎么组合使用。这篇文章适合刚入行的运维、日常要碰服务器的后端开发以及准备Linux面试题的求职者当然如果你已经在用Linux但想补一补为什么这么用的逻辑也值得读完。1. 别急着背命令先建立Linux命令的语义地图很多新手学Linux命令最大的问题是背了忘、忘了背。今天记了chmod明天就忘后天看到awk直接劝退。我自己的体会是命令数量看似多但核心就几十个关键在于先搞懂命令的底层结构再按使用场景去归类记忆。1.1 命令的基本结构程序、参数、管道Linux命令长的样子其实都是同一个套路——命令 选项 参数。比如ls -l /home这条命令里ls是要执行的程序-l是选项通常用来改变输出格式或行为/home是参数告诉程序要操作的对象。这个概念虽然简单但很多人学了一堆命令后反而忽略了它导致遇到没见过的命令时不会举一反三。我见过不少人在命令行里卡住的真正原因不是命令记不住而是不理解两个关键概念一切皆文件。在Linux里硬盘、网卡、终端、进程信息都以文件形式暴露在/dev、/proc这些目录下。理解了这一点很多命令的用法就能迁移。管道与重定向。|把前一个命令的输出接到后一个命令的输入把输出写入文件。这是Linux的组合拳机制单条命令解决不了的问题用管道把两三条命令串起来效果比GUI点半天还快。所以我不建议一开始就去啃那种几百页的命令手册。先把手头最常用的20个命令用熟理解它们的输入输出是什么再通过管道把它们拼起来用效率会高很多。1.2 按场景归类运维、开发、嵌入式各有侧重命令虽然通用但不同岗位的关注点完全不一样。做Web运维的top、ss、tail、journalctl是每天的日常做后端开发的git、grep、find、systemctl用得最勤做嵌入式开发或者车载相关的可能整天在和dmesg、ifconfig、adb打交道面算法和架构岗的反而更常被问到curl、jq、awk这类数据处理命令。我理解很多人看那些Linux常用命令大全时候的迷茫——几百个命令平铺下来不知道从哪下手。我的经验是先确认自己的领域再从必会清单开始用到哪补到哪。比如我刚工作那会做PHP项目最常干的事情是看日志、重启服务、查进程所以最先吃透的是tail、grep、systemctl、ps、kill这五个命令后来开始处理前端构建和容器化才慢慢补上scp、rsync、docker。命令不是一次学完的是跟着场景长出来的。2. 高频必会命令文件操作、权限与文本处理不管什么岗位文件操作和文本处理都是Linux的万能基础。这部分的命令我用得最频繁也最容易看到别人踩坑单独拎出来详细讲讲。2.1 文件与目录操作这些基础命令的隐藏细节ls、cd、pwd、mkdir、rm、cp、mv这些基础命令几乎每天都要敲但很多细节值得留意ls -lh里-h会自动显示人类可读的大小单位平时看文件大小一定要带上不然一个数字竖排出来很难受。ls -lt按修改时间排序排查哪个文件刚被动过时非常有用。rm -rf是新手翻车重灾区。我见过有人写rm -rf $DIR/结果环境变量没赋值命令变成rm -rf /还好及时发现才没酿成大祸。我的个人习惯是变量路径先echo确认再用rm能加-i交互确认就加。cp -r拷贝目录时必须带-r不加会直接报错。拷大型目录建议用rsync而不是cp它支持断点续传、增量同步而且可以通过--progress看到进度传数据更安心。mv在跨文件系统时会先复制再删除速度慢且占用临时空间大量移动文件时可以先用df -h确认源和目标是不是同一个分区不同分区建议改用rsync传输后清理。# 查看当前目录下所有文件的大小按从大到小排列 ls -lhS # 复制目录并显示进度 rsync -avh --progress /data/app/ /backup/app/ # 安全删除文件的习惯先打印路径确认 echo $APP_DIR rm -rf $APP_DIR2.2 权限与用户chmod、chown 和 sudo 的原理Linux是多用户系统权限体系里三个核心概念是用户user、用户组group、其他人others。ls -l输出的第一个字段就是权限位比如-rw-r--r--这串字符第一位是文件类型-表示普通文件d表示目录后面每三位一组分别对应用户、组、其他的读r、写w、执行x权限。chmod的两种用法是新手容易混淆的数字法和符号法。数字法用r4、w2、x1相加比如chmod 755 file表示用户可读可写可执行、组可读可执行、其他人可读可执行这是最常见的设置符号法用ux、g-w、or这种形式适合只改某个角色的某类权限。我个人习惯用数字法因为它更直观几条命令排在一起不容易乱。chown用来修改文件归属比如把/data/app的所有者改成www用户命令是chown -R www:www /data/app。注意-R才会递归处理目录下所有文件。sudo的原理是提权执行配置文件在/etc/sudoers平时用sudo时要克制能不加sudo就用普通用户操作因为 root 权限下一行错误的rm可能炸掉整台机器。# 为脚本添加执行权限 chmod x deploy.sh # 修改目录归属并设置 setgid 位使新文件自动继承组 chown -R www:www /var/www/html chmod gs /var/www/html # 查看当前登录用户及身份 id whoami2.3 文本处理三剑客grep、sed、awk这三个命令是Linux排查问题的核心武器也是面试必考的内容值得多花点时间。日常使用中它们各自擅长的事不一样grep用来筛选sed用来替换和编辑awk用来按列处理和统计。grep最常见的场景是过滤日志。我在排查线上Nginx错误的时候典型的操作是grep -i error /var/log/nginx/error.log | grep -v favicon | tail -100这条命令的意思是过滤出包含error的行忽略大小写-i排除掉favicon相关的噪音grep -v只看最后100行。排查接口报错时还会加上--colorauto高亮关键词。grep -r可以递归搜索目录适合在代码里定位某个配置项grep -E支持正则表达式复杂匹配靠它。sed最常用的是-i做原地替换。举个例子要把配置文件里的旧IP换成新IPsed -i s/192.168.1.100/192.168.1.200/g /etc/app/config.properties这里s是替换命令g表示全局替换。注意不同发行版的sed -i参数有差异GNU版本Linux自带的直接用sed -iBSD版本macOS自带的需要sed -i 这就导致同一行命令在本地Mac上跑不起来。后来我统一在Linux服务器上执行或者在Mac上写脚本时直接加上空参数。awk是三个命令里门槛最高的但也是威力最大的。我常用它处理日志统计比如分析Nginx access log里哪些IP访问最多awk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20这条命令把每行日志按空格拆分取第一个字段即IPsort排序后uniq -c统计次数再按数字大到小排序取前20个。awk还支持条件判断和循环比如筛选耗时超过3秒的请求awk $NF 3 {print $0} /var/log/nginx/access.log这里的$NF表示最后一个字段假设日志最后一列是响应耗时。要筛选状态码为500的记录用awk $9 500。这类一行式命令在排查性能问题时非常方便。3. 系统与运维排查场景日志、进程、网络与磁盘基础命令熟手之后真正的挑战来了——线上出了故障你该怎么用命令定位?这是运维和面试考查的重点我把日常排查的几个核心场景拆开讲。3.1 日志搜索实战怎么从海量日志里快速找到问题排查线上问题第一件事就是看日志。日志文件动辄几个G千万别用cat去读——终端直接被刷爆而且会占用大量IO。我的顺序是先tail -n看尾部最近记录再用grep过滤关键词偶尔用less上下翻看配合/关键词搜索。tail -f是排查实时问题的利器比如压测时观察日志是否还继续输出用tail -f app.log挂着看。我自己比较常用的是tail -f | grep keyword组合只把有关键词的日志实时打印出来避免无关输出刷屏。在systemd的机器上journalctl逐渐取代了传统的日志文件查看方式。查看某个服务的最近50条日志journalctl -u nginx -n 50 --no-pager--since 2025-01-15 10:00可以指定时间段-f等同tail -f实时跟踪。这个命令在排查服务起不来但没留下传统日志的情况时特别好用systemctl status只给三行摘要完整日志还得靠journalctl -u 服务名。排查日志时有个常见问题时间不同步。服务器时钟偏了日志和监控对不上排查问题会绕很大弯子。我的习惯是排查之前先date看一眼当前时间如果不准就先用chronyc或ntpdate同步不然花半天查一个不存在的延迟就亏了。3.2 进程管理与系统负载top、ps、free 的正确打开方式top命令我一天要敲好几次但它有个新手容易忽略的点默认按CPU使用率排序。生产环境CPU飙高时先看top输出里第一名的PID然后ps -fp PID查看完整命令行确认是什么程序。如果是Java应用用top -Hp PID看线程级别的CPU占用再拿到线程号转成十六进制到线程栈里定位具体代码。完整的排查链路是# 第一步看机器整体负载 top # 第二步定位具体进程信息 ps -fp 12345 # 第三步查看该进程下哪个线程吃CPU top -Hp 12345 # 第四步把线程号转十六进制 printf %x\n 12345看到load average这三个数字时很多新手会慌。其实这三个数分别代表1分钟、5分钟、15分钟的平均负载要和CPU核数结合起来看。单核机器负载到1.0就已经满了8核机器负载到8.0才算打满。判断瓶颈时我习惯把5分钟和1分钟的数值对比如果1分钟远高于15分钟说明负载正在快速上升大概率是即时流量或者定时任务造成的。还有个容易踩的坑负载高但CPU不高。这种情况多半是D状态不可中断睡眠的进程在等IO比如磁盘慢、NFS挂载卡住。查看方法ps -eo state,pid,cmd | grep ^D | grep -v grep如果一堆D状态进程那就别纠结CPU了去看磁盘IO和存储挂载是否正常。free -h查看内存时真正有参考意义的是available这一列它表示在不触发swap的情况下还可以分给程序多少内存比看used靠谱得多。kill是管理进程的最后手段我建议优雅优先kill -15先让进程自己清理退出只有确认对方卡死无法响应才用kill -9强制终止。线上乱用kill -9导致数据写一半、缓存没落盘的案例我见过不止一次。3.3 网络排查从 ping、ss 到 curl 的完整链路网络问题的排查链路通常是这样走的先ping测连通性和延迟通了你再测端口端口通了你再看应用层协议。ping不通不代表服务不可用可能是防火墙丢弃了ICMP包ping通但不能访问服务问题多半出在端口或应用层。查看端口监听状态新系统推荐ss而不是netstatss速度更快、信息更全。常用组合ss -lntp这个命令列出所有监听中的TCP端口及对应的进程名和PID排查8080端口被谁占了就是ss -lntp | grep 8080。netstat -tulnp的作用类似但较老的系统才会用到。测试远端服务端口是否开放telnet是最直接的telnet 192.168.1.100 8080如果端口通会连接成功如果超时或者Connection refused说明端口没监听或中间被防火墙拦截了。比telnet更好用的还有nc -vz host port能返回更清晰的状态信息。应用层接口调试基本靠curl。我在排查接口返回、测试REST接口时最常用的参数是-i显示响应头、-v显示详细交互过程、-X POST指定请求方法、-H设置请求头、-d传请求体。比如模拟一个POST请求看响应curl -i -X POST http://localhost:8080/api/login \ -H Content-Type: application/json \ -d {username:admin,password:123456}curl -w还可以输出请求耗时详情之前排查接口慢的时候靠它一眼看出是DNS解析慢还是连接建立慢还是响应慢比一顿瞎猜高效得多。3.4 磁盘与文件系统df、du 与目录瘦身磁盘满是最常见的小故障之一。df -h看整体使用率du -sh看具体目录占用。当发现根分区满了我一般按这个顺序排查# 顶层占空间 du -xh --max-depth1 / | sort -rh | head # 如果 /var 占用大继续深入 du -xh --max-depth1 /var | sort -rh | head-x表示不跨文件系统避免把/proc、/sys这类虚拟文件系统也算进去--max-depth1只显示一层目录避免输出爆炸。这个两层钻取的方法能很快定位到大文件目录比如日志目录/var/log、临时目录/tmp、容器目录/var/lib/docker。删除日志文件后如果df还是显示100%往往是有进程还在占用已删除的文件。可以用lsof | grep deleted找出这些进程重启进程或服务后空间才会真正释放。这个坑我踩过一次删了几G的日志文件磁盘占用纹丝不动后来才知道是Java进程还握着文件句柄搞明白后真想拍自己一下。du和ls -lh显示的文件大小不一致也经常有人问。原因是ls显示的是逻辑大小du显示的是磁盘实际占用块大小两者差距大通常意味着文件是稀疏文件或者有大量空洞一般不用太在意。4. 开发场景高频命令vim、gdb 与容器操作不是所有读者都做运维但几乎所有开发岗都绕不开vim、调试工具和容器。这部分的命令平时可能用不到一旦用到就是救命级别的。4.1 vim 必会操作从不知道怎么退出到高效编辑vim是每次Linux入门都会被提到的话题很多新手在vim里卡住是因为它有两种模式。默认打开是普通模式这时按键盘上的字不是输入而是命令。要输入内容得先按i进入插入模式写完后按Esc回普通模式。我整理了一份自己常用的vim快捷键清单不多但覆盖了90%的使用场景i在光标前插入a在光标后插入o在下方新开一行插入Esc回到普通模式:w保存:q退出:wq或:x保存退出:q!强制不保存退出普通模式下dd删除整行yy复制整行p粘贴:set nu显示行号:set nonu关闭行号永久显示行号在~/.vimrc里写set nu上下左右可以用h、j、k、l移动小段移动够用/关键词在文件中搜索按n跳到下一处u撤销Ctrlr重做我在工作中vim用得最多是快速修改配置文件打开文件 →Shiftg跳最后一行 →o插入 → 修改 →Esc→:wq全程不超过十秒。新手最常见的卡顿是开了vim后按了Ctrls终端直接冻结以为死机了。其实Ctrls是终端锁屏快捷键按Ctrlq解锁就好。4.2 gdb 调试常用命令崩了别慌先看堆栈如果写C/C或者嵌入式代码gdb是绕不开的工具。编译时一定要加-g选项保留调试信息否则gdb里看不到源码和函数名等于拿着一张没有标记的地图找路。我调试时最常用的是下面这几个命令gdb ./app启动调试如果要传参用gdb --args ./app --configprodbreak 文件名:行号设置断点比如break main.c:25run运行程序start则是停在main函数入口编译优化后可能定位不准但一般够用next单步执行不进入函数step进入函数内部print 变量名查看变量值比如print array[0]backtrace或bt打印函数调用栈——程序崩溃后这是第一优先执行的命令info breakpoints列出断点delete 断点号删除断点程序崩溃后出现core dump文件用gdb ./app core打开执行bt就能看到崩溃时的调用栈。这里有个经验如果栈显示是一个不认识的系统库函数先把栈帧往前翻几层多半能在自己的代码里找到问题。gdb是交互式工具不太适合写脚本化测试。如果要在崩溃时自动执行命令可以用gdb -batch -ex run -ex bt ./app这种方式适合让CI快速收集崩溃栈。4.3 Docker 常用命令容器操作与日志排查容器化普及之后同事们问我最多的Linux命令有一半其实是Docker命令。这里挑几个高频操作讲一下Docker本质是运行在Linux上的进程所以很多排查逻辑还是依赖底层Linux命令。# 查看所有容器含已停止的 docker ps -a # 查看运行中容器的资源占用 docker stats # 看容器日志tail模式 docker logs -f --tail200 容器名 # 进入容器内交互执行命令 docker exec -it 容器名 /bin/bash # 从宿主机拷贝文件到容器 docker cp ./config.json 容器名:/etc/app/config.jsondocker logs是排查容器应用问题最常用的命令-f可以实时跟踪输出。如果日志里有大量无法连接数据库这类报错先用docker exec进入容器在容器内部用ping和curl测试连通性。容器网络模式和宿主机不同宿主机通不代表容器通。docker stats能看容器资源占用如果某个容器CPU或内存长期打满多半是应用有问题而不是容器本身的问题。很多Docker容器为了精简体积默认没有装ps、vim、curl这些工具进入容器后发现命令不存在的处境我经常遇到。我的习惯是优先用宿主机的命令排查容器的网络和资源不得已要进容器时再apt install或yum install临时工具。容器本身是临时环境尽量别在里面装太多东西保持镜像干净。5. 面试高频Linux命令题回答思路比命令本身更重要Linux常用命令被面试官翻来覆去地问不只是为了考察你记不记得命令更是通过命令的使用逻辑看你的排查思路和问题定位能力。准备Linux面试题时不能只背命令要把完整的排查链路和为什么这样做讲清楚。5.1 经典考题CPU飙高怎么排查面试官问这道题期望听到的不是用top看一下这一句话而是完整思路。我的回答框架是首先用top看进程级别的CPU占用找到吃CPU的PID然后ps -fp PID确认是什么程序。如果是Java应用用top -Hp PID找到具体线程线程号转十六进制再jstack PID导出线程栈grep定位到出问题的线程。如果是PHP或Python应用去看对应的慢日志和错误日志。如果是自己的写的程序用strace -p PID可以追踪系统调用看它在忙什么——虽然不能直接定位业务逻辑问题但能排除文件读写、网络等待这些嫌疑。这里有个加分项是提到vmstat或mpstat看CPU是用户态高还是内核态高、是否伴随着上下文切换飙升。还有对单核和多核的比较——单核CPU负载到1.0就是打满8核要到8.0才算打满这体现了对load average的理解。5.2 经典考题磁盘满了怎么清理这道题考的是排查思路和命令的熟练度。我会说先用df -h确认哪个分区满了再用du -xh --max-depth1逐层找到占空间的目录。找到后看具体是什么——如果是日志目录先确认还有没有进程占着文件句柄用lsof | grep deleted找出来如果没有进程占用直接删或压缩归档。回答时如果能补充删了文件但空间没释放是因为进程持有句柄这个坑面试官会觉得你有真踩坑经验。另外还可以提到安全习惯清理前先du -sh确认目标大小rm前确认路径备份文件用mv到临时区而不是直接删。这些细节比单纯报命令名有含金量得多。5.3 经典考题端口被占用、服务起不来服务启动失败是工作中最常见的故障之一。排查8080端口的思路先ss -lntp | grep 8080看端口是否被占用被占了就ss -lntp拿到PID和进程名决定kill还是改配置。如果端口没被占看服务日志用journalctl -u 服务名或tail -100 日志文件。如果日志里出现权限拒绝用ls -l检查文件归属chown改所有者和chmod加权限。出现配置文件格式错误用nginx -t或systemctl status 服务名的输出定位。这一串思路本质上是用命令做排除法能流畅复述出来面试官就知道你是真的处理过线上问题的人。6. 我的实操心得避坑清单与个人经验最后这部分是我自己踩过坑之后整理的备忘也算是一个命令安全使用手册希望对你有用。第一命令执行前先想想后果。特别是在root权限下一行rm -rf就能毁掉几个月的成果。我的习惯是删除前先ls确认目录内容rm前用echo $路径确认变量非空能用mv到/tmp就先用mv确认没问题了再清。改了配置先nginx -t或systemctl config check验证再执行重载。这些习惯看起来烦琐但能保证你在深夜操作的时候不手抖。第二管道命令要小心假成功。默认情况下一个管道命令的退出码取决于最后一个命令的退出码。比如grep error 日志 | head -5即使前面grep没匹配到任何内容整个命令也会返回0。在脚本里判断执行结果时要用set -o pipefail否则会误判。一次同事写脚本反复出问题找不到原因最后就是管道退出码惹的祸。第三别依赖记忆用man和history。我记不住的参数从来不硬背直接用man 命令名查手册。觉得手册太长的时候先用whatis 命令名看一句话描述再用apropos 关键词搜索相关命令。日常操作时history记录了我敲过的每条命令想知道上一次解决这个问题用的什么参数直接在终端输入history | grep 关键词就能翻出来。这套查询链不是不记命令而是把记忆负担变成了检索能力长期用下来反而对命令的语义理解更深了。第四命令的输出要做人话翻译。top输出的那一堆数字free显示的buffer和cachedf里inodes的概念如果没有解释很容易误判。我的经验是先理解每个指标的含义再判断系统是否真的有问题。比如free -h里used很高不代表内存不够因为Linux会把空闲内存用作缓存只要available充足系统就是健康的。写到这里我把这个系列第六篇的内容基本倒完了。Linux常用命令没有太多捷径就是多用、多踩坑、多复盘。但我可以负责任地说一旦你按照场景把这套命令体系建立起来日常工作和面试题都不太会难住你。最后如果你正处于入门阶段建议从今天开始给自己定个目标每天在终端里把当天用过的命令和场景记到一个markdown文件里三个月后你会惊讶于自己的积累。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Python深度学习股票量化系统:从数据到回测的完整实战 2026/10/1 4:24:19

Python深度学习股票量化系统:从数据到回测的完整实战

简介:这是一套面向高校学生与量化爱好者的股票量化系统完整项目源码,基于Python与深度学习技术实现,涵盖数据获取、特征工程、模型训练、策略回测及可视化展示等环节,适合用作课程设计、期末大作业或自学量化交易的实战参考。压缩…

阅读更多 →
从RLM到Harness as a Language:Agent代码化与工程化实践 2026/10/1 4:24:19

从RLM到Harness as a Language:Agent代码化与工程化实践

1. 为什么要把 Agent 塞进代码文件里第一次看到"把 Agent 搬进代码里"这个说法,我脑子里冒出来的画面是:以前我们写 Agent,是在某个可视化编排平台里拖拖拽拽,连线、配参数、点保存,然后祈祷它别在运行时崩掉…

阅读更多 →
用好测试文章:时间戳命名与内容发布验证实战指南 2026/10/1 4:24:19

用好测试文章:时间戳命名与内容发布验证实战指南

标题虽然是“测试文章 - 1769241348464”,但往深了说,这类文件名在内容创作和信息管理里几乎是每天都在出现的。我自己也常年和各种“测试文章”“草稿”“副本final”打交道,时间戳版本更是一抓一大把。很多时候大家随手建一个测试文章&…

阅读更多 →
PCA+BP神经网络实战:高维数据分类降维的完整方案 2026/10/1 4:24:19

PCA+BP神经网络实战:高维数据分类降维的完整方案

咱们直接进入正题。我最近在做一批表格类数据的建模任务,发现一个特别值得聊的组合:PCA(主成分分析)加BP神经网络。先说背景。这批数据有三十多个特征,但样本量只有五六百条,典型的“维度高、样本少”的处境…

阅读更多 →
第一次作业不用慌:一套从拆解到交付的完整执行框架 2026/10/1 4:24:18

第一次作业不用慌:一套从拆解到交付的完整执行框架

“第一次作业”这四个字,恐怕是学生时代到职场生涯里,出现频率最高、也最容易让人心里发慌的场景了。我到现在还记得自己交第一份课程论文时的状态:材料下载了十几个,文档打开了一上午,光标在空白页上闪了一整天&#…

阅读更多 →
OpenCV C++图片浏览器源码解析:从CMake配置到图像处理实战 2026/10/1 4:24:12

OpenCV C++图片浏览器源码解析:从CMake配置到图像处理实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉