
🐧 Linux 从零到实战 · 第1阶段 · 第1.2章:文件与目录的 CRUD 操作
在本章中,我们将学习 Linux 文件系统最核心的操作:CRUD(Create 创建, Read 读取, Update 更新, Delete 删除)。同时,我们将揭开 Linux 文件系统的底层秘密 —— inode,并以此理解极易混淆的“硬链接”与“软链接”。
🎨 核心概念可视化 · AI 生成🎯 本节目标
- 熟练使用
touch,mkdir,cp,mv,rm等基础命令。 - 理解
inode的概念及其在文件系统中的作用。 - 能够分辨硬链接与软链接的区别,并在实际场景中正确选择。
- 建立对
rm -rf等危险命令的敬畏心。
💡 核心概念
1. 什么是 CRUD?
在计算机领域,CRUD 代表了对数据最基本的操作。在 Linux 文件系统中,它对应如下: - Create (创建):创建新文件或新目录。 - Read (读取):查看文件内容或列出目录(本章重点在操纵,读取将在 1.3 章详解)。 - Update (更新):包括修改文件内容、重命名文件或移动文件位置。 - Delete (删除):移除文件或目录。
图:文件系统的四大基础操作 CRUD,是本章所有命令的主线。
2. 深度解析:inode (索引节点)
要理解 Linux 的链接机制,必须先理解 inode。
想象一个图书馆: - 文件内容:书页上的文字(存储在磁盘的 Data Block 中)。 - inode:图书索引卡。卡片上记录了这本书在哪个书架、哪一层、谁能看、什么时候写的,但不记录书名。 - 文件名:书脊上的标签。标签指向索引卡(inode)。
在 Linux 中,文件名 $\rightarrow$ inode $\rightarrow$ 实际数据。
当你执行 ls -i 时,可以看到文件左侧的数字,那就是该文件的 inode 号。
图:文件名只是指向 inode 的“标签”,inode 才真正记录数据位置。
3. 硬链接 vs 软链接
| 特性 | 硬链接 (Hard Link) | 软链接 (Symbolic Link) |
|---|---|---|
| 本质 | 另一个指向同一 inode 的文件名 | 一个独立文件,内容是原文件的路径 |
| inode 号 | 与原文件完全相同 | 拥有独立的 inode 号 |
| 删除原文件 | 文件依然存在,只要还有一个硬链接 | 链接失效,变为“死链” (Broken Link) |
| 跨分区 | 不支持(不能跨文件系统) | 支持 |
| 目录链接 | 不允许为目录创建硬链接 | 允许 |
| 类比 | 给同一个人起两个名字 | Windows 的“快捷方式” |
图:硬链接共享 inode,软链接只记录路径——这是两者最本质的区别。
🛠️ 命令与操作
1. 创建 (Create)
创建文件:touch
touch 最常用的功能是创建空文件。
touch file1.txt # 创建单个空文件
touch file{1..3}.txt # 快速创建 file1.txt, file2.txt, file3.txt
创建目录:mkdir
mkdir my_folder # 创建文件夹
mkdir -p a/b/c # 【重点】递归创建:如果父目录不存在,自动创建所有层级
图:touch 建文件、mkdir -p 一键递归建目录。
2. 更新与移动 (Update/Move)
复制:cp (Copy)
cp file1.txt file1_bak.txt # 复制文件
cp -r folder1 folder2 # 【重点】递归复制:复制整个目录及其内容
移动/重命名:mv (Move)
在 Linux 中,移动文件和重命名文件使用的是同一个命令。
mv old_name.txt new_name.txt # 重命名
mv file1.txt /tmp/ # 移动到 /tmp 目录
图:cp 生成副本,mv 在文件夹间移动或原地改名。
3. 删除 (Delete)
删除文件/目录:rm (Remove)
⚠️ 警告:Linux 默认没有“回收站”,rm 删除后极难找回!
rm file1.txt # 删除单个文件
rm -r my_folder # 递归删除目录及其所有内容
rm -rf /path/to/dir # 强制递归删除 (Recursive & Force)
图:rm 删除不可逆,rm -rf 更是高危命令,执行前务必确认路径。
避坑: 永远不要在不确定的情况下执行 rm -rf / 或 rm -rf *。建议在执行前先用 ls 确认当前路径。
4. 链接 (Link)
创建硬链接:ln
ln original.txt hardlink.txt # 创建硬链接
ls -i # 观察发现两者 inode 号一致
创建软链接:ln -s
ln -s /absolute/path/orig.txt softlink.txt # 创建软链接
💡 提示: 创建软链接时,建议目标文件使用 绝对路径,否则当你移动软链接文件后,它会因为找不到相对路径而失效。
📋 速查表
| 操作 | 命令 | 常用参数 | 说明 |
|---|---|---|---|
| 创建文件 | touch |
- | 创建空文件 |
| 创建目录 | mkdir |
-p |
递归创建多级目录 |
| 复制 | cp |
-r |
递归复制目录 |
| 移动/重命名 | mv |
- | 移动或改名 |
| 删除 | rm |
-rf |
强制递归删除 (极危险) |
| 硬链接 | ln |
- | 指向同一 inode |
| 软链接 | ln -s |
- | 创建路径快捷方式 |
🚧 避坑指南
rm -rf的恐惧:在执行rm -rf之前,养成习惯先输入pwd确认当前位置,或者先用ls检查要删除的文件列表。- 软链接断链:如果你创建了
ln -s fileA linkA,随后执行mv fileA fileB,那么linkA将失效。 - 硬链接跨区:尝试将
/home分区的文件硬链接到/boot分区会报错,因为 inode 是文件系统内部的唯一标识,不能跨越不同的分区。
📝 课后练习
- 目录树构建:在当前目录下创建
study/linux/lesson1这样的三级目录结构。 - 链接实验:
- 创建一个文件
test.txt。 - 为其创建硬链接
hard_test和软链接soft_test。 - 使用
ls -i查看三个文件的 inode 号。 - 删除
test.txt,尝试读取hard_test和soft_test的内容,观察谁失效了。 - 批量操作:使用
touch一次性创建 10 个名为tmp1.log到tmp10.log的文件,然后用rm一次性删除它们。
📚 参考
man touch,man mkdir,man cp,man mv,man rm,man ln- Linux FHS (Filesystem Hierarchy Standard)