×

cp命令参数

cp命令参数(linux中cp命令的设计者为什么要在拷贝目录时用-r参数)

admin admin 发表于2024-06-27 08:12:54 浏览19 评论0

抢沙发发表评论

各位老铁们好,相信很多人对cp命令参数都不是特别的了解,因此呢,今天就来为大家分享下关于cp命令参数以及linux中cp命令的设计者为什么要在拷贝目录时用-r参数的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

linux中cp命令的设计者为什么要在拷贝目录时用-r参数

Why is -r recursive necessary

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

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

$ cp dir1 copyDir1

基本上意味着将名为dir1的文件复制到名为copyDir1的新文件。就文件系统而言,dir1只是一个文件;只有当文件系统真正检查dir1以查看那一堆位的实际情况时,它才是“目录”这一事实才会显现出来。

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

至于为什么这看起来是多余的或冗余的,这实际上可以归结为处理文件系统的历史方法。以及创建一个系统,使其不受所有类型的用户相关错误的影响;偶然的和有意的。

意思是,假设你有一个~/bin文件在你的主目录中,你想复制,但不小心漏掉了~——因为你是人,会犯错误——所以它是这样的/bin:

cp /bin/ ~ / copy_of_bin

由于/bin的“安全网”是一个目录,并且需要-r标志,您可以避免意外地将系统的整个二进制根复制到主目录中。如果这个安全网不存在,就会发生一场小的——或者可能是大的——灾难。

这里的逻辑是,在前gui(图形用户界面)的时代,逻辑/行为约定需要被设置,以避免用户创建可能导致系统死亡的错误。使用-r标志是其中之一。

如果这看起来是多余的,那么只需看看现代GUI系统,就可以将其置于Linux文件系统之上。GUI通过允许轻松地拖放文件和目录来解决基本的用户问题。

但在基于文本的界面领域中,该领域中的许多“用户体验”基本上都是基于逻辑的、基于hueristicl的障碍,这些障碍有助于控制用户,从而避免潜在的灾难。

同样,这也是为什么Linux/Unix文件系统没有默认设置的777权限和sudo权限,以及当用户设置777权限或授予所有人sudo权限时,真正的系统管理员会畏缩不前的原因。这些是确保系统稳定和尽可能“用户证明”的基本工作;任何急于缩短这些惯例的人都很可能在不知情的情况下对他们的系统造成损害。

附加信息:Unix堆栈交换站点上的另一个答案很好地解释了为什么目录的非递归副本存在问题;重点是我的。

嗯,没有-R标志,只能复制文件,因为不太常见的情况是,有人想非递归复制一个目录:非递归复制只会导致目录的第二个名称,直接指向相同的目录结构。因为这很少是人们想要的,实际上有一个单独的程序来做这个(ln),不允许目录的非递归副本。

因此,如果一个目录实际上是一个包含inode项的文件,那么直接复制该文件就相当于硬链接的工作方式。这不是任何人想要的。

Linux 复制 cp 命令详解

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。-a:此参数的效果和同时指定"-dpR"参数相同; -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;-f:强行复制文件或目录,不论目标文件或目录是否已存在;-i:覆盖既有文件之前先询问用户; -l:对源文件建立硬连接,而非复制文件; -p:保留源文件或目录的属性; -R/r:递归处理,将指定目录下的所有文件与子目录一并处理; -s:对源文件建立符号连接,而非复制文件; -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件; -S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀; -b:覆盖已存在的文件目标前将目标文件备份; -v:详细显示命令执行的操作。

关于cp命令参数,linux中cp命令的设计者为什么要在拷贝目录时用-r参数的介绍到此结束,希望对大家有所帮助。