ARTICLE DETAIL

建站实战干货

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

Linux运维必备:文件与目录操作命令实战指南

2026/9/7 14:43:18 拓冰建站 浏览量
Linux运维必备:文件与目录操作命令实战指南 1. 先搞明白运维为什么要死磕文件与目录操作命令做运维这些年我见过不少新人入职第一天就开始背命令ls、cd、cp、mv滚瓜烂熟可真到线上出问题的时候手忙脚乱连日志都翻不明白。问题不在于命令背得少而是没有把文件与目录操作命令放在运维的整个工作场景里去理解。Linux系统里几乎一切皆文件配置文件是文件、日志是文件、设备是文件、进程的信息也在文件里。你排查一个问题本质就是在和各种文件打交道。所以文件与目录操作命令不只是“会用”的层面而是运维工程师的底层操作系统直接决定你处理问题的速度和准确性。这篇文章我打算用做培训的思路把Day2这部分内容展开讲透。不光是命令的参数列表更重要的是每个命令在什么场景下用、用的时候有哪些坑、怎么组合起来解决实际问题。适合刚入行的运维、想转运维的开发、准备运维面试的朋友也适合那些已经干了一段时间但命令用得比较“野”的同行帮你把基础补扎实。1.1 文件是Linux世界的“货币”在Windows里我们习惯说“双击打开”在Linux运维的日常里你几乎没有图形界面可用所有操作都靠命令。文件系统就是你的办公桌目录结构就是抽屉和文件夹而你每天干的活——查日志、改配置、部署代码、清理磁盘——全部是在这张办公桌上完成的。举个例子线上服务挂了你要做的第一件事往往就是去翻日志。日志文件在哪、怎么快速定位到报错行、怎么实时跟踪输出这些全靠文件操作命令。再比如磁盘快满了你要找出是哪个大文件占的空间这也是文件命令的活。可以说文件与目录操作命令是运维排查问题链条的第一环这一环不牢后面所有的高端操作都无从谈起。很多新手觉得这些命令“太简单了”不值得花时间。但实际上真正拉开运维效率差距的往往就是这些基础命令用得熟不熟。同样查一个东西有人用五分钟有人一条find加一个grep十秒搞定差距就是这么来的。1.2 这套命令的学习路径与核心脉络文件与目录操作命令看起来很多但可以按照工作流来分组这样记起来就不是死记硬背而是顺着解决问题的思路走。我的建议是分四步来学先学会“看”——查看当前在哪、目录里有什么再学会“改”——创建、复制、移动、删除然后学会“查”——查找特定文件和查看文件内容最后学会“筛”——对文本内容做处理和提取。这套路径对应到命令上基本就是pwd、ls、cd然后是touch、mkdir、cp、mv、rm再到find、locate、cat、less、tail、head、grep最后是sed、awk、sort、uniq、wc、cut、tr。把这几组吃透日常运维基本够用。我见过不少人喜欢下载“Linux命令大全”之类的文档猛背说实话效果很差。因为命令是用来解决问题的不是用来背的。我会在下面每个部分里把命令放在实际运维场景中讲告诉你为什么需要它、什么时候用它、它和相似命令的区别在哪。这样学完你遇到问题自然知道该掏出哪个工具。2. 日用而不知查看与定位类命令的细节很多人觉得pwd、ls、cd这三个命令简单到不值一提但实际上这三个命令是你在Linux系统里“认路”的基础。服务器上出问题的时候你首先得知道自己身处哪个目录目录下有什么这些信息不搞清楚后面的操作全是盲人摸象。2.1 pwd、ls、cd的基础与冷门参数pwdprint working directory就是打印当前工作目录没别的花活但它在脚本和排障里非常有用。比如你写脚本时要确认当前路径或者排查别人留下的环境时第一时间执行pwd心里就有底了。ls是最常用的命令但很多人只会用ls或者ls -l。其实ls的参数在运维场景里有几个特别值得记住的ls -l长格式显示包含权限、属主、大小、修改时间。这一条信息量极大权限排查、文件归属都靠它。ls -a显示隐藏文件。运维里很多配置文件是隐藏的比如.bashrc、.ssh目录不看隐藏文件等于没看全。ls -lh人性化显示大小日志文件动不动几个G用-h才能一眼看出是K、M还是G。ls -lt按修改时间倒序排列。这个非常实用想知道哪个日志文件最新在写哪个配置文件刚被人动过用它一秒看到。ls -lS按文件大小排序找大文件的时候配合-h比一条du命令还直观。cd命令也一样除了常规的cd /path还有几个省时间的用法。cd -是回到上一个目录在俩目录之间来回切换排查问题时特别顺手。cd ~直接回当前用户的家目录cd ..回上一级。这些用熟了你在命令行里就像在自己家里走动一样自然。我曾经在一次排查中遇到一个情况同事说“配置文件改了但没生效”我上去先ls -l看了下配置文件的时间戳发现根本不是最近修改的再pwd确认路径发现改的是另一个目录下的同名文件。这俩基础命令一组合问题当场就定位了。2.2 用tree和du快速摸清目录结构tree不是系统自带的命令需要额外安装CentOS用yum install treeUbuntu用apt install tree但它看目录结构非常直观。新接手一套服务时敲一条tree -L 2 /data/www两层目录结构一目了然比一个个ls高效太多。配合-d参数只显示目录配合-h显示大小排查时很有用。du是统计目录和文件占用磁盘空间的命令运维里磁盘告警是家常便饭du就是排障第一工具。常用组合是du -sh *统计当前目录下每一项的大小单位是人性化的。看某个目录具体占多少用du -sh /var/log。想看深层目录的空间占用du -h --max-depth1 /var能列出/var下第一层子目录的大小这个在定位哪个目录吃满磁盘时极其关键。我处理过很多次磁盘告警流程基本都一样df -h看哪个分区满了然后du -sh *在那个分区下一层层进去找到最大的目录再找到具体的文件整个定位过程其实都是文件系统命令的组合拳。没有du你连问题在哪都找不到。2.3 通配符与特殊目录符号文件操作离不开通配符。*匹配任意多个字符?匹配单个字符[abc]匹配方括号内的任意一个字符。这三个符号在运维中的使用频率极高比如rm -f /var/log/nginx/access.log.202401*只删1月份的历史日志ls /etc/nginx/conf.d/*.conf看所有配置文件cp /data/app/app.jar{,.bak}快速给文件做个备份。这里有一个非常实用的大括号展开技巧{1..10}会展开成1到10{a,b,c}会展开成a b c。比如你想快速创建10个测试文件touch test{1..10}.txt一条命令搞定。这个写法在批量创建目录、批量备份文件时也很好用。特殊目录符号也要熟练.代表当前目录..代表上一级目录~代表当前用户家目录-代表上一次所在目录。这些符号在相对路径和绝对路径切换中频繁出现尤其要注意很多误删事故就是没搞清楚.和..的含义导致rm -rf删错了路径。重要提醒使用通配符前尤其是rm命令务必先执行ls看下匹配到的文件有哪些确认无误再删除。我在后面会专门讲这类事故的复盘。3. 创建、复制、移动、删除操作类命令的完整姿势查看命令是“读”操作类命令就是“写”。运维日常里创建目录、复制配置文件、移动日志、删除过期文件这些动作你每天都会做。但这些命令里的细节和坑恰好是新手最容易踩雷的地方。3.1 touch、mkdir这样用才高效touch的基本作用是创建空文件但它在运维里还有一个重要用途更新时间戳。文件的时间戳分访问时间atime、修改时间mtime、状态变更时间ctime很多时候排查“文件为什么没生效”就要看mtime。用touch -d 2024-01-01 10:00:00可以手动指定时间这在测试脚本、模拟场景时很有用。另一个高频场景是批量创建文件做测试。比如你要测日志切割脚本需要一些带日期的历史日志文件一条touch access.log.{01..10}就搞定了不用一个个建。mkdir更不用说-p参数是必须掌握的。mkdir -p /data/app/logs就算/data和/data/app都不存在也会一次性创建好不会再报“No such file or directory”。还有一个冷门参数-v创建目录时输出详细信息在脚本里排查问题时会让你知道每个目录是什么时候创建的、权限对不对。如果要在目录里快速生成完整的测试目录结构mkdir -p test/{src,conf,logs/{2024,2025}}可以一次建出多层嵌套的结构这在模拟生产环境时非常省事。3.2 cp、mv、rm的高危操作与正确姿势cp最容易出问题的是权限和属性丢失。默认的cp只复制内容不保留原文件的权限、属主、时间戳。运维里最推荐的复制方式是cp -a它等价于-dpR保留权限、属主、时间戳、软链接等所有属性复制配置文件、程序文件时务必用它。还有一个实用的cp -i覆盖前会让你确认防止手滑覆盖了重要文件。mv在同一个文件系统内是“瞬间完成”的因为它只是修改了目录项不涉及实际数据拷贝。但跨文件系统的mv本质是先复制再删除大文件会明显变慢这时候不如直接用cp -a加rm来得稳妥。另一个常见坑是mv会覆盖同名文件且不提示所以重要操作前建议先ls确认目标目录里有没有同名文件。rm是运维里最危险的操作没有之一。rm -rf这个组合在网络上被称为“删库跑路专用”无数事故都是由它引起的。我给自己定的纪律是在生产服务器上执行rm -rf之前必须先用ls确认路径而且绝对不用rm -rf /这种带根目录的命令。更稳妥的做法是能用mv把文件移动到/tmp或专门的回收目录就先移动确认过几天没问题再清理。很多运维团队就是这么干的相当于给rm加了个“后悔药”。另外rm删除文件后如果进程还在写这个文件磁盘空间可能不会立即释放这在日志清理时经常遇到。后续我会在问题排查部分专门讲这个场景。3.3 实战场景快速清理过期日志文件我举个真实场景。某台服务器磁盘告警检查发现/data/logs下按天切割的业务日志占了大量空间需要清理7天前的日志文件。这时候用find配合通配符最省事find /data/logs -name *.log.2024* -mtime 7 -exec rm -f {} \;但直接这么删有风险我的习惯是分两步走第一步先用find /data/logs -name *.log.2024* -mtime 7把匹配到的文件列出来肉眼确认没有误伤第二步再执行删除。如果日志文件还被服务进程持有比如Java进程还开着文件句柄删了可能不会释放空间那就需要重启服务或者用 文件清空内容的方式。这类清理任务最好还要搭配定时任务自动执行但那是cron的内容了这里就不再展开。4. 内容查看与文本处理运维排查的核心武器文件操作不只是“看目录里有什么”更重要的是“看文件里写了什么”。日志文件动辄几百MB甚至几个G你不可能用cat从头看到尾。查看命令的选择和使用直接决定排查问题的效率。4.1 cat、head、tail、less各显神通cat适合小文件全文查看配置文件用cat没错但大日志文件千万别用cat一敲下去屏幕哗哗刷几万行既浪费资源又看不到重点。cat还有一个常用功能是把两个文件拼接比如cat a.txt b.txt c.txt在合并配置片段时有用。tail可能是运维中使用频率最高的命令之一因为日志是往后追加的最新内容永远在文件尾部。tail -n 50 app.log看最后50行tail -f app.log实时跟踪文件的增长这个在服务异常时配合服务重启命令一起用能立即看到输出。tail -F比-f更稳它会处理文件被切割、重建的情况日志按天切割时用-F不会中断跟踪。head和tail相反看文件开头的内容常用场景是检查配置文件头部或者日志的头部信息比如head -n 20 nginx.conf。less是我最推荐的查看大文件的命令它不会一次性把整个文件读入内存翻页流畅还支持在文件内搜索输入/关键词回车按n跳转下一个匹配项。比如在几G的错误日志里找某个IPless error.log后输入/192.168.1.100直接就定位到了。按G跳到最后一行按g跳到第一行按q退出这些快捷键值得记住。4.2 grep最常用的文本过滤器grep是运维排查的绝对主角它的作用是在文件中按模式匹配文本行。基本用法grep error app.log常用参数有这么几个grep -i忽略大小写排查时报错信息的英文大小写经常不确定加上-i就能全匹配到。grep -v反向匹配排除某些行。比如grep -v ^#过滤掉配置文件里的注释行看有效配置。grep -r递归查找目录下的所有文件。在一个项目目录里找某个关键词grep -r timeout /data/app/非常高效。grep -l只看包含匹配内容的文件名不显示具体行。在多个配置里快速定位哪个文件包含某配置项时用。grep -c统计匹配行数。排查某类报错出现了多少次一条命令就有结果。grep -n显示行号修改配置时能直接知道第几行有问题。grep -E扩展正则支持|等语法比如grep -E error|fatal同时匹配两类关键词。grep -A、-B、-C分别显示匹配行的后几行、前几行、前后几行查看日志错误上下文时极其重要。grep -C 5 Exception app.log能一眼看到异常前后各5行的上下文不用再单独打开文件翻前后文。grep配合管道符非常强大比如tail -f app.log | grep ERROR实时日志流里只筛选出错误行这个用法在你盯着服务启动日志时特别好用。我曾经在一次上线过程中就是靠这句命令第一时间在茫茫日志里抓到了关键报错比同事用cat从头翻快太多了。4.3 sed流式编辑器的核心操作sed是文本处理三剑客之一很多人听到sed就头疼其实运维常用到的就几个点按行号或模式定位然后做打印、删除、替换。最常用的是替换格式是sed s/旧内容/新内容/g 文件。s是替换命令g表示全局替换每一行所有的匹配都换掉不加g只换每行第一个。替换后加-i才会真正写回文件不加-i只是输出到屏幕不会改动原文件。这个设计是个安全保护我强烈建议新手先不加-i跑一遍看结果确认无误再加。sed -n 10,20p app.log打印第10到20行sed -n /2024-01-01 10:/p app.log按模式匹配打印某段时间的日志。sed -i /debug/d app.log删除包含debug的行。还有一个常见场景是批量修改配置文件比如要改nginx里所有端口的写法sed -i s/8080/9090/g nginx.conf一条替换完成比手动一个个改快得多也稳得多。4.4 awk结构化文本的分列神器awk在处理有规律的文本时堪称神器它的默认动作是按空格或Tab把每行分成多个字段$1是第一列$2是第二列$0是整行$NF是最后一列。举几个运维里高频的场景。查看磁盘使用率df -h | awk {print $5}直接输出使用率一列。查看进程PIDps -ef | grep java | grep -v grep | awk {print $2}拿到Java进程的PID。统计日志中某个字段的总和cat access.log | awk {sum $10} END {print sum}比如统计所有请求的大小总和。awk还支持指定分隔符awk -F : {print $1} /etc/passwd就是把/etc/passwd按冒号切成7段取第一段用户名。日志分析里的经典例子从Nginx日志里提取访问IP、状态码、响应时间然后按条件过滤awk {print $1, $9, $10} access.log | sort | uniq -c | sort -rn这条命令能输出每个IP的访问次数、状态码和字节数的统计在排查异常访问、统计接口调用量时非常实用。awk的BEGIN{}和END{}块也值得掌握BEGIN在执行前运行比如设置分隔符FS,END在全部处理完后运行比如输出汇总结果。用awk END{print NR}就能直接输出文件行数相当于wc -l的另一种写法。5. 查找与整理find、sort、uniq、wc的实战组合运维里经常要面对一个问题“某个文件到底在哪”、“哪些文件占空间大”、“日志里哪些内容最多”。这就要用到查找和统计整理类的命令它们是排查问题后半程的主力。5.1 find按条件搜索文件的终极工具find 路径 条件 动作这是它的通用格式。最常用的条件是按名字搜find / -name nginx.conf。按类型搜find /data -type f只找普通文件-type d只找目录。按大小搜find /data -size 100M找出大于100M的文件这是磁盘排查的利器。按时间搜find /logs -mtime 30找出30天前修改过的文件在清理旧日志时是标配。find还支持-exec动作对搜索到的每个文件执行后续命令。比如find /data -name *.tmp -exec rm -f {} \;删除所有临时文件其中{}代表每个找到的文件名\;是-exec的结束标记。这里我要特别提醒-exec rm -f属于高危操作必须先不带-exec跑一遍看匹配结果一定要养成这个习惯。另一个更直接的安全删除方式是find /data -name *.log -mtime 7 -delete但同样建议先执行不带-delete的版本确认一下列表。find和grep还可以组合find /data -type f -name *.conf | xargs grep listen找到所有conf文件后再在里面搜索listen这个关键词这个组合在批量排查配置文件时非常好用。5.2 sort、uniq、wc、cut、tr的协同操作sort是排序命令常用参数有-n按数字排序不指定的话会把10排在2前面因为是按字典序、-r倒序、-k指定按第几列排序。uniq是去重命令但注意它只能去掉相邻的重复行所以必须先sort再uniq这个顺序搞反了结果就不对。uniq -c会在每行前加上出现次数这个参数极其常用。wc是统计命令wc -l统计行数wc -w统计单词数wc -c统计字节数。在脚本里判断日志是否增长、检查文件是否为空wc -l是主力工具。cut是按列切割文本cut -d -f 1按空格切分取第一列-d指定分隔符-f指定取哪些字段。cut -c 1-10按字符位置切可以截取定长日志的前10个字符。tr是字符替换或删除tr a-z A-Z把小写替换成大写tr -d \r删除Windows换行符\r在处理从Windows传到Linux的文件时非常有用。这些命令经常串联使用。比如统计access.log中访问量最高的前5个IP一行搞定awk {print $1} access.log | sort | uniq -c | sort -rn | head -5拆开看就是awk取出第一列IPsort排序让相同IP相邻uniq -c去重并统计次数sort -rn按次数倒序排列head -5取前5名。这条组合逻辑清晰也是面试官常考的“统计日志中访问量最高的IP”的标准答案建议收藏。6. 别忘了权限与链接两个容易被忽略的坑文件与目录操作不只是“增删改查”本身。很多线上问题最后定位到的是权限配置错误或者软链接路径不对。这一部分在Day2的课程里往往一带而过但实际工作中却坑人无数。6.1 chmod、chown、chgrp的常见用法ls -l输出的第一列就是权限信息形如-rw-r--r--。第一位是文件类型-普通文件、d目录、l软链接后面9位每3位一组分别是属主、属组、其他用户的读r、写w、执行x权限。修改权限最常用的是数字法r4、w2、x1把每组的数值相加。比如chmod 755表示属主有rwx4217属组和其他用户有r-x415。对运维来说几个常见的组合要记住配置文件一般644属主可写其他人只读脚本和可执行文件755目录通常是755这样才能进入临时文件或共享目录可能是777但生产环境慎用。chown是修改属主和属组chown user:group file一次搞定。部署应用时代码文件经常要用chown -R appuser:appgroup /data/app批量修改整个目录的归属-R是递归。chgrp现在用得少了因为chown user:group已经包含了这个功能。这里要多说一句生产环境修改权限前一定要先想清楚后果。别图省事直接chmod -R 777很多安全性问题就是这么产生的。正确的思路是“最小权限原则”——能给644别给666能给755别给777。6.2 硬链接与软链接区别和坑点链接是Linux文件系统里绕不开的概念。软链接符号链接相当于Windows的快捷方式创建方式是ln -s 目标 链接名它保存的是目标文件的路径目标被删了链接就失效。硬链接则是同一个文件在文件系统里的另一个名字它直接指向inode删除一个名字不影响另一个硬链接不能跨文件系统也不能给目录创建硬链接。运维里最常用的是软链接。比如应用需要读取当前版本目录的固定路径每次发布后只需要更新软链接指向不用改应用配置ln -s /data/app/release_v1.2 /data/app/current之后所有访问都走/data/app/current发布v1.3时删掉旧链接再建新链接指向v1.3应用无需重启这个发布方式在Java和Node应用里非常流行。但软链接有个经典坑用相对路径创建软链接时它基于链接文件所在目录去解析而不是基于当前工作目录。很多新手在“错误的位置”创建软链接后发现链接不能用一脸茫然。所以我建议创建软链接时一律用绝对路径ln -s /data/app/release_v1.2 /data/app/current这样最稳妥。7. 常见问题排查与实用技巧记录最后这部分我想把自己踩过的坑和常见的面试考点整理成清单。这些内容大多不会写在命令帮助文档里但实战中总会遇到。7.1 命令找不到与PATH路径问题新装的系统或换了用户敲命令报command not found第一反应不要慌多数是PATH问题。用echo $PATH看看当前搜索路径里有没有/usr/local/bin、/usr/sbin这些目录。临时解决可以直接用绝对路径执行命令比如/usr/sbin/iptables要永久生效就在/etc/profile或~/.bashrc里追加export PATH$PATH:/你的目录然后source一下。这里也解释了为什么很多命令在root下能用、普通用户下不能用——就是PATH里没有对应的sbin目录。7.2 文件名以“-”开头的操作困局有些下载的恶意文件或异常文件名字以-开头比如-import直接rm -import会报“invalid option”因为命令把文件名当成了参数。解决办法是用--标识参数结束rm -- -import或者用相对路径rm ./-import。这个冷知识在面试题里出现过实际排查中遇到奇怪文件名时也能救命。7.3 find和grep在脚本中的返回码脚本里写grep -q error app.log 执行告警-q是静默模式只返回状态码不输出内容。注意grep如果匹配不到返回码是1在set -e的脚本里会导致脚本退出这是个很隐蔽的坑。同样的find搜不到文件时返回码也不是0。在写自动化脚本时一定要用if grep -q ...; then这样的写法主动判断而不是让脚本被返回码“默默杀死”。7.4 日志被删但空间不释放的“灵异事件”之前提过进程打开的文件即使被rm删了文件句柄还占着磁盘空间不释放。排查方法是lsof | grep deleted找出仍被占用的已删除文件然后重启对应进程或服务空间才会真正释放。这个场景在清理日志时极其常见我建议所有运维都记下这个命令能少走很多弯路。7.5 快速切换工作目录的实用技巧cd -在最近两个目录之间切换pushd和popd可以管理目录栈在多个目录间来回穿梭。比如你在/var/log/nginx查完日志要去/etc/nginx改配置再回来看日志效果用cd -来回切换比敲一长串绝对路径高效得多。我在排查前后端联调问题时经常在这几个目录之间切换这一招很实用。7.6 权限不足时别急着用root线上查日志、看配置经常遇到Permission denied。新手的第一反应是换root但运维规范里有一条基本纪律能用普通用户解决的问题不要轻易用root。你可以先ls -l看下文件属主和权限如果是属组可读而你恰好在属组里直接就能读如果在属组但没权限用sudo -u 属组用户切一下用户再看始终保持最小权限操作。这样既符合安全规范也能减少误操作的风险。最后一个建议所有危险命令养成“先预览、后执行”的习惯。执行rm -rf前用ls确认执行find -exec前先不带exec看结果执行sed -i前先不加-i看输出。一开始会觉得多了一步很麻烦但踩过几次坑之后你一定会认同多花三秒钟确认能省下几十个小时的恢复成本。这套文件与目录操作命令表面上是基础技能实际上是运维工程师生死攸关的基本功值得反复练习、形成肌肉记忆。