【概述】
在 Linux 系统中,不同的用户处于不同的地位,拥有不同的权限,为保护系统安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定
Linux 系统的每一个文件或目录都有访问权限,这些访问权限决定了哪些用户和组群能访问文件和能执行的操作
【文件属性】
ls 命令
使用 ls –l
命令可以显示文件的属性以及文件所属的用户和组,ls 是 list 的意思,用于显示文件的文件名和相关属性
如图,以第一行为例:drwxr-xr-x 2 root root 4096 6月 10 00:53 公共
其基本构成是:文件属性 链接数 所有者 所属用户组 最后修改时间 文件名
文件类型与权限
使用 ls
命令列出的第 1 列是文件的类型与权限,其有 10 个字符,第一个字符代表了文件的类型,其后 9 个字符三个一组,分分别代表了文件所有者、文件所有者的同组用户、其他用户对该文件的权限
文件类型
文件类型的具体代表字符有:
字符 | 类型 |
---|---|
d | 目录 |
- | 普通文件 |
I | 软链接,即链接文档(link file) |
b | 块设备,装置文件中可供存储的接口设备(可随机存储装置) |
c | 字符设备,装置文件中串行端口设备(一次性读取装置) |
s | 网络套接字(socket) |
p | 管道(piep) |
文件权限
文件类型其后的九个字符三个一组,均为 r
、w
、x
三个字符的组合
其中,r
代表可读(read)、w
代表可写(write)、x
代表可执行(execute),这三个权限的位置不会改变,若没有权限,仅会出现 -
符号
读权限,表示可以用一些命令来读取某个文件的内容;写权限,表示可以编辑和修改某个文件;执行权限,通常指可以运行的二进制程序文件或者脚本文件
以下图为例,从左至右用 0-9 表示 10 个字符,第 0 位确定文件类型,第 1-3 位确定属主权限拥有该文件的权限(该文件的所有者的权限),第 4-6 位确定属组权限拥有该文件的权限(所有者的同组用户),第 7-9 位确定其他用户拥有该文件的权限
需要说明的是,一个目录只有同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息
链接数
使用 ls
命令列出的第 2 列是文件的链接数
链接数表示了有多少文件名连接到此节点(i-node),每个文件都会将它的权限与属性记录到文件系统的 i-node
中
由于目录树是使用文件名来记录,因此每个文件名就会连接到一个 i-node
,这个属性记录的就是有多少不同的文件名连接到相同的一个 i-node
号码
所有者与所属用户组
使用 ls
命令列出的第 3 列是文件的所有者,第 4 列是文件所属用户组
在 Linux 系统中,每个文件都有一特定的所有者,也就是对该文件具有所有权的用户,同时,用户是按组分类的,一个用户属于一个或多个组,而文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户
所有者与所属用户组,标明了该文件具所有权的用户及该文件所属的用户组
文件大小
使用 ls
命令列出的第 5 列是文件的大小
其是以 i-node
节点大小为单位来表示文件大小,其默认单位为字节(B)
可以给 ls
命令加上 -h
选项来更直观的查看文件的大小,即: ls -lh
同时,可以利用 -S
选项,按照文件大小升序排序显示,即:ls -lS
。
修改日期
使用 ls
命令列出的第 6 列是文件的创建日期或最近的修改日期
其内容分别为:月、日、时间,如果某个文件被修改的时间距离现在太久,那么时间部分会显示年份,反之,会显示具体的时间
如果想要显示完整的时间格式,可以利用 ls
命令的选项,即:ls -l --full-time
,其包括年、月、日、时间
同时,可以利用 -t
选项,按照时间顺序升序显示,即:ls -lt
文件名
使用 ls
命令列出的第 7 列是文件的文件名
需要注意的是,使用 ls -l
并不会列出隐藏文件,若想查看某目录下的隐藏文件,要加上 -a
选项,即:ls -al
隐藏文件的特点是文件名前多了一个 “.”,例如:.gconf
【文件属性的更改】
在 Linux 中,复制行为会复制执行者的属性和权限,这就使得即使将某个文件给予某用户,但由于没有相应权限,其无法进行操作,因此就必须要修改文件的所有者与用户组,乃至于文件权限
chgrp 命令
chgrp
命令用于更改文件属组,即改变文件所属的用户组,其语法为:chgrp [选项] 用户组名 文件名
其支持递归更改,即连同子目录下的所有文件、目录都进行更新,常用于更改某一目录内所有文件。
若想递归更改,加上 -R
选项即可
chown 命令
chown
命令用于更改文件属主,即改变文件所有者,其语法为:chown [选项] 属主名 文件名
chown 命令更改文件属主的同时,也可以更改文件属组,其语法为:chown [选项] 属主名:属组名 文件名
同样的,若想递归更改,加上 -R
选项即可
chmod 命令
Linux 文件的基本权限有九个,分别是 owner / group / others 三种身份各有自己的 read / write / execute 权限
chmod
命令用于更改文件权限,有两种方法,一种是用数字表示,一种是用字符表示
利用数字更改权限
利用数字更改权限的语法为:chmod [选项] xyz 文件名或目录名
其中,xyz
为数字类型的权限属性
由于这九个权限是三个一组的,那么我们将每组的三个权限视为一个长度为 3 的二进制数,用 1、0 来表示权限是否存在,那么各权限的位权对照如下:
- r: 4
- w: 2
- x: 1
由于二进制数的特性,对于每种身份的三种权限,我们将其位权累加,即可得到一组唯一的权限对照,例如权限为 rwx
时,其分数为:4+2+1=7.
这样,对于三种身份的权限,我们只需要按次序将累加后的三个分数串接在一起即可,即数字类型的权限属性。
例如:
当权限为 [ -rwxrwxrwx ]
时,分数如下
1 | owner = rwx = 4+2+1 = 7 |
因此在设定权限变更时,该文件的权限数字为 777
利用字符更改
九个权限分别是 user、group、others 三种身份的权限,那么可用 u
、g
、o
来代表三种身份的权限,此外,用 a
代表 all,即所有的身份
基于上述约定,利用字符更改权限的语法为:chmod 身份 符号 权限 文件名或目录名
其中,符号
有三种,分别是:+
加入、-
除去、=
设定
其语法示意图如下:
如下图,给出了一个利用符号更改权限的实例
需要注意的是,使用 +
、-
两个符号时,若没有指定到的选项,权限不会变动
【文件类型查看】
当仅想要查看一个文件的类型时,使用 file
命令即可,该命令会告诉我们是 ASCII 的纯文本文件、二进制文件、数据文件、空文件等