Linux文件权限笔记
Linux文件权限1. 使用文件权限符2. 默认文件权限3. 改变权限3.1 options3.2 八进制模式3.3 符号模式4. 改变所属关系4.1 chown4.2 chgrp5. ReferencesLinux文件权限1. 使用文件权限符ls命令可以查看Linux系统上的文件、目录和设备的权限$ ls –ltotal 68...
文章目录
Linux文件权限
1. 使用文件权限符
ls命令可以查看Linux系统上的文件、目录和设备的权限
$ ls –l
total 68
-rw-rw-r-- 1 rich rich 50 2010-09-13 07:49 file1.gz
-rw-rw-r-- 1 rich rich 23 2010-09-13 07:50 file2
-rw-rw-r-- 1 rich rich 48 2010-09-13 07:56 file3
-rw-rw-r-- 1 rich rich 34 2010-09-13 08:59 file4
-rwxrwxr-x 1 rich rich 4882 2010-09-18 13:58 myprog
-rw-rw-r-- 1 rich rich 237 2010-09-18 13:58 myprog.c
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test1
drwxrwxr-x 2 rich rich 4096 2010-09-03 15:12 test2
$
输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:
-代表文件
d代表目录
l代表链接
c代表字符型设备
b代表块设备
n代表网络设备
之后有3组三字符的编码,每组定义了3种访问权限:
r代表对象是可读的
w代表对象是可写的
x代表对象是可执行的
若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:
-
对象的属主
-
对象的属组
-
系统的其他用户
例子:
-rwxrwxr-x 1 rich rich 4882 2010-09-18 13:58 myprog
文件myprog有下面3组权限:
rwx: 文件的属主(设为登录名rich)
rwx: 文件的属组(设为组名rich)
r-x: 系统上的其他人
这些权限说明登录名为rich的用户可以读取、写入以及执行这个文件(可以看作有全部权限)。类似地,rich组的成员也可以读取、写入和执行这个文件。然而不属于rich组的其他用户只能读取和执行这个文件:w被单破折线取代了,说明这个安全级别没有写入权限。
2. 默认文件权限
umask命令用来设置所创建文件和目录的默认权限。
$ touch newfile
$ ls -al newfile
-rw-r--r-- 1 rich rich 0 Sep 20 19:16 newfile
$
touch命令用分配给我的用户账户的默认权限创建了这个文件。umask命令可以显示和设置这个默认权限。
$ umask
0022
$
第一位代表了一项特别的安全特性,叫作粘着位(sticky bit),后面的3位表示文件或目录对应的umask八进制值。要理解umask是怎么工作的,得先理解八进制模式的安全性设置。
八进制模式的安全性设置先获取这3个rwx权限的值,然后将其转换成3位二进制值,用一个八进制值来表示。在这个二进制表示中,每个位置代表一个二进制位。因此,如果读权限是唯一置位的权限,权限值就是r--
,转换成二进制值就是100,代表的八进制值是4。下表列出了可
能会遇到的组合。
八进制模式先取得权限的八进制值,然后再把这三组安全级别(属主、属组和其他用户)的八进制值顺序列出。因此,八进制模式的值664代表属主和属组成员都有读取和写入的权限,而其他用户都只有读取权限。
八进制的umask值是0022,而上面所创建的文件的八进制权限却是644。umask值只是个掩码,它会屏蔽掉不想授予该安全级别的权限。要把umask值从对象的全权限值中减掉。对文件来说,全权限的值是666(所有用户都有读和写的权限);而对目录来说,则是777(所有用户都有读、写、执行权限)。所以在上例中,文件一开始的权限是666,减去umask值022之后,剩下的文件权限就成了644。
在大多数Linux发行版中,umask值通常会设置在/etc/profile启动文件中,可以用umask命令为默认umask设置指定一个新值。
$ umask 026
$ touch newfile2
$ ls -l newfile2
-rw-r----- 1 rich rich 0 Sep 20 19:46 newfile2
$
在把umask值设成026后,默认的文件权限变成了640,因此新文件现在对组成员来说是只读的,而系统里的其他成员则没有任何权限。umask值同样会作用在创建目录上。
$ mkdir newdir
$ ls -l
drwxr-x--x 2 rich rich 4096 Sep 20 20:11 newdir/
$
由于目录的默认权限是777,umask作用后生成的目录权限不同于生成的文件权限。umask值026会从777中减去,留下来751作为目录权限设置。
3. 改变权限
chmod命令用来改变文件和目录的安全性设置。该命令的格式如下:
chmod options mode file
mode参数可以使用 八进制模式 或 符号模式 进行安全性设置。八进制模式设置非常直观,直接用期望赋予文件的标准3位八进制权限码即可。
3.1 options
-c或--changes:效果类似“-v”参数,但仅回报更改的部分
-f或--quiet或--silent:不显示错误信息
-R或--recursive:递归处理,将指令目录下的所有文件及子目录一并处理
-v或--verbose:显示指令执行过程
3.2 八进制模式
$ chmod 760 newfile
$ ls -l newfile
-rwxrw---- 1 rich rich 0 Sep 20 19:16 newfile
$
八进制文件权限会自动应用到指定的文件上。
3.3 符号模式
与通常用到的3组三字符权限字符不同,chmod命令采用了另一种方法。下面是在符号模式下指定权限的格式。
[ugoa…][[+-=][rwxXstugo…]
-
第一组字符定义了权限作用的对象:
u代表用户 g代表组 o代表其他 a代表上述所有
-
第二组的符号表示在现有权限基础上增加权限(+),还是在现有权限基础上移除权限(-),或是将权限设置成后面的值(=)。
-
第三组符合代表作用到设置上的权限
X:如果对象是目录或者它已有执行权限,赋予执行权限。 s:运行时重新设置UID或GID。 t:保留文件或目录。 u:将权限设置为跟属主一样。 g:将权限设置为跟属组一样。 o:将权限设置为跟其他用户一样。
例子:
$ chmod o+r newfile $ ls -lF newfile -rwxrw-r-- 1 rich rich 0 Sep 20 19:16 newfile* $
不管其他用户在这一安全级别之前都有什么权限,
o+r
都给这一级别添加读取权限。$ chmod u-x newfile $ ls -lF newfile -rw-rw-r-- 1 rich rich 0 Sep 20 19:16 newfile $
u-x
移除了属主已有的执行权限。注意ls命令的-F选项,它能够在具有执行权限的文件名后加一个星号。
options为chmod命令提供了另外一些功能。-R选项可以让权限的改变递归地作用到文件和子目录。你可以使用通配符指定多个文件,然后利用一条命令将权限更改应用到这些文件上。
4. 改变所属关系
4.1 chown
chown命令用来改变文件的属主,格式如下:
chown options owner[.group] file
可用登录名或UID来指定文件的新属主。
# chown dan newfile
# ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20 19:16 newfile
#
chown命令也支持同时改变文件的属主和属组。
# chown dan.shared newfile
# ls -l newfile
-rw-rw-r-- 1 dan shared 0 Sep 20 19:16 newfile
#
可以只改变一个目录的默认属组。
# chown .rich newfile
# ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20 19:16 newfile
#
如果Linux系统采用和用户登录名匹配的组名,可以只用一个条目就改变二者。
# chown test. newfile
# ls -l newfile
-rw-rw-r-- 1 test test 0 Sep 20 19:16 newfile
#
chown命令采用一些不同的选项参数。-R选项配合通配符可以递归地改变子目录和文件的所属关系。-h选项可以改变该文件的所有符号链接文件的所属关系。
只有root用户能够改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。
4.2 chgrp
chgrp命令用来改变文件的默认属组。
$ chgrp shared newfile
$ ls -l newfile
-rw-rw-r-- 1 rich shared 0 Sep 20 19:16 newfile
$
用户账户必须是这个文件的属主,除了能够更换属组之外,还得是新组的成员。现在shared组的任意一个成员都可以写这个文件了。这是Linux系统共享文件的一个途径。
5. References
《Linux命令行与shell脚本编程大全》Richard Blum Christine Bresnahan
http://man.linuxde.net/chmod
更多推荐
所有评论(0)