Linux如何处理Move命令


12

Linux如何在后台处理move命令?

假设我搬家目录

/home/me

我将其移到另一个目录

/home/foo/me

如何me更改所有文件和目录路径?我知道Desktop目录me现在/home/foo/me/Desktop也一样,Documents /home/foo/me/Documents但是文件系统是否显式更新目录下的 每个路径me以反映更改?听起来效率不高,可能不是这样。

在哪里可以获取更多信息?


5
关于效率:不,那不是效率。当您将数据移动到另一个目录时,实际上并不会在一个位置读取数据,而不会在另一个位置写入数据。文件系统包含一组指向数据块的指针。在移动的情况下,仅更新指针。
2014年

嗯,这可能就是杰夫的意思……
雅各布·弗利姆

@Jos碎片来自哪里?
zero298,2014年

3
@ zero298不,碎片通常是完全不同且不相关的问题-碎片与文件夹结构的内容无关,而是与分散在整个物理磁盘盘上的单个文件的内容有关(而不是单个连续的行),从而减少了读取/ write此类文件的性能。通常不希望大/深/分支文件夹树的内容是连续的并以这种方式移动。
Peteris 2014年

Answers:


21

要了解它如何移动文件夹,您可能需要了解一些有关Linux下文件系统的知识。每个文件和文件夹都作为称为“ inode ” 的数据结构的一部分存储。每个文件都有一个索引节点编号,文件夹也有一个索引编号。

要查看文件夹的索引节点,请使用命令ls -ial foldername。第一列显示文件的索引节点号。对于每个文件夹,都有两个唯一的名称...,分别代表其自己的目录和父目录。

您可以尝试做一个实验,将包含子目录和文件的目录(例如,/ home / me / source)移动到另一个目录(例如,/ home / me / somewhere / else)。/ home / me / source的索引节点号及其所有内容在移动前后保持不变。唯一的区别是的索引节点号..,它最初共享/ home / me的索引节点号,现在变成/ home / me / somewhere / else的索引节点号。用简单的措辞,Linux将链接更新到目录,然后就完成了。

无论如何,硬盘上的内容都不会被修改,仅当移动文件夹时才会更新索引节点索引。当然,如果将文件夹移动到其他物理位置,则不是这种情况。


3
是的,只要此举不会跨越文件系统边界。
kojiro 2014年

3

如果您对诸如mv和之类的程序的cp工作方式感兴趣,请记住它们是开源的,您可以通读代码来获得最准确的解释。这里有所有核心实用程序的链接。具体来说,您可以在此处找到mv


6
you can get the most accurate explanation by reading through the code.我不敢苟同; 很长时间以来,我对C毫无经验,即使现在我也不喜欢它。而且,源代码通常经过优化,并且包含比所需更多的边缘情况。象征性的解释通常会提供更多帮助。
Shelvacu 2014年

1
@shelvacu“包含的边缘案例超出了所需”。健壮的代码处理可能出现的所有边缘情况。但是,确实没有必要在概念的第一个解释中提出所有极端情况。
OregonTrail 2014年

@OregonTrail抱歉,这就是我的意思,该代码包含更多边缘案例,需要解释
一下

我很高兴这是您最初的想法,但是您似乎仍然错过了我对“ 手柄 ”的强调。编写良好的代码不包含边缘情况,它可以处理边缘情况。;)我知道您来的地方合适,但是您应谨慎使用动词。
OregonTrail 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.