Linux 修改文件权限命令chmod、chgrp、chown详解

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。

有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。

chmod

chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。

语法

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

参数说明

mode : 权限设定字串,格式如下 :

[ugoa…][[+-=][rwxX]…][,…]

其中

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  • +表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  • r 表示可读取,w 表示可写入,x 表示可执行,X
    表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
    • r(Read,读取,权限值为4):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限
    • w(Write,写入,权限值为2):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
    • x(eXecute,执行,权限值为1):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。

其他参数说明:

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

实例

在桌面创建一个hello的文件夹,里面有一个hello的文件。

1
2
3
4
5
6
7
8
╭─FQY@bogon ~/Desktop
╰─$ ll | grep hello
drwxr-xr-x 3 FQY staff 96B 12 7 11:55 hello
╭─FQY@bogon ~/Desktop
╰─$ cd hello
╭─FQY@bogon ~/Desktop/hello
╰─$ ll | grep hello
-rw-r--r-- 1 FQY staff 0B 12 7 11:55 hello

咱们首先看hello文件夹,是drwxr-xr-x, d表示是文件夹,如果不是文件夹,则第一个是-。咱们上面说到有3种用户类型:文件所有者,同组用户、其他用户.rwx表示文件所有者的权限,r-x表示同组用户的权限,r-x表示其他用户。

根据上面所说的那样,r为4,w为2,x为1,所以rwx就是7,r-x表示5,所以当咱们需要让同组和其他用户都可以对hello.rtf有读写的权利,

1
2
3
4
5
╭─FQY@bogon ~/Desktop/hello
╰─$ chmod 766 hello
╭─FQY@bogon ~/Desktop/hello
╰─$ ll | grep hello
-rwxrw-rw- 1 FQY staff 0B 12 7 11:55 hello

下面来举些例子熟悉下:

权限 数值
-rwxrw-r–- 764
-rw-r–-r–- 644
-rw-rw-r–- 664

创建一个file1.text文件,将文件 file1.txt 设为所有人皆可读取:

chmod ugo+r file1.txt

将文件 file1.txt 设为所有人皆可读取 :

chmod a+r file1.txt

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

chmod ug+w,o-w file1.txt file2.txt

所以咱们晓得:
chmod ug=rwx,o=x filechmod 771 file,效果是一样的。

chgrp

Linux chgrp命令用于变更文件或目录的所属群组。

语法

chgrp [选项] [组] [文件]

参数说明:
-c或–changes 效果类似”-v”参数,但仅回报更改的部分。  
-f或–quiet或–silent  不显示错误信息。
-h或–no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。
-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose  显示指令执行过程。
–help  在线帮助。
–reference=<参考文件或目录>  把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
–version  显示版本信息。

实例

将log2012.log文件由root群组改为bin群组

1
2
3
4
5
6
[root@localhost test]# ll
---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
[root@localhost test]# chgrp -v bin log2012.log
“log2012.log” 的所属组已更改为 bin
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log

根据指定文件改变文件的群组属性

改变文件log2013.log的群组属性,使得文件log2013.log的群组属性和参考文件log2012.log的群组属性相同

1
2
3
4
5
6
7
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
[root@localhost test]# chgrp --reference=log2012.log log2013.log
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log

chown

使用权限: root

使用方式 : chown [-cfhvR] [–help] [–version] user[:group] file…

说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥
有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以
改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才
有这样的权限。

参数

user : 新的档案拥有者的使用者 ID
group : 新的档案拥有者的使用者群体(group)
-c或-change:作用与-v相似,但只传回修改的部分 
-f或–quiet或–silent:不显示错误信息 
-h或–no-dereference:只对符号链接的文件做修改,而不更改其他任何相关文件 
-R或-recursive:递归处理,将指定目录下的所有文件及子目录一并处理 
-v或–verbose:显示指令执行过程 
–dereference:作用和-h刚好相反 
–help:显示在线说明 
–reference=<参考文件或目录>:把指定文件或目录的所有者与所属组,统统设置成和参考文件或目录的所有者与所属组相同 
–version:显示版本信息

实例

将文件 file1.txt 的拥有者设为 users 群体的使用者 runoob :

chown runoob:users file1.txt

将目前目录下的所有文件与子目录的拥有者皆设为 users 群体的使用者 lamport :

chown -R lamport:users *

chmod和chown的区别

chmod与chown看似拼写还有点差不多,但是两者的用途是不同的。chmod是用来设置文件夹和文件权限的,比如我们在VPS主机中文件不可读写,需要用来设置777权限;而chown是用来设置用户组的,比如授权某用户组,方便控制用户权限。

chown 修改文件和文件夹的用户和用户组属性
1。要修改文件hh.c的所有者.修改为sakia的这个用户所有

chown sakia hh.c

这样就把hh.c的用户访问权限应用到sakia作为所有者

2。将目录 /tmp/sco 这个目录的所有者和组改为sakia和组net

chown -R sakia:net /tmp/sco

chmod 修改文件和文件夹读写执行属性

1。把hh.c文件修改为可写可读可执行

chmod 777 hh.c

要修改某目录下所有的文件属性为可写可读可执行

chmod 777 .

把文件夹名称与后缀名用*来代替就可以了。

同理若是要修改所有htm文件的属性

chmod 777 *.htm