暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux文件目录权限

CoderMeng 2021-04-12
880

 Linux文件目录管理


01

文件属性



第一列代表这个文件的类型与权限(permission)


这一列共有10个字符代表这个文件是“目录、文件或链接文件等”。


  • ‘d’ 则是目录。

  • ‘-’ 则是文件。

  • ‘l’  则表示为连接文件(linkfile)。

  • ‘b’ 则表示设备文件中可供存储的接口设备。

  • ‘c’ 则表示设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取设备)。


接下来的字符中,以3个一组,切均为“rwx”的3个组合参数。


第一组为 “文件所有者权限”

第二组为 “同用户组的权限”

第三组为 “其它非本用户组的权限”


  • ‘r’代表可读(read)

  • ‘w’代表可写(write)

  • ‘x’代表可以执行(execute)。


要注意的是,这3个权限的位置不会改变,如果没有权限,就会出现减号‘-’而已。

 

第二列表示有多少文件连接到此节点(i-node)


每个文件都会将它的权限与属性记录到文件系统的i-node中,不过我们使用的目录树是使用文件名来记录,因此每个文件名就会连接到一个i-node。这个属性记录的就是有多少不同的文件名连接到相同的一个i-node号码。


第三列和第四列表示这个文件(或目)的“所有者账号”和“所属用户组”。


第五列表示这个文件的容量大小,默认单位为B。


第六列为这个文件的创建日期或者是最近的修改日期。


02


修改文件属性与权限


常见的几个用于修改用户组、所有者、各种身份的权限的命令:


  • chgrp: 改变文件所属用户组。

  • chown: 改变文件所有者。

  • chmod: 改变文件的权限。


改变所属用户组:chgrp


这个命令是change group的简称。不过,请记得,要被改变的组名必须要在/etc/group文件内存在才行,否则就会显示错误。


    chgrp [-R] dirname/filename
    -R:进行递归(recursive)的持续更改,即连同子目录下的所有文件。


    例子:


      [root@localhost meng]# chgrp corly test.log 
      [root@localhost meng]ls -l
      -rw-r--r--. 1 root corly 0 7月 24 16:40 test.log


      改变文件所有者:chown


      这个命令是change owner的简称。要注意的是,用户必须是已经存在于系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名称才能改变。chown还可以修改文件的用户组。


        chown [-R] 账号名称[:组名] 文件或目录
        -R:同上面一样


        例子:

          //将test.log所有者改为bin这个账号
          chown bin test.log
          //将test.log的所有者和用户组改回为root
           chown root:root test.log


          事实上,chown也可以使用“chown user.group file”,亦即在拥有者与群组间加上小数点也行!不过很多朋友设定账号时,喜欢在账号当中加入小数点(例如corly.meng这样的账号格式),这就会造成系统的误判了!所以我们比较建议使用冒号“:”来隔开拥有者与群组。


          此外,chown也能单纯的修改所属用户组。例如“chown .sshd install.log”就是修改用户组,就是那个小数点的用途。 


          改变文件权限:chmod


          文件权限的改变是用chmod这个命令,但是权限的设置有两种,分别可以使用数字或者是符号来进行权限的更改。


          数字更改文件权限


          Linux文件的基本权限就有9个,分别是user、group、others三种身份各有自己的read、write、execute权限。其中我们可以用数字来代表各个权限,各权限的数字对照如下:

            r:4
            w:2
            x:1



            每种身份(user、group、others)各自的三个权限分数是要累加的,例如当前权限“-rwxrwx---”,分数是:


              user= rwx = 4+2+1 = 7
              group = rwx = 4+2+1 = 7
              others = --- = 0+0+0 = 0


              所以等我们设置权限更改时,该文件的权限数字就是770。更改权限的命令chmod的语法如下:

                chmod [-R] xyz 文件或目录
                xyz:刚刚提到的数字类型的权限,为rwx属性数值的相加。
                -R:递归更改。


                举例来说,如果要将test.log文件的所有权限都设置启用,那么就执行:


                  chmod 777 test.log


                  符号类型改变文件权限


                  还有一个更改文件权限的方法。从前面的介绍我们可以发现,基本上就9个权限,分别是usergroupothers三种身份。那么我们就通过u,g,o来代表三种身份的权限。此外a代表all,也即全部身份。


                  chmodu
                  g
                  o
                  a
                  +(加入)
                  -(除去)
                  =(设置)
                  r
                  w
                  x
                  文件或目录


                  例如我们要设置一个文件权限为“-rwxr-xr-x”时。


                    chmod u=rwx,go=rx test.log
                      注意:那个u=rwx,go=rx是连在一起的,中间没有任何空格。


                    如果是“-rwxr-xr--”权限呢?可以用“chmod u=rwx,g=rx,o=r test.log”来设置。


                    如果我不知道原先文件的属性,而我只想增加test.log这个文件每个人均可写入的权限,可以使用如下命令:


                      chmod a+w test.log


                      如果要去掉所有人可执行权限,则:


                        chmod a-x test.log


                        02


                        目录权限



                        文件是存放实际数据的所在,目录主要的内容是记录文件名列表,文件名与目录有强烈的关联。所以如果针对目录,那个r、w、x有什么意义呢?


                        r (read contents in directory)

                        • 表示具有读取目录结构列表的权限,表示你可以查询该目录下的文件名数据。


                        w (modify contents of directory)

                        • 新建已存在的文件与目录;

                        • 删除已存在的文件与目录(不论该文件的权限为何);

                        • 将已存在的文件或目录进行重命名;

                        • 转义该目录内的文件、目录位置。


                        x (access directory)

                        • 表示用户能够进入该目录成为工作目录的用途,所谓的工作目录(work directory)就是你目前所在的目录。


                        例 1:


                        有一个目录的权限如下:

                          drwxr--r-- 3 root root 1024 Jun 25 08:22 test


                          系统中有一个账号名称为corly,这个账号并没有支持root用户组,那么corly对这个目录有何权限?


                          corly对此目录有r权限,因此可以查询目录下的文件名列表。因为corly不具有x的权限,所以corly并不能切换到此目录内。


                          上面的例子中因为corly具有r权限,一看之下好像就具有可以进入此目录的权限,其实是错误的。能不能进一个目录,只与该目录的x权限有关。


                          此外,工作目录对于命令的执行非常重要,如果你在某目录下没有x的权限,那你就没有办法切换到该目录下,也就无法执行该目录下的任何命令,即使你具有该目录的r权限。


                          例 2:


                          假设账号corly,他的主文件夹在/home/corly/,corly对此目录具有rwx权限。若在此目录下有一个名为test.log的文件,该文件的权限如下:


                            -rwx------ 1 root root 1024 Sep 20 04:09 test.log


                            请问corly对此文件的权限是什么?可否删除此文件?


                            • 由于corly对此文件来说是“others”的身份,因此这个文件他无法读、编辑和执行,也就是说他无法变动这个文件的内容。

                            • 但是由于这个文件在他的主文件夹下,他在此目录具有rwx的完整权限,因此对于test.log这个文件来说,他是能够删除的。




                            长按二维码关注





                            文章转载自CoderMeng,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论