☰
S1-02_文件与目录操作命令速查:ls、cp、mv、rm、find、tar
2026/10/29 2:04:31 网站建设 项目流程

文件与目录操作命令速查:ls、cp、mv、rm、find、tar 一篇搞定

运维学习路线系列 · 阶段一 Linux 地基 · 第 2 篇
适用环境:Ubuntu 24.04 LTS,普通用户(有 sudo)
阅读前提:《S1-01 文件系统与目录结构》

前言:rm -rf 的恐怖故事先听一个

新员工第一天,想在测试机清理一个目录,手速极快地敲了:

rm-rf/ data/app/log# 本意:rm -rf /data/app/log,多打了一个空格

空格一隔,rm收到两个参数:/和data/app/log。幸好系统还有一丝防护,但/etc下已经少了东西,机器重装收场。

文件操作命令是双刃剑:日常 80% 的操作是它们,90% 的"惨案"也是它们。这篇按"看 → 搬 → 删 → 找 → 打包"的动线把高频命令过一遍,每个都标注哪个参数能救命。


一、看:ls 系列

ls# 列出当前目录ls-l# 长格式:权限、属主、大小、时间(ll 是它的常用别名)ls-a# 含隐藏文件(. 开头)ls-lh# -h 人类可读大小(K/M/G),看日志大小必用ls-lt# 按修改时间倒序(最新的在最上面)——找"刚生成的文件"神器ls-lS# 按大小倒序——找"谁把磁盘吃满了"神器ls-ld/etc# -d 只看目录本身,不看目录内容ls-R/etc/nginx# 递归列出子目录(大目录慎用)

ls -l输出逐字段解读(务必认识每一个):

-rw-r--r-- 1 root root 1070 Oct 20 14:00 nginx.conf └─类型权限 └─链接数 └─属主 └─属组 └─大小(B) └─修改时间 └─文件名

首字符类型速记:-普通文件 /d目录 /l软链接 /b块设备(硬盘)/c字符设备(终端)。权限字段(rw-那三组)下一篇《S1-03 权限》专门讲。

二、搬:cp、mv、scp

2.1 cp 复制

cpa.txt b.txt# 复制文件cp-rdir1 dir2# -r 递归复制目录(没有 -r 复制目录会报错)cp-pa.txt b.txt# -p 保留权限/属主/时间戳(备份配置文件用)cp-ia.txt b.txt# 目标存在时询问(Ubuntu 默认 cp 就带 -i 别名)cp-adir1 dir2# -a 归档模式 = -r + -p + 保留链接,最完整的复制

🚨cp会静默覆盖同名目标文件(带-i别名的发行版除外)。往配置目录复制前,先ls确认目标。

2.2 mv 移动 / 重命名

mva.txt /tmp/# 移动mva.txt b.txt# 重命名(同目录下 mv = 改名)mvdir1 /opt/# 目录移动不需要 -r

特点:同文件系统内mv是改路径指针,瞬间完成,大文件也是;跨文件系统则等价于"复制 + 删除",大文件要等。

2.3 scp:机器之间搬文件

# 推:把本机文件传到远程scpbackup.sh user@192.168.1.11:/opt/scripts/# 拉:把远程文件拉回本机scpuser@192.168.1.11:/etc/nginx/nginx.conf ./# 目录加 -r;指定端口加 -P(注意是大写 P)scp-r-P2222./logs/ user@192.168.1.11:/data/

三、删:rm 与它的安全带

rma.txt# 删文件rm-rdir1# 递归删目录rm-fa.txt# -f 强制(不存在也不报错)rm-ia.txt# 逐个确认(谨慎场景用)rm-rfdir1# 递归强删——就是恐怖故事的主角

