文件权限
文件权限
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
[root@www /]# ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
实例中,bin 文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为
d
则是目录 - 当为
-
则是文件; - 若是
l
则表示为链接文档(link file); - 若是
b
则表示为装置文件里面的可供储存的接口设备(可随机存取装置); - 若是
c
则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为rwx
的三个参数的组合。其中,r
代表可读(read)、w
代表可写(write)、x
代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号-
而已。

每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。

更改文件属性
chgrp
用于变更文件或目录的所属群组。
语法
chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
-c
或--changes
:效果类似"-v"参数,但仅回报更改的部分。-f
或--quiet 或 --silent
:不显示错误信息。-h
或--no-dereference
:只对符号连接的文件作修改,而不改动其他任何相关文件。-R
或--recursive
:递归处理,将指定目录下的所有文件及子目录一并处理。-v
或--verbose
:显示指令执行过程。--help
:在线帮助。--reference=<参考文件或目录>
:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。--version
:显示版本信息。
实例
实例 1:改变文件的群组属性:
chgrp -v bin log2012.log
输出:
[root@localhost test]# ll
---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
[root@localhost test]# chgrp -v bin log2012.log
"log2012.log" 的所属组已更改为 bin
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
chown
用于设置文件所有者和文件关联组的命令。
语法
chown [–R] 所有者 文件名
chown [-R] 所有者:属组名 文件名
user
: 新的文件拥有者的使用者 IDgroup
: 新的文件拥有者的使用者组(group)-c
: 显示更改的部分的信息-f
: 忽略错误信息-h
:修复符号链接-v
: 显示详细的处理信息-R
: 处理指定目录以及其子目录下的所有文件--help
: 显示辅助说明--version
: 显示版本
实例
进入 /root 目录(~)将 install.log 的拥有者改为 bin 这个账号:
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
chmod
控制用户对文件的权限的命令,Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
语法
chmod [-cfvR] [--help] [--version] mode file...
- mode : 权限设定字串,格式如下:
[ugoa...][[+-=][rwxX]...][,...]
u
表示该文件的拥有者,g
表示与该文件的拥有者属于同一个群体(group)者,o
表示其他以外的人,a
表示这三者皆是。+
表示增加权限、-
表示取消权限、=
表示唯一设定权限。r
表示可读取,w
表示可写入,x
表示可执行,X
表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
-c
:若该文件权限确实已经更改,才显示其更改动作-f
:若该文件权限无法被更改也不要显示错误讯息-v
:显示权限变更的详细资料-R
:对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)--help
:显示辅助说明--version
:显示版本
符号模式
使用符号模式可以设置多个项目:who
(用户类型),operator
(操作符)和 permission
(权限),每个项目的设置可以用逗号隔开。 命令chmod
将修改who
指定的用户类型对文件的访问权限,用户类型由一个或者多个字母who
的位置来说明,如who
的符号模式表所示:
who | 用户类型 | 说明 |
---|---|---|
u | user | 文件所有者 |
g | group | 文件所有者所在组 |
o | others | 所有其他用户 |
a | all | 所有用户, 相当于 ugo |
operator 的符号模式表:
who | 说明 |
---|---|
+ | 为指定的用户类型增加权限 |
- | 去除指定用户类型的权限 |
= | 设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
permission 的符号模式表:
who | 用户类型 | 说明 |
---|---|---|
r | 读 | 设置为可读权限 |
w | 写 | 设置为可写权限 |
x | 执行权限 | 设置为可执行权限 |
X | 特殊执行权限 | 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 |
s | setuid/gid | 当文件被执行时,根据 who 参数指定的用户类型设置文件的 setuid 或者 setgid 权限 |
t | 粘贴位 | 设置粘贴位,只有超级用户可以设置该位,只有文件所有者 u 可以使用该位 |
八进制语法
chmod 命令可以使用八进制数来指定权限。文件或目录的权限位是由 9 个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为 1,用来说明一个类具有相应的优先级。
# | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r-- | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | --x | 001 |
0 | 无 | --- | 000 |
例如, 765 将这样解释:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
实例
将文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将文件 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
为 ex1.py 文件拥有者增加可执行权限:
chmod u+x ex1.py
将目前目录下的所有文件与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 :
chmod 777 file
语法为:
chmod abc file
默认权限
umask
- 查看默认权限
- 0022
- 第一位 0 文件特殊权限
- 022 文件默认权限
文件权限
- 默认权限就是文件一创建后就拥有的权限
- 文件默认不能建立可执行文件,必须手工赋予执行权限
- 文件默认权限最大为 666
- 默认权限需要换算成字母再相减
- 建立文件之后的默认权限,为 666 减去 umask 值
目录
- 目录默认权限最大为 777
- 建立目录之后的默认权限,为 777 减去 umask 值
修改 umask 值
临时修改
umask 0002
永久修改
umask 0002
sudo 权限
- root 本来只有超级管理员可以使用的命令赋予普通用户来使用
- sudo 操作的对象是系统命令
visudo
- 通过
visudo
可以由超级用户赋权 - 实际修改的是
/etc/sudoers
文件 - 命令必须写绝对路径