LuckyAbby.github.io icon indicating copy to clipboard operation
LuckyAbby.github.io copied to clipboard

chmod命令详解

Open LuckyAbby opened this issue 7 years ago • 2 comments
trafficstars

文件的权限

chmod 命令用于改变文件或者目录的访问权限,Linux系统可以控制谁通过何种方式对文件或者目录进行访问与操作。

文件或者目录的访问角色可以分为三类:文件所有者也叫当前用户(u)、与当前用户同组的用户(g)、除了目录或者文件的当前用户或群组之外的用户或者群组(o),所有者一般是文件的创建者,他可以给其他角色分配不同的权限。

文件或者目录的访问权限也可以分为三种:只读(r)、只写(w)与可执行(x),只读表示只允许读文件,可执行表示可以将文件作为一个程序执行。

每一个文件或者目录的访问权限可以分为三组,以空格分开,分别表示所有者的读写执行权限、同组用户的读写执行权限、其他用户的读写执行权限。

使用 ls -al可以看到每个文件或者目录的权限,例如

drwxr-xr-x   3 abby  staff  102 12  5 16:16 Linux
-rw-r--r--   1 abby  staff  251 12  5 16:12 hello.py

其中 d 表示 Linux 是一个目录 ,而下面的 - 表示 README.md 是一个文件

对于我上面中的 Linux 这个目录而言,rwxr-xr-x 种 rwx 表示所有者有读写与执行的权限, r-x表示同组用户有读与执行的权限,第二个 r-x 表示其他用户拥有读与执行的权限。

chmod 的用法

交代清楚文件的权限之后,现在说说 chmod 的用法。很简单:

chmod [-cfvR] [--help] [--version] mode file

其中 mode 是权限设置字符串,有两种格式,一种是包含字母和操作符号的文字设定法,用法如[who] [+|-|=][mode],另一种就是数字设定法。

其中参数选择:

-c : 若权限确实已经更改,才显示其更改动作
-f : 若权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)

文字设定法

who 表示文件的访问操作角色,包括 u g o a,其中 u 表示文件所有者即当前的用户,g 表示同组用户,o 表示其他用户,a 表示全部用户 。

+表示增加权限, -表示减少权限, =表示将权限指定为指定的值。

mode 包括对文件的操作,包括 r, w, x。r表示读权限, w表示写权限, x表示执行权限。

例如:

给全部用户增加 hello.py 的可执行权限

chmod a+x hello.py

a表示全部用户 , + 表示增加权限, x表示可执行权限,接着我们可以看到 hello.py 的权限如下

-rwxr-xr-x   1 abby  staff   20 12  5 15:40 hello.py

给同组用户增加写权限,给其他用户不可执行权限

chomd g+w,o-x hello.py

给demo目录下面所有的文件夹增加同组用户可写,其他用户不可写的权限

chomd -R g+w,o-w demo

数字设定法

每个权限有特定的数字表示,其中r的值为4,w的值为2,x的值为1。

因此读写权限表示为 4+2=6,读写执行的权限表示为 4+2+1=7,写与执行的权限表示为 2+1=3。

例如:

chmod u=rwx,g=rx,o=x hello.py

##可以表示为

chmod 751
chmod =r hello.py  或者 chmod ugo=r hello.py // 表示为所有用户分配只读权限

## 可以表示为

chmod 444 hello.py

LuckyAbby avatar Jan 04 '18 12:01 LuckyAbby

给demo目录下面所有的文件夹增加同组用户可写,其他用户不可写的权限 chomd -R g+w,o-w demo

不只是文件夹,-R 参数会 遍历所有子目录及子目录中的文件,并设置其权限

nodejh avatar Jan 04 '18 12:01 nodejh

是的 -R会以递回的方式对目录和子目录所有文件进行变更 @nodejh

LuckyAbby avatar Jan 04 '18 13:01 LuckyAbby