chgrp、chmod和chown命令-改变文件的权限和属性


♡ \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.cfg
chgrp: invalid group: `testing' <

可以发现文件的群组被改成users了,但要改成testing的时,发生错误,因为testing群组名不再/etc/group当中。

如果需要修改的不是一个文件而是一个目录,以及该目录下所有文件、子目录等,则需要递归设置该目录下所有文件和目录的拥有者。需要用到-R参数

[root@study ~]# chgrp -R users 目录名

改变文件拥有者:chown

注意:使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。

语法 :

chown [-cfhvR] [--help] [--version] user[] file...
选项和参数含义
user新的档案拥有者的使用者ID
group新的档案拥有者的使用者群体(group)
-c若该档案拥有者确实已经更改,才显示其更修改过
-f若该档案拥有者无法被更改也不要显示错误讯息
-h仅仅对于连结(link)进行变更。而非该 link 真正指向的档案
-v显示拥有者变更的具体资料
-R对眼下文件夹下的全部档案与子文件夹进行同样的拥有者变更(即以递回的方式逐个变更)
--help显示辅助说明
--version显示版本号
[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 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
rwxrwxrwx1 root root 176 Dec 29 2013 bash

要将刚刚的.bashrc这个文件的权限修改回-rw-r--r--
-rw-r–r--的分数是644,所以指令为: chmod 644 .bashrc

多举几个例子就明白了

例子等价于含义
-rw-------600只有拥有者有读写权限
-rw-r–r--644只有拥有者有读写权限;而属组用户和其它用户只有读权限
-rwx------700只有拥有者有读、写、运行权限
-rwxr-xr-x755拥有者有读、写、运行权限。而属组用户和其它用户只有读、运行权限
-rwx–x--x711拥有者有读、写、运行权限;而属组用户和其它用户只有运行权限
-rw-rw-rw-666全部用户都有文件读、写权限(这样的做法不可取)
-rwxrwxrwx777全部用户都有读、写、运行权限(更不可取的做法)

下面是对文件夹的两个普通设定:

drwx------700只有拥有者可在文件夹中读、写
drwxr-xr-x755全部用户可读该文件夹,但只有拥有者才能改变文件夹中的内容

2.符号类型改变文件权限

Linux有user 、group 、others三种身份。用u, g, o来代表三种身份的权限!此外,a 则代表all亦即全部的身份。那么读写的权限就可以写成r, w, x

语法

chmod [who] [+ | - | =] [mode] 文件名 

命令中各选项的含义为: 操作对象who可是下述字母中的任一个或者它们的组合:

参数表示含义
uuser即文件或目录的所有者
ggroup即与文件属主有相同组ID的所有用户
oothers表示“其他用户”
aall表示“所有用户”系统默认值

操作符号可以是:

  • +添加某个权限
  • -取消某个权限
  • = 赋予给定权限并取消其他所有权限(如果有的话)

其他参数说明:

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

设置 mode 所表示的权限可用下述字母的任意组合:

mode含义
r(read)可读
w(write) 可写
x(executable)可执行
X只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
s在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t保存程序的文本到交换设备上。
u与文件属主拥有一样的权限。
g与和文件属主同组的用户拥有一样的权限。
o与其他用户拥有一样的权限。

实例,假如我们要“设置”一个文件的权限成为“-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 2013 .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 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

同理,如果要将权限去掉而不更动其他已存在的权限,例如要拿掉全部人的可执行权限x,则:

[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .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 *  
  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值