Linux(CentOS)系统管理入门笔记(第四期)——文件系统(下篇):文件与目录操作实战——cpmvmkdirrmln

Linux(CentOS)系统管理入门笔记(第四期)------文件系统(下篇):文件与目录操作实战------cp/mv/mkdir/rm/ln

知识衔接:

Linux(CentOS)系统管理入门笔记(第三期)------文件系统(上篇):目录结构与路径导航------FHS 与 cdpwdls

Linux系统管理入门系列其他文章欢迎访问:Linux入门------系统管理1

我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
写在前面:大家好,我是北冰洋whisky,从昨天开始,我正式启动了对以前一阶段笔记的"翻新"计划。一路学习到三阶段,经历了不少的坎坷,离步入工作的时间节点越来越近的同时,我倍感基本功扎实的重要性。因此,除了知识点笔记整理的这条主线,我也主动开辟了知识点自测的支线计划。希望在后面的日子里,也能与各位共同进步!

引言:文件操作,Linux 世界里的"整理术"

上期我们拿到了 Linux 的"城市地图"(FHS),学会了"导航"(cd/pwd/ls)。但你到了目的地之后,总得干点什么------也许是要把一份文件"复印"一份放到别处(复制),也许是"搬家"(移动),也许是要"建个新仓库"(创建目录),或者"扔掉不要的旧东西"(删除)。

这些听起来简单,但 Linux 的文件操作有着自己的一套规则和"坑":cp 复制目录要加 -r,否则报错;rm 删除后几乎是不可恢复的;mv 既能移动又能重命名,一念之间功能切换;软链接和硬链接看似相似,本质却截然不同。

此外,当你要操作 100 个文件时,一个"通配符"能顶 100 次敲键盘------这是命令行效率的真正体现。

本期,我们全面掌握文件与目录的增、删、改、查、移、链 六大操作,并学会用 Shell 扩展匹配(通配符) 实现批量处理。读完这一期,你将具备在 Linux 文件系统中自如"整理家务" 的能力。
--- Compiled and Authored by Whisky --- July 7 th, 2026

目录

  1. 创建目录:mkdir
  2. 复制文件与目录:cp
  3. 移动与重命名:mv
  4. 删除文件与目录:rm 与 rmdir
  5. 软链接与硬链接:ln
  6. Shell 扩展匹配:通配符的艺术
  7. 总结与速查手册

1. 创建目录:mkdir

mkdir(Make Directory)是创建目录的唯一命令。它看似简单,但有几个关键用法必须掌握。

1.1 基础用法

bash 复制代码
# 在当前目录下创建一个目录
[whisky@centos7 ~]$ mkdir lab
[whisky@centos7 ~]$ ls -ld lab
drwxrwxr-x. 2 whisky whisky 6 7月  7 15:30 lab

# 同时创建多个目录
[whisky@centos7 ~]$ mkdir dir1 dir2 dir3
[whisky@centos7 ~]$ ls -d dir*
dir1  dir2  dir3

1.2 级联创建:-p 选项(最常用)

如果父目录不存在,mkdir 会报错:

bash 复制代码
[whisky@centos7 ~]$ mkdir dir1/dir2/dir3/dir4
mkdir: 无法创建目录"dir1/dir2/dir3/dir4": 没有那个文件或目录

使用 -p 选项可以一次性创建整个路径上的所有缺失目录:

bash 复制代码
[whisky@centos7 ~]$ mkdir -p dir1/dir2/dir3/dir4
[whisky@centos7 ~]$ tree dir1
dir1
└── dir2
    └── dir3
        └── dir4

3 directories, 0 files

💡 生产环境最佳实践 :在脚本中创建目录时,始终使用 mkdir -p 。即使目录已存在,-p 也不会报错(幂等操作),这比先用 test -d 判断再创建要简洁得多。

1.3 设置权限:-m 选项

默认情况下,mkdir 创建目录的权限受 umask 影响(详见后续章节)。如需在创建时指定权限,使用 -m

bash 复制代码
# 创建一个权限为 700(仅属主可读写执行)的目录
[whisky@centos7 ~]$ mkdir -m 700 private_dir
[whisky@centos7 ~]$ ls -ld private_dir
drwx------. 2 whisky whisky 6 7月  7 15:35 private_dir

1.4 mkdir 选项速查

