前言
之前没系统学习Linux文件权限,经常在安装软件的时候,面对教程上写的以下一类的命令一脸懵逼
chmod 755 start.sh
chmod a+w start.sh
chgrp guest start.sh
chown guest start.sh
虽然知道以上都是用于调整文件权限的,755 权限是什么权限?a+w有代表什么?chmod、chgrp、chown有分别代表什么?什么时候使用?经过以上四个命令操作,我们最终start.sh文件的权限到底是怎么样的?这一期我们要学习的就是解决这些疑问的。
一、权限身份
Linux将文件可存取的身份分为三个类别,分别是:
- owner 文件拥有者,即文件归属谁,比如谁创建的
- group 群组,即文件针对一类人权限的描述
- others 其他人 除了拥有者和群组以外的人就是其他人
每一种身份都会有read/write/excute三种权限的描述。
在Linux中,默认情况下,系统中所有的账号和一般身份使用者,以及root账号的相关信息都是记录在/etc/passwd文件内的,个人密码记录在/etc/shadow文件内,而群组信息记录在/etc/group文件内,所以这三个文件是描述了Linux系统中的账号、密码和群组,是非常重要的。
二、权限描述
我们利用ls命令查看一下文件的权限
[root@bugdongdong ~]# ls -al
total 148
dr-xr-x---. 14 root root 4096 Jun 2 23:06 .
dr-xr-xr-x. 32 root root 4096 May 15 09:43 ..
drwxr-xr-x 3 18 dialout 4096 Aug 6 2019 admin
-rw------- 1 root root 19896 Jun 1 23:18 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwx------ 3 root root 4096 Aug 18 2017 .cache
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwxr-xr-x 3 root root 4096 Feb 22 2019 .groovy
以上每一行,以空格为界,每一部分代表的含义如下:
[权限][连结][拥有者][群组][文件大小][修改时间][文档名称]
我们来看一下第一部分的权限描述
-rw-r--r--
可以看到是由10个字符组成的,均为rwx
的三个参数的组合。其中,r
代表可读(read)、w
代表可写(write)、x
代表可执行(execute),-
代表无权限. 10位描述符具体含义如下:
-
第1位: 代表文档类型,如
d
代表目录,-
代表普通文件,还有其他字符(见下方) -
第2-4位:代表拥有者权限
-
第5-7位:代表群组权限,其他同上
-
第8-10位:代表其他人权限
特别注意:
root 基本上是不受系统的权限所限制的, 无论文件权限为何,预设 root 都可以存取喔!所以针对特别关键的文件,权限可以设置为----------
文档类型划分:
-
当为
d
则是目录 -
当为
-
则是文件 -
若是
l
则表示为连结档(link file),类似于windows的快捷方式 -
若是
b
则表示为装置文件里面的可供储存的接口设备(可随机存取装置); block区块设备 -
若是
c
则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。 字符设备文件(character) -
若是
s
则表示为资料接口文件(sockets)。既然被称为数据接口文件, 想当然尔,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个 socket 来进行数据的沟通了。第一个属性为s
,最常在/run 或/tmp 这些个目录中看到这种文件类型了。 -
若是
p
则表示为数据输送文件(FIFO, pipe):FIFO 也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO是 first-in-first-out 的缩写。第一个属性为[p] 。
三、文件权限修改
(1)三个命令
chown
改变文件拥有者chgrp
改变文件所属群组chmod
改变文件的权限
其中以上命令,在执行修改的时候是只针对单文件或者单目录生效,如果要连目录下的所有子目录或文件同时更改的话,我们可以加上-R选项,递归执行操作
(2)权限修改
拥有者和群组变更:
chown -R user:group test/
chown user:group test.txt
chown user test.txt
这里我们有看到另外一种写法,就是user:group
就代表同时变更拥有者和群组,以:
分隔,当然也可以用.
号分隔,常用冒号,因为.
号容易在用户名中存在,造成歧义误判。
权限变更:
权限的变更/设定有两种支持的方式:数字方式和符号方式
-
数字方式:
r
:4w
:2x
:1
读、写、执行三种权限的数字分别为上面这三种,那么在我们的文件的9位三组权限中,每一组权限都是有这三个权限的数字累加的,最终得到一个三位数的权限数字。
以权限-rwxr-xr-x
为例
- owner
rwx
4+2+1 = 7 - group
r-x
4+0+1 = 5 - other
r-x
4+0+1 = 5
所以要描述上面这个权限的数字就是755了。
- 符号方式:
我们知道9位字符描述的分别是user/group/other三种身份的权限的,于是:
u
代表user,即前面我们提到的ownerg
代表 groupo
代表othera
代表all,表示以上三种身份
+
代表添加权限-
代表删除权限=
代表设定权限
示例:
chmod u=rwx,g+w,o=rx test.txt
# 下面这个代表给所有人加写入权限
chmod a+w test.txt
(3) rwx权限对于文件和目录的含义不同
- 对于文件
-
r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
-
w (write):可以编辑、新增或者是修改该文件的内容**(但不含删除该文件);**
-
x (execute):该文件具有可以被系统执行的权限。
- 对于目录
-
r (read contents in directory):
表示具有读取目录结构列表的权限,所以当你具有读取
r
一个目录的权限时,表示你可以查询该目录下的文件名数据。可以利用 ls 这个指令将该目录的内容列表显示出来; -
w (modify contents of directory):
写入的权限对目录来说很关键的权限, 因为它表示你具有改动该目录结构列表的权限,即这些权限:
-
建立新的文件与目录;
-
删除已经存在的文件与目录(不论该文件的权限为何!)
-
将已存在的文件或目录进行更名;
-
搬移该目录内的文件、目录位置。
-
x (access directory):
目录的执行权限有啥用呢?目录按说是不会用来执行的。所以、目录的
x
代表的是用户能否进入该目录成为工作目录的用途。所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入 Linux 时, 你所在的家目录就是你当下的工作目录,而变换目录的指令是cd
(change directory)!另外,Linux 的文件是没有所谓的扩展名的,linux的文件能否被执行是看它有没有
x
权限。虽然如此,不过我们仍然希望可以藉由扩展名来了解该文件是什么东西,所以, 通常我们还是会以适当的扩展名来表示该文件是什么种类的。