刚接手一个业务系统的服务器,或者从Windows转过来用Linux干活,大部分人第一反应是:命令这么多,从哪学起?网上一搜“Linux常用命令大全”,出来几百条,看着就头大。但真正到了业务场景里,你每天高频使用、能救命、能解决问题的,其实就那么几十条。
这篇文章不打算做命令大全式的堆砌,而是按业务运维的真实场景来拆:服务部署、网络排查、日志分析、日常巡检、文件传输。每个场景给出核心命令、背后的原理、以及踩过的坑。不管你是刚入门的新手,还是干了几年想补补短板的老人,这波内容应该都能帮你在实际业务里把命令用得更有底气。
1. 先搞清楚需求:业务场景里,我们到底要用命令解决什么问题
我们学习命令,不是为了背下来,而是为了解决问题。所以先想清楚:业务场景里,Linux命令到底在帮我们解决哪些问题?
1.1 日常业务中最高频的五大操作方向
我总结下来,日常不管是开发环境、测试环境还是生产环境,落到命令层面的需求基本就是这五类:
第一类是系统和资源状态查看。 比如业务突然变慢了,用户反馈接口超时了,或者页面打不开了。这时候我们要快速判断是CPU跑满了、内存不够了、磁盘写满了,还是网络出了问题。这类场景用到的是 top、free、df、iostat、ps、ss 这些命令。
第二类是服务部署和软件安装。 新环境要上线,需要创建用户、安装JDK或Python、装Nginx、部署Redis、拉数据库。这类场景用到的是 useradd、yum/apt、tar、scp、systemctl 这些命令。
第三类是网络连通性和接口排查。 两个服务之间调不通了,A机器访问B机器的8080端口超时,到底是防火墙挡了、服务没启动、还是网络链路有问题?这类场景用到 ping、telnet、curl、nc、traceroute 这些命令。
第四类是日志分析与数据提取。 业务出了故障要复盘,或者要从上亿行日志里找出某类请求的数量。这类场景用到 grep、awk、sed、sort、uniq、wc、tail 这些文本处理命令。
第五类是业务数据和代码的备份与传输。 要在服务器之间传文件、打包日志归档、同步配置文件。这类场景用到 zip、tar、rsync、scp 这些命令。
想清楚这个分类之后,你会发现学习命令的效率高很多。不要再从头到尾背命令大全了,而是想清楚自己当前的角色和业务阶段,按需学习,边用边积累。
1.2 命令学习的三层境界:背、用、懂
很多朋友问过我:我对Linux命令一直不熟,怎么提升?我的观点是,命令学习大致有三个阶段,你可以对照一下自己处于哪个阶段。
第一个阶段是“背”:知道有哪些命令,大概知道是干什么的。这个阶段的问题是,你在真实场景里想不起来用,或者用了不知道输出是什么意思。比如知道 df -h 是看磁盘的,但看到 Use% 是100%时不知道下一步该做什么。
第二个阶段是“用”:遇到具体问题能选出合适的命令组合。比如磁盘满了,你能想到先 df -h 看哪个分区满了,再 du -sh * 找到大文件目录,然后决定是清理日志还是扩容。这个阶段已经能够处理大部分日常运维工作了。
第三个阶段是“懂”:理解命令背后的原理,知道为什么这个命令能这样用。比如 ping 用的是ICMP协议,telnet 测试的是TCP端口连通性,curl 走的是应用层HTTP协议。理解了这三者的区别,你才能真正明白为什么 ping 通不代表端口通,为什么 curl 能测接口而 telnet 测不了。到了这个阶段,排查问题就不再是靠猜了,而是有清晰的逻辑链条。
这篇文章的内容,会尽力帮你从“背”走到“用”,关键的原理部分带着你走到“懂”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统状态与资源排查:业务卡了、断了、慢了,先看哪里
业务出问题,第一件事不是看代码,而是先看系统资源。很多时候,代码没问题,是系统资源扛不住了。这里我总结了一套排查路径,可以当成肌肉记忆来练。
2.1 第一梯队命令:top、free、df、ps,先定位是CPU、内存还是磁盘
场景:业务响应变慢,用户开始吐槽。
我一般习惯的第一条命令是 top。它能实时显示CPU占用、内存占用、负载均值,以及每个进程的资源使用情况。进入 top 界面后,最需要关注的是第三行的 %Cpu(s):如果 us(用户态)占比高,说明业务进程在大量消耗CPU;如果 wa(等待I/O)占比高,说明磁盘读写成了瓶颈。另外按 P 键可以按CPU使用率排序,按 M 键按内存排序,这个细节很实用,很多新手不知道。
接着看内存,用 free -h。注意看 available 这一列,它才是真正可用的内存,而不是只看 free 列。因为Linux会拿空闲内存做缓存(buff/cache),这部分在系统需要时是可以释放的。跟Windows的思维不一样,Linux内存占用率高不一定就是内存不够,很多情况下是缓存策略在起作用。如果 available 已经很小,同时 top 里看到大量进程在等待内存,那就说明内存确实紧张了。
再看磁盘,用 df -h。重点看 Use% 达到100%或接近100%的分区。根分区满了会导致很多服务写不了日志、起不了进程,表现可能比CPU跑满更隐蔽。如果确认满了,下一步用 du -sh /var/log/* 这种命令逐级往下找,定位大目录和大文件。我在实际业务里遇到过几次服务“假死”,最后排查下来都是 / 分区写满了,日志文件把系统盘撑爆了。
最后是 ps,看进程状态。比如 ps -ef | grep java 可以看Java进程是否存在,ps aux --sort=-%cpu | head -10 可以看CPU占用最高的前10个进程。注意 ps -ef 和 ps aux 的差异:前者关注进程树和父子关系,后者关注资源占用,两个场景不一样,别搞混了。
2.2 网络链路的排查思路:ping、telnet、ss、curl 的组合用法
网络问题是最容易让人一头雾水的。这里我分享一套自己的排查套路,可以按顺序走,能少走弯路。
第一步,先看本机服务是否在监听。比如你访问 http://10.0.0.5:8080 不通,先上10.0.0.5这台机器上执行 ss -lntp | grep 8080,看看8080端口有没有被监听。-l 表示只显示监听中的端口,-n 表示不解析服务名直接显示端口号,-t 表示TCP,-p 显示对应的进程信息。这一条命令下来,你能确认三件事:端口有没有监听、监听在哪个IP上、是哪个进程在监听。很多服务起不来的情况,都是卡在这一步——要么端口没监听成功,要么监听在 127.0.0.1 上而外部访问不了。
第二步,本机确认没问题后,再从另一台机器测试TCP连通性。最经典的是 telnet 10.0.0.5 8080。如果端口通,会显示 Connected to 并进入一个空界面;如果不通,会提示 Connection refused 或直接超时。telnet 虽然老,但在这个场景下依然非常高效,几乎是运维排查网络的第一工具。
第三步,用 ping 测基础网络连通性。这里要理解一个关键区别:ping 通只能说明ICMP协议能通,不能说明业务端口是通的。反过来说,ping 不通也不能直接断定业务一定不通,因为有些防火墙策略会禁止ICMP但不影响TCP业务。所以正确的方式是:先用 ping 判断链路层通不通,再用 telnet 判断目标端口通不通,两个工具配合着用。
第四步,如果涉及HTTP接口,直接上 curl。curl -v http://10.0.0.5:8080/health 不仅能看到返回内容,-v 模式还会输出整个HTTP请求和响应头、DNS解析过程、连接建立过程。有一次我排查一个接口偶发超时的场景,就是用 curl -w "%{time_connect} %{time_starttransfer}" 来区分是TCP建连慢还是服务处理慢,最终定位到是服务端线程池耗尽,而不是网络原因。
2.3 排查案例:服务“假死”如何一步步定位
分享一个真实经历。某天业务方反馈,一个内部管理系统的页面一直转圈,浏览器控制台看到接口超时。
我先在服务器上执行了 top,发现CPU和内存都不高。然后 df -h,磁盘也正常。用 ss -lntp 检查端口,监听也正常。这时候问题就诡异了——系统资源正常、端口正常,但业务就是响应慢。
接下来我用了 curl -w 系列参数做分段测时,发现 time_connect(TCP建连时间)正常,但 time_starttransfer(开始传输时间)高达十几秒。这说明TCP连接能建立,但服务端迟迟不返回数据,瓶颈在应用层。
于是回到进程上深挖。用 top -Hp <pid> 看这个进程的所有线程,发现有一批线程CPU占用很高,而且线程名都带着相同的线程池前缀。再看业务日志,发现大量线程阻塞在数据库连接池获取连接的地方。最终定位到是数据库连接池被打满,SQL出现了慢查询,导致线程全部卡在等待连接上。
这个案例里,如果不懂命令的分层逻辑,很容易在第1、2步就放弃或者反复重启服务。但掌握了命令之间的配合,排查链路就可以做到“从资源到端口、从建连到应用”,一步步逼近根因。
3. 服务部署与软件安装:从零搭起一套业务环境
业务要跑起来,部署是基本功。这里把部署过程中的高频命令和注意事项过一遍,很多细节是网上教程不会写的。
3.1 用户与权限:创建业务用户、sudo授权、umask
很多新手在服务器上干活,上来就是 root 一把梭。平时自己练没问题,到了生产环境这是大忌。合理的做法是创建一个业务用户,只授予必要的权限。
创建用户的命令是 useradd,比如 useradd -m -s /bin/bash appuser。-m 是同时创建家目录,-s 指定登录shell。然后设置密码:passwd appuser。如果想让这个用户能执行管理员命令,用 visudo 编辑sudoers文件,加上一行 appuser ALL=(ALL) ALL,或者更严格的 appuser ALL=(ALL) NOPASSWD: /usr/bin/systemctl,只允许它执行systemctl命令而不需要输入密码。
这里还要提一个 umask 的概念。新建文件或目录时的默认权限由 umask 决定。一般用户是 0022,所以新建文件是 644(rw-r--r--),目录是 755(rwxr-xr-x)。如果多个人协作同一个环境,需要共享文件,可以把 umask 改成 0002,让同组用户有写权限。我曾经遇到过业务之间互相读不了日志的情况,排查下来就是 umask 设置太严格,新生成的日志文件其他组的人看不了。
3.2 包管理与容器化:yum/apt、docker、containerd
装软件是另一个高频操作。CentOS/RHEL系列用 yum,Ubuntu/Debian系列用 apt。命令本身不难,关键是要搞清楚它们的工作原理:它们都是从软件仓库里下载软件包并自动处理依赖关系。
日常用的最多的几个:yum install -y nginx、yum update -y、yum remove -y。但这里有个非常实际的坑:默认源在国外,在国内服务器上装软件经常慢到怀疑人生。解决办法是配置国内镜像源,比如阿里云、清华源的镜像站点,把 /etc/yum.repos.d/ 里的 baseurl 替换成镜像地址。同样的道理,Python的pip也要配置国内镜像,比如 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名,速度能提升好几个量级。
容器化部署现在已经是业务标配了。安装Docker用官方脚本或者yum装 docker-ce 都可以。装完之后,docker ps 看运行中的容器,docker logs -f <容器名> 看日志,docker exec -it <容器名> bash 进容器。如果你用的Kubernetes集群,那还会接触 containerd。要注意的是,K8s从1.24开始默认用containerd作为运行时,跟Docker的体验有些区别。containerd的命令是 ctr,但K8s场景下更多还是用 crictl 来查看容器和镜像:crictl ps、crictl logs、crictl images。我见过不少人把 ctr 和 crictl 搞混,实际项目里看K8s节点的容器状态,用 crictl 更贴近K8s的视角。
3.3 中间件与Web部署:Nginx、Redis、Python(含国内镜像注意点)
常见业务技术栈里面,Nginx、Redis、Python这三样部署频率很高。
Nginx部署,yum install nginx 之后,主要工作都在改配置文件 /etc/nginx/nginx.conf 和 /etc/nginx/conf.d/ 下的站点配置。改完配置先执行 nginx -t 做语法检查,确认没问题再 systemctl reload nginx。这个 nginx -t 是必须养成的习惯,我见过太多次直接 restart 因为配置文件写错导致服务起不来的情况。改前端页面、反向代理、静态资源路径,都在这个环节里。
Redis部署,装完之后第一件事就是改配置:bind 改成实际业务需要的IP,protected-mode 和密码一定要设好。默认配置下Redis监听在 127.0.0.1,如果图省事直接改成 0.0.0.0 又没有密码,那基本等于裸奔,扫描到就会被入侵。Redis的命令本身也属于高频操作:redis-cli 进去后,INFO 看运行信息,KEYS * 看所有key(生产环境慎用,量大时阻塞),TTL key 看过期时间,DEL key 删key,EXPIRE key 秒 设置过期时间。
Python部署,最大的坑是版本和依赖隔离。尽量不要用系统自带的Python直接装包,建议用 python3 -m venv 创建虚拟环境。每个项目一个虚拟环境,依赖互不干扰。装包的时候配合国内镜像源,安装速度会快很多。另外注意有些Linux发行版自带的是Python 3.6,但业务代码可能要求3.9+,那么就需要自行编译安装或者用第三方源。自己编译Python的时候,一定要先装好依赖包,比如 yum install -y gcc openssl-devel bzip2-devel libffi-devel,否则编译到一半报错很崩溃。
3.4 文件传输:scp与rsync的实践
服务器之间传文件是日常操作。最基础的是 scp,用法跟 cp 类似,只是加了一个远程主机地址。比如:
bash复制scp /data/app.jar root@10.0.0.6:/data/deploy/
这条命令把本机 /data/app.jar 传到远程服务器的 /data/deploy/ 目录。反向拉取文件是把本地路径和远程路径对调:
bash复制scp root@10.0.0.6:/data/logs/app.log /tmp/
scp 的几个常用参数:-r 递归复制目录,-P 指定端口(注意是大写P,和 ssh 的一样),-C 开启压缩。如果传大文件或者大量小文件,推荐用 rsync,它支持断点续传、增量传输、差分同步,比 scp 更适合大数据量场景:
bash复制rsync -avzP --progress /data/ root@10.0.0.6:/backup/
-a 是归档模式保持权限和时间戳,-v 显示过程,-z 开启压缩传输,-P 组合了进度显示和断点续传。这个命令在实际业务里同步上线包非常香。另外还有个 zip 命令,用于压缩下载或归档文件,zip -r archive.zip /data/logs/,解压用 unzip archive.zip。如果在Windows和Linux之间来回传文件,zip 格式最不容易出编码和换行问题。
4. 日志分析与数据提取:一条命令搞定业务报表和故障复盘
日志是业务系统的“黑匣子”。大部分故障的根因,最后都是靠日志定位的。这里讲的全是高频使用,照着练就能上手。
4.1 文本处理三板斧:grep、awk、sed
grep 是过滤,awk 是取列,sed 是替换和编辑。三者配合使用,能覆盖绝大部分日志处理需求。
grep 最常用的就是按关键字过滤。比如 grep "ERROR" app.log,但实际业务里一般要加更多条件:
bash复制grep "2025-03-10 14:" app.log | grep "ERROR" | grep "订单号12345"
注意管道符 | 的作用:把前一个命令的输出作为后一个命令的输入。这就像流水的传送带,每一环只负责一道工序。
grep -E 支持扩展正则,比如 grep -E "ERROR|Exception" app.log 能同时匹配多个关键字。grep -c 只输出匹配的行数,用来快速统计。grep -v 是反向匹配,剔除某些行。
awk 最常干的事情是取列。日志里如果用空格或制表符分隔字段,awk '{print $1, $4}' 就能取出第1列和第4列。比如一行访问日志是 192.168.1.1 - - [10/Mar/2025:14:30:22] "GET /api/order HTTP/1.1" 200 531,用 awk '{print $1}' 取IP,用 awk '{print $NF}' 取最后一列。awk 还支持条件过滤和统计,比如:
bash复制awk '$9 == 500 {print $1}' access.log | sort | uniq -c
这条命令把返回码是500的请求IP提取出来,统计每个IP的500错误次数。
sed 最常用的是全局替换。比如:
bash复制sed -i 's/old_host/new_host/g' config.properties
-i 代表直接修改文件,s 是替换命令,g 是全局替换。注意 -i 直接改文件,执行前最好先备份。另一个常用场景是删除指定行:sed -i '/^#/d' config.conf 删除所有以#开头(注释)的行。写配置、改脚本时这个命令很实用。
4.2 日志分析的常用管道组合:sort、uniq、wc、tail 的组合用法
除了三板斧,还有几个配套选手。tail 看文件尾部,tail -f 实时跟踪文件新增内容,是排查线上问题时的“直播”工具。head 看文件头部。wc -l 统计行数。sort 排序,uniq -c 去重并统计出现次数。
最经典的分析需求是:统计访问量最高的IP Top10。
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
这条管道链拆开看:awk '{print $1}' 取出第一列的IP;sort 排序,让相同IP排在一起;uniq -c 统计每个IP出现的次数;sort -rn 按数字从大到小排序;head -10 取前10行。
另一个高频需求是:统计某个接口的调用量和平均响应时间。这就要用到 awk 的累加功能:
bash复制tail -10000 access.log | grep "/api/order" | awk '{sum += $NF} END {print "总次数:", NR, "平均耗时:", sum/NR}'
$NF 表示最后一列,这里假设最后一列是响应时间。NR 是awk内置变量,表示处理的总行数。
tail -f 配合 grep 也非常常用。比如:
bash复制tail -f app.log | grep "ERROR"
只实时显示新增的ERROR日志,避免刷屏。这个在发布上线时盯日志特别好用。
4.3 用 find 精确查找业务文件
定位文件是另一个高频需求。find 的威力被很多人低估了。实际上它不只是“按文件名找文件”,还能按时间、大小、类型、权限过滤。
按文件名找:
bash复制find /data -name "*.log"
按大小找大文件:
bash复制find /data -size +500M
按修改时间找最近7天内改过的文件:
bash复制find /data -mtime -7
按目录找:
bash复制find / -type d -name "conf"
找到一个文件后,还可以直接执行清理动作:
bash复制find /data/logs -name "*.log" -mtime +30 -exec rm -rf {} \;
这条命令把 /data/logs 下30天前的 .log 文件删除。-exec 表示对每个匹配到的文件执行后续命令,{} 是文件路径的占位符,\; 是结束符。这个命令做日志归档清理特别有用,但建议先不加 -exec 跑一遍看看匹配结果,确认无误再加删除动作。
还有一个常用组合是 find 配合文件大小排查磁盘占用。比如根目录快满了,一级一级找太慢,直接:
bash复制find / -xdev -type f -size +1G -exec ls -lh {} \;
-xdev 限定不跨文件系统,避免去扫描 /proc、/sys 这些虚拟目录,这样查找效率会高很多。
5. 开发协作与日常小工具:vim、git、history 与命令类型的判断
除了运维视角,Linux也是日常开发协作的日常操作环境。这块看似简单,但细节不少,踩坑也蛮多的。
5.1 vim 到底要学到什么程度
很多新手一听说用vim编辑文件就头疼。我的建议是:不用把vim学成IDE,但基础操作必须熟练,因为很多时候你只有命令行界面可用。
必会的vim操作就这些:vim 文件名 打开文件;按 i 进入插入模式;编辑完按 ESC 退出插入模式;输入 :wq 保存退出;输入 :q! 不保存强制退出;按 / 输入关键字回车可以搜索;搜索后按 n 跳转到下一个匹配。会了这些,日常改配置就够了。
进阶一点的:dd 删除当前行,yy 复制当前行,p 粘贴,G 跳到最后一行,gg 跳到第一行,:set nu 显示行号。这些操作熟练之后,改配置文件的速度会快很多。
我给团队定的标准是:一个合格的业务同学至少要做到在10秒内完成“打开文件、跳转到指定行、修改、保存”全套操作。因为线上问题排查时,可能就靠这几秒抢时间。
5.2 git 命令的日常使用姿势
现在代码管理和发布基本都是git。日常用得最多的命令其实就几个:git status 看当前工作区状态;git pull 拉取最新代码;git add 暂存文件;git commit -m 提交代码;git push 推送代码。
但业务环境里要注意几个容易出错的地方。
一个是大文件提交:有些人习惯用 git add . 把整个目录都加上去,结果把日志、打包产物、数据库备份这些大文件全提交进仓库了,导致仓库越来越大。正确做法是在项目根目录维护 .gitignore 文件,把不需要提交的路径写进去,比如 /logs/、*.log、target/、*.class。这属于“前人栽树后人乘凉”的事,一定要尽早配。
另一个是合并冲突:git merge 出现冲突时,不要慌。先看冲突文件,搜 <<<<<<< HEAD 标记,手动把冲突部分改成想要的结果,然后 git add 对应文件再重新 git commit。多来几次就习惯了。
还有个实用技巧是回退版本。如果提交错了代码想回退,用 git log --oneline 查看提交历史,然后 git reset --hard <commit_id> 回退到指定版本。但注意 --hard 会丢失工作区未提交的修改,生产环境慎用。安全做法是先 git stash 暂存当前改动,回退完再 git stash pop 恢复。
5.3 type、command -v、history:命令本身的管理
业务排查中,还会遇到“命令都没了”的情况。比如刚登录服务器,发现 top 提示 command not found。这时候需要理解命令的类型和路径查找机制。
用 type 可以查看一个命令是哪种类型:
bash复制type cd
# cd is a shell builtin
type grep
# grep is /usr/bin/grep
输出结果显示 cd 是shell内建命令,grep 是外部二进制文件。这个区别会导致一个常见问题:你写脚本时,在脚本里改了PATH环境变量,然后调用 grep,如果PATH里找不到 /usr/bin,就会报错。解决方法是脚本开头加 #!/bin/bash 且明确 export PATH=/usr/local/bin:/usr/bin:/bin。
用 command -v 可以定位命令的实际路径:
bash复制command -v python3
这个在排查“两个Python版本搞混”的场景特别有用。比如你明明装了Python 3.10,但运行 python3 还是3.6,很可能是因为PATH里面 /usr/bin 排在 /usr/local/bin 前面。用 command -v python3 一看路径就知道原因了。
还有一个命令是 history,查看当前用户的历史命令记录。history 命令有几个实用技巧:输入 !123 可以重新执行历史第123条命令;history -c 清空当前会话的历史(注意只清当前会话);Ctrl+R 反向搜索历史命令,输入关键字就能补全。我日常用得最多的是 Ctrl+R,比翻历史记录高效太多。
另外还要提一下 cd 命令的隐藏技巧。cd 回到用户主目录,cd - 返回上一次所在的目录,cd ~ 也是回到主目录。如果你在多个路径之间来回操作,cd - 能省很多事。对应到Xshell之类的终端工具,cd - 配合 pwd 查看当前路径,基本就能避免“我到底在哪”的困惑。
6. 常见问题与排查技巧实录
最后这部分,我把实际业务中遇到的典型问题做个整理,很多是文档里查不到但踩过坑才知道的细节。
6.1 命令不存在、权限不够、磁盘满了的典型处理
“命令不存在”是最常见的新手问题。核心原因有三个:软件没安装、PATH路径没包含、当前用户没有执行权限。比如执行 docker 提示命令不存在,很可能docker确实没装,也可能是当前用户不在docker用户组里。useradd -G docker appuser 把用户加入docker组,重新登录即可。
“权限不够”的表现是 Permission denied。处理思路是先 ls -l 看文件属主和权限位,再判断当前用户是否属于对应组。涉及执行脚本时,需要 chmod +x 添加执行权限。涉及目录操作时,需要 x 权限才能进入目录,不能只看 r 权限。
“磁盘满了”导致服务异常,这个前面提过。处理流程再总结一遍:df -h 找到满的分区,du -sh /* 2>/dev/null 找大目录,一级一级往下定位,最后确认是大日志文件还是临时文件,清理或迁移。注意清理前确认文件是否正在被进程写入,如果被占用,即使删了文件,空间也可能不会立即释放。这时候用 lsof | grep deleted 找到占用进程,重启或重载该进程后,空间才会真正释放。
6.2 常见问题速查表
| 现象 | 可能原因 | 排查命令 | 处理思路 |
|---|---|---|---|
| 服务响应慢 | CPU/内存/磁盘瓶颈 | top、free -h、df -h |
定位资源瓶颈后扩容或优化 |
| 端口不通 | 服务没起/防火墙拦了 | ss -lntp、telnet |
确认监听状态,再检查防火墙规则 |
| 命令找不到 | 软件未装/PATH不符 | type、command -v |
安装软件或修正PATH |
| 接口偶发超时 | 连接池满/慢SQL | curl -w、top -Hp、业务日志 |
定位是建连慢还是应用处理慢 |
| 本地服务外部访问不了 | 监听在127.0.0.1 | ss -lntp |
修改绑定IP为 0.0.0.0 或业务网卡IP |
| 磁盘空间不释放 | 删了文件但进程仍占用 | lsof | grep deleted |
重启或重载对应进程 |
| 安装软件很慢 | 默认源在国外 | 修改 /etc/yum.repos.d/ |
换成国内镜像源 |
6.3 我的几个避坑经验
第一个经验:在生产环境执行命令前,先想清楚这条命令的影响范围。 特别是 rm -rf、cp、mv、chmod、chown 这类高危命令,执行前最好先 ls 确认路径,或者在前面加 echo 模拟一下。我见过有人想清理日志目录,结果 rm -rf /var/log / 中间多打了一个空格,直接把根目录删了。这种事故不是危言耸听,是真真切切发生过的。
第二个经验:同一个业务问题,工具链往往比单条命令更可靠。 排查网络问题时,不要只靠一个 ping 就下结论。ping、telnet、curl、ss 各有各的视角,结合使用才能得出准确判断。排查性能问题时,top 找到可疑进程,再用 top -Hp 下钻到线程,最后配合日志确认,这是标准的操作路径。
第三个经验:养成“先备份、再操作”的习惯。 改配置文件前先 cp 一份备份,比如 cp nginx.conf nginx.conf.bak,然后再改。改完验证没问题后,再把备份删掉。这个习惯在关键时刻能救命。
第四个经验:学会用 history 复盘自己的操作。 有时候排查完问题,回头看看 history,你会发现自己在某条命令上绕了很长时间。复盘能帮你优化操作习惯,下次遇到类似问题会更快。
最后再分享一个小技巧
如果系统装了Python 3,可以把它当计算器用,快速算一些数值:
bash复制python3 -c "print(1024 * 1024 * 500)"
比如计算500MB等于多少字节,不用再翻计算器。命令如下:
bash复制python3 -c "print(500 * 1024 * 1024)"
# 524288000
这种一行式的Python在业务运维里很加分。
另外,Linux下的 for 循环配合命令可以批量做很多事情。比如批量重命名一批文件:
bash复制for f in *.log; do mv "$f" "${f%.log}_$(date +%Y%m%d).log"; done
这条命令把所有 .log 文件重命名成带日期的文件名,在日志归档场景里非常实用。看懂这条命令,说明你已经初步掌握了shell脚本的基本语法,那么Linux命令这块的基本功就算是过关了。
