Linux中改变文件的权限和属性

先介绍几个常用于群组、拥有者、各种身份的权限的修改的指令,如下所示:
chgrp:改变文件所属群组
chown:改变文件拥有者
chmod:改变文件的权限,SUID,SGID,SBIT等特性

改变所属群组chgrp

这个指令就是change group的缩写。
假设你是以root的身份登入Linux系统的,那么在你的家目彔内有一个install.log的文件, 如何将该文件的群组改变一下呢?假设你已经知道在/etc/group 里面已经存在一个名为users的群组,但是testing 这个群组名字就丌存在/etc/group 当中了,此时改变群组成为 users与testing 分别会有什么现象发生呢?

[root@www ~]# chgrp [-R] dirname/filename ...
选项和参数:
-R : 递归(recursive)的持续变更,亦即连同次目录下的所有档案、目录都更新成为这个群组。常常用在变更某一目录内所有的档案的情况。
范例:
[root@www ~]# chgrp users install.log
[root@www ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log
[root@www ~]# chgrp testing install.log
chgrp: invalid group name `testing' <== 发生错误信息~找不到这个群组名~

改变档案拥有者, chown

如何改变一个档案的拥有者呢?改变拥有者就是change owner。那就是 chown 这个指令的用途,要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个档案中有记录的用户名称才能改变。
chown 的用途还有很多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上 -R 的选项即可!

[root@www ~]# chown [-R] 账号名称 档案或目录
[root@www ~]# chown [-R] 账号名称:组名 档案或目录
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都变更
范例:将 install.log 的拥有者改为 bin 这个账号:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l -rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
范例:将 install.log 的拥有者与群组改回为 root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log

事实上,chown也可以使用『chown user.group file』,亦即在拥有者与群组间,加上小数点『.』也行! 不过很多人在设定账号时,喜欢在账号当中加入小数点(例如vbird.tsai 这样的账号格式),这就会造成系统的误判了! 所以我们比较建议使用冒号『:』来隔开拥有者与群组啦!此外,chown 也能单纯的修改所属群组呢! 例如『chown .sshd install.log』就是修改群组~看到了吗?就是那个小数点的用途!
知道如何改变档案的群组与拥有者了,那么什么时候要使用 chown 和 chgrp 呢?是的,确实有时候需要变更档案的拥有者的,最常见的例子就是在复制档案给你以外外的其他人时, 我们使用最简单的 cp 指令来说明好了:
[root@www ~]# cp 来源档案 目标文件
假设你今天要将.bashrc 这个档案拷贝成为.bashrc_test 档名,而且是要给 bin 这个人,你可以这样做:

[root@www ~]# cp .bashrc .bashrc_test
[root@www ~]# ls -al .bashrc*
-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
-rw-r--r-- 1 root root 395 Jul 13 11:31 .bashrc_test <==新档案的属怅没变

由于复制行为(cp)会复制执行者的属性和权限。所以你就必须要将这个档案的拥有者与群组修改一下啰!

改变权限, chmod

档案权限的改变使用的是 chmod 这个指令,但是,权限的设定方法有两种, 分别可以使用数字或者符号来进行权限的变更。我们就来谈一谈:

数字类型改变档案权限

Linux 档案的基本权限就有九个,分别是 owner/group/others 三种身份各有自己的read/write/execute 权限, 先复习一下刚刚上面提到的数据:档案的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各
权限的分数对照表如下:
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@www ~]# chmod [-R] xyz 档案或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属怅,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更。

举例来说,如果要将.bashrc 这个档案所有的权限都设定启用,那么就下达:

[root@www ~]# ls -al .bashrc
-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

那如果要将权限变成『 -rwxr-xr-- 』呢?那么权限的分数就成为[4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下达『 chmod 754 filename』。 另外,在实
际的系统运作中最常发生的一个问题就是,常常我们以 vim 编辑一个 shell 的文字批处理文件后,他的权限通常是 -rw-rw-r-- 也就是 664, 如果要将该档案变成可执行文件,并且不要让其他人修改此一档案的话, 那么就需要-rwxr-xr-x 这样的权限,此时就得要下达:『 chmod 755 test.sh 』的指令啰!
另外,如果有些档案你不希望被其他人看到,那举应该将档案的权限设定为例如:『-rwxr-----』,那就下达『 chmod 740 filename 』吧!
例题:
将刚刚你的.bashrc 这个档案的权限修改回-rw-r–r–的情况吧!
-rw-r–r–的分数是 644,所以指令为:
chmod 644 .bashrc

符号类型改变档案权限

还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others 三种身份啦!那举我们就可以藉由 u, g, o 来代表三种身份的权限!此外,a 则代表 all 亦即全部的身份!那举读写的权限就可以写成 r, w, x !也就是可以使用底下的方式来看:

chmod  u/g/o/a  +(加入)/-(除去)/=(设定)  r/w/x  文件或目录

假如我们要『设定』一个档案的权限成为『-rwxr-xr-x』时,基本上就是:

  • user (u):具有可读、可写、可执行的权限;
  • group 与 others (g/o):具有可读不执行的权限。
    所以就是:
[root@www ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格符!
[root@www ~]# ls -al .bashrc
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc

那么假如是『 -rwxr-xr-- 』这样的权限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』来设定。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc 这个档案的每个人均可写入的权限, 那么我就可以使用:

[root@www ~]# ls -al .bashrc
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
[root@www ~]# chmod a+w .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

而如果是要将权限去掉而不变动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:

[root@www ~]# chmod a-x .bashrc
[root@www ~]# ls -al .bashrc
-rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc

知道 +, -, = 的不同点了吗?对啦! + 与 – 的状态下,只要是没有指定到的顷目,则该权限『不会被变动』, 例如上面的例子中,由于仅以 – 拿掉 x 则其他两个保持当时的值不变!这在某些情况下很好用~。举例来说,你想要教一个朋友如何让一个程序可以拥有执行的权限, 但你又不知道该档案原本的权限为何,此时,利用『chmod a+x filename』 ,就可以让该程序拥有执行的权限了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值