为什么在Linux中复制目录时需要-r递归?

Modified on: Sat, 12 Jan 2019 17:20:02 +0800

我的问题是为什么在制作目录副本时需要使用-r(递归)标志?即,为什么这样做:

$ cp -r dir1 copyDir1

复制目录时我什么时候不想要这种行为?

目录的递归副本确实不是“默认”行为;几乎所有时间我们都想要的行为?

感觉这是一个多余的旗帜。

最佳答案

文件系统的工作方式,目录实际上不是包含文件的文件夹,而是目录是文件,其中包含与其连接的inode指针到“子”文件。这意味着,从文件系统的角度来看,文件是一个文件,但目录只是一个包含已连接文件列表的文件。

从命令行的角度来看,这样做:

$ cp dir1 copyDir1

基本上是指将名为dir1的文件复制到名为copyDir1的新文件中。就文件系统而言,dir1无论如何都只是一个文件;它是一个“目录”这一事实只有在文件系统实际检查dir1以查看实际上是多少位时才会显而易见。

-r标志告诉文件系统以递归方式滚动文件/目录树并复制任何&所有可能是该文件的“子”的内容到新的地方。

现在,为什么这看起来多余或多余,这实际上归结为处理文件系统的历史方法。以及创建一个安全的系统,以防止所有类型的用户相关错误;意外也是故意的。

意思是,假设您在主目录中有一个~/bin文件要复制,但不小心遗漏了~ - 因为你是一个人并且制作错误 - 所以它只是/bin,如下所示:

cp /bin/ ~/copy_of_bin

/bin的“安全网”是一个目录,并且需要-r标志,你将避免意外复制系统的整个二进制根目录你进入你的主目录。如果不存在安全网,则会发生轻微或可能发生重大灾难。

这里的逻辑是,在GUI(图形用户界面)之前的日子里,需要设置逻辑/行为约定,以避免让用户创建可能会导致系统崩溃的事故。现在使用-r标志就是其中之一。

如果这看起来多余,那么只需要在Linux文件系统上方放置现代GUI系统即可。 GUI通过允许用户轻松拖放文件和目录来解决这类基本用户问题。

但是在基于文本的界面领域,该世界中的许多“用户体验”基本上只是逻辑和基于人道主义的道路颠簸,有助于控制用户,从而避免潜在的灾难。

同样,这就是为什么Linux / Unix文件系统默认情况下没有设置777权限和sudo权限以及当用户设置777权限或授予每个人sudo权限。这些是确保系统稳定并尽可能“用户证明”的基本操作;任何急于将这些惯例短路的人都很可能在不知情的情况下对他们的系统造成损害。

附加信息Unix Stack Exchange网站上的另一个答案给出了一个很好的解释为什么目录的非递归副本有问题;重点是我的。

  

好吧,没有-R标志,它只能复制文件,因为
  有人想要非递归地复制a,这是相当不寻常的
  directory:非递归副本只会产生第二个名称
  该目录,直接指向相同的目录结构。

  因为这很少是人们想要的,实际上有一个
  执行此操作的单独程序(ln),非递归副本
  目录是不允许的。

因此,如果一个目录实际上只是一个带有inode项目的文件,那么制作该文件的直接副本就等同于硬链接的工作方式。这不是任何人想要的。


相关问答

添加新评论