Linux命令完全指南

Linux chmod命令使用详解

用法

1
2
3
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

描述

使用chmod命令改变指定文件访问权限有两种方式:一种是用符号标记所进行更改,另一种方式是采用8进制数指定新的访问权限。

符号模式的格式:

1
[ugoa...][[+-=][rwxXstugo...]...][,...]

在这种格式下,所带参数是一个用逗号分隔的字符列表.每个符号方式的改变命令以零或者字’ugoa’开始;’ugoa’控制哪些用户对该文件访问权限将被改变:文件的所有者(u),与文件所有者同组的用户(g),其他组的用户(o),所有用户(a).因此,a在这里等同于ugo.如果没有带参数,则缺省设置为a,运行效果相同,但是在umask中设置的位将不会受影响.

操作符’+’使得用户选择的权限被追加到每个指定文件,(操作给指定文件添加所选权限);操作符’-‘使得这些权限被撤消;’=’使得指定文件只具有这些权限。

字符串’rwxXstugo’ 给用户选择新的属性:(r)读权限、(w)写权限、(x)执行权(或对目录的访问权),(X)只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性,(s)同时设定用户或组ID,(t)粘滞位(保存程序的文本到交换设备上),(u)目标文件属主,(g)目标文件属主所在的组,(o)其他用户。(因此,’chmod g-s file’撤消sgid位,’chmod ug+s file’同时设置了suid和sgid位,’chmod o+s file’则没有进行任何设置)

POSIX并没有粘滞位的描述。它最初是指在交换设备上保留程序文本。现在,如果设置了目录的粘滞位,那么只有文件和目录的所有者可以删除该目录下的文件。(一般使用于类似于/tmp这样有基本写权限的目录)

数字模式是一到4个八进制数,每个数由位权为4,2,1的3位叠加而得.被省略掉的数字缺省设置为零. 第一位为4时为suid,2时为sgid,1时为粘滞位,.第二位设置文件所有者的权限:可读(4),可写(2),可执行(1);第三位设置了文件所在组其他用户的权限,值如上;第四位设置了其他组的用户的权限,值同上.

由于chmod的系统调用不支持,chomd命令不能改变符号链接的权限.由于符号链接的权限从不使用,所以这也不成问题.无论如何,由于每个符号连接都可在命令行中列出,chmod改变了所指文件的属性.相反,chmod在递归目录遍历时忽略所碰到的符号连接.

选项

选项说明
-c, –changes若该文件权限确实已经更改,才显示其更改动作
-f, –silent, –quiet若该文件权限无法被更改也不要显示错误讯息
-v, –verbose显示权限变更的详细资料
–no-preserve-root不对根目录做特殊对待(默认值)
–preserve-root阻止对根目录的遍历操作
–reference=RFILE使用RFILE的模式
-R, –recursive对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
–help显示帮助信息
–version显示版本信息

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 设置文件file1.txt 所有人可读
chmod ugo+r file1.txt

# or
chmod a+r file1.txt

## 将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt


## 将 ex.sh 设定为只有该文件拥有者可以执行
chmod u+x ex.sh

## 将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r .

## 此外chmod也可以用数字来表示权限如
chmod 0755 file1.txt

知识扩展和实例

Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內!

linux文件的用户权限的分析图

1
2
3
4
5
6
  -rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件

例:rwx rw- r–

r=读取属性  //值=4
w=写入属性  //值=2
x=执行属性  //值=1

1
2
3
4
chmod u+x,g+w f01  # 为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01   # 对文件f01的u,g,o都设置可执行属性

文件的属主和属组属性设置

1
2
chown user:market f01  # 把文件f01给user,添加到market组
ll -d f1 查看目录f1的属性

/home/wwwroot/里的所有文件和文件夹设置为755权限

(1)直接指定路径修改

1
chmod -R  755 /home/wwwroot/*

(2)手动进入该目录修改权限(并显示详细过程)

1
2
3
cd /home/wwwroot
chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件
sudo chmod o+rw /shared #设置文件夹权限以保证其余用户可以访问它。