3.1 🚨 rm 的三条安全带

  1. 变量为空判断:rm -rf $LOG_DIR/若$LOG_DIR为空就变成rm -rf /。脚本里必须:

    [[-n"$LOG_DIR"]]||{echo"LOG_DIR 未设置";exit1;}rm-rf"${LOG_DIR:?LOG_DIR is empty}"/*# 参数为空时 bash 直接报错拒绝执行
  2. 先看再删:删之前用ls替换rm跑一遍路径——确认列表没毛病,再把命令改回rm。

  3. 通配符前禁用变量拆词:rm -rf $DIR/*(不带引号)在$DIR含空格时路径会劈叉。一律写rm -rf "$DIR"/*。

想要"回收站"?可以装trash-cli(sudo apt install trash-cli,用trash-put代替rm)——个人机器友好,但服务器上不一定让装,真正的回收站是备份。

4️⃣ 顺带一提:rmdir 和 mkdir

mkdir-p/data/app/{logs,conf,bin}# -p 建多级 + 花括号展开一次建三个rmdiremptydir# 只删空目录,安全但用处少

四、找:find——命令行里的搜索引擎

# 基本三要素:路径 + 条件 + 动作find/var/log-name"*.log"# 按名字find/etc-iname"*NGINX*"# 忽略大小写find/-typef-size+100M# 全盘找大于 100M 的普通文件(磁盘告警第一步!)find/data-mtime+7# 7 天前修改过的find/tmp-mmin-30# 30 分钟内修改过的(找"刚出事"的文件)find/opt-userwww-data# 按属主找

4.1 组合技:-exec 和 xargs

# 找到并直接处理:{} 占位,\; 结尾find/data/logs-name"*.log"-mtime+30-execls-lh{}\;# 批量删除 30 天前的日志(经典运维任务)find/data/logs-name"*.log"-mtime+30-delete# 文件名带空格也安全的 xargs 写法find/data-name"*.tmp"-print0|xargs-0rm-f

🚨find ... -delete在多条件场景建议先去掉-delete用-ls跑一遍,确认范围后再删。它和rm -rf是同级别的危险命令。

4.2 locate:先建索引再秒查

sudoaptinstallplocate-ysudoupdatedb# 全盘建索引locatenginx.conf# 秒出结果(不实时,索引每日更新)

选择:locate快但可能过期;find慢但是实时。排错找"刚才生成的文件"用 find,找"系统里装在哪"用 locate。

五、打包压缩:tar 三板斧

Linux 世界.tar.gz/.tgz是通用格式,打包和压缩是两件事——tar 只打包(把一堆文件卷成一个),gz 才是压缩。

# 打包 + 压缩(czf = create + gzip + file)tarczf backup-$(date+%F).tar.gz /data/app# 看包里有什么(不解压)tartzf backup-2026-10-20.tar.gz|head# 解压到指定目录(xf = extract + file,自动识别压缩格式)mkdir/tmp/restore&&tarxzf backup-2026-10-20.tar.gz-C/tmp/restore# 只解压包里的某一个文件tarxzf backup-2026-10-20.tar.gz-C/tmp/restore data/app/nginx.conf
参数全称作用
ccreate创建包
xextract解包
tlist列出内容
zgzip用 gzip 压/解压(.tar.gz)
jbzip2用 bzip2(.tar.bz2,更小更慢)
Jxz用 xz(.tar.xz,最小最慢)
ffile指定文件名,必须放最后(-f后面紧跟文件名)
-Cdirectory解压到指定目录
--exclude排除tar czf a.tgz /data --exclude=/data/logs

🚨tar xzf直接在当前目录解包会"炸一地"文件,规范操作永远是:mkdir 目标目录 && tar xzf 包 -C 目标目录。

其他格式速记(碰到了别懵):

gzipa.txt# 单文件压缩 → a.txt.gz(源文件没了)gunzip a.txt.gz# 解压zip-rdir.zip dir/# 与 Windows 互通用 zipunzipdir.zip-dout/# 解压 zip

六、软链接与硬链接:ln

ln-s/data/app/current/logs /var/log/myapp# 软链接(最常用)ln/data/a.txt /backup/a.txt# 硬链接(少用)
软链接硬链接
本质指向路径的快捷方式同一份数据的第二个名字
跨文件系统✅❌
链接目录✅❌
源被删后失效(红底白字悬空)依然可用(数据还在)

💡 运维高频用法:/etc/nginx下的sites-enabled/里全是指向sites-available/的软链接——“启用某站点” = 建软链接,这是 Debian 系配置管理的经典套路。软链接必须用绝对路径创建,相对路径的软链接换个目录引用就断了。

七、综合实战:磁盘告警时的标准动作

把本篇命令串成一个真实工作流(模拟你 Runbook 里"磁盘 85%"场景):

# ① 全盘找大文件(top 10)sudofind/-xdev-typef-size+100M-execls-lh{}\;2>/dev/null|sort-k5-h|tail-10# ② 日志目录里谁最大du-sh/var/log/*|sort-h|tail-5# ③ 确认后打包带走再删(留现场证据)sudotarczf /root/old-logs-$(date+%F).tar.gz /var/log/app/sudorm-rf/var/log/app/*.log.1# ④ 建立长效机制 → 这是第 8 篇 logrotate 的活

验收标准:不看文章能写出——① 找出全盘前 10 大文件;② 把/data/app打包成带日期的 tar.gz;③ 安全删除 30 天前的日志(先预览再删)。


八、🚨 避坑清单

#坑后果正确姿势
1rm -rf / xx多空格🚨 灾难危险命令敲完停 1 秒再回车;路径用引号
2变量为空 +rm -rf $DIR/🚨 灾难${DIR:?}防空语法
3tar xzf在当前目录裸解文件炸一地-C 目标目录
4cp静默覆盖配置被顶掉覆盖前ls;重要目录用cp -a前先备份
5相对路径软链接移动后断链ln -s一律用绝对路径
6find /不加-xdev扫进 /proc、跨挂载点,慢且报错刷屏全盘扫描加-xdev+2>/dev/null
7删日志销毁现场故障没法复盘大日志先打包留存再删
8scp -p当指定端口卡死(小写 -p 是保留时间戳)scp 端口用大写 -P,ssh 才是小写 -p

九、一句话总结

先看(ls -lht)再动(cp/mv 带 -a/-i),删除前先预览,打包必进目录(-C),全盘找文件 -size +100M——文件操作的安全感来自流程,不是手速。

💬 互动

你经历过最惊险的 rm 是哪次?是删错了环境(生产当测试删),还是多打了一个空格?评论区讲讲,让大伙儿引以为戒。

下一篇预告:《S1-03 Linux 用户、组与权限:chmod、chown、sudo、umask 一文搞懂》——ls -l里那串rw-r--r--到底怎么读、Permission denied到底怪谁。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询