Linux的chmod与symbolic link

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cds86333774/article/details/51174464

1 概述

最常用的形式是:

chmod [-fvR] mode file

然后我们通过man看看它的一些参数:

     The generic options are as follows:

     -f      Do not display a diagnostic message if chmod could not modify the
             mode for file.

     -H      If the -R option is specified, symbolic links on the command line
             are followed.  (Symbolic links encountered in the tree traversal
             are not followed by default.)

     -h      If the file is a symbolic link, change the mode of the link
             itself rather than the file that the link points to.

     -L      If the -R option is specified, all symbolic links are followed.

     -P      If the -R option is specified, no symbolic links are followed.
             This is the default.

     -R      Change the modes of the file hierarchies rooted in the files
             instead of just the files themselves.

     -v      Cause chmod to be verbose, showing filenames as the mode is modi-
             fied.  If the -v flag is specified more than once, the old and
     chmod [-fhv] [-R [-H | -L | -P]] [-E] file ...
     chmod [-fhv] [-R [-H | -L | -P]] [-C] file ...
     chmod [-fhv] [-R [-H | -L | -P]] [-N] file ...

其实最常用的参数就是 -R了:处理指定目录以及其子目录下的所有文件。 然后还有一个问题,那就是处理比较特殊的symbolic link。如果你不需要处理symbolic link那么下面的参数说明你可以跳过。

命令行中存在symbolic link的特殊情况:

  • -H和-R一起使用:如果命令行指定的文件中有symbolic link,那么该命令会通过symbolic link找到那个目录或文件进行递归;
  • -P和-R一起使用:和-H的含义正好相反,而且如果不显示进行设置,-P是默认设置;
  • -L和-R一起使用:所有的symbolic link会被followed;
  • -h:只改变symbolic link的属性。


2 字符设定法

权限范围(who):
u :user,目录或者文件的当前的用户
g :group,目录或者文件的当前的群组
o :other,除了目录或者文件的当前用户或群组之外的用户或者群组
a :all,所有的用户及群组

操作:
+ : 增加权限
- :删除权限
= :直接指定权限

权限字符(mode)
r :读权限,== 4
w :写权限,== 2
x :执行权限,== 1

chmod [who] [+ | - | =] [mode] 文件名


3 数字设置法

数字与字符对应关系如下:
r=4,w=2,x=1

若要rwx属性则4+2+1=7
若要rw-属性则4+2=6
若要r-x属性则4+1=7

chmod [mode] 文件名


4 symbolic link的权限问题

新建示例文件:

这里写图片描述

由于test1.py对当前用户没有执行权限,所以,如果执行该文件会报错:

这里写图片描述

我们给该当前用户增加执行权限:

这里写图片描述

可以看到,可执行文件变成了红色,然后执行成功。而且,我们仅仅是改变了test1.py的权限,test1.slink文件的权限自动变得一致了。那么,如果改变test1.slink的权限,test1.py的权限会相应地改变吗?结果竟然是link的权限没有改变,而原文件的权限改变了……

这里写图片描述

当然,这并不是说通过slink文件就可以执行,其根本还是在原文件的:

这里写图片描述

所以,如果在命令行中的文件是slink的话,权限的修改会直接作用于原文件,而且不会改变slink的权限属性。但是在概述中也有提到一个参数 -h,我们看看如果使用它会有什么结果。

这里写图片描述

总结

  1. symbolic link的权限其实并不重要,它只是原文件的一个指示性文件。
  2. 所以如果调用-h参数,仅仅修改symbolic link的权限,其实对于原件是没有任何影响的。就像示例中展示的一样,slink已经不可读了,但原文件可读,但是我们还是可以通过slink读原文件。
  3. 在默认情况下,修改symbolic link的权限会反映到原文件,而symbolic link本身的权限不会更新。
  4. 修改原文件的权限,symbolic link的权限会更新。

猜你喜欢

转载自blog.csdn.net/cds86333774/article/details/51174464