Linux的文件属性包含文件类型和文件权限
文件类型
-
表示文件d
表示文件夹l
表示软链接
文件权限
r
读权限w
写权限x
执行权限
文件所属
u
代表所属用户g
代表所属组o
代表其它用户
chmod
命令可以修改用户权限
- 可以通过 r w x 字母修改
- 也可以用 3位0到7 的数字修改
chmod 用 r w x 字母符号 修改:设置,添加,移除 文件权限
chmod用字母符号可以 设置,添加,修改权限, 用数字的话,只能设置,相当于等号=
,不能新增和移除
添加加+
,移除减-
,设置等=
+
加号是增加指定权限-
减号是移除指定权限=
等号是设置权限
u
属主 , g
属组 , o
其它 , a
所有
u
代表属主, 所属用户, userg
代表属组, 所属组, groupo
代表其它用户, othera
的代表所有, 即是ugo
,
逗号分隔
,
逗号可以分隔多组权限,不能有空格, 例如u=rwx,g=r,g+wx,g-w,o=rwx,o-w,o-x,o-r,o+r
例子
给文件 text01.txt 添加所有用户的读取权限 r
sudo chmod ugo+r text01.txt
等效
sudo chmod a+r text01.txt
移除所有用户的可执行权限
sudo chmod ugo-x text01.txt
等效
sudo chmod a-x text01.txt
移除其它用户的写(修改)权限
sudo chmod o-w text01.txt
用等号设置权限
sudo chmod a=rwx text01.txt
等效
sudo chmod ugo=rwx text01.txt
等效
sudo chmod 777 text01.txt
可以用,
逗号分隔多个权限设置, 不能有空格
例如
sudo chmod u=rwx,g=rw,o=r text01.txt
sudo chmod u=rwx,g=rx,o=r text01.txt
等效
sudo chmod u=rwx,g=r,g+wx,g-w,o=rwx,o-w,o-x,o-r,o+r text01.txt
chmod 用 三位0到7的数字 修改文件权限
chmod用字母符号可以 设置,添加,修改权限, 用数字的话,只能设置,相当于等号=
,不能新增和移除
十进制0到7的二进制为 000
到111
, 刚好3位, 可表示 ---
到rwx
十进制 | 二进制 | rwx | 权限 |
---|---|---|---|
7 | 111 | rwx | 读 + 写 + 执行 |
6 | 110 | rw- | 读 + 写 |
5 | 101 | r-x | 读 + 执行 |
4 | 100 | r-- | 只读 |
3 | 11 | -wx | 写 + 执行 |
2 | 10 | -w- | 只写 |
1 | 1 | --x | 只执行 |
0 | 0 | --- | 无 |
所以
- 只读 是
4
- 可读可执行不可写 是
5
- 可读写不可执行 是
6
可用于文件夹 - 可读写可执行是
7
例子
root@ud224:/home/z/test# touch text01.txt
root@ud224:/home/z/test# ls -l
总用量 0
-rw-r--r-- 1 root root 0 11月 7 17:33 text01.txt
root@ud224:/home/z/test# chmod 777 text01.txt
root@ud224:/home/z/test# ls -l
总用量 0
-rwxrwxrwx 1 root root 0 11月 7 17:33 text01.txt
root@ud224:/home/z/test# chmod 765 text01.txt
root@ud224:/home/z/test# ls -l
总用量 0
-rwxrw-r-x 1 root root 0 11月 7 17:33 text01.txt
root@ud224:/home/z/test# chmod 654 text01.txt
root@ud224:/home/z/test# ls -l
总用量 0
-rw-r-xr-- 1 root root 0 11月 7 17:33 text01.txt
root@ud224:/home/z/test# chmod 1777 text01.txt
root@ud224:/home/z/test# ls -l
总用量 0
-rwxrwxrwt 1 root root 0 11月 7 17:33 text01.txt
root@ud224:/home/z/test#
chmod用字母符号可以 设置,添加,修改权限, 用数字的话,只能设置,相当于等号=
,不能新增和移除
例如:
sudo chmod 777 text01.txt
等效
sudo chmod a=rwx text01.txt
等效
sudo chmod a=wxr text01.txt
等效
sudo chmod ugo=rwx text01.txt
等效
sudo chmod augo=rwx text01.txt
等效
sudo chmod uago=xrw text01.txt
无视符号顺序
t
粘贴位 , Sticky Bit
安装Ubuntu22.04时, 发现 /tmp
, /var/tmp
等文件夹的属性是 drwxrwxrwt
又发现 CentOS7 的 /tmp
是 drwxrwxrwt.
经查
drwxrwxrwt
含义是:
- 任何人都可以在此目录拥有写权限,但是不能删除别人拥有的文件
t
是Sticky bit (粘贴位) 是Unix文件系统权限的一个旗标
可以用 chmod 1777
设为 drwxrwxrwt
chmod 1777 file
Sticky Bit
Sticky Bit是Linux或Unix系统下的一种特殊的权限标识位,它可以赋予文件或者目录。而被赋予此权限位的文件或者目录可以实现只有Owner或者root才可以进行移动、删除或者重命名操作。
Sticky Bit的起源
Sticky Bit并不是一个新的概念,而事实上早在1974年它就被引入了Unix操作系统中了,而当时引入的目的则是不同的,是用于降低每次应用程序执行时的时间延迟,程序在执行时,首先要加载至内存之中,在用户使用之前会需要一些时间,Sticky Bit为了对此进行改善而引入,操作系统会检测是否设定了Sticky Bit,如果设定了,会将可执行程序的text段数据保存在交换空间(swap)中,通过swap的使用降低了反复使用情况下的时间延迟。而当下Sticky Bit主要应用在是否允许其他用户来删除Owner创建的文件或者目录。
不同操作系统的实现
可以看到本文示例的Linux操作系统下对于文件的Sticky Bit是无视的,而事实上不同的操作系统动作可能是不同的,一部分操作系统关于Sticky Bit的实现如下图所示: