尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Linux常用命令系统整理:从文件操作到故障排查速查

发布时间:2026/9/29 7:08:55

资讯中心
01
ARTICLE

Linux常用命令系统整理:从文件操作到故障排查速查

Linux常用命令系统整理:从文件操作到故障排查速查
1. 先想清楚为什么Linux常用命令值得系统整理一遍我自己带过不少刚入行的朋友也帮运维同事排查过线上问题发现一个很普遍的现象大多数人学Linux命令的方式是遇到问题搜一条用完就忘。结果工作两三年能敲的命令还是那十几条一旦换到没图形界面的服务器上或者遇到需要多命令组合的场景立刻就卡住了。这篇内容就是把我这些年反复用到的Linux系统常用命令重新梳理一遍不是罗列手册而是讲清楚每条命令解决什么问题、什么场景下用它、以及组合起来怎么用。如果你是完全零基础、刚在虚拟机里装好Linux的新手这篇可以当作你的第一份命令地图如果你是有一定基础、想系统补齐短板的开发或运维这里面的组合技巧、排查思路和踩坑记录应该也能帮你省不少时间。Linux命令的数量确实吓人光/usr/bin目录下就能列出上千个可执行文件但真正常用的核心命令其实不超过六十条。我打算按使用频率场景来组织先讲文件和目录再讲文本处理然后是进程、系统状态、网络、压缩打包、软件管理最后落到用户管理和实际排查。整篇内容都基于主流发行版比如常见的服务器发行版的通用行为个别命令在不同发行版上参数略有差异的地方我会单独标出来。先说一个我自己的观点命令不是用来背的是用来建立肌肉记忆路径的。什么意思就是你看到一个问题脑子里应该自动跳出这个场景该用哪条命令的哪个参数而不是先想关键词再去搜。这种路径感只能靠理解命令的设计逻辑来建立光背参数表是背不出来的。提示本文所有命令默认在bash环境下演示普通用户执行管理类操作时记得加sudo文中不再逐一重复说明。1.1 命令的内存结构为什么有的命令记得牢有的记不住人的记忆有个特点零散信息很难留住成体系的东西才记得久。Linux命令其实本身就是成体系的只是很多人没意识到。举个例子ls、cd、pwd、mkdir、rmdir、rm、cp、mv、touch、file、stat这十一条命令全部围绕文件系统对象展开——查看、切换、创建、删除、复制、移动。当你把它们当成一组来记而不是十一条独立命令记忆负担一下子就降下来了。同理ps、top、kill、killall、pkill、jobs、bg、fg、nohup是一组进程生命周期命令grep、sed、awk、cut、sort、uniq、wc、tr是一组文本流水线命令。我建议你在整理笔记的时候也按这种语义分组来组织而不是按字母顺序。按字母顺序是字典按语义分组才是工具包。1.2 一个被严重低估的起点man和--help很多人跳过man直接上网搜其实这是效率最低的路径。man手册分章节第1章是用户命令第5章是文件格式第8章是系统管理命令。遇到不认识的命令先敲man 命令名如果太长用/关键词在手册里搜索按n跳下一个匹配按q退出。实在不想看长文档那就用它自带的--help速度更快cp --help ps --help我个人的习惯是第一次用不熟的参数用man只想快速回忆参数格式用--help排查具体错误信息才去搜。这个顺序能帮你节省大量时间而且不会被网上那些版本不一致的博客带偏。还有两个小工具值得提一下tldr简化版man给的是常用示例和cheat命令小抄。这两个不是系统自带的需要单独装但如果你经常忘记参数又想快速上手装一个tldr非常值。2. 文件与目录操作每天都要摸的基本功这一块是使用频率最高的我把它拆成导航查看、增删改、查找定位、权限管理四个部分来讲。别小看这些基础命令很多所谓的高级排查本质就是这几条命令加上管道组合出来的。2.1 导航与查看ls、cd、pwd、tree的正确打开方式pwd打印当前工作目录看起来很鸡肋但在写脚本时非常关键——脚本里如果用相对路径一旦没确认当前目录就可能操作错文件所以我在每个脚本开头都会加一句cd $(dirname $0)或明确用绝对路径。cd的常用变体要记住几个cd不带参数回到用户家目录cd -回到上一个目录这个我用得极多在两个目录之间来回切换非常香cd ..上一级cd ~用户名切到指定用户家目录。ls是参数最多的命令之一我把最常用的列个表方便对照参数组合作用典型场景ls -l长格式显示权限、属主、大小、时间看文件归谁、什么时候改的ls -lh长格式人类可读大小看日志大小、大文件ls -la显示所有文件含隐藏文件找.bashrc、.env这类配置ls -lt按修改时间排序最新在上找最近改动的文件ls -ltr时间倒序最旧在上排查最新那条日志ls -R递归列出子目录快速看目录结构ls -i显示inode号排查硬链接、磁盘空间异常有个坑要提醒ls -l显示的时间默认是修改时间mtime如果你要按访问时间或状态变更时间看得用ls -lu、ls -lc。另外目录里文件特别多的时候比如十万加ls输出会卡这时候用ls -f不排序直接列会快很多。tree命令能把目录结构用树形展示出来比ls -R直观但大多数精简系统不自带需要装。临时用的话可以用find . -print | sed -e s;[^/]*/;|____;g;s;____|; |;g凑合一下不过说实话装个tree更省事tree -L 2 -d # 只看两层目录 tree -a -I .git # 包含隐藏文件忽略.git目录2.2 创建、复制、移动、删除小心那条rm命令touch创建空文件或更新时间戳mkdir -p a/b/c一次性创建多级目录-p这个参数极常用不加的话父目录不存在会报错cp -r递归复制目录cp -a归档复制保留权限、属主、时间戳备份场景几乎都用这个。mv除了移动还能重命名这是Linux里改文件名的标准做法mv old.txt new.txt。批量改后缀名可以借个循环for f in *.txt; do mv $f ${f%.txt}.md; donerm我必须单独说因为它是Linux里最容易造成不可逆损失的命令。rm -rf一旦敲错基本没救。我的几条硬性习惯敲rm -rf之前先把命令敲完光标停在要删的路径上再回头检查一遍路径确认无误才回车尽量不用rm -rf /path/*这种通配先ls /path/*看一眼展开结果再删重要目录下操作可以先echo rm -rf /path确认要删的对象是哪些再把回显的命令粘出来执行能配别名就配把rm -i设为默认部分发行版默认就是这样至少每次删除会问你一下。注意rm -rf搭配变量使用尤其危险比如rm -rf $DIR/*如果$DIR为空命令会变成rm -rf /*。写脚本时务必加set -u或者写rm -rf ${DIR:?}/*这种保护写法。2.3 查找定位find与locate各管一摊find是按条件实时遍历目录树功能强但慢locate查的是预建索引数据库快但可能过时需要updatedb更新。日常找文件我大多用find因为条件灵活。几个我常用的find套路find /var/log -name *.log -size 100M # 找大于100M的日志 find . -type f -mtime -1 # 找一天内修改过的文件 find . -type d -name __pycache__ -exec rm -rf {} # 批量删缓存目录 find . -name *.conf -mtime 30 -delete # 找30天前的配置并删除 find . -type f -perm 644 # 找权限为644的文件 find . -user deploy -group www # 按属主属组找这里有个效率问题如果在根目录/下直接find会扫到/proc、/sys这些虚拟文件系统又慢又报错。加-xdev可以避免跨文件系统或者用-path排除find / -xdev -name nginx.conf 2/dev/nullwhich查命令的可执行文件路径whereis查命令的二进制、手册、源码位置type判断一个名字是别名、函数还是外部命令。排查为什么我的命令跟别人不一样时type -a 命令名能列出所有同名来源一眼看清是不是被shell函数或别名覆盖了。2.4 权限与属主chmod、chown、umaskchmod改权限符号法是u/g/o/a加/-/数字法是三位八进制。我建议新手尽量用符号法因为不容易错chmod ux script.sh给属主加执行权限chmod go-w file给属组和其他人去掉写权限。数字法在需要精确设置时更方便但记住4r, 2w, 1x相加就是权限值比如644、755、600。chown改属主属组chown user:group file递归用-R。这里有个容易踩的坑chown -R跟着符号链接会改到链接目标如果不希望跨过符号链接加-h。umask决定新建文件的默认权限。默认022意味着新建目录是755777减去022新建文件是644666减去022。要改默认行为可以临时umask 027长期生效就写进~/.bashrc或/etc/profile。提示Linux下目录的执行权限x很重要它决定你能不能进入这个目录而不是执行这个概念。看到某个目录权限是644却进不去就是缺了x。这个知识点在很多面试题里都会考。3. 文本处理三剑客grep、sed、awk加上管道才完整文本处理是我认为最能体现Linux能力的部分。单条命令谁都会敲真正拉开差距的是把它们用管道串成一条流水线一条命令完成过去要写脚本才能干的事。3.1 grep不只是搜索还是过滤入口grep的基础用法是grep 模式 文件。常用参数我列几个-i忽略大小写-v反向匹配-n显示行号-r递归目录-E用扩展正则等价于egrep-F按字面量匹配不做正则-c只数匹配行数-l只列出匹配的文件名-A n / -B n / -C n显示匹配行前后若干行排查日志时特别有用。日志排查里我最常用的组合grep -n -C 3 ERROR app.log # 看错误上下文 grep -E ERROR|WARN app.log | tail -50 # 只看最近的错误和警告 grep -r todo --include*.py . # 只在py文件里递归搜 grep -v ^# config.conf | grep -v ^$ # 去掉注释和空行一个细节grep默认用的是基本正则、?、|这些元字符要加反斜杠或者用-E。我见过不少人写grep a|b结果没生效就是没加-E。3.2 sed流编辑器的核心是替换和删除sed最常用的是替换sed s/old/new/g file。g表示全局替换每行所有匹配不加只替换每行第一个。原文件修改要加-i但-i前面我建议先不加-i跑一遍看输出确认没问题再加因为-i是不可逆的。sed s/127.0.0.1/0.0.0.0/g config.ini new.ini sed -i.bak s/debugfalse/debugtrue/ app.conf # 备份原文件再改 sed -n 10,20p file.txt # 只看10到20行 sed /^#/d; /^$/d config.conf # 删注释和空行 sed -i /^$/{N;/^\n$/D} file # 多空行压成一行较绕慎用sed的地址选择很灵活1,5表示1到5行/pattern/表示匹配行$表示最后一行。掌握地址加p、d、s三个动作日常就够用了。3.3 awk按列处理的结构化利器awk的精髓是按行读取、按列切分、条件处理默认以空白字符切列$1是第一列$NF是最后一列$0是整行。awk {print $1, $NF} access.log # 打印第一列和最后一列 awk $9 500 {print $7} access.log # 打印状态码500的请求路径 awk -F: {print $1, $3} /etc/passwd # 以冒号分隔取用户名和UID awk {sum $5} END {print sum/1024/1024 MB} file # 第五列求和换算成MB处理Nginx访问日志统计访问量是awk的经典用法awk {print $1} access.log | sort | uniq -c | sort -rn | head -10这一条的含义是取每行第一列IP→ 排序 → 去重计数 → 按次数降序 → 取前十。整个过程一条命令解决完全不需要写脚本。3.4 管道与重定向把命令串成流水线管道|把前一条命令的标准输出接到后一条的标准输入这是Linux组合能力的根基。重定向覆盖写追加写2错误输出全部输出。/dev/null是黑洞丢弃不需要的输出。我经常用的几个组合ps aux | grep nginx | grep -v grep # 排除grep自身这条进程 du -sh * | sort -h | tail -10 # 找当前目录最大的十个项 history | awk {print $2} | sort | uniq -c | sort -rn | head # 统计最常用的命令tee命令也值得提它能同时把输出写到屏幕和文件配合sudo用特别方便echo 配置内容 | sudo tee /etc/some.conf因为sudo echo x /etc/file这种写法其实是不生效的——重定向由当前shell执行而不是sudo权限不够会报错tee才是正确解法。这个坑当年困住过不少人。4. 系统状态与进程管理出了问题怎么快速定位命令敲熟之后考验就变成了出故障时你能多快定位到原因。这一节讲的是最常用的现场排查工具我按进程、资源、服务三个维度来讲。4.1 ps与top进程查看的两套工具ps aux和ps -ef是最常用的两种写法前者BSD风格后者System V风格输出字段略有不同但都能用。我习惯看ps -ef因为字段名更直观但ps aux里多了CPU和内存占用百分比排查资源占用时更好用。ps -ef | grep java # 找java进程 ps aux --sort-%mem | head -10 # 按内存占用排序取前十 ps -eo pid,ppid,cmd,%cpu,%mem --sort-%cpu | head # 自定义字段 pgrep -a nginx # 直接按进程名找带命令行top是实时监控默认三秒刷新一次。进入top之后常用的快捷键P按CPU排序M按内存排序k杀进程1展开每个CPU核的负载c显示完整命令行。生产环境我更推荐htop需要装界面和交互都更友好还能鼠标操作。提示load average三个数分别是1分钟、5分钟、15分钟的平均负载判断标准是除以CPU核数。如果15分钟的值持续高于核数基本可以确定系统处于过载状态这时候要优先看是不是有进程在疯狂占CPU或者IO等待过高。4.2 磁盘、内存、IO三条命令看穿资源瓶颈df -h看文件系统使用率du -sh 目录看目录大小。有个经典问题df显示磁盘满了但du加起来远小于磁盘容量通常是已删除但仍被进程占用的文件没释放。解决办法是用lsof | grep deleted找到占用的进程重启或杀掉它空间才会真正释放。这是我在生产环境遇到过好几次的坑。df -hT # 显示文件系统类型 du -sh /var/* 2/dev/null | sort -h # 找哪里占空间 lsof L1 # 找被删除但仍占用的文件 free -h # 内存情况注意available那一列free -h里不要只看free列要看available列因为Linux会拿空闲内存做缓存buff/cache真正可用的是available。缓存占得多不代表内存不够反而说明磁盘读得少。IO方面iostat -x 1看磁盘利用率%util和等待时间awaitiotop看哪个进程在读写。这两个工具部分系统需要单独装。4.3 kill与信号优雅停止比强杀更重要kill默认发TERM信号15让进程有机会清理后退出kill -9是KILL强制终止进程没机会做任何收尾。我强烈建议先用kill 进程号等几秒没反应再上-9尤其是数据库、消息队列这类进程强杀可能造成数据不一致。kill 12345 # 发送TERM优雅退出 kill -9 12345 # 强制杀慎用 pkill -f python app.py # 按命令行匹配杀 killall nginx # 按进程名杀同名全部后台任务管理让命令后台运行jobs看当前shell的后台任务fg调回前台bg继续后台运行CtrlZ把前台任务挂起。nohup 命令 忽略挂断信号让进程在退出终端后继续跑nohup ./start.sh app.log 21 disown # 从jobs列表移除彻底脱离systemctl管理服务是现代发行版的主流方式systemctl status nginx systemctl restart nginx systemctl enable nginx # 开机自启 systemctl list-units --failed # 查看启动失败的服务5. 网络与远程协作连接、传输、排查一条龙5.1 连通性排查ping、curl、ssping测连通curl测HTTP接口ss看端口监听。这三个基本能覆盖大部分网络问题。ping -c 4 baidu.com # 发4个包就停 curl -I https://example.com # 只看响应头 curl -o out.zip https://example.com/f.zip # 下载文件 curl -X POST -H Content-Type: application/json -d {a:1} url ss -tulnp # 看监听端口和对应进程 ss -anp | grep :80 # 看80端口的连接状态ss已经替代了老的netstat速度更快。-t是TCP-u是UDP-l是监听状态-n不解析成域名和服务名-p显示进程。这五个参数基本是最常用的组合。5.2 文件传输与同步scp、rsyncscp简单直接rsync增量同步更适合大目录scp file.txt userhost:/path/ # 本地传远端 scp userhost:/path/file.txt ./ # 远端拉本地 scp -r dir userhost:/path/ # 递归传目录 rsync -avz --progress src/ userhost:/dst/ # 增量同步显示进度 rsync -avz --delete src/ userhost:/dst/ # 目标多余文件删除镜像同步rsync的--delete要小心它会让目标端和源端完全一致目标端多出来的文件会被删掉。我一般第一次同步时先加-ndry run看会改哪些文件确认后再去掉。5.3 SSH免密登录和端口转发生成密钥对ssh-keygen -t ed25519比RSA更现代更短。把公钥传上去ssh-copy-id userhost之后就能免密登录。~/.ssh/config配置别名能少敲很多字Host myserver HostName 192.168.1.100 User deploy Port 2222 IdentityFile ~/.ssh/id_ed25519配好之后直接ssh myserver就能连不用每次敲IP和用户。这个配置我建议每个经常连服务器的人都建一份。6. 压缩打包与软件管理绕不过的日常操作6.1 tar一套参数打天下tar参数很多但记住创建用czvf解压用xzvf基本够用tar -czvf backup.tar.gz /path/to/dir # 打包并gzip压缩 tar -xzvf backup.tar.gz # 解压 tar -xzvf backup.tar.gz -C /target/dir # 解压到指定目录 tar -tzvf backup.tar.gz # 只看压缩包内容不解压 tar -cjvf backup.tar.bz2 dir # bzip2压缩比gzip小但慢 tar -cJvf backup.tar.xz dir # xz压缩最小但最慢参数字母速记c创建x解压t列出zgzipjbzip2Jxzv显示过程f指定文件名。f必须放最后因为后面紧跟着文件名。6.2 解压乱码国内用户绕不开的坑Windows下用WinRAR压的中文文件名zip拿到Linux上unzip经常会变成乱码因为Windows默认用GBK编码Linux默认用UTF-8。解决办法是解压时指定编码unzip -O GBK file.zip # 部分版本的unzip支持-O参数 unzip -O CP936 file.zip # CP936就是GBK如果unzip不支持-O参数很多发行版的默认包没编进去有个变通办法用7z或者python来解7z x file.zip -o./output # 或者用python python3 -c import zipfile; zipfile.ZipFile(file.zip).extractall()再不行就用convmv转换已解压出来的乱码文件名convmv -f GBK -t UTF-8 -r --notest ./乱码目录这个坑我踩过不止一次最后干脆养成了习惯凡是Windows发过来的压缩包直接用7z解省心。6.3 包管理apt、yum、dnfDebian/Ubuntu系用aptRedHat/CentOS系用yum或新的dnf# Debian/Ubuntu sudo apt update sudo apt upgrade sudo apt install nginx apt list --installed | grep nginx sudo apt remove nginx # CentOS/RHEL sudo yum install nginx sudo yum remove nginx sudo dnf install nginx # 较新系统装rpm包用rpm -ivh 包名查包内容用rpm -ql 包名。自己编译安装的话就./configure make make install三连但要注意依赖和路径问题能用包管理器就别自己编译。7. 用户管理与面试高频点小命令里有大讲究7.1 用户、组、sudouseradd -m -s /bin/bash deploy # 创建用户带家目录和shell passwd deploy # 设置密码 usermod -aG docker deploy # 加入docker组 id deploy # 查看UID、GID和所属组 userdel -r deploy # 删除用户及家目录 groupadd devs # 创建组usermod -aG里的-a很关键少了它会把用户从原有附加组里踢出去只保留新组。我见过因为这个参数漏掉导致用户权限突然变少的案例。sudo权限配置在/etc/sudoers但千万别直接编辑用visudo因为它会在保存前做语法检查避免写错导致所有sudo都用不了。7.2 面试常考命令速查整理了一张表面试前扫一眼场景命令查看端口占用ss -tulnp | grep 端口或lsof -i:端口查看进程树pstree -p查看文件被哪个进程打开lsof 文件统计文件行数wc -l file实时看日志tail -f app.log杀掉占用某端口的所有进程fuser -k 8080/tcp查看系统启动时间uptime查看内核版本uname -r查看发行版信息cat /etc/os-release8. 常见问题与排查技巧实录8.1 问题速查表现象可能原因排查命令磁盘满但du算不出来文件被删除但仍被进程占用lsof L1命令找不到PATH没包含该目录echo $PATH、which权限拒绝缺x权限或属主不对ls -l、id端口占用起不来已有进程监听同端口ss -tulnp | grep 端口中文乱码编码不一致locale、file -i 文件名进程杀了还在僵尸或父进程重启ps -ef、pstree -p8.2 我踩过的几个坑第一条别在/根目录随便执行chmod -R 777。这不仅会把所有文件权限搞乱包括sudo和ssh依赖的关键文件导致你连系统都进不去。权限问题要针对性解决而不是一把梭。第二条find配合-exec时注意分号。-exec rm {} \;里的分号前要有反斜杠否则shell会提前把它当命令分隔符。或者用-exec rm {} 效率更高一次传多个文件给命令。第三条df -h看的是文件系统不是物理磁盘。如果有LVM可能一个物理盘上挂了多个LV看容量要对照lsblk。第四条history里带空格开头的命令不会被记录。如果你执行了含密码的命令不想被记录前面加个空格。反过来如果你发现命令没进history想想是不是前面有空格。第五条会话断开导致后台进程退出。用nohup或screen/tmux否则你ssh一断前台跑的进程全没了。tmux比nohup更适合需要交互的场景能重连回会话。8.3 建立自己的命令笔记最后分享一个我坚持了好几年的习惯维护一份自己的cheatsheet.md把每次实际用到、或者踩坑时找到的命令按场景记下来标注日期和当时的语境。因为别人写的命令大全再全也不如你自己整理的贴合你的工作场景。我现在的笔记里日志排查和火焰图分析这两块都是我一次次故障里攒出来的网上搜不到完全一样的组合。我的笔记格式大概是这样的## 场景定位某个进程ID监听的所有端口 命令ss -tulnp | grep pid1234 日期2024-xx-xx 备注查服务绑定了哪些端口配合pid用坚持记半年你会发现排查速度有质的提升。命令这东西敲得多了自然就有感觉了。刚开始不用追求全都记住先把高频的二十条练到不用想然后遇到新场景再逐个补进来。真正的熟练不是记得多而是需要的时候知道去哪找、怎么组合。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。