chgrp、chmod和chown命令-改变文件的权限和属性
如何改变文件的权限和属性改变所属群组:chgrp改变文件拥有者:chown改变权限:chmod♡\color{pink}{\heartsuit}♡
如何改变文件的权限和属性
chgrp:改变文件所属群组,其实是change group缩写,帮助记忆;
chown:改变文件拥有者,change owner;
chmod:改变文件的权限。
改变所属群组:chgrp
注意:要被改变的群组名称必要要在/etc/group文件内存在才行。
假设你是root的身份,在你的主文件夹内有一个名为 initial-setup-ks.cfg 的文件,如何改变该文件的群组?假设你已经知道在/etc/group里存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中,此时改变群组成为users与testing分别会有什么现象发生呢?
[root@study ~]# chgrp users initial-setup-ks.cfg[root@study ~]# ls -l-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg[root@study ~]# chgrp testing initial-setup-ks.cfgchgrp: invalid group: `testing' <
可以发现文件的群组被改成users了,但要改成testing的时,发生错误,因为testing群组名不再/etc/group当中。
如果需要修改的不是一个文件而是一个目录,以及该目录下所有文件、子目录等,则需要递归设置该目录下所有文件和目录的拥有者。需要用到-R
参数
[root@study ~]# chgrp -R users 目录名
改变文件拥有者:chown
注意:使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。
语法:
chown [-cfhvR] [--help] [--version] user[] file...
[root@study ~]# chown [-R] 帐号名称 文件或目录[root@study ~]# chown [-R] 帐号名称:群组名称 文件或目录
范例1:将 initial-setup-ks.cfg 的拥有者改为bin这个帐号:
[root@study ~]# chown bin initial-setup-ks.cfg[root@study ~]# ls -l-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例2:将 initial-setup-ks.cfg 的拥有者与群组改回为root
[root@study ~]# chown root:root initial-setup-ks.cfg[root@study ~]# ls -l-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
说明 : Linux/Unix 是多人多作业系统,全部的档案皆有拥有者。利用chown能够将档案的拥有者加以改变。
一般来说,这个指令只有系统管理者(root)所使用。一般使用者没有权限能够改变别人的档案拥有者,也没有权限能够将自己的档案拥有者改设为别人。
记住只有系统管理者(root)才有这种权限。
改变权限:chmod
有两种方法:
数字类型改变文件权限符号类型改变文件权限
1.数字类型改变文件权限
各权限的分数对照表如下:
r:4 > w:2 > x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx---]
分数则是:
owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= — = 0+0+0 = 0
所以等一下我们设置权限的变更时,该文件的权限数字就是770啦!变更权限的指令chmod的语法是这样的:
[root@study ~]# chmod [-R] xyz 文件或目录选项与参数:xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
举例来说,要将.bashrc这个文件所有的权限都设置启用:
[root@study ~]# ls -al .bashrc-rw-r--r--. 1 root root 176 Dec 29 .bashrc[root@study ~]# chmod 777 .bashrc[root@study ~]# ls -al .bashrcrwxrwxrwx1 root root 176 Dec 29 bash
要将刚刚的.bashrc这个文件的权限修改回-rw-r--r--
-rw-r–r--的分数是644,所以指令为:chmod 644 .bashrc
多举几个例子就明白了
下面是对文件夹的两个普通设定:
2.符号类型改变文件权限
Linux有user 、group 、others三种身份。用u, g, o来代表三种身份的权限!此外,a 则代表all亦即全部的身份。那么读写的权限就可以写成r, w, x
语法:
chmod [who] [+ | - | =] [mode] 文件名
命令中各选项的含义为: 操作对象who可是下述字母中的任一个或者它们的组合:
操作符号可以是:
+添加某个权限-取消某个权限= 赋予给定权限并取消其他所有权限(如果有的话)
其他参数说明:
-c : 若该文件权限确实已经更改,才显示其更改动作-f : 若该文件权限无法被更改也不要显示错误讯息()-v : 显示权限变更的详细信息-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个- 变更)–help : 显示辅助说明–version : 显示版本
设置 mode 所表示的权限可用下述字母的任意组合:
实例,假如我们要“设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:
user (u):具有可读、可写、可执行的权限;group 与 others (g/o):具有可读与执行的权限。 所以就是:
[root@study ~]# chmod u=rwx,go=rx .bashrc[root@study ~]# ls -al .bashrc-rwxr-xr-x. 1 root root 176 Dec 29 .bashrc
注意!u=rwx,go=rx 是连在一起的,中间并没有任何空白字符!
假如是“ -rwxr-xr-- ”这样的权限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”来设置。
如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:
[root@study ~]# ls -al .bashrc-rwxr-xr-x. 1 root root 176 Dec 29 .bashrc[root@study ~]# chmod a+w .bashrc[root@study ~]# ls -al .bashrc-rwxrwxrwx. 1 root root 176 Dec 29 .bashrc
同理,如果要将权限去掉而不更动其他已存在的权限,例如要拿掉全部人的可执行权限x,则:
[root@study ~]# chmod a-x .bashrc[root@study ~]# ls -al .bashrc-rw-rw-rw-. 1 root root 176 Dec 29 .bashrc[root@study ~]# chmod 644 .bashrc
下面再举几个例子:
将档案 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
将 ex1.py 设定为仅有该档案拥有者能够运行 :
chmod u+x ex1.py
将眼下文件夹下的全部档案与子文件夹皆设为不论什么人可读取 :
chmod -R a+r *