首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Linux常用命令实战指南:从文件操作到排查技巧的完整梳理
📅 2026/10/20 13:19:15
✍️ 爱科研究院
👁 阅读 3,247
刚接触 Linux 的时候我也找过一份所谓“Linux 常见命令集合”复制到笔记里当作字典来背。结果可想而知背了三天连文件权限数字对应的含义都记不牢。后来在实际项目里摸爬滚打才慢慢明白命令不是背出来的而是在一次次真实的文件操作、日志排查、服务部署里用出来的。这篇内容我不按字母表顺序罗列命令而是按日常操作的顺序来组织先处理文件和目录再处理文本然后是权限、进程、磁盘、网络。每一条都尽量说清楚“为什么这么用”也会写一些我在生产环境里踩过的坑。这份集合会持续更新不一定覆盖所有命令但凡是写进来的都是在真实环境里验证过、真正高频的用法。适合刚入行的运维、后端开发、测试也适合把 Linux 当作日常工具的朋友。1. 文件和目录操作日常使用频率最高的命令主干1.1 pwd、cd、ls 的隐藏用法pwd用来确认当前所在目录。这个命令看起来简单但经常被人忽略。比如你写了一个脚本脚本里用相对路径操作文件结果换了个目录执行就找不到文件了这时候先跑一下pwd往往就能定位问题。cd -是我个人非常推荐的一个技巧它的作用是回到上一次所在的目录。用熟了之后在两个目录之间来回切换会非常顺手。cd ~直接回到当前用户的家目录cd ..回到上一级这些都属于基本功但很多人会忽略cd -所以单独提一下。ls的常用参数里-l是长格式输出-a显示隐藏文件-h让文件大小以易读的 K、M、G 显示。实际工作中我几乎固定使用ls -lht它按时间倒序排列文件最新的文件出现在最下面配合tail查看日志时非常直观。如果嫌敲起来麻烦可以在配置文件里加上一行别名alias llls -lht。你还需要区分绝对路径和相对路径。绝对路径以/开头比如/var/log/nginx/access.log相对路径基于当前目录比如./logs或../conf。在脚本里写路径时我的习惯是优先用绝对路径避免脚本执行位置不同导致意外结果。这不是什么高深道理纯粹是少踩坑。1.2 复制、移动、删除cp、mv、rm 的安全操作cp复制文件cp -r复制目录。生产环境里我更习惯用cp -a它会在复制时保留权限、时间戳等属性。对于配置文件备份来说cp -a比cp更稳因为很多程序对配置文件权限有要求复制完再手动改权限很麻烦。mv有两个容易忽略的细节。第一在同一个文件系统内移动文件本质上只是修改路径记录速度很快跨文件系统移动时操作系统会先把文件复制过去再删除原文件耗时取决于文件大小。所以移动大文件之前最好确认源目录和目标目录在同一块磁盘上。第二mv默认覆盖同名文件推荐加上-i参数在覆盖之前先询问避免把一个刚生成的产出文件覆盖掉。rm是整个 Linux 里最需要警惕的命令之一。rm -rf一旦路径写错代价非常大。我见过有人把变量没拼好最后删掉了别的目录。日常操作几个建议删除之前先ls确认一下路径不要凭记忆。给rm设置别名rm -i让系统强制确认。重要数据定期备份不要幻想误删之后还能轻松找回。在看不清后果的情况下宁可使用mv file /tmp/把文件挪到一个临时目录观察一段时间确认没问题再真正删除。1.3 查看文件内容cat、less、tail、head 的分工cat适合看小文件直接把内容全部输出。大日志文件用cat会把整个终端刷满而且显示不全。这时候用less它支持分页浏览按空格键翻页按/搜索关键字按q退出。检查配置文件或代码时用less明显比cat高效。tail -f是看日志的利器它可以持续跟踪文件新增内容。部署完服务后开一个窗口跑tail -f /var/log/app.log日志会一行行刷出来哪一步报错马上能看到。tail -n 200可以看最后 200 行head -n 50看前面 50 行。这里有一个我自己踩过的小坑tail -f配合管道过滤日志时比如tail -f app.log | grep ERROR输出会出现在缓冲区里不会实时刷新。解决办法是给grep加--line-buffered参数强制它逐行输出这样过滤后的日志才能实时看到。类似的坑还有不少建议遇到管道没有实时输出时先怀疑缓冲。2. 文本处理三件套grep、sed、awk 的实际用法2.1 grep从日志里捞你想要的grep是最常用的文本筛选命令。基本形态是grep pattern file它会输出包含匹配内容的行。几个参数非常重要-i忽略大小写排查关键字时省得反复试大小写。-v反向匹配输出不包含该模式的行。用来看“排除无用日志”很好用。-n显示行号方便定位代码或日志位置。-r递归搜索目录适合在项目代码里找某个函数或配置。-E使用扩展正则表达式可以写grep -E error|fail这样的多个条件。grep的返回值在脚本里很有用。匹配到内容时返回 0没有匹配返回 1出错返回 2。可以写类似这样的判断if grep -q ERROR /var/log/app.log; then echo 发现 ERROR 日志 fi-q表示静默模式不输出内容只返回退出状态在脚本里比较常用。2.2 sed常用的替换和行操作sed是流编辑器按行处理文本。最常用的是替换操作sed s/old/new/g file.txts是替换命令old是被替换的内容new是替换后的内容g表示全局替换不加的话只替换每一行的第一处匹配。如果只想看替换结果而不真正修改文件可以不加-i直接把标准输出打到屏幕上确认无误后再加上-i表示就地修改。sed -i建议做好备份。我一般会写成sed -i.bak s/old/new/g file.txt这样会生成一个file.txt.bak备份文件万一换错了还能回滚。批量替换配置文件时最稳妥的流程是先复制一份到临时目录在临时文件上测试确认结果再回写正式文件。sed还可以按行范围处理。比如sed -n 20,30p file.txt只打印第 20 到 30 行sed 50d file.txt删除第 50 行。写脚本时sed是批量处理文本的重要工具但不要用它处理二进制文件一旦改坏就很难恢复。2.3 awk列提取和简单统计awk最大的价值在于按列处理文本默认以空格或制表符作为分隔符。最简单的用法awk {print $1} file.txt这会输出每一行的第一列。$0表示整行NF表示当前行的字段数量NR表示当前处理的行号。实际工作中df -h的输出可以用awk抓取某个分区的使用率ps aux的输出可以用awk挑出 CPU 占用最高的进程。比如ps aux | awk $3 80 {print $2, $3, $11}这段命令打印 CPU 占比超过 80% 的进程 ID、CPU 占比和命令名称。如果输出列和预想不一致可能是分隔符问题。此时可以用-F指定分隔符比如/etc/passwd按冒号划分awk -F: {print $1} /etc/passwdawk与grep的分工不同grep擅长找行awk擅长处理列。遇到需要提取某列做判断的场景用awk会比grep加cut的组合更直观、更强大。不过别一开始就想着写复杂的 awk 脚本先用简单的列提取和条件过滤等熟悉了再深入。3. 权限与进程管理新手最容易踩坑的区域3.1 权限位与 chmod、chown 的解读Linux 里每个文件都有一套权限设置。ls -l输出的第一列类似-rw-r--r--第一个字符表示文件类型-是普通文件d是目录l是软链接。后面九个字符分三组分别是文件所有者、所属组、其他人的读、写、执行权限。r是读w是写x是执行。数字模式更常用r是 4w是 2x是 1。常见组合权限数字含义rwx7读、写、执行r-x5读、执行r--4只读rw-6读、写执行chmod 755 script.sh意思是文件所有者具备全部权限组与其他用户只有读和执行权限。目录的执行权限含义要特别留意对目录来说x决定你能否进入这个目录r决定你能否列出目录里的文件名。只给读取权限而没给执行权限你会碰到看得到名字却进不去的情况容易让人困惑。chown用于修改文件所有者和所属组。chown user:group file表示同时修改所有者和组chown -R user:group dir表示递归修改目录下所有内容。Nginx 或应用服务读取文件时经常出现权限不足的报错本质上就是运行用户对文件没有读取或执行权限用ls -l检查所有者再用chown调对即可。3.2 用户与提权su、sudo、useradd在 Linux 下我强烈建议不要长期用 root 操作。原因很简单root 权限下rm没有任何确认门槛误操作的概率虽然低但一旦发生就很麻烦。日常使用普通用户需要管理员权限时再临时提权是一种更稳妥的习惯。su -会切换用户同时加载目标用户的环境变量。不加-时只是切换了用户身份但当前环境变量还是原来那个用户的。如果发现切换后命令找不到比如java、node提示 command not found先想想是不是少了-。sudo是执行单条管理员命令的方式。sudo cat /etc/sudoers里可以配置哪些用户有 sudo 权限。注意编辑 sudoers 一定要用visudo它会检查语法避免因为语法错误导致所有 sudo 都不可用。建议只给需要的用户分配必要的权限不要整个组全部放开成无密码 sudo。useradd创建用户useradd -m -s /bin/bash username会创建家目录并指定默认 shell。创建完用户后务必设置密码否则这个用户无法登录。生产环境里给服务单独建用户运行能避免互相影响文件权限是值得坚持的习惯。3.3 进程排查ps、top、kill 的组合拳排查服务器问题时ps和top是跑不掉的两个命令。ps aux会列出所有进程其中%CPU表示 CPU 占用%MEM表示内存占用TIME表示进程累计消耗的 CPU 时间。配合awk可以很轻易找到占用最高的进程。top是动态查看系统状态的工具。第一行有当前时间、系统运行时长、登录用户数、负载平均值第二行是进程总数和运行、休眠进程数第三、四行是 CPU 和内存使用情况。负载平均值有三个数分别对应过去 1 分钟、5 分钟、15 分钟的平均负载。这个数是和 CPU 核心数对比看的不是说超过 1 就是有问题比如 8 核机器负载 4 并不算高。kill命令默认发送TERM信号要求进程主动退出。如果进程不响应再考虑kill -9强制结束。实践中的顺序是先用kill PID等待几秒没有退出的再用kill -9 PID。直接kill -9会让进程来不及清理临时文件和释放资源数据库或缓存服务尤其需要注意很可能造成数据不一致。还有一个实用的变体pkill按进程名结束。比如pkill nginx会结束所有名称为 nginx 的进程。但它会把符合条件的所有进程都杀掉使用前先pgrep -l nginx确认匹配范围。4. 磁盘与系统状态遇到问题先看哪几个指标4.1 磁盘空间与 inodedf、du 的配合排查磁盘问题的第一步永远是看整体空间。df -h以易读格式显示挂载点、总大小、已用空间、可用空间和使用率。当某个目录写入报错提示“No space left on device”时先用df -h确认是不是分区满了。有一个容易忽视的点磁盘空间没满但同样报写满错误多半是 inode 耗尽了。df -i可以看到每个文件系统的 inode 总数、已用数量和使用率。inode 可以理解为文件索引节点每个文件或目录都需要占用一个 inode。当服务器上散落了海量小文件时常见的就是这种 inode 耗尽的场景。我遇到过测试环境里一次性生成了几十万个临时文件磁盘还剩很多空间但 inode 用到了 100%任何新文件都写不进去。清理了一批无用文件后问题立刻缓解。du用于查看目录占用空间。du -sh /var/log可以快速看到整个目录的大小du -sh *可以列出当前目录下各项的占用。排查哪个目录把磁盘吃满时从/开始一层层用du -sh往下缩小范围比靠感觉猜测高效得多。还有一个常见清理对象是/var/log日志文件默认可能越积越大。如果确认对应日志不再需要可以cat /dev/null /var/log/xxx.log清空文件内容而不是直接rm文件。因为服务进程可能仍然持有这个文件的句柄直接删除文件后空间不会立即释放反而会造成“磁盘看着满了但找不到大文件”的错觉。4.2 内存与负载free、uptime 的解读free -h查看内存使用情况输出的第一行是物理内存总量、已用、空闲、共享内存、缓存。第二行是 swap 使用情况。很多人看到 used 很高就紧张其实 Linux 会尽量把空闲内存用作缓存来提高读写性能。判断内存是否真正紧张更应关注的指标是available它表示可被新程序使用的内存大小包含了可以回收的缓存部分。当 swap 使用量持续增长时说明物理内存可能不够用了系统开始把内存数据换到磁盘。接着观察top里KiB Swap的变化如果持续增长就该考虑加内存或排查进程内存泄漏。内存泄漏是长期运行服务常见的问题表现为内存占用随时间缓慢上升而业务流量并没有明显增长。uptime除了显示系统运行时间还会给出负载平均值。理解负载需要结合 CPU 核数。简单来说每个任务需要占用一个核来处理负载均值略大于 CPU 核数时说明系统一直有排队等待的任务意味着 CPU 已经处于繁忙状态。如果负载长期远超核数先看top找是哪些进程在啃 CPU再决定是做优化还是扩容。4.3 系统日志排查问题的现场记录日志是排查问题的第一现场。不同的系统发行版日志位置会略有差异常见的日志文件包括系统公共日志和内核日志。内核相关日志可以用dmesg查看比如磁盘错误、内存问题、硬件识别这类底层信息很多和系统稳定性相关的线索都在这里。使用 systemd 的系统中journalctl是查看服务日志的主要工具。journalctl -u 服务名可以查看某个服务的日志journalctl -u 服务名 -f可以实时跟踪这个服务的最新输出。配合时间过滤比如journalctl --since 10 minutes ago可以迅速把排查范围缩短到故障发生前后的日志。排查一个服务为什么起不来时我固定会按这个顺序看先看服务状态再看服务最近日志最后检查语法或配置文件权限。日志里出现Permission denied多半就是上一节说的权限问题出现Address already in use通常是端口被其他进程占用用下一节会提到的ss查一下端口就知道是谁占的。5. 网络排查与远程操作不会出错的检查顺序5.1 ping、ss、curl三层由内到外的排查链路网络出问题时我习惯按“从底层到应用”的顺序排查。第一步是ping判断目标机器是否可达、延迟怎么样。ping走的是 ICMP 协议如果目标禁用了 ICMPping 不通也不代表服务不可用这一点要清楚。第二步是查端口。ss -tlnp可以列出当前服务器上监听的 TCP 端口非常实用。-t是 TCP-l是监听状态-n是不做域名解析-p显示对应进程。以前常用netstat -tlnp现在大多数环境用ss就够输出更简洁。查看某个端口是否有进程监听ss -tlnp | grep 8080如果端口在监听但访问不通第三步用curl测试本机访问是否正常。curl -I只取响应头适合快速判断服务是否在响应。如果在服务器本机用curl能正常返回但外部访问不了问题基本在防火墙或安全组规则上。排查时还可以用telnet或nc测试远程端口是否可达我只把它当作快速探测工具并不会长期依赖。完整的链路是外部访问不通 → 服务器本机curl验证服务 → 本机没有监听就查服务进程和日志 → 本机正常就查防火墙和路由。5.2 scp 与 rsync文件传输的两种场景需要在两台机器之间传文件时scp是最直接的办法scp local.txt userremote:/path/to/save/ scp userremote:/path/to/remote.txt ./它基于 SSH 加密传输简单可靠。传单个小文件用它没任何问题。但如果要同步一个目录或需要增量同步rsync明显更合适。rsync的核心优势是增量同步对已传输过的文件做对比只传有变化的部分。常用形式rsync -av --delete /source/ userremote:/target/-a是归档模式保留权限和时间戳也递归处理目录-v显示详细输出--delete表示删除目标端多余的文件让目标目录完全对齐源目录。这个参数需要谨慎如果你只是备份数据不需要严格同步尽量别加--delete避免误删目标端已有的文件。大目录首次同步时间会比较长中途中断后重新执行rsync它会自动跳过已经同步完的部分这是scp很难替代的优点。传输大量日志或静态资源时我一律用rsync只有在快速传一个小配置文件的场景才用scp。5.3 find 与 locate定位文件的习惯找文件的需求主要分两类按名字找、按属性找。find功能最全面但速度取决于扫描范围。最基本的用法find /etc -name *.conf-name按文件名匹配-type f只看普通文件-type d只看目录-mtime -1表示最近一天内修改过的文件。排错时用-mtime找最近变化的文件往往很有效。find支持执行命令比如把查到的文件批量打包或删除。我建议对find的-exec和-delete保持高度谨慎旧日志清理这样的操作先加-print查看结果确认没问题再真正执行。locate依靠预建索引查询速度很快但它查不到刚创建的新文件因为索引不是实时的。系统里如果没安装或索引过期可以先执行updatedb再查。习惯了find之后大部分场景我不会单独安装locate除非在只读场景下需要快速查一个已知文件名。6. 建立自己的命令记录习惯比背命令更重要的几件事6.1 history 与 alias让常用操作更顺手history命令可以查看当前会话的历史命令。当你忘了某条命令是怎么写的时候先history | grep 关键字搜一下历史记录通常能找到答案。按CtrlR进入反向搜索也是我平时的高频操作输入关键字自动匹配历史记录回车即可补全。alias可以为常用命令设置别名。我个人的.bashrc里维护了一小批别名例如alias llls -lht、alias rmrm -i每次新建用户都会顺手把这些写进去。这些别名会极大降低误删概率也是新手过渡期的安全网。但是别名也别设得太花哨。不要为了追求“一条命令完成所有事情”而堆砌复杂的链式命令。别人接手你的机器时看到一串莫名其妙的别名会很难受。保持简单贴近系统默认习惯。6.2 man、--help、tldr命令查不到时怎么办没有谁能记住所有命令的参数。遇到不熟悉的命令先用命令 --help看简洁参数说明。如果不够再看man 命令它是完整的参考手册里面包含了用途、参数、示例、退出状态等大量信息。man打开后按/搜索关键字按q退出。如果man内容太长看不进去可以尝试tldr这类工具它把常用命令总结成极简示例非常照顾记忆负担适合快速回忆用法而不是取代 man。养成查文档的习惯比背命令重要得多。一个合格的排查过程不是靠背下来的参数硬凑而是能快速在手册里定位到正确的选项。我记得第一次接触 rsync 的--delete时就是在 man 里确认了它的副作用才避免了数据损失的风险。6.3 持续更新的意义这份命令集合之所以强调“持续更新”是因为 Linux 命令虽然基础稳定但用法场景会不断变化。我自己会记录每次项目里遇到的新问题、新命令和当时的解决思路一段时间后整理成笔记。翻一翻以前踩过的坑往往能避免同样的错误发生第二次。日常维护笔记时我会按照“场景 → 命令 → 为什么用”的方式记录而不是单纯记录命令本身。比如记录日志清理时不写“某命令可以清日志”而是写“磁盘满 → 先 df -h 定位 → 再 du -sh 排查 → 用重定向清空日志文件”。这样在真实故障发生时翻到这条记录能顺着思路快速排查。每个 Linux 使用者的成长路径不一样但有一点是共通的命令收集只是起点把它放进自己的工作场景里不断验证、调整才能真正发挥作用。也欢迎你在这篇内容的基础上添加自己的实战用法这样这份集合才真正属于你自己。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/20 13:19:15
从零构建可维护项目:以rea为例的架构设计与实操指南
2026/10/20 13:19:15
Win10下绿联USB转RS232串口驱动安装与故障排查全攻略
2026/10/20 13:19:15
源码交付与全栈硬件能力:破解物联网项目设备接入最后一米困局
2026/10/20 16:41:13
CentOS 7.9生产环境OpenSSH安全升级实操
2026/10/20 16:41:13
Atom Z37xx驱动包安装指南:从设备管理器到摄像头全绿
2026/10/20 16:41:13
VSCode搭建Linux C++开发环境实战指南(含CMake与调试配置)
2026/10/20 16:41:13
本体驱动AI原生应用开发:从知识图谱到大模型语义中间层实践
2026/10/20 16:41:12
OD机试Python刷题资源:本地可运行的算法模板与避坑指南
2026/10/20 16:36:10
智能多功能涡流探伤仪技术解析:从系统架构到现场调试
2026/10/20 1:05:26
WSL下STM32开发板烧录指南:USB透传与OpenOCD实操
2026/10/20 1:05:26
ROS2工业级开发:实时性、资源适配与可交付验证体系
2026/10/20 1:05:26
STM32+华为云IoT+Qt构建智能家居远程控制系统全解析
2026/10/20 16:07:12
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/20 7:57:25
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/19 15:41:50
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/20 2:24:03
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/20 2:23:57
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/20 2:23:53
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)