linux chmod命令详解


chmod为change mode的缩写.用于改变文件的权限属性.权限的设置有两种方式,一种是数字形式,另一种是符号形式.
数字形式改变文件权限
语法格式如下所示:

              [root@initroot ~]# chmod [-R] abc 文件或目录
              -R选项可以递归(recursive)更改目录及其子目录下文件的权限属性.
            
参数abc就是数字类型的权限属性了.a表示文件拥有者的权限,b表示文件所属用户组的权限,c就是other用户的权限了. 那么abc这三个值应该如何计算呢? 我们将各权限用数字表示为r=4,w=2,x=1,-=0.abc就分别是这三个属性值相加.例如上面backup.sh文件的权限属性为rwxrw-r--, 那么用数字表示就是:
a=文件拥有者的权限=rwx=r+w+x=4+2+1=7,
b=文件所属用户组的权限=rw-=r+w+-=4+2+0=6,
c=other用户的权限=rwx=r--=4+-+-=4+0+0=4,
这样abc就是764
例如将backup.sh文件权限设置为拥有者可读可写可执行,所属用户组可读可写可执行,其他用户只读。 a=rwx=7,b=rwx=7,c=r--=4,abc就是774,命令如下:
              [root@initroot ~]# chmod 774 backup.sh
              [root@initroot ~]# ls -al backup.sh
              -rwxrwxr-- 3 cristina initroot 4096 Dec 17 19:52 backup.sh
              
backup.sh其实是一个shell脚本文件,我们更希望的是该文件可以被任何人执行,但是只有文件的所有者才有权限修改该文件, 所以这个文件的权限最好是-rwxr-xr-x,abc=[4+2+1][4+0+1][4+0+1]=755:
              [root@initroot ~]# chmod 755 backup.sh
              [root@initroot ~]# ls -al backup.sh
                -rwxr-xr-x 3 cristina initroot 4096 Dec 17 19:52 backup.sh
              

chmod用于改变文件或目录的权限属性。在UNIX系统中,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。 用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。 权限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
s 特殊功能说明:变更文件或目录的权限。

选项:

-c或-changes:效果类似“-v”参数,但仅回报更改的部分; 
-f或-quiet或——silent:不显示错误信息; 
-R或-recursive:递归处理,将指令目录下的所有文件及子目录一并处理; 
-v或-verbose:显示指令执行过程; 
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同; 
<权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置; 
<权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置; 
<权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置; 

下面是为所有者,组以及其他用户设置的几个数字权限的列表。

7:表示rwx,拥有读、写和执行的权限
6:表示rw-,拥有读和写的权限
5:表示rx,拥有读取和执行的权限
4:表示r--,拥有只读权限
3:表示-wx,拥有写入和执行的权限
2:表示-w-,拥有只写权限
1:表示 - x,仅拥有执行权限
0:表示---,无权限
注:可使用ls -al 命令列出文件的详细权限。

chmod用法示例: 
1.更改文件test文件的权限,以便所有人都可以完全访问该文件:

              [root@initroot ~]# chmod 777 test
            
说明:第1个7设置用户的权限,第2个7设置组的权限,第3个7设置其他所有者的权限。 2.如果用户想成为唯一可以访问它的人,可以使用以下命令:
              [root@initroot ~]# chmod 700 test
            
3.用户想要为自己和其小组成员提供完全访问权限,可以使用以下命令:
              [root@initroot ~]# chmod 770 test
            
4.如果用户想为自己保留完全访问权限,但希望阻止其他人修改文件,可以使用以下命令:
              [root@initroot ~]# chmod 755 test
            
5.以下使用上面的字母来更改test文件的权限,以便所有者可以读取和写入文件,但不会更改其他任何人的权限:
              [root@initroot ~]# chmod u=rw test
            
设置模式:
6.使用chmod命令可以为文件和目录设置其他文件系统模式。例如,要设置粘滞位 - 这意味着只有文件所有者,目录所有者或超级用户可以删除该文件,而不管文件的读写组权限如何 - 在数字序列前加1:
              [root@initroot ~]# chmod 1755 participants
            
其他: 用户还可以使用chgrp命令更改现有文件和文件夹的组所有权,使用newgrp命令更改新文件和文件夹的默认组。 请记住,chmod命令中使用的符号链接将影响真实的目标对象。

符号类型改变文件权限
我们将文件拥有者用u(user)表示,文件所属用户组用g(group)表示,其他用户用o(others)表示,用a表示所有用户(all)。读写执行权限分别用r、w、x表示。 用=、+、-分别表示等于、增加、减去。我们还是以backup.sh文件为例,假设该文件的权限属性为rwxrw-r--,那么就可以表示为: u=rwx,g=rw,o=r. 现在将该文件权限属性设置为拥有者可读可写可执行,所属用户组可读可写可执行,其他用户只读,也就是rwxrwxr--:

              [root@initroot ~]# chmod u=rwx,g=rwx,o=r backup.sh
              [root@initroot ~]# ls -al backup.sh
              -rwxr-xr-x 3 cristina initroot 4096 Dec 17 19:52 backup.sh
            
因为u和g的权限属性一样,所以可以将ug连起来写:
              [root@initroot ~]# chmod ug=rwx,o=r backup.sh
            
其实就是在刚才权限的基础上所属用户组增加了执行权限,可以用如下命令形式:
              [root@initroot ~]# chmod g+x backup.sh
            
我们将backup.sh文件设置为可以被任何人执行,并去掉用户组和其他用户的写权限:
              [root@initroot ~]# chmod a+x,g-w,o-w backup.sh
            

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读