简介
在Unix或则类Unix文件系统中,每位文件(或则目录,目录也被视为文件)都有自己的所属对象和一个与之相关的Unix用户组关联,可以通过设置对应的文件的权限标记指定对于所属用户、所属组以及其他用户的、读、写和可执行权限。假若通过组的形式对文件权限进行更改linux操作系统简介,这么将会促使当前组内的所有用户都具有对应的文件权限;若果是通过其它用户进行文件的权限更改,这么这个更改后的权限对于所有的登入用户就会具有对应的权限
通过ls-l命令可以查看当前目录下具有的文件信息:
权限结构
从总体上看,权限结构的第一位表示文件的类型,‘-’表示通常文件,‘d’则表示这是一个目录文件等,具体如下所示:
总共存在十个比特位unix 改变文件权限,不仅第一个比特位之外,旁边的(9)个比特位每三个一组,分别组成不同用户的访问权限,具体结构如右图所示:
每位组中的权限位描述如下:
如上图所述,此时的文件对于所属用户来讲具备读写权限、对于所属组来讲具备读、写权限,对于其他用户来讲只具备读取权限
因为每位所属位都是一个二补码位,因而实际上每位组的权限可以通过一个八补码的数字来表示,如下表所示:
权限二补码值八机制值描述
---
000
0
没有任何权限
--x
001
1
只有执行权限
-w-
010
2
只有写入权限
-wx
011
3
具备写入和执行权限
r--
100
4
只有读取权限
r-x
101
5
具备读取和写入权限
rw-
110
6
具备读取和写入权限
rwx
111
7
具备读取、写入和执行权限
因而有时看到使用chmod更改文件权限时,通过‘777’的选项来将所有的权限赋给权限组,致使当前文件对所有用户来讲都具备读取、写入和执行权限,这实际上不是一种挺好的方法
更改文件权限umask
在Unix文件系统中,通常文件的默认权限都是‘666’(目录文件为‘777’),即每位用户都对文件具备读写的权限,然而在创建文件时,须要将该权限除以umask对应的值,最终得到的值就是当前文件对应的权限。
在我的系统上,通过umask得到的值为‘0002’(第一个位为黏着位,在此不做剖析),因而当我创建文件时,会将默认的文件权限‘666’减去mask码‘002’,为‘664’,因而我创建的文件应该是对当前用户以及所属组具有读写权限,而对其它用户则只具备读取权限
umask的值通常坐落/etc/profile文件中,在我的Ubuntu上什么是linux,它坐落/etc/login.defs文件中,并且通常可以直接通过umask命令更改这个默认值,如下所示:
# 修改默认的 umask 值
umask 022
chmod
更改文件权限最常用的命令就是chmod,具体的使用方法如下所示:
chmod[options]modefile
其中,mode表示我们更改后的文件权限,倘若是通过八补码的形式进行设置的,这么会直接根据前面表格中的权限进行文件的权限更改,例如说,你希望给当前文件加上读写和可执行权限,而且不想其它的用户具有可执行权限,可以执行如下的命令:
# 现在 file.txt 文件的权限结构就变成了 -rwxrw---
chmod 760 file.txt
然而若果使用通常的符号模式进行更改,这么都会复杂一些。
使用符号模式的通常格式如下所示:
[ugoa...][+-=][rwxXstugo.....]
首先,第一个位置的字符定义了权限所属作用的对象,如下所示:
第二个位置表示希望给当前的文件执行的操作,‘+’表示给文件加上对应的权限,‘-’表示将文件具有的权限进行移除,‘=’表示将权限设置为前面的值
最后一个位置的符号代表作用到设置上的权限,,不仅rws之外,主要有以下几个额外的选项:
比如,假如希望给其他用户为文件添加该文件的可执行文件:
chmod o+x file.txt
chown
chown(changefileownerandgroup)改变文件所属者和所属组。而通常来讲,chown用于更改文件所属者,而通过chgrp改变文件默认的所属组
chown命令的格式如下所示:
chownoptionsowner[group]file
可以通过登陆名或则UID来指定文件的新属主,比如,假如你希望将文件的所属主更改为‘tom’,可以执行如下的命令:
chown tom a.txt
这项操作可能须要sudo:)
注意:只有root用户才能更改文件的属主。任何属主都还能更改文件的属组,前提是该属主必须是原属组和目标属组的成员
其实,chown也可以同时更改文件所属者和所属组,比如:
# 将 1.txt 的所属组修改为 dev,将所属用户修改为 jack
chown jack.dev 1.txt
# 单纯地修改该文件的所属组为 dev
chown .dev 1.txt
# 将1.txt 的所属用户修改为 jack,将所属组修改为 jack 的所属组
chown jack. 1.txt
chgrp可以愈发直观地更改文件的属主,如下所示:
# 修改 1.txt 的属组为 master
chgrp master 1.txt
该操作可能也须要sudo
特殊文件权限
上文的umask命令中实际上存在四个位,并且我们只是讨论了后三位,在此讨论特殊文件权限
在Linux上,为每位文件和目录权限提供了(3)个额外的权限位置:
同样的,这三个额外的bit位也可以以八补码的方式进行设置,具体对应关系如下表所示:
二补码值八补码值描述
000
0
所有位都清零
001
1
黏着位
010
2
SGID位
011
3
SGID和黏着位
100
4
SUID位
101
5
SUID和黏着位
110
6
SUID和SGID位
111
7
SUID、SGID和黏着位
假如希望为某个文件添加额外的比特位,只须要将额外的比特位放在原本的通常权限的八补码组前即可,比如unix 改变文件权限,假如希望给‘1.txt’文件只添加setuid特殊权限位,可以执行如下的chmod命令
chmod 4644 1.txt
因为涉及到权限相关的操作,因而可能须要sudo:)
假如习惯于使用符号表示的权限来设置特殊权限位,可以使用如下的形式进行操作:
# 给 1.txt 文件加上 setuid 权限位
chmod u+s 1.txt
# 给 1.txt 文件加上 setgid 权限位
chmod g+s 1.txt
# 给 1.txt 文件加上 sticky 粘着位
chmod +t 1.txt
这种操作同样须要sudo
实际使用
参考:
[1]《Linux命令行与Shell脚本编程大全》
[2]
[3]