摘要:一个文件和用户之间的关系有三种,这个用户是文件的所有者、这个用户是文件所属组中的一员,这个用户对文件来说是其他人。
同样,用户对文件的权限分为了读、写、执行三种,其中文件和文件夹对于这三种理解不同,重点的是所谓权限,其实是对内容操作的权限,而不是文件自身。
文件夹嵌套的情况下,权限如何发挥作用?

1. 用户和文件有什么关系

1.1 用户和文件之间的关系

张三创建了某个文件,如 touch 111.txt,那么张三就是这个文件的所有者,对这个文件来说,马云就是其他人。

用ll命令列出某目录下的文件如下

-rw-r--r-- 1 root root    0 Aug 17 10:19 111.txt
-rw-r--r-- 1 root root    0 Aug 17 10:19 222.txt
drwxr-xr-x 2 root root 4096 Aug 17 10:19 test

 可见,root是文件111.txt和222.txt的所有者,对它的权限rw-就是读写权限。如果是马云,那就是r–,就是只读,不能写和执行。

 

1.2.读、写、执行对文件和文件夹分别意味着什么?

初学的时候,望文生义,很容易搞不清楚读、写、执行是对什么起作用。

比如,文件夹test里面有文件111.txt,在文件夹test上权限给满,111.txt设置为只读,那普通用户还能删掉这个文件吗?

一实验,发现可以删掉,怎么111.txt设置为只读文件,普通用户也可以删掉它?一头雾水。

首先要清楚的是,用户root是超级管理员,不受这些限制。

其次要理解,这些权限是对其内容而言的设置。

用户马云,在111.txt身上算是其他人,如果没有读权限,则打不开111.txt,就是cat 111.txt会出现权限拒绝。如果没有写权限,则不能编辑111.txt(但是用vi有点问题,系统bug,111.txt有内容,马云没权限写,结果一样可以打开,但是打开的是无内容的显示,然后马云可以键入新的文本,强制保存,原来111.txt内容会被覆盖了),如果没有执行权限,则不能执行。

用户马云,在文件夹test上算是其他人,如果没有读权限,则用ls列出目录中有哪些文件时会被禁止,没有写权限,则不能在文件夹中创建和删除文件,只能改一改现有的文件,没有执行权限,则不能进入该目录。

111.txt算是文件夹test的内容,可以删掉是因为文件夹test的权限给满了,而不看111.txt自身的权限。111.txt自身的权限设置,管理的是它里面的内容的权限。

 

      文件 文件夹
r 4 查看文件内容
cat/more/head/tail/less
列出目录中的内容
ls/
w 2 修改文件内容
vim
在目录中创建、删除文件
touch/mkdir/rmdir/rm
x 1 执行 执行文件
(脚本或命令)
可以进入目录
cd

 

父目录权限和子目录权限的影响是怎么样的?

假设某文件夹路径是这样的:

/ study / english / 111.txt

 用户马云对于这些文件都是其他人的身份。

问,当文件夹 study 对马云的权限只读,文件夹 english 对马云的权限是读写执行,文件 111.txt 对马云的权限是读写执行,那么马云可以查看111.txt的内容吗?

答:不可以,权限要从最外层的文件夹开始进入,因为study不具备执行权限,进入不了,虽然english和111.txt有权限,也查看不了。

 

 如果把study改为只有执行权限,没有读权限呢?

可以看到,进入study可以,列出study下内容就不行

但是查看文件夹english和文件111.txt都是正常的。

 

 在文件夹study下新建文件不行,但是在english下新建文件可以。

 

 也就是说,文件夹的权限并不具有继承性,当我在文件夹english下新建文件时,没有因为父级文件夹没有权限而不能操作。

父级文件夹只要有x权限,那么子级文件夹就不受父级文件夹的影响了。父级文件夹没有x权限,其下的文件和文件夹在操作时会受到影响。

有点类似大院子嵌套小院子,大院子没有x权限(没有钥匙),就进入不了大院子,那你们的小院子,你有钥匙也没有用。

 这时study没有了执行权限,进不了study目录,则执行新建文件如下:

 

 可以看出,没有执行权限的文件夹,其下的文件夹和文件在操作时受到了影响。

 

 

 

 

1.3.怎么更改文件和文件夹的权限

1.首先要问哪些用户能更改文件权限?

答:超级管理员和文件所有者可以修改,其他人修改不了。

