ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux常用命令实战指南:从文件操作到系统排障

2026/9/26 4:48:49 拓冰建站 浏览量
Linux常用命令实战指南:从文件操作到系统排障 我干这行快十年了从最早只会双击终端、连目录都切不明白到现在能闭着眼处理日志、排查进程、写点自动化脚本Linux命令这条路几乎是每个技术人都绕不过去的一段。哪怕现在图形界面越来越友好服务器上、嵌入式板子上、云原生环境里你依然得靠命令行完成绝大多数工作。所以我一直觉得Linux常用指令不是“要不要学”的问题而是“先学哪些、怎么学最有效率”的问题。这篇总结我把自己平时用得最多、面试也常问的那批命令串了一遍文件操作、文本处理、进程系统、权限用户、网络排查、管道组合最后还有几个我只在实际干活中踩过的坑。适合刚入门想系统过一遍的同学也适合基础不牢、想查漏补缺的人。我会尽量把命令放在真实场景里去讲不搞那种“一条命令配一段解释”的枯燥罗列而是告诉你什么时候用、为什么这么用、容易错在哪。1. 为什么Linux命令永远值得学从“会用”到“会查”1.1 命令的本质一切皆文件命令也是程序我教过不少新人发现大家卡住的第一个点不是命令记不住而是不理解命令到底是什么。其实Linux里的命令大多就是一个个可执行文件很多都在/bin、/usr/bin这类目录下。你敲一个lsshell做的事并不神秘——它去PATH环境变量指定的路径里找到名为ls的文件然后把它作为程序跑起来。理解了这一点很多迷惑会迎刃而解。比如用which ls你会看到/usr/bin/ls用type ls系统会告诉你这是个外部命令还是个shell内建命令。cd这种就是内建的因为它要改变当前shell自己的工作状态只有shell自己才能做到所以没有独立的cd程序文件。再往深一点说Linux的设计哲学就是“一切皆文件”。普通文件是文件目录是文件磁盘设备是文件甚至进程信息都通过/proc目录暴露成文件。所以你在Linux下处理“设备”“系统状态”时用的命令和操作文件的命令往往是同一套思路。想明白了这点你再看df -h、free -h这些命令就不会觉得它们是独立的黑魔法而是“读取某些系统文件并格式化输出”的工具。1.2 学会“查”比“背”更重要help、man、type、apropos很多人学Linux最大的误区是试图把命令全背下来。真没必要。我面试的时候基本不考具体参数就问一个问题给你一个从没见过的命令你怎么知道它怎么用能答出命令 --help和man 命令的人基础一定不会差。--help是快速入口适合看常用参数man是完整手册适合系统学习。不过man页面很长新手常被吓到。我建议你重点看SYNOPSIS和EXAMPLES两段前者告诉你命令长什么样后者直接给你能跑的实例。如果连命令叫什么都不知道只知道想干什么可以用apropos 关键词去搜它会在手册页的描述里模糊搜索。还有一个实用习惯遇到容器里精简到连man都没有的情况也不慌先用type判断是不是内建命令再想想这个命令通常属于哪个包用包管理器去查。这种“查”的能力比记住一百条命令都管用。Linux发行版那么多、命令版本那么杂你今天背下来的参数明天可能就变了但“带着问题去查手册”这个能力永远不过时。2. 高频命令实战拆解从文件操作到系统体检2.1 文件与目录操作ls、cd、cp、mv、rm、find文件操作命令每天都要用但很多人的用法相当粗糙。ls别只记ls -l最好把常用参数一起记住-a看隐藏文件-h让大小显示成人话-t按时间排序-S按大小排序。我排查日志目录时经常用ls -lht一眼就能看到哪些日志文件最近在疯狂增长。cd看起来简单但cd -跳回上一个目录这个技巧很实用。比如你在很深的目录里操作临时去/etc看一眼配置想回来继续干活一个cd -就搞定不用重新敲长路径。cp和mv要注意参数。复制目录必须加-r这是新人最常见的报错。我习惯用cp -a因为-a等价于-dR --preserveall能把权限、时间戳、软链接都保留下来适合做目录备份。mv在同文件系统内只是改个名字跨文件系统则要复制再删除所以移动大文件时可能耗时很长属正常。rm值得单独提。rm -rf是危险操作我自己的习惯是先pwd确认当前路径再ls看一眼要删的东西最后才执行。生产环境上我甚至会给rm设置别名变成rm -i删除前强制确认这在下一章讲配置时会提到。另外rm删不掉空目录时要改用rmdir虽然用得少但报错时至少知道原因。find是文件操作里的高级工具了它是真·查找命令。按名字找find /var/log -name *.log按类型找find . -type d按时间找find . -mtime 7表示七天内没修改过的文件按大小找find . -size 100M。配合-delete可以直接删配合-exec或管道xargs可以做批量处理。新手容易忽略的是文件名里可能带空格直接find ... | xargs rm会出事安全用法是find ... -print0 | xargs -0。这个坑我在4.3节还会展开。2.2 文本处理三件套cat、less、tail、grep、sed、awk日志、配置、脚本输出本质都是文本。Linux下处理文本的效率决定了你的日常工作效率。小文件用cat看没问题大文件千万别用直接less。less不加载整个文件到内存还能按/搜索关键字按n跳到下一个匹配按G去末尾、gg去开头。查日志最常用的是tail -f实时跟随文件尾部能一边让服务跑一边看日志输出。head -n 20则看文件开头适合瞄一眼配置头。grep是日志排查的核心。常用参数-i忽略大小写-r递归目录-n显示行号-v反向匹配-E支持扩展正则。比如我要在应用日志里找所有ERROR但不包含“timeout”的行可以写grep -n ERROR app.log | grep -v timeout。再比如统计某种错误出现了多少次直接grep -c ERROR app.log就行。sed和awk是两个深水区。sed最常用的场景是替换sed -i s/old/new/g file.conf-i表示直接修改文件不加会打印到屏幕。注意-i在不同Linux发行版和macOS上的写法有差异用-i.bak备份更稳妥。awk最常用的是按列提取awk {print $1} file默认按空格或Tab切分列$0是整行$1是第一列。配合条件、循环和内置变量能写小脚本比如统计某个端口的连接数、算日志里的平均响应时间都能用awk几行搞定。我举个实战例子。假设Nginx访问日志里要统计每种HTTP状态码的数量很多人会一个个数或者写程序。一行命令就能做awk {print $9} access.log | sort | uniq -c$9是状态码列sort排序uniq -c统计连续重复次数。输出结果类似123 200、5 500问题直接定位。这就是命令组合的威力。2.3 进程与系统资源ps、top、free、df、du、kill某天你的服务突然变慢第一反应应该去看进程和系统资源。看进程首选ps -ef每一列分别是UID、PID、PPID、CPU占用时间、命令等。常用组合ps aux按BSD风格输出其中%CPU和%MEM比较直观。我记得的最实用的是ps -ef | grep 关键词找进程但注意grep会匹配到自己那一行通常配合grep -v grep过滤掉。动态监控用top。进入top后按P按CPU排序按M按内存排序。系统卡的时候我一般先按P看哪个进程吃CPU再按M看谁吃内存。top里还能看平均负载load average一般三个数分别对应1分钟、5分钟、15分钟如果三个数都很高说明系统持续过载。看内存用free -h。很多人看到free显示used很高就慌其实Linux会尽量把空闲内存用作缓存这部分在buff/cache里系统需要时会自动释放。真正该关注的是available这一列它才是“还能用的内存”的靠谱指标。看磁盘df -h看整个文件系统使用率du -sh看某个目录总大小du -sh *看当前目录下每个子目录或文件的大小。日志磁盘满是很常见的事故我排障时先df -h再du -sh /var/log/*分分钟就能锁定谁在占空间。最后是kill。默认kill PID是发SIGTERM信号相当于请求进程优雅退出。如果没反应再用kill -9 PID强制杀掉。很多人上来就是kill -9其实可能让程序来不及保存状态。另外kill -9也杀不掉D状态不可中断睡眠的进程那种要等它自己恢复或者重启系统。杀错进程属于高危操作执行前一定再确认一遍PID。3. 权限、用户与网络运维绕不开的三个坎3.1 权限模型与chmod/chown理解rwx别随手777Linux权限模型用三个字符表示rwx分别对应读、写、执行按用户、用户组、其他人三组排列。ls -l看到的第一列就是这些。文件里的r表示能看内容w表示能改内容x表示能当程序执行目录里的r表示能列出目录内容w表示能增删目录里的文件x表示能进入目录。记住这个区分很多权限问题就不会犯糊涂。数字表示法r4、w2、x1累加后得到权限值。chmod 755就是所有者rwx、组rx、其他人rx。我的默认习惯是脚本给755普通配置文件给644私钥给600。用到chmod -R批量修改时务必谨慎会把目录下所有文件都改掉可能破坏原有权限设置。chown修改归属chown user:group file。比如网站目录要交给nginx用户接管chown -R nginx:nginx /var/www/html。有时候你明明有权限却写不了文件很可能就是属主不对或者父目录权限不对别急着查ACL先看ls -ld整个路径每一层的权限。特别强调不要因为图省事就chmod -R 777。777意味着任何人可读可写可执行在公网服务器上等于敞开大门。我见过有人这样改完网站目录后被上传了木马。权限宁可收紧发现问题再逐个放这才是运维该有的心态。3.2 用户与组管理useradd、usermod、passwd、id创建用户是服务器日常操作之一。基础命令是useradd -m -s /bin/bash zhangsan-m创建家目录-s指定登录shell。接着用passwd zhangsan设置密码。如果以后要给这个用户sudo权限注意发行版差异Debian/Ubuntu系通常把用户加进sudo组RHEL/CentOS系通常是wheel组命令是usermod -aG sudo zhangsan或usermod -aG wheel zhangsan-a表示追加忘加-a会把用户从其他附属组里清掉。查看用户信息用id zhangsan会返回UID、GID和所属组列表groups直接看用户所在组。删除用户用userdel -r zhangsan-r连家目录和邮件池一起删。生产环境删用户前我会先看这个用户的进程和文件别把别人的服务给误删了。还有个容易踩的命令su和sudo不一样。su切换用户需要目标用户密码sudo是用自己的密码提权执行单条命令。日常操作尽量用sudo而不是切root因为sudo有审计日志出了事能查到是谁在什么时候执行了什么命令。配置sudo权限时visudo编辑/etc/sudoers不要直接vim改因为visudo会检查语法错误避免你把自己锁在root权限门外。3.3 网络排查工具ping、curl、ss、tcpdump服务连不上时网络排查要有一条清晰的链路。先ping目标IP看基础连通性。但记住ping通只能说明网络层通不代表端口通。接着要测端口和协议比如HTTP服务用curl最直接。curl -I https://example.com看响应头curl -v https://example.com能看到完整握手过程和失败位置是我排查接口问题最常用的命令。curl还可以带-X POST、-H加请求头、-d带数据来做接口测试很多研发甚至用curl完成日常接口联调。看本机监听端口用ss -tlnp。这个命令比老掉牙的netstat更高效-t看TCP、-l看监听、-n不做域名反解、-p显示进程。比如我想知道8080端口被谁占了ss -tlnp | grep 8080直接看到PID和进程名不用再去猜。这也是面试常点的“查端口占用”命令。DNS问题容易迷惑人。域名解析不对时先nslookup或dig查解析记录再看系统配置文件里的DNS服务器。getent hosts 域名可以判断系统实际拿到的是哪个IP因为有些程序不走/etc/hosts之外的标准解析流程。真到了需要看网络包内容的地步才上tcpdump。抓包命令要写明网卡和过滤条件例如tcpdump -i eth0 port 80不然流量一大场面容易失控。抓包文件用tcpdump -w /tmp/a.pcap保存后拉到本地用图形工具分析更舒服。4. 实用技巧与避坑实录命令组合、脚本化、安全习惯4.1 管道、xargs与命令替换把单条命令变成工作流单条命令能力有限把它们串起来才是真本事。管道的核心是“把前一个命令的标准输出作为后一个命令的标准输入”。比如ps -ef | grep java、tail -f access.log | grep ERROR都属于这种思路。xargs解决的是“把输出作为参数传给下一个命令”的问题。find . -name *.log -type f | xargs ls -lh就可以一次性查看所有匹配文件的大小。批量压缩日志find /var/log -name *.log -mtime 7 | xargs gzip管道里的文件名如果带空格xargs默认按空白切分就会出问题。安全写法是find /var/log -name *.log -mtime 7 -print0 | xargs -0 gzip-print0用空字符分隔xargs -0按空字符读取空格、换行都无所谓。命令替换也实用$(命令)可以把命令输出当成值用。比如删除三天前的备份文件我会先写好find /backup -name *.tar.gz -mtime 3 -delete或者用变量方式dir$(date %Y%m%d) mkdir -p /data/$dir这样每天备份目录都按日期命名。把常用的管道组合写成脚本比一条条手敲更省心也更不容易出错。4.2 别名、历史记录与shell配置把常用配置固化我到一个新环境干活前三分钟一定在配~/.bashrc。最基础的几行alias llls -l alias lals -a alias grepgrep --colorauto alias rmrm -i这里重点说rm别名。rm -i能逼你在删文件时确认一次虽然偶尔觉得烦但关键时刻能救命。配置文件改完后记得source ~/.bashrc让它立刻生效。history命令也值得养成习惯。上一条命令按↑或!!后缀是关键词就按CtrlR反向搜索。比如敲过一条很长的docker run命令下次只想输入docker然后按CtrlR就能翻到历史。默认history会保存最近几千条命令我还会在~/.bashrc里把HISTSIZE和HISTFILESIZE调大方便回溯操作记录。终端复用工具建议早点学。tmux或screen可以让你在一个SSH会话里开多个窗口断开重连后会话还在特别适合跑长任务。比如晚上挂着编译大项目第二天连上发现会话还活着。这类工具不是“必须会”但用了之后回不去。4.3 常见问题与排查技巧实录遇到这些坑别慌以下问题都是我在真实环境里碰到过的每个都吃过亏整理成速查。第一个坑文件名以-开头。你明明在目录下看到一个-abc.txt执行cat -abc.txt却报错因为命令把-abc解释成了选项。解决办法是用--明确结束选项或者给文件加路径cat ./-abc.txt。--在很多命令里通用比如rm -- -abc.txt。第二个坑grep搜不到内容但文件里明明有。常见原因有三个一是文件是二进制grep默认跳过加-a强制当作文本处理二是文件编码不是UTF-8内容里的中文可能搜不到用-a或者先iconv转码三是忘了加-r导致目录不递归。排查顺序就是先确认是文件还是目录再试-a最后看编码。第三个坑find加exec批量删除结果把要保留的文件也删了。比如find . -name *.log -exec rm {} \;看着没问题但如果当前目录下有个子目录里恰好有相同模式的其他文件就会误伤。我的习惯是先find不带-exec跑一遍确认列表里没有意外文件再加动作。批量改动前先打印检查这在工作上怎么强调都不过分。第四个坑kill -9杀不掉进程。前面提过D状态进程是无法被信号终止的通常因为进程在等待磁盘IO。这种情况下别反复kill先查ps -o stat看状态确认是D就检查底层存储比如磁盘是否卡死、NFS是否挂载异常。僵尸进程Z状态也不是kill能处理的它需要父进程调用wait回收你要找到父进程重建那个服务或者等父进程退出后让init接管。第五个坑权限明明正确还是“Permission denied”。这时要检查三件事目录路径上每一级是否有x权限是否命中ACL用getfacl file查看是不是SELinux拦截用ls -Z查看文件上下文。RHEL系服务器上SELinux导致的问题非常隐蔽系统日志里会有avc: denied字样先确认再处理。把setenforce 0当万能解药只能临时解决治标不治本。第六个坑du查看目录大小怎么看都只有几M但df显示磁盘已经满了。这多半是有文件被删除但还被进程占用空间没有真正释放。用lsof | grep deleted找出占用的进程重启或让进程重新打开文件就能释放。这个场景在删日志文件时经常出现很多运维老手也容易短路rm删了没反应结果是被Java进程占住了句柄。再补一个我个人的小习惯复杂命令第一次用之前先加echo干跑。比如一堆find和xargs组合把执行命令换成echo打印出来确认生成的命令行正确了再真的执行。这和写代码先跑单元测试一个道理。命令是利器也是凶器稳一手不丢人。工作这些年我最深的一个体会是Linux命令不是靠背会的是用会、查会、坑会的。命令背后对应的是一套“小工具组合”的哲学——每个命令做一件事然后通过管道、参数和脚本串起来完成复杂任务。你把文件、进程、权限、网络这几条主线理清了绝大多数日常场景都已经覆盖。剩下的边角料交给man和搜索引擎就够了。希望这篇总结能让你少走点我当年走过的弯路。