[Linux基础]-9-文件权限

引言

这篇文章介绍Linux下的文件权限的概念,实例演示如何利用命令来更改文件权限、文件所属用户组和文件所属用户。

文章目录

0×1.Linux文件属性详解

在我们使用命令"ls -al"或"ll -a"命令显示文件详细信息的时候,经常会看到下面这样的输出结构:

					
					#下面是ls输出中的两条信息
					987@hk987.xyz~$ ls -al
					drwxr-xr-x  3 root root   4096 2023-6-24 03:42 .wine/
					-rwxrw-rw-  1 987 987   13724074 2023-6-24 11:03  testfile
					
					

这里首先对第一条"drwxr-xr-x 3 root root 4096 2023-6-24 03:42 .wine/"的第一个字段"drwxr-xr-x"做出解释,这十个字符的含义如下:

第一个字符(drwxr-xr-x)代表的含义:

"d"代表目录,本例中第一条输出就是一个目录;
"-"则代表普通文件,本例中第二条输出就是一个普通文件;
"l"为符号链接,指向其它文件,有点类似Windows中的"快捷方式";
"c"为字符设备节点(如键盘)访问设备,一般在/dev/目录下比较多见;
"b"为块设备文件(如硬盘),同上,一般在/dev/目录下比较多见;
"P"(大写)命名管道函数,用于进程间通信;
"s"套接字,用于设备间通信;

后九个字符中(drwxr-xr-x),每三个字符是一组:

"rwx"文件拥有者对该文件的访问权限;
"r-x"文件所属用户组的成员对该文件的访问权限;
"r-x"既非文件拥有者,也非文件所在用户组的其他用户对该文件的访问权限;

"r"代表只读权限;
"w"代表可写权限;
"x"代表文件是可执行的(有点类似windows中的.exe后缀所代表的意思,Linux中没有后缀的概念,是否可执行查看的是文件是否有"x"权限);

所以在"drwxr-xr-x"的后九个字符中:

"rwx"代表,文件拥有者对该文件拥有可读写与可执行的权限;
"r-x"代表文件所属用户组的成员对该文件拥有可读和可执行的权限,没有赋予的权限用"-"代替;
"r-x"代表其他用户对该文件拥有可读和可执行的权限;

在"drwxr-xr-x 3 root root 4096 2023-6-24 03:42 .wine/"中后面几个字段的介绍如下:

3代表连接数;
第一个root是文件所属用户;
第二个root代表文件所属用户组是root组;
"4096"是文件大小,单位字节;
"2023-6-24 03:42"是文件最后修改时间,有些系统中的显示是"Jun 24 03:42";
".wine/"是文件或者文件夹名称;

综上所述就能很容易的得出第二条输出"-rwxrw-rw- 1 987 987 13724074 2023-6-24 11:03 testfile"的含义:

这是一个普通文件"-",文件拥有者对文件有可读写和可执行权限(rwx),文件所属组对文件有可读写权限(rw-),其他用户对文件也有可读写权限(rw-),文件的连接数是1,文件拥有者是"987",文件所属组是"987"组,此文件的大小是"13724074"字节,最后修改时间是"2023-6-24 11:03",文件的名称叫"testfile";

看到这里是不是顿时豁然开朗?除了这些常见属性之外,还有一个需要了解的属性"Inode"号:

					
					#显示每个文件的Inode号,每个文件或者文件夹前都会出现一个唯一的"Inode"编号
					987@hk987.xyz~$ ls -i
					523273 anaconda-ks.cfg  523267 install.log.syslog  529410 testfile
					
					

Inode保存了文件的大部分属性信息,包括修改时间,访问时间,文件属于谁,属于哪个组等等,其中还有一个文件的唯一ID号,就是上面的命令中我们看到的文件名称前面的数字。

0×2.Linux如何修改文件权限

修改文件权限前,需要了解一下权限中的"rwx"与数字的对应关系,其中r=4,w=2,x=1。

例如:"drwxr-xr-x",第一个"d"是代表文件夹,这里不用考虑,后面九个字符,每三个一组相加:

