chomd 命令:改变文件或目录权限
chmod
命令的英文原意是 change the permissions mode of a file,我们简称为 change mode,意为用来改变文件或目录权限的命令,但是只有文件的属主和超级用户 root 才能执行这个命令。有两种模式,一种是采用权限字母和操作符表达式;另一种是采用数字。
Linux/Unix 的文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。
常用参数
参数 | 功能 |
---|---|
-c | 若该文件权限确实已经更改,才显示其更改动作 |
-f | 若该文件权限无法被更改也不显示错误讯息 |
-v | 显示权限变更的详细资料 |
-R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
符号模式
使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。
who | 用户类型 | 说明 |
---|---|---|
u |
user | 文件所有者 |
g |
group | 文件所有者所在组 |
o |
others | 所有其他用户 |
a |
all | 所用用户, 相当于ugo |
Operator | 说明 |
---|---|
+ |
为指定的用户类型增加权限 |
- |
去除指定用户类型的权限 |
= |
设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
模式 | 名字 | 说明 |
---|---|---|
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。
参考实例
chmod a+r file.txt # 将文件 file.txt 设为所有人皆可读取
chmod -R a+r * # 将目前目录下的所有文件与子目录皆设为任何人可读取
chmod u+x file.txt # 将 file.txt 设定为只有该文件拥有者可以执行
chmod ug+w, o-w file1.txt file2.txt # 将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod 777 file.txt # 将文件 file.txt 设为所有人可以读写执行
chown 命令:改变文件或目录用户和用户组
Linux/Unix 属于多用户多任务操作系统,所有的文件皆有拥有者。利用 chown
命令可以将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。一般来说,这个指令仅限系统管理者 root 所使用,普通用户没有权限改变文件所属者及所属组。
常用参数
参数 | 功能 |
---|---|
-R | 对目前目录下的所有文件与子目录进行相同的拥有者变更 |
-c | 若该文件拥有者确实已经更改,才显示其更改动作 |
-f | 若该文件拥有者无法被更改也不要显示错误讯息 |
-h | 只对于连结 link 进行变更,而非该 link 真正指向的文件 |
-v | 显示拥有者变更的详细资料 |
参考实例
chown user1 file1 # 改变一个文件的所有人属性
chown -R user1 directory1 # 改变一个目录的所有人属性并同时改变该目录下所有文件的属性
chown user1:group1 file1 # 改变一个文件的所有人和群组属性
chgrp 命令:更改文件用户组
chgrp
是英语单词 change group 的缩写,命令的作用和其中文释义一样,为用于变更文件或目录的所属群组。
常用参数
参数 | 功能 |
---|---|
-c | 效果类似”-v”参数,但仅回报更改的部分 |
-f | 不显示错误信息 |
-h | 对符号连接的文件作修改,而不更动其他任何相关文件 |
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v | 显示指令执行过程 |
–reference | 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同 |
参考实例
chgrp group1 file1 # 改变文件的群组
chgrp --reference=file_1 file_2 # 根据指定文件改变文件的群组属性
chgrp -R cool /usr/linuxcool # 将/usr/linuxcool及其子目录下的所有文件的用户组改为cool