[Topic DIscussion] 关于cp命令的疑问
Tofloor
poster avatar
HelloWorld!
deepin
2023-10-26 07:21
Author

今天上课,老师提了一个问题。

cp -a /etc/skel/.* /home/username;

我在debian上使用此命令,只会复制skel目录下的隐藏文件,但是老师使用的rhel,还有同学用的centos,不仅复制了skel下的隐藏文件,也复制了etc目录下的文件,deepin也一样,唯独debian不同。用的debian12系统,会不会是debian12逻辑变了。

Reply Favorite View the author
All Replies
绍贝格尔
deepin
2023-10-26 16:58
#1

你是不是敲错了

Reply View the author
忘记、过去
deepin
2023-10-26 17:11
#2

百度了一下,类似的命令是 cp -a /etc/skel/. /home/$USER,主要用来给新建的用户初始化一个主目录用的......不知道你加了 * 会有什么影响......

P.S. 难道 .* 里面把当前文件夹和上级目录的 . 和 .. 都算在里面了?所以复制的时候把上面一层的内容也带上了......

Reply View the author
jjcui8595
deepin
2023-10-26 18:01
#3

试了一下,deepin、ArchLinux、银河麒麟都会出现同样结果。个人认为cp -a /etc/skel/.*命令中,“.*”也包括了“..”,即上一级目录,所以也拷贝了/etc下的内容。

Reply View the author
jjcui8595
deepin
2023-10-26 18:21
#4

在终端执行 ls /etc/apt/.* ,结果可以看到分别显示了 /etc/apt/. 和 /etc/apt/.. 的内容

截图_滚动截图_20231026101624.jpg

Reply View the author
wlly-lzh
deepin
2023-10-26 18:52
#5

看来四楼正解。

Reply View the author
jjcui8595
deepin
2023-10-26 20:16
#6
wlly-lzh

看来四楼正解。

多谢肯定

Reply View the author
owen_337
deepin testing team
2023-10-26 21:22
#7

楼主,命令的意思是将 /etc/skel 目录下的所有文件和子目录复制到 /home/username 目录下。其中,-a 参数表示保留文件的属性,如时间戳、权限等。

cp [options] source... directory

参数说明:

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。

-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。

cp -a: 递归复制,复制的数据会保留原有数据的时间戳等信息(具体:时间戳+所有权+复制连结文件属性而非档案本身)

cp -r: 递归复制,复制的数据会使用新的时间戳等信息

复制连结文件属性而非档案本身:例如是软链接的话,复制的是软链接的属性(时间戳等信息),而不是实际文档的

使用 cp -a相当于将原数据原封不动的拷贝过来,不改变里面的任何信息

使用 cp -r拷贝数据,拷贝的结果是生成新的时间戳等信息

Reply View the author
HelloWorld!
deepin
2023-10-26 22:05
#8
jjcui8595

在终端执行 ls /etc/apt/.* ,结果可以看到分别显示了 /etc/apt/. 和 /etc/apt/.. 的内容

截图_滚动截图_20231026101624.jpg

我测试了,只有debian12不一样,debian12不会复制上级目录

Reply View the author
HelloWorld!
deepin
2023-10-26 22:07
#9
jjcui8595

在终端执行 ls /etc/apt/.* ,结果可以看到分别显示了 /etc/apt/. 和 /etc/apt/.. 的内容

截图_滚动截图_20231026101624.jpg

debian12的/var/spool/mail文件下是空的,这个和deepin,centos也不一样

Reply View the author
jjcui8595
deepin
2023-10-26 22:31
#10
HelloWorld!

我测试了,只有debian12不一样,debian12不会复制上级目录

执行echo $SHELL,看看是否使用的shell不同

Reply View the author