2.怎么修改?

答:

命令名称:chmod

命令英文原意:change the permissions mode of a file

命令所在路径:/bin/chmod

执行权限:所有用户

选项:-R递归修改

功能描述:改变文件或目录权限

方法1 方法2
chmod [{ugoa}{+-=}{rwx}][文件或目录]  chmod [mode=421][文件或目录]

 这种方法是直接修改文件的某些用户的权限位,不用管其他用户的情况。

u代表所有者、g代表所属组,o代表其他人,a代表全部。
+r代表加上读权限,-r代表去掉读权限,=r代表不管以前是什么权限,现在设置为读权限

读权限是4

写权限是2

执行权限是1

其实就是二进制位置不同。

rwx,r是二进制100,w是二进制10,x是二进制1。

 chmod u+x English.zip

把文件English.zip的所有者权限中加上执行权限。

 

chmod g+r,o-r English.zip
把文件的所属组加上读权限,把其他人的去掉读权限,g+r和o-r用逗号分隔。

 

chmod g=rx English.zip

不管文件所属组以前是什么权限,现在就是设置为rx

chmod 755  English.zip

7就是111,就是rwx都有了,同样,5就是读和执行的权限,这句话就是设置文件English.zip所有者是读写执行权限,所属组和其他人是读和执行的权限。

 

选项:-R递归修改

新建文件夹时,-p是递归依次创建,而修改文件或文件夹权限时,如果要修改目录下的子目录和文件权限同时修改,要用-R

chmod -R 777 /tmp/a/

把/tmp/a/及其所有子目录和文件的权限都改为777

 

 

 

 

1.4.怎么更改文件的所有者和所属组,chown和chgrp

命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:root
语法:chown 【选项】【新主人的用户名】【文件或目录】
功能描述:改变文件或目录的所有者,选项 -R 可以递归修改文件夹下所有子目录和文件
范例:$ chown mayun 111.txt  (把文件111.txt的所有者改为mayun)

 首先,改变文件的读写执行权限的时候,root和文件所有者都可以操作。但是改变文件所有者的时候,只有root可以操作,如下图。

 

 当然,把文件换新主人,那新主人的用户名不能输入错。

 

 改变文件所有者后,所属组还是root哦!

那怎么改变所属组呢?和改变文件所有者类似,只是把chown换成chgrp

命令名称:chgrp

命令英文原意:change file group ownership

命令所在路径:/bin/chgrp

执行权限:所有用户

语法:chgrp【新的用户组】【文件或目录】

功能描述:改变文件或目录的所属组

范例:$ chgrp  mayun 111.txt  改变文件111.txt的所属组为mayun

 

 

现在又有个问题,没设置之前文件的所有者和所属组是谁?

答:文件的所有者很简单,谁创建了这个文件,文件的所有者就是谁!

那文件的所属组是谁?就是文件所有者的主要组。

 

 

 

 

1.5.新建的文件夹和文件默认什么权限?(不常用)

我们新建一个文件222.txt,新建一个文件夹dir2,看看系统给他们的默认权限是什么?

 

从哪里知道新建文件夹的权限是rwxr-xr-x呢?

答曰:umask命令就是干这事的,它就是查看新建文件夹和新建文件的默认权限。

 

  看到了文件夹默认权限情况,文件的默认权限比文件夹少个x ,防止被攻击。

 

 

命令名称:umask

命令英文原意:the user file-creation mask

命令所在路径:Shell内置命令

执行权限:所有用户

语法:umask  [-S]

-S 以rwx形式显示新建文件默认权限

功能描述:显示、设置文件的默认权限

范例:$ umask  -S

 

 

 如上图,root和普通用户得到的默认权限还不一样。

 用root用户,新建文件夹时默认权限为755,文件权限默认644,能否更改为默认新建文件夹为700,默认新建文件权限600呢?

答曰:可以,与rwxrwxrwx异或算法得出权限码,然后umask 权限码即可。

rwx rwx rwx 为777

与什么异或能得到700 (rwx——)?

得到结果—rwxrwx,也就是077

因此,只要umask 077即可得到想要的结果。

umask 077后,新建的文件夹dir3权限就是rwx——,新建的文件就是去掉可执行权限后的效果。

 

 也就是说,umask的参数和得到的结果都是补码,不是直接的权限码

版权声明:本文为html55原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/html55/p/13516659.html