选项 作用 示例
-p 级联创建父目录 mkdir -p /a/b/c/d
-m 创建时指定权限(八进制) mkdir -m 755 public
-v 显示创建过程(verbose) mkdir -v newdir

2. 复制文件与目录:cp

cp(Copy)用于复制文件或目录。Linux 的 cp 有许多细节值得注意。

2.1 复制文件

bash 复制代码
# 准备实验环境
[whisky@centos7 ~]$ cd lab
[whisky@centos7 lab]$ pwd
/home/whisky/lab

# 复制单个文件到当前目录(. 表示当前目录)
[whisky@centos7 lab]$ cp /etc/hosts .
[whisky@centos7 lab]$ ls
hosts

# 复制并重命名
[whisky@centos7 lab]$ cp /etc/hosts ./hosts.bak
[whisky@centos7 lab]$ ls
hosts  hosts.bak

# 复制多个文件,目标必须是已存在的目录
[whisky@centos7 lab]$ cp /etc/passwd /etc/host.conf .
[whisky@centos7 lab]$ ls
host.conf  hosts  hosts.bak  passwd

2.2 复制目录:-r-R 选项

复制目录必须使用递归选项,否则会报错:

bash 复制代码
# 错误方式(不加 -r)
[whisky@centos7 lab]$ cp /etc/yum .
cp: 略过目录"/etc/yum"

# 正确方式
[whisky@centos7 lab]$ cp -r /etc/yum .
[whisky@centos7 lab]$ ls
host.conf  hosts  hosts.bak  passwd  yum

2.3 复制目录时的"覆盖行为"陷阱

当目标目录已存在 时,cp -r 的行为与直觉相反:

bash 复制代码
# 当前 yum 目录已存在
[whisky@centos7 lab]$ ls yum
fssnap.d  pluginconf.d  protected.d  vars  version-groups.conf

# 再次复制 /etc/yum 到 ./yum(目标目录已存在)
[whisky@centos7 lab]$ cp -r /etc/yum ./yum

# 结果:源目录被复制到了 ./yum/yum 下面!
[whisky@centos7 lab]$ ls yum
fssnap.d  pluginconf.d  protected.d  vars  version-groups.conf  yum
[whisky@centos7 lab]$ ls yum/yum/
fssnap.d  pluginconf.d  protected.d  vars  version-groups.conf

⚠️ 常见误区 :很多新手以为"cp -r /etc/yum ./yum 会覆盖当前 yum 目录的内容"。实际上不会 ------如果目标目录已存在,cp 会把源目录作为子目录 复制进去,而不是覆盖。要合并覆盖,需要额外的技巧(如 rsync -a)。

2.4 常用选项

bash 复制代码
# -i:覆盖前询问(安全第一)
[whisky@centos7 lab]$ cp -i /etc/hosts ./hosts
cp:是否覆盖"./hosts"? y

# -f:强制覆盖(不询问)
cp -f /etc/hosts ./hosts

# -p:保留原文件的权限、时间戳等属性
cp -p /etc/hosts ./hosts-p

# -a:归档模式(等于 -dpR),保留所有属性并递归复制目录
# 常用于备份
cp -a /etc/yum ./yum-backup

# -u:仅当源文件比目标文件新时才复制(增量复制)
cp -u /etc/hosts ./hosts

# -v:显示复制过程
cp -v /etc/hosts .
'/etc/hosts' -> './hosts'

2.5 cp 选项速查表

