CentOS 7文件目录属性及权限详解

1. 文件权限的概念

   大家在使用Linux时,肯定碰到过比如想修改某个文件,进入某个目录,却出现了Permission deny的错误,这是因为在Linux中,每个文件或者目录都包含访问权限,这些访问权限记录和决定了哪些用户能够访问以及如何访问这些文件和目录,这就是Linux的文件权限的概念。

2. 普通文件属性及权限

2.1 查看文件属性

  在平时使用Linux系统中,我们最常用的命令就是“ls”,它的重点在于显示文件的文件名和相关属性,当附加-al参数时,可以查看到所有具体的文件属性,例如,如下图:

(1)第一栏:文件类型与权限
  仔细查看可以可以发现,第一栏“dr-xr-xr-x”总共有十个字符,下面对这十个字符做简单的介绍。
1)第1个字符:文件类型,比如这里显示是d,说明是目录,事实上可以是l:链接文件,c:字符文件,-:普通文件,b:块设备文件等等。
2)第2至4字符(r-x):文件拥有者权限,其中,r表示可读(read)w表示可写(write)x表示可执行权限。而如果没有权限,则出现**-,比如此处,没有出现w**,说明文件所有者不具备写权限。
3)第5至7字符(r-x): 所属组权限,表示该文件所属组的用户的组权限,权限说明同上。
4)第8至10字符(r-x): 其他用户权限,即非本人且没有加入本用户组的其他账号的权限,权限说明同上。
(2)第二栏:文件名链接数
  每个文件都会将它的权限与属性记录在文件系统的inode中,操作系统就是根据inode号来识别不同的文件(可以采用“ls -i filename”查看)。每个文件都会有一个inode,但是在Linux系统允许多个文件名指向同一个inode,这意味着可以用不同的文件名访问同样的内容,对文件内容修改会影响所有文件名,并且删除一个文件名,不影响文件名的访问,这就是Linux中的硬链接机制。
  回到正文,这栏的属性记录的就是多少不同的文件名链接到相同的一个inode号码。
(3)第三栏:文件所有者账号
(4)第四栏:文件的所属用户组
(5)第五栏:文件容量的大小,默认为Bytes
(6)第六栏:文件创建日期或最近修改日期
  这一栏分别为日期(月、日)及时间,如果时间太久,那么可能仅会显示年份信息。
(7)第七栏:文件名
  比较值得一提的是,如果文件名前多一个**.,比如上图的“.readhead”文件,表示此文件是隐藏文件。可以使用lsls -a感受下隐藏文件与普通文件的区别。
  另外不晓得大家有没有注意,目录
与目录.**的权限是一样,实验证明,根目录的上一层与根目录自己是同一个目录,其权限和目录属性完全一致。

2.2 修改文件属性及权限

(1)chgrp:修改文件所属组
  chgrp即change group的意思,但是需要注意,修改后的所属组,必须是事先存在于**/etc/group文件中,否则无法完成修改。另外,其执行命令的格式为:
  chgrp users [-R] dirname/filename
   -R
参数表示递归地修改组属性,表示连同目录及其下属文件和目录都进行更新成为此用户组。
(2)chown:修改文件的所有者
  chown即change owner的意思,需要注意,用户必须存在于**/etc/passwd**,否则无法生效。chown甚至可以顺带把用户组名称改了,也可以连带目录下的所有子目录或文件同时更改文件拥有者。其语法如下:
  chown [-R] 所有者名称 文件或目录
  chown [-R] 所有者名称:用户组名称 文件或目录
(3)chmod:修改文件权限
  1)数字类型修改法
  Linux文件的基本权限有9个,分别是拥有者,所属组,其他人,三种身份各有“读、写、执行”三种权限。Linux使用了数字来代表各个权限:
  r:4
  w:2
  x:1
  其中每种身份的最终权限是需要累加的,比如当权限为“-rwxr-xr-x”表示成数字则是
  owner: 4+2+1=7,
  group: 4+1=5,
  others: 4+1 =5
  这表示该文件的权限数字为“755”,而修改权限的命令语法为:
  chmod [-R] xyz dir/filename,其中xyz就是权限数字,dir/filename表示文件或者目录名。
  2)符号类型修改法
  我们把上述的九个权限分别是 user,group,others三种身份,借由u、g、o来代表,采用a表示所有权限,其余的r、w、x分别代表读、写、执行权限。使用如下表的方法

