文件的模式
当使用 ls -l 命令查看目录内容时
[[email protected] cmdline]$ ls -l /etc/passwd -rw-r--r-- 1 root root 1917 Jul 2 15:01 /etc/passwd
第一列字段是文件模式。第一个字符表示文件类型,这里 "-" 表示该文件是个普通文件。后面的 9 个字符表示文件的访问权限,分为读权限、写权限和执行权限,又分别针对三种对象:所有者、同组用户和其他用户。这里 "-rw-r--r--" 表示,文件的所有者拥有读写权限,而同组用户和其他用户只用于读权限。
文件的类型
属性 | 文件类型 |
- | 普通文件 |
d | 目录文件 |
l | 符号链接 |
c | 字符设备文件。该文件类型表示以字节流形式处理数据的设备,如终端或调制解调器。 |
b | 块设备文件。该文件类型表示以数据块方式处理数据的设备,如硬盘驱动或光盘驱动。 |
权限属性
属性 | 文件 | 目录 |
r | 允许打开和读取文件。 | 允许列出目录下的内容。 |
w | 允许写入或截短文件,但该权限不允许重命名或删除文件。是否能重命名和删除文件由目录权限决定。 | 如果也设置了执行权限,那么目录中的文件允许被创建、被删除以及被重命名。 |
x | 允许吧文件当作程序一样来执行。用脚本语言写的程序必须被设置为可读,以便能被执行。 | 允许进入目录下,例如 cd directory。 |
八进制数字表示法
八进制 | 二进制 | 文件模式 |
0 | 000 | --- |
1 | 001 | --x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r-- |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
符号表示法
符号 | 含义 |
u | user 的缩写,表示文件或目录的所有者 |
g | group 的缩写,表示文件所属的群组 |
o | othes 的缩写,表示其他所有用户 |
a | all 的缩写,是 u、g 和 o 三者的组合 |
如果没有指定字符,则假定使用 all。操作符 "+" 表示添加一种权限,"-" 表示删除一种权限,"=" 表示只有指定的权限可用,其他所有的权限都被删除。
命令格式
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
命令参数
-c, --changes
类似 -v 选项,但只在文件模式发生改变时才显示诊断信息。
--preserve-root
禁止对根目录进行递归操作。
-f, --silent, --quiet
去除大部份的错误信息。
-v, --verbose
处理每个文件时,显示诊断信息。
--reference=RFILE
使用 RFILE 文件的模式,而非自行指定权限模式。
-R, --recursive
以递归方式更改文件和目录的模式。
--help
显示帮助信息。
--version
显示版本信息。
实例
a) 将 hello.sh 的模式更改为 744(rwxr--r--)。
[[email protected] cmdline]$ ls -l hello.sh -rw-rw-r-- 1 ucm ucm 0 Oct 3 17:00 hello.sh [[email protected] cmdline]$ chmod 744 hello.sh [[email protected] cmdline]$ ls -l hello.sh -rwxr--r-- 1 ucm ucm 0 Oct 3 17:00 hello.sh
b) 为 hello.sh 所属群组的用户添加可执行权限。
[[email protected] cmdline]$ ls -l hello.sh -rwxr--r-- 1 ucm ucm 0 Oct 3 17:00 hello.sh [[email protected] cmdline]$ chmod g+x hello.sh [[email protected] cmdline]$ ls -l hello.sh -rwxr-xr-- 1 ucm ucm 0 Oct 3 17:00 hello.sh
c) 删除其他用户对 hello.sh 的读权限。
[[email protected] cmdline]$ ls -l hello.sh -rwxr-xr-- 1 ucm ucm 0 Oct 3 17:00 hello.sh [[email protected] cmdline]$ chmod o-r hello.sh [[email protected] cmdline]$ ls -l hello.sh -rwxr-x--- 1 ucm ucm 0 Oct 3 17:00 hello.sh
d) 将 hello.sh 所有者权限设置为 rw-,同时删除所属群组用户的可执行权限和为其他用户添加读权限。
[[email protected] cmdline]$ ls -l hello.sh -rwxr-x--- 1 ucm ucm 0 Oct 3 17:00 hello.sh [[email protected] cmdline]$ chmod u=rw,g-x,o+r hello.sh [[email protected] cmdline]$ ls -l hello.sh -rw-r--r-- 1 ucm ucm 0 Oct 3 17:00 hello.sh