选项 作用 使用场景
-r / -R 递归复制目录 必加(复制目录时)
-i 覆盖前交互确认 日常操作,防止误覆盖
-f 强制覆盖,不询问 脚本中确定要覆盖
-p 保留属性(权限、时间戳) 备份时保持原样
-a 归档模式(=-dpR 完整备份目录
-u 增量复制(源更新才复制) 同步更新文件
-v 显示复制过程 调试或确认操作

2.6 复制文件的标准操作流程

bash 复制代码
# 安全模式:先确认目标是否存在,用 -i 保护
cp -i source.txt /target/path/

# 批量备份模式:保留所有属性
cp -ap /etc/important/ /backup/important/

3. 移动与重命名:mv

mv(Move)有两个功能:

  1. 移动文件/目录到另一个位置
  2. 重命名文件/目录(当目标在同一目录时)

3.1 移动文件

bash 复制代码
# 准备实验环境:创建目标目录
[whisky@centos7 lab]$ mkdir ../backup

# 移动单个文件到另一个目录
[whisky@centos7 lab]$ mv hosts.bak ../backup/
[whisky@centos7 lab]$ ls ../backup/
hosts.bak

# 移动多个文件,目标必须是已存在的目录
[whisky@centos7 lab]$ mv passwd host.conf ../backup/
[whisky@centos7 lab]$ ls
hosts  yum
[whisky@centos7 lab]$ ls ../backup/
host.conf  hosts.bak  passwd

3.2 重命名(同一目录下移动)

bash 复制代码
# 重命名文件
[whisky@centos7 lab]$ ls
hosts  yum
[whisky@centos7 lab]$ mv hosts hosts.original
[whisky@centos7 lab]$ ls
hosts.original  yum

# 重命名目录
[whisky@centos7 lab]$ mv yum yum-backup
[whisky@centos7 lab]$ ls
hosts.original  yum-backup

3.3 移动目录

bash 复制代码
# 移动单个目录到另一个位置
[whisky@centos7 lab]$ mv yum-backup ../backup/
[whisky@centos7 lab]$ ls ../backup/
host.conf  hosts.bak  passwd  yum-backup

# 如果目标目录已存在,mv 的行为与 cp 类似:将源目录作为子目录移入
[whisky@centos7 lab]$ mkdir ../backup/subdir
[whisky@centos7 lab]$ mv ../backup/yum-backup ../backup/subdir/
[whisky@centos7 lab]$ ls ../backup/subdir/
yum-backup

3.4 mv 与 cp 的关键区别

操作 cp(复制) mv(移动)
源文件是否存在 保留 消失(被移走)
磁盘空间 占用双份 不额外占用(只是改变目录项)
跨文件系统 必须读写数据 先复制再删除原文件
速度 慢(取决于数据量) 快(同一文件系统内只是改指针)

💡 最佳实践 :在同一磁盘分区内,mv 几乎是瞬间完成的(不移动实际数据,只修改目录项)。而 cp 要实际读写数据,慢得多。因此,只在"需要保留原件"时用 cp,其他情况优先用 mv

3.5 mv 选项速查

选项 作用
-i 覆盖前询问确认
-f 强制覆盖,不询问
-u 仅当源文件比目标文件新时移动(增量)
-v 显示移动过程

4. 删除文件与目录:rm 与 rmdir

删除操作在 Linux 中是不可逆的(没有 Windows 的"回收站")。务必谨慎。

4.1 rmdir ------ 只能删除空目录

bash 复制代码
# 删除空目录
[whisky@centos7 lab]$ mkdir empty_dir
[whisky@centos7 lab]$ rmdir empty_dir

# 尝试删除非空目录会失败
[whisky@centos7 lab]$ rmdir ../backup
rmdir: 删除 "../backup" 失败: 目录非空

rmdir 只对空目录有效,实用性有限。

4.2 rm ------ 通用删除工具

bash 复制代码
# 删除文件
[whisky@centos7 lab]$ rm hosts.original
# 默认会询问(如果文件有写保护)
rm:是否删除有写保护的普通文件 "hosts.original"?y

# 删除多个文件
[whisky@centos7 lab]$ rm file1 file2 file3

# 强制删除(不询问)
rm -f hosts.original

4.3 删除目录:-r 选项

bash 复制代码
# 递归删除目录及其所有内容
[whisky@centos7 lab]$ rm -r ../backup/yum-backup

# 强制递归删除(最常见用法)
[whisky@centos7 lab]$ rm -rf ../backup

4.4 ⚠️ rm -rf ------ 双刃剑

rm -rf 是 Linux 中最危险也最常用的组合:

组合 含义 风险等级
rm file 删除文件(有确认提示)
rm -f file 强制删除文件(不确认)
rm -r dir 递归删除目录
rm -rf dir 强制递归删除(不确认) 极高

⚠️ 经典灾难rm -rf /rm -rf /* 会删除整个系统。另一个常见的危险操作是 rm -rf $VAR/,如果 $VAR 变量为空,实际执行的是 rm -rf /

安全操作规范:

  1. 删除前先用 ls 确认要删除的内容
  2. 使用相对路径而非绝对路径(降低误删风险)
  3. 重要文件删除前先用 mv 移到 /tmp 暂存,确认无误再删
  4. 脚本中用 rm -rf 前,先检查变量是否为空
bash 复制代码
# 安全删除示例:先确认路径
[whisky@centos7 lab]$ echo "要删除的目录是: $DIR"
要删除的目录是: /home/whisky/temp
[whisky@centos7 lab]$ rm -rf "$DIR"

4.5 rm 与 rmdir 对比

命令 适用对象 是否可删除非空内容
rmdir 目录 ❌ 必须为空
rm 文件 N/A
rm -r 目录 ✅ 递归删除所有内容

5. 软链接与硬链接:ln

链接(link)是 Linux 文件系统中非常独特的概念。软链接(符号链接) 像 Windows 的"快捷方式",而硬链接则是一个文件有多个"名字"。

5.1 软链接(符号链接)

软链接是一个独立的文件,其内容指向另一个文件的路径。

bash 复制代码
# 创建软链接:ln -s 目标 链接名
[whisky@centos7 lab]$ ln -s /var/tmp/ mytmp
[whisky@centos7 lab]$ ls -l mytmp
lrwxrwxrwx. 1 whisky whisky 9 7月  7 16:00 mytmp -> /var/tmp/

# 通过软链接访问目标目录
[whisky@centos7 lab]$ ls mytmp/
abrt  systemd-private-xxx  ...

# 在软链接目录中创建文件,实际存储在目标目录
[whisky@centos7 lab]$ touch mytmp/testfile
[whisky@centos7 lab]$ ls /var/tmp/testfile
/var/tmp/testfile
软链接的特性
特性 说明
文件类型 独立文件,l 开头
大小 存储的是目标路径的字符数
权限 权限始终为 lrwxrwxrwx,实际权限取决于目标文件
跨文件系统 ✅ 可以
链接目录 ✅ 可以
目标删除后 链接失效("断链",显示红色闪烁)
相对路径 可以用相对路径,但建议用绝对路径

💡 最佳实践 :创建软链接时,目标路径尽量使用绝对路径,否则一旦链接文件被移动,相对路径的目标可能找不到了。

bash 复制代码
# ❌ 不推荐(相对路径)
ln -s ../var/tmp/ mytmp

# ✅ 推荐(绝对路径)
ln -s /var/tmp/ mytmp
错误示范:相对路径的陷阱
bash 复制代码
[whisky@centos7 lab]$ ln -s . tmp1
[whisky@centos7 lab]$ ls -l tmp1
lrwxrwxrwx. 1 whisky whisky 1 7月  7 16:05 tmp1 -> .
# 此时 tmp1 指向当前目录,ls tmp1 看到的是当前目录的内容

# 但如果把 tmp1 移动到其他地方,它就指向"移动后的目标位置"
# 所以软链接务必谨慎使用相对路径

5.2 硬链接

硬链接不是独立文件,而是同一文件的另一个目录项(文件名)。 多个硬链接指向同一个 inode(数据块)。

bash 复制代码
# 准备文件
[whisky@centos7 lab]$ cp /etc/hosts ./hosts-1

# 创建硬链接
[whisky@centos7 lab]$ ln hosts-1 hosts-2

# 查看:两个文件大小、权限完全相同,且硬链接数从 1 变为 2
[whisky@centos7 lab]$ ls -l hosts-1 hosts-2
-rw-r--r--. 2 whisky whisky 158 7月  7 16:10 hosts-1
-rw-r--r--. 2 whisky whisky 158 7月  7 16:10 hosts-2

# 查看 inode 号(相同的 inode 说明指向同一数据)
[whisky@centos7 lab]$ ls -i hosts-1 hosts-2
33554556 hosts-1
33554556 hosts-2
验证:修改一个,另一个同步变化
bash 复制代码
# 修改 hosts-1 内容
[whisky@centos7 lab]$ echo "192.168.1.100 myserver" >> hosts-1

# hosts-2 也同步变化
[whisky@centos7 lab]$ cat hosts-2
127.0.0.1   localhost localhost.localdomain ...
::1         localhost localhost.localdomain ...
192.168.1.100 myserver
硬链接的特性
特性 说明
文件类型 普通文件(与源文件相同)
inode 与源文件相同
硬链接数 每增加一个硬链接,计数 +1
跨文件系统 ❌ 不可以(不同文件系统的 inode 编号不互通)
链接目录 ❌ 不可以(防止循环引用)
目标删除后 数据仍然存在(只要还有一个硬链接)
存储空间 不额外占用数据块(只是增加了一个目录项)

5.3 软链接 vs 硬链接 对比

维度 软链接(符号链接) 硬链接
本质 独立的文件,指向目标路径 同一文件的另一个"名字"
inode 不同 相同
跨文件系统 ✅ 可以 ❌ 不可以
可链接目录 ✅ 可以 ❌ 不可以
源文件删除后 ❌ 链接失效(断链) ✅ 数据仍可访问
占用额外空间 极小(存储路径字符串) 仅增加目录项(约几十字节)
识别方式 lrwxrwxrwx,有 -> 箭头 与普通文件无异,看硬链接数 >1

5.4 链接的实际应用场景

场景 推荐类型 原因
快捷访问深层目录 软链接 例如 ln -s /var/log/nginx ~/nginx-logs
版本切换(如 JDK) 软链接 java -> /usr/lib/jvm/java-11/bin/java
共享库版本管理 软链接 libc.so.6 -> libc-2.17.so
同一文件多个备份名 硬链接 节省空间,任一名称均可访问
避免误删重要数据 硬链接 只要还有一个链接,数据就不丢失

6. Shell 扩展匹配:通配符的艺术

当你要操作 100 个文件时,逐个输入文件名是极其低效的。Shell 通配符(Globbing) 让你用模式匹配批量选中文件。

6.1 通配符分类速查表

模式 匹配规则 示例
* 任意长度(含空)的任意字符 *.txt 匹配所有 txt 文件
? 单个任意字符 file-?.txt 匹配 file-1.txt,不匹配 file-10.txt
[abc] 括号中的任意一个字符 file-[abc].txt 匹配 file-a.txtfile-b.txt
[^abc][!abc] 不在括号中的任意字符 file-[^0-9].txt 匹配不含数字的文件名
[0-9] 范围匹配 file-[0-9].txt 匹配 file-0file-9
{a,b,c} 花括号展开(不是模式匹配,是字符串展开 echo {a,b,c}.txta.txt b.txt c.txt
{1..5} 数字范围展开 touch file-{1..5}.txt 创建 5 个文件
~ 当前用户家目录 cd ~/Documents
~username 指定用户的家目录 ls ~root

6.2 字符类(POSIX 字符集)

字符类 等价于 匹配范围
[[:alpha:]] [a-zA-Z] 所有字母
[[:lower:]] [a-z] 所有小写字母
[[:upper:]] [A-Z] 所有大写字母
[[:digit:]] [0-9] 所有数字
[[:alnum:]] [a-zA-Z0-9] 所有字母和数字
[[:space:]] 空格/制表符/换行等 空白字符
[[:punct:]] .,!?;: 标点符号(不含空格和字母数字)

6.3 实战示例

* ------ 匹配任意字符串
bash 复制代码
# 准备实验文件
[whisky@centos7 lab]$ touch file-1 file-2 file-a file-b file-10

# 匹配所有 file- 开头的文件
[whisky@centos7 lab]$ ls file-*
file-1  file-10  file-2  file-a  file-b

# 匹配所有 .txt 文件
[whisky@centos7 lab]$ ls *.txt
# 列出当前目录所有 txt 文件

# 复制 /etc 下所有 hosts 开头的文件到当前目录
[whisky@centos7 lab]$ cp /etc/hosts* .
[whisky@centos7 lab]$ ls hosts*
hosts  hosts.allow  hosts.deny
? ------ 匹配单个字符
bash 复制代码
# 匹配 file- 后跟 1 个字符的文件
[whisky@centos7 lab]$ ls file-?
file-1  file-2  file-a  file-b
# file-10 不匹配(因为 ? 只能匹配一个字符)

# 匹配 file- 后跟 2 个字符的文件
[whisky@centos7 lab]$ ls file-??
file-10
[] ------ 匹配指定字符集
bash 复制代码
# 匹配 file- 后跟数字的文件
[whisky@centos7 lab]$ ls file-[0-9]
file-1  file-2

# 匹配 file- 后跟字母 a 或 b 的文件
[whisky@centos7 lab]$ ls file-[ab]
file-a  file-b

# 匹配不以数字结尾的文件
[whisky@centos7 lab]$ ls file-[^0-9]
file-a  file-b
字符类示例
bash 复制代码
# 准备更多文件
[whisky@centos7 lab]$ touch file-A file-Z file-z file-9

# 匹配所有数字
[whisky@centos7 lab]$ ls file-[[:digit:]]
file-1  file-2  file-9

# 匹配所有大写字母
[whisky@centos7 lab]$ ls file-[[:upper:]]
file-A  file-Z

# 匹配所有字母(大小写)
[whisky@centos7 lab]$ ls file-[[:alpha:]]
file-a  file-A  file-b  file-z  file-Z
{} ------ 花括号展开(批量创建/操作)

{} 不是匹配已存在的文件,而是展开生成字符串列表

bash 复制代码
# 批量创建文件
[whisky@centos7 lab]$ touch file-{1..6}.txt
[whisky@centos7 lab]$ ls
file-1.txt  file-2.txt  file-3.txt  file-4.txt  file-5.txt  file-6.txt

# 批量创建目录
[whisky@centos7 lab]$ mkdir -p {Music,Pictures,Videos}/{2024,2025}
[whisky@centos7 lab]$ tree
.
├── Music
│   ├── 2024
│   └── 2025
├── Pictures
│   ├── 2024
│   └── 2025
└── Videos
    ├── 2024
    └── 2025

# 组合使用
[whisky@centos7 lab]$ echo file-{a,b,c}-{1,2}.txt
file-a-1.txt file-a-2.txt file-b-1.txt file-b-2.txt file-c-1.txt file-c-2.txt

⚠️ 重要区别*?[]通配符匹配 ------它们会去匹配实际存在的文件名。{}字符串展开 ------它不关心文件是否存在,只是按规则生成字符串。所以 rm file-{1..100}.txt 即使某些文件不存在也不会报错(当然也不会删除不存在的文件)。

6.4 通配符使用场景速查

场景 通配符写法 说明
删除所有 .log 文件 rm *.log 谨慎操作
复制所有以 conf 结尾的文件 cp *conf /backup/
查看第 1-9 个文件 ls file-[1-9] 注意 [1-9] 不匹配两位数
批量重命名 for f in *.txt; do mv "$f" "${f%.txt}.bak"; done 结合循环
批量创建 100 个目录 mkdir dir-{1..100} {} 展开
列出所有隐藏文件 ls .[!.]* 不包含 ...

7. 总结与速查手册

7.1 核心知识点一览

主题 关键点
mkdir -p 级联创建,-m 指定权限
cp 复制目录必须加 -r,目标目录存在时会作为子目录复制进去
mv 移动 + 重命名,同一文件系统内极快(只改目录项)
rm 删除不可逆!rm -rf 是双刃剑,慎用
软链接 ln -s,指向路径,可跨文件系统,目标删除则失效
硬链接 ln,同一 inode 的多个名字,不可跨文件系统,不可链接目录
通配符 *(任意)、?(单字符)、[](字符集)、{}(展开)

7.2 本章命令速查表

命令 常用形式 作用
mkdir mkdir -p /a/b/c 创建目录(含父目录)
cp cp -r source/ target/ 递归复制目录
mv mv file1 file2 移动或重命名
rm rm -rf dir/ 强制递归删除(⚠️ 慎用)
rmdir rmdir empty_dir/ 删除空目录
ln -s ln -s /target link 创建软链接
ln ln file1 file2 创建硬链接

7.3 文件操作对比一览

操作 单个文件 多个文件 目录(递归)
复制 cp a b cp a b c target_dir/ cp -r a_dir b_dir
移动 mv a b mv a b c target_dir/ mv a_dir b_dir
删除 rm a rm a b c rm -r a_dir

7.4 通配符速查卡

模式 匹配规则 示例匹配
* 任意长度(含 0)任意字符 *.txta.txtb.txt
? 恰好 1 个任意字符 file-?.txtfile-1.txt,不匹配 file-10.txt
[abc] a、b、c 中任意一个 file-[abc].txtfile-a.txt
[^abc] 不是 a、b、c 的任意字符 file-[^0-9].txtfile-a.txt
[0-9] 0~9 任意一个数字 file-[0-9].txtfile-1.txt
{a,b,c} 展开为 a、b、c echo {a,b}.txta.txt b.txt
{1..5} 展开为 1~5 touch file-{1..5}.txt → 创建 5 个文件

7.5 软链接与硬链接速查表

维度 软链接 硬链接
创建命令 ln -s ln
文件类型 l(独立文件) -(普通文件)
inode 不同 相同
跨文件系统
链接目录
源删除后 失效(断链) 仍然有效
占用额外空间 路径字符串大小 仅目录项

7.6 常见错误排查指南

错误信息 原因 解决方案
cp: 略过目录"xxx" 复制目录未加 -r -r 选项
rmdir: 删除失败: 目录非空 目录中有文件/子目录 rm -r 代替
ln: 无法创建硬链接: 无效的跨设备链接 硬链接跨文件系统 用软链接代替
ls: 无法访问: 没有那个文件或目录 通配符没有匹配到任何文件 检查通配符语法是否正确
执行 rm -rf $VAR/ 删除了整个系统 $VAR 变量为空 删除前先检查变量:echo "删除路径: $VAR"

7.7 思考与拓展(原课后作业转化)

  1. cp -rcp -a 有什么区别?
    -a(archive)等于 -dR --preserve=all,会保留权限、时间戳、所有者、硬链接关系等所有元数据;-r 只做递归复制,不保留这些属性。备份场景优先用 -a
  2. 为什么 rm 删除的文件无法恢复?
    rm 只是删除了文件名与 inode 的关联,并标记数据块为"空闲"。除非立即用专业工具扫描,否则数据块可能被新文件覆盖。Linux 没有"回收站"机制。
  3. 硬链接数的含义是什么?
    → 硬链接数表示"有多少个目录项指向同一个 inode"。创建新目录时,硬链接数会包含 ...。例如一个新空目录的硬链接数为 2(dir/ 自身 + dir/.)。
  4. 什么时候用软链接,什么时候用硬链接?
    → 链接目录用软链接;跨文件系统用软链接;想节省空间且同一文件系统内用硬链接;想让文件"防误删"用硬链接。
  5. rm -rf \*rm -rf \* .\* 有什么区别?
    rm -rf * 只删除非隐藏文件;rm -rf * .* 会匹配 ...,导致当前目录和父目录也被删除------极其危险,永远不要执行!

7.8 生产环境最佳实践

场景 建议
日常删除 ls 确认再 rm,或者先 mv/tmp 暂存
批量操作 先用 echo 测试通配符是否匹配正确,再执行实际命令
脚本中的 rm -rf 执行前必须检查变量非空:[ -n "$DIR" ] && rm -rf "$DIR"
备份文件 cp -a 保留完整属性
跨文件系统移动大文件 rsync -av --remove-source-files 代替 mv,支持断点续传
创建软链接 目标路径使用绝对路径,避免链接文件移动后失效

下期预告 :你已经能在 Linux 文件系统中自由"行走"和"整理"了,但遇到不会用的命令怎么办?下一期我们将学习 Linux 的"自学指南"------获取帮助 。从 man 手册的章节划分,到 --help 选项,再到 /usr/share/doc 下的文档和 which/whereis 查找工具,你将掌握"永远不再依赖搜索引擎"的自学方法论。同时我们还会进入 vim 编辑器的世界------它可能是学习曲线最陡但回报最高的工具。敬请期待第五期!
--- Compiled and Authored by Whisky --- July 7 th, 2026

相关推荐
weixin_3077791314 小时前
Linux下Docker Compose里运行PostgreSQL数据库故障诊断Shell脚本
linux·运维·数据库·docker·postgresql
AI创界者14 小时前
安全测试环境搭建:在 Kali Linux 中部署与配置开源 WebShell 管理工具 AntSword(蚁剑)
linux·运维·安全
猪头少年不会遇见算法学姐15 小时前
Makefile快速上手笔记
linux·学习
qiu_lovejun99815 小时前
linux安装docker和redis和rabbitmq和nginx和rocketmq和kafka
linux·redis·docker·kafka·rabbitmq·rocketmq
运维大师15 小时前
【Linux运维极简教程】04-进程与服务管理
linux·运维
keke.shengfengpolang15 小时前
自动化考什么证书对就业有帮助?
运维·自动化
源码学社15 小时前
Spug 3.0 Ubuntu 22.04 Docker 部署文档
linux·ubuntu·docker·windows安装·spug
tebukaopu14815 小时前
ubuntu挂载nfs
linux·运维·ubuntu
雾沉川16 小时前
Netcatty 开源 SSH 客户端完整技术使用教程
运维·开源·ssh
石小千16 小时前
修改Docker Engine 存储路径
运维·docker·容器