在文件系统的工作方式中,目录实际上不是包含文件的文件夹,而是目录是包含指向与其连接的“子”文件的inode指针的文件。这意味着,从文件系统的角度来看,文件是文件,但是目录只是包含连接文件列表的文件。
因此,从命令行角度来看,请执行以下操作:
$ cp dir1 copyDir1
基本上是指将名为的文件复制到名为dir1的新文件copyDir1。就文件系统而言,dir1无论如何只是一个文件。只有当文件系统实际检查dir1看看那堆比特实际上是什么时,它才是“目录”的事实。
该-r标志告诉文件系统以递归方式滚动文件/目录树,并将可能是该文件“子级”的所有内容复制到新位置。
现在关于为什么看起来多余或多余的问题,这实际上归结为处理文件系统的历史性方法。以及创建一个可以避免所有类型的与用户相关的错误的系统;偶然的和故意的。
意思是,假设~/bin您的主目录中有一个文件要复制,但是由于~您是人并且会犯错误而被意外遗漏了,所以它/bin就像这样:
cp /bin/ ~/copy_of_bin
通过将“安全网” /bin作为一个目录,再加上对-r标志的需求,您可以避免将所用系统的整个二进制根意外复制到主目录中。如果不存在该安全网,则将发生较小(甚至可能是较大)的灾难。
这里的逻辑是,在GUI(图形用户界面)之前的日子里,需要设置逻辑/行为惯例,以避免用户创建可能会杀死系统的事故。-r现在使用标志是其中之一。
如果那看起来是多余的,那么只需要放在现代GUI系统之上就可以放在Linux文件系统之上。GUI通过允许用户轻松拖放文件和目录来解决此类基本用户问题。
但是,在基于文本的界面领域中,该世界中的许多“用户体验”基本上只是基于逻辑和基于幽默的路障,有助于使用户受到控制,从而避免了潜在的灾难。
同样,这就是为什么Linux / Unix文件系统没有默认设置777权限和sudo权限的原因,以及当用户设置777权限或授予所有人权限时,真正的系统管理员会畏缩的原因sudo。这些是确保系统稳定和尽可能“用户证明”的基本操作;任何急于使这些约定短路的人很可能在不知情的情况下对其系统造成损害。
附加信息: Unix Stack Exchange网站上的另一个答案很好地解释了为什么目录的非递归副本会引起问题。重点是我的。
好吧,如果没有-R标志,则只能复制文件,因为有人非递归地复制目录是很不寻常的:非递归副本只会导致该目录的第二个名称,直接指向该目录。相同的目录结构。
因为这几乎不是人们想要的,并且实际上有一个单独的程序可以执行此操作(ln),所以不允许目录的非递归副本。
因此,如果目录实际上只是其中包含inode项的文件,则直接复制该文件将等同于硬链接的工作方式。这不是任何人想要的。

被折叠的 条评论
为什么被折叠?



