关于Linux中CP命令用法的一些冷知识

  在Linux中,cp命令是一个非常好用的文件复制命令。关于cp命令一些比较偏门的知识,这里进行梳理一下

  1、cp命令能够使用的前提是对于要复制的文件,cp命令的执行者至少要具备读权限r,这是因为复制文件至少要知道文件的内容吧。就像一个可执行文件,如果它的权限是可读,那么证明执行者至少可以阅读文件的源代码,既然可以阅读了,那么复制一个跟他模仿源代码自己再写一个道理是一样的。所以文件可读就证明它可以被复制了。

  2、在没有加参数的情况下,cp命令会复制执行者的权限与属性,这句话怎么理解呢?首先文件的所有者和用户组会变成执行者。如下图1可知,当用户pang使用cp命令复制root用户的文件06.sh成07.sh时,文件所有者和用户组都变成了pang,时间也改变了。这里可以看到用户权限有rwxr--r--变成了rwxr--rw-,这是因为运行了chmod命令修改了权限而已,其实它本来是rwxr--r--,至于为什么要修改呢,只是为了接下来更方便的进行演示。同理,08.sh,09.sh,10.sh,11.sh都是对应的执行者分别执行cp命令得到的,可以看到它们的所有者和群组都发生了相应的改变。

关于Linux中CP命令用法的一些冷知识_第1张图片


  3、从图一可以看出,由用户zheng复制pang的文件07.sh到08.sh时,w权限并没有复制过来,而其它的复制好像把权限一模一样的复制过来了,为什么呢?首先我们得引入默认权限的概念。什么是默认权限,也就是说用户创建一个文件或者一个目录时候的默认权限。明确一点是,这里所说的默认权限由两部分组成。第一部分的默认权限,就是系统自带的,创建的文件默认为rw-rw-rw-,没有x权限是因为默认一般文件不具备可执行能力。而目录默认权限是rwxrwxrwx.第二部分默认权限就要用到umask这个命令了。关于umask的简单用法就是在对应用户下输入umask命令,就会显示4位数字,例如0002,第一位不用管,那是跟特殊权限有关。剩下的三位分别代表所有者,用户组,其他人的对应数字。用第一部分的默认权限减去第二部分的默认权限,就是真正默认权限。图2显示了不同身份的用户的umask

关于Linux中CP命令用法的一些冷知识_第2张图片

可以看到,root要从本来的rw-rw-rw-中减去022,就是减去----w--w-,那么实际root用户创建一个文件时候,默认的属性就是rw-r--r--,参考图1,haha.txt就是root用户用touch命令创建的。而一般用户就是减去002,就是减去-------w-,也就是变成rw-rw-r--,参考图3,用户zheng创建了一个空文件ha.txt,默认权限正是如此


那么回到刚刚的问题,为什么zheng用户的文件08.sh没有把pang用户的文件07.sh的w权限复制过来呢?因为在复制时,把07.sh的本来的权限rwxr--rw-看成是第一部分默认权限,再与zheng的第二部分默认权限002(-------w-)相减,就剩下了rwxr--r--了。可以再做一些变化来进行验证一下。

关于Linux中CP命令用法的一些冷知识_第3张图片

可以看到,当pang得07.sh的权限为rwxr--rwx时,zheng复制为12.sh所以权限为第一部分权限rwxr--rwx减去002(-------w-)得到rwxr--r-x。这样可以理解cp后的属性变化情况了吧。

  

你可能感兴趣的:(关于Linux中CP命令用法的一些冷知识)