命令 身份权限 操作 权限 操作对象
chmod u
g
o
a
+ (加入)
- (移除)
= (设置)
r
w
x
文件或目录

  比如我们要对一个文件权限为“-rwxr-xr–”修改为“-rwxrwxr-x”,则需要对用户组身份的权限追加w权限,对其他用户追加x 权限,所以这样执行:
  chmod g+w, o+x filename 或者 chmod g=rwx, o=rx filename

3.文件及目录权限的意义

3.1 权限对于文件的意义

  我们知道,文件是实际含有数据的地方,包括一般性文件,数据库文件,二进制的可执行文件等,r/w/x各项权限对于其意义在于:
  r: 可读取此文件的实际内容,比如采用vim/nano等文本编辑器,可以查看到内容。
  w: 可以编辑/新增/修改文件内容,例如在vim下可以insert内容,但是不能删除该文件,尽管可以编辑清除文件内容。
  x: 具有执行的权限,如果该文件是一个例如 .sh, .run 等格式的文件或者是一个C代码,则可以执行,并且可以删除该文件。(文件的最高权限,一般新建的文件,不具有可执行的权限)

3.2 权限对于目录的意义

  我们知道,在Linux系统中,一切硬件设备等都视为文件,而目录是一种特殊的文件,r/w/x各项权限对于其意义在于:
  r: 可查询此目录下文件名数据,比如ls命令。
  w: 可以建立新目录/删除已存在目录/修改已存在的目录(名称,移动其位置)。(目录的最高权限,一般不随意给出该权限)
  x: 具有执行的权限,简单地说,就是可以将该目录转换成家目录的能力,比如cd 命令。注意,x权限对于目录是极其重要的,如果没有该目录,表示你不能切换到该目录,更不能对其子目录或者文件进行操作,即使你有“r/w”权限。

3.3 案例(摘自鸟哥的私房菜)

操作 /dir1 /dir/file1 /dir2 重点
读取file1内容 x r - 比如进入/dir1才能读取到里面的文件数据
修改file1的内容 x rw - 能进入/dir1且修改file1才行
执行file1的内容 x rx - 能进入dir1且能执行file1才行
删除file1文件 wx - - 能够进入/dir1并具有目录修改的权限即可
将file1复制到dir2 x r wx 能够读file1且能修改/dir2内的数据

   上表列出了对于/dir1、/dir1/file1、/dir2这三个文件,完成上述操作所需的最小权限,我们可以发现对于dir1多数情况都必须有x权限。

4. 文件与目录的默认权限和隐藏属性

4.1 文件默认权限

  文件的默认权限是通过umask值来设定的,注意这不是systemctl unmask firewalld.service中的unmask,Linux会对新建的目录和文件设定一个最原始的权限值,这跟umask有关,在终端执行:umask或者 umask -S可以查看,比如:


这表示umask的值0022代表的就是“u=rwx, g=rx,o=rx”,这是怎么对应的呢,默认情况下:

  • 如果用户建立文件,是没有可执行权限的,即权限表示为 -rw-rw-rw-,换算成数字就是666。
  • 如果用户建立目录,默认是全开放的,即权限表示为drwxrwxrwx,换算成数字就是777。
    umask的值,就是该默认值,需要减掉的权限,比如
  • 建立文件时,(-rw-rw-rw-)- (-----w–w-) ==-rw-r–r-- 即644
  • 建立目录时,(drwxrwxrwx)- (d----w–w-) == drwxr-xr-x 即755.
    这就是为什么我们再没有umask值时,默认创建的文件和目录权限分别为“644”和“755”了。

4.2 文件隐藏属性

(1)chattr(配置文件属性)
语法:chattr [±=] [选项] filename/dir
  [选项]可以是多个,可以通过–help查看具体选项的含义,filename/dir是文件名或者目录。
(2)lsattr [选项] filename/dir
  [选项]可以是多个,可以通过–help查看具体选项的含义,filename/dir是文件名或者目录。

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务