Linux 如何在底层处理移动命令?
假设我移动了我的主目录
/home/me
我将其移动到另一个目录
/home/foo/me
所有文件和目录路径是如何me
变化的?我知道我的Desktop
目录 me
现在是/home/foo/me/Desktop
,Documents
/home/foo/me/Documents
但文件系统是否会明确更新每个路径me
以反映变化?这听起来不太有效,可能不是这个。
在哪里可以获取更多有关此内容的信息?
答案1
要了解它如何移动文件夹,您可能需要了解一些有关 Linux 下的文件系统的知识。每个文件和文件夹都存储为称为“索引节点“每个文件都有一个 inode 编号,文件夹也一样。
要查看文件夹的 inode,请使用命令ls -ial foldername
。第一列显示文件的 inode 编号。每个文件夹都有两个唯一名称.
和..
,分别代表其自己的目录和父目录。
您可以尝试做一个实验,将一个目录(例如,/home/me/source)及其子目录和文件移动到另一个目录(例如/home/me/somewhere/else)。 /home/me/source 及其所有内容的 inode 编号在移动前后保持不变。唯一的区别是 inode 编号..
,它最初与 /home/me 共享 inode 编号,现在变为 /home/me/somewhere/else 的 inode 编号。简而言之,Linux 更新目录的链接来源然后就完成了。
无论如何,硬盘上的内容都不会被修改,只有文件夹移动时 inode 索引才会更新。当然,如果您将文件夹移动到不同的物理位置,情况就不是这样了。