操作文件与目录
目标
熟练掌握创建和移动文件与目录、通过链接建立关联,以及打包备份的完整流程。尤其要通过 inode 编号亲自确认硬链接与符号链接有何不同。
为什么重要
在 Linux 中,文件名不是实体本身,而是指向实体的引用。目录不过是(名称、inode 编号)组合的列表,数据真正的所有者是 inode。理解这一结构后,就能同时解释‘为什么 mv 移动 1GB 文件也能瞬间完成’、‘为什么执行 rm 后空间仍不减少’、‘为什么硬链接无法跨磁盘创建’。反之,如果不了解这一结构,就只能把这三种情况分别记成互不相关的异常现象。
步骤
- 创建
/root/work目录。 - 创建
/root/work/hello.txt,并在第一行写入hello labhub。 - 将
/etc/hostname复制为/root/work/hostname。内容必须与原文件完全相同。 - 一次性创建
/root/work/logs/2026/08目录。 - 在
/root/work/logs/2026/08下创建从app1.log到app5.log的 5 个文件,再创建/root/work/loglist.txt,每行只写一个文件的名称,不包含路径。 - 分别创建指向
hello.txt的硬链接/root/work/hello.hard和符号链接/root/work/hello.link。 - 创建
/root/work/draft.txt并写入一行draft,然后将它移动到/root/work/logs/2026/08/draft.txt。 - 将整个
/root/work/logs目录压缩打包为/root/work/backup.tar.gz。
提示
- 使用
stat -c '%i %h %s' 파일可以同时查看 inode 编号、链接数和大小。 ls -li的第一列是 inode 编号。硬链接之间的这个值相同。- 常见错误 1:第 5 步直接保存
find的结果,会写入./logs/2026/08/app1.log这样的路径。这里需要的只是文件名。 - 常见错误 2:第 7 步使用
cp会留下原文件,导致失败。移动不会复制数据,只会修改目录项。
创建工作目录
创建 /root/work 目录。
创建目录的命令是 mkdir。路径必须严格为 /root/work。
创建第一个文件
创建 /root/work/hello.txt,并在第一行写入 hello labhub。
可以把 echo 的输出重定向到文件,也可以用 vim 直接创建。
复制系统文件
将 /etc/hostname 复制为 /root/work/hostname。内容必须与原文件完全相同。
cp 会保留原文件并创建新文件。副本的内容必须与原文件完全相同。
一次创建嵌套目录
一次性创建 /root/work/logs/2026/08 目录。
默认情况下,如果父目录不存在,mkdir 就会失败。有一个选项可以连同上级路径一起创建。
提取日志文件列表
在 /root/work/logs/2026/08 下创建从 app1.log 到 app5.log 的 5 个文件,再创建 /root/work/loglist.txt,每行只写一个文件的名称,不包含路径。
使用 find 查找 .log 文件,但需要的不是完整路径,而只是文件名。可以考虑 -printf 或 basename。
硬链接与符号链接
分别创建指向 hello.txt 的硬链接 /root/work/hello.hard 和符号链接 /root/work/hello.link。
ln 创建硬链接,ln -s 创建符号链接。使用 stat 比较 inode 编号(%i)和链接数(%h)。
移动文件
创建 /root/work/draft.txt 并写入一行 draft,然后将它移动到 /root/work/logs/2026/08/draft.txt。
这里不是复制(cp),而是移动(mv)。原来的位置不能留下任何文件。
备份日志目录
将整个 /root/work/logs 目录压缩打包为 /root/work/backup.tar.gz。
需要组合使用 tar 打包和 gzip 压缩的选项。必须包含整个 logs 目录。