rwx=4+2+1=7
r-x=4+0+1=5
那么有
drwxr-xr-x = 755
同理
-rwxrw-rw- = 766 (rw-就是4+2+0=6)

可以通过"chmod"命令修改文件属性中的权限字段的值,请看下面的实例:

					
					#新建一个文件
					987@hk987.xyz~$ touch testfile

					#查看一下文件的详细属性
					987@hk987.xyz~$ ls -l
					-rw-rw-r--. 1 987 987 0 Dec 31 11:03 testfile

					#修改文件权限
					987@hk987.xyz~$ chmod 766 testfile
					987@hk987.xyz~$ ls -l
					-rwxrw-rw-. 1 987 987 0 Dec 31 11:03 testfile
					
					

上面的实例中,文件的权限字段"-rw-rw-r"(664)被修改成了"-rwxrw-rw-"(766),如果不习惯这种数字化的修改方式,还有一种字符方式:

					
					#u=后面填写文件拥有者对文件的权限,g=后面是文件所属组中的成员对文件的权限,o=后面表示其他用户对文件的权限
					987@hk987.xyz~$ chmod u=rw,g=rw,o=r testfile
					987@hk987.xyz~$ ls -l
					-rw-rw-r--. 1 987 987 0 Dec 31 11:03 testfile

					#如果想添加删除某项权限可以使用加减运算符,u+x代表文件拥有者权限字段加上可执行权限,g-w文件所属组权限字段减去可写权限,o+x其他用户权限字段加上可执行权限
					987@hk987.xyz~$ chmod u+x,g-w,o+x testfile
					987@hk987.xyz~$ ls -l
					-rwxr--r-x. 1 987 987 0 Dec 31 11:03 testfile

					#或者直接给所有字段加上或减去某个或多个权限,例如三个权限字段都将可写和可执行权限全部减去
					987@hk987.xyz~$ chmod -wx testfile
					987@hk987.xyz~$ ls -l
					-r--r--r--. 1 987 987 0 Dec 31 11:03 testfile
					
					

0×3.Linux如何修改文件所属用户组

使用chgrp命令修改文件所属用户组:

					
					#首先创建一个"testgroup"组
					987@hk987.xyz~$ sudo groupadd testgroup

					#查看一下文件"testfile"所属组,是"987"组
					987@hk987.xyz~$ ls -l testfile
					-rw-rw-r--. 1 987 987 0 Dec 31 11:03 testfile

					#使用普通权限更改这个文件所属组,显示权限不够
					987@hk987.xyz~$ chgrp testgroup testfile
					chgrp: changing group of `testfile': Operation not permitted

					#使用管理员权限更改这个文件所属组,成功
					987@hk987.xyz~$ sudo chgrp testgroup testfile
					987@hk987.xyz~$ ls -l
					-rw-rw-r--. 1 mm testgroup 0 Dec 31 11:03 testfile

					#使用普通权限,将文件改回自己的组,成功
					987@hk987.xyz~$ chgrp mm testfile
					987@hk987.xyz~$ ls -l
					-rw-rw-r--. 1 987 987 0 Dec 31 11:03 testfile
					
					

0×4.Linux如何修改文件所属用户

使用chown命令更改文件拥有者(只有root权限才能执行):

					
					#使用root权限将文件拥有者更改成root
					987@hk987.xyz~$ sudo chown root testfile

					987@hk987.xyz~$ ls -l
					-rw-rw-r--. 1 root mm 0 Dec 31 11:03 testfile

					#上面虽然更改了文件的拥有者,但是文件所属组没有改变,可以通过添加参数-R,一次性更改文件拥有者和文件所属组
					#chown -R user_name:group_name file_name
					987@hk987.xyz~$ chown -R root:testgroup testfile
					987@hk987.xyz~$ ls -l
					-rw-rw-r--. 1 root testgroup 0 Dec 31 11:03 testfile
					
					

这篇文章主要讲解文件权限,文件属主和属组,不是让大家每时每刻都去关注文件或文件夹的权限,而是当大家遇到无法访问的文件或者目录时,就能够判断是什么原因无法访问,以及想要访问应该加上哪些权限了。