chmod

在这里插入图片描述

ls-al格式化地输出了文件的详细信息,每个文件都有7列输出,下面详细介绍每列的含义。

第一列表示 文件的类别和权限

第一个字符可能的值含义
d目录
-普通文件
l链接文件
b块文件
c字符文件
ssocket文件
p管道文件

第二列代表“连接数”,除了目录文件之外,其他所有文件的连接数都是1,目录文件的连接数是该目录中包含其他目录的总个数+2,也就是说,如果目录A中包含目录B和C,则目录A的连接数为4。
第三列代表该文件的所有人,第四列代表该文件的所有组,第五列是该文件的大小,第六列是该文件的创建时间或最近的修改时间,第七列是文件名

chmod

从前面内容可知,Linux下的每个文件都定义了文件拥有者(user)、拥有组(group)、其他人(others)的权限,我们使用字母u、g、o来分别代表拥有者、拥有组、其他人,而对应的具体权限则使用rwx的组合来定义,增加权限使用+号,删除权限使用-号,详细权限使用=号。表中用一些例子说明了如何使用chmod来改变文件的权限。

作用命令
给某用户添加用户权限chmod u+r somefile
给某用户删除用户权限chmod u-r somefile
添加某用户对某文件的读写执行权限chmod u+rwx somefile
给某文件设定用户拥有读写执行权限chmod u=rwx somefile

如果要给用户组或其他人添加或删除相关权限,只需要将上面的u相应地更换成g或o即可。但是正如大家看到的,这种方式同一时刻只能给文件拥有者、文件拥有组或是其他所有人设置权限,如果要想同时设置所有人的权限就需要使用数字表示法了,我们定义r=4,w=2,x=1,如果权限是rwx,则数字表示为7,如果权限是r-x,则数字表示为5。
假设想设置一个文件的权限是:拥有者的权限是读、写、执行(rwx),拥有组的权限是读、执行(r-x),其他人的权限是只读(r–),那么可以使用命令chmod 754 somefile来设置。如果需要修改的不是一个文件而是一个目录,以及该目录下所有的文件、子目录、子目录下所有的文件和目录(即递归设置该目录下所有的文件和目录的权限),则需要使用-R参数,也就是chmod-R 754 somedir

默认值与umask

既然说Linux系统对每个文件都有严格的权限控制,但是似乎并没有太细致地设置文件权限,而且在新创建文件的时候,也没有特意设置过权限。事实上,所有的文件在创建时就都是有权限的了,那么这些权限是怎么来的呢?也许你会想到是系统采用了默认权限的方法,也就是当我们创建文件的时候,系统套用默认权限来设置了
文件。下面使用root用户登录系统来看一下:
在这里插入图片描述在这里插入图片描述
注意,创建的root_file1、root_file2文件的权限都是644;创建的root_dir1、root_dir2目录的权限都是755。到这里似乎可以得出一个结论:文件的权限默认是644,目录的默认权限是755。但是实际情况是这样的吗?让我们使用普通用户来操作一下,如下所示:
在这里插入图片描述
这里创建的wsp_file1、wsp_file2文件的权限都是664;创建的john_dir1、john_dir2目录的权限都是775。
可以给出一个结论:对于root用户,文件的默认权限是644,目录的默认权限是755;对于普通用户,文件的默认权限是664,目录的默认权限是775。到这里似乎可以结束关于默认权限的讨论了。但是,有两个疑问请考虑一下:

  • 这个默认权限是从哪里来的呢?
  • 为什么root用户和普通用户的默认权限不同呢?

要想回答上面的问题,就需要引入umask概念,中文翻译为:遮罩。在Linux下,定义目录创建的默认权限的值是“umask遮罩777后的权限”,定义文件创建的默认权限是“umask遮罩666后的权限”。
系统在/etc/profile文件中,通过第51行至55行的一段代码设置了不同用户的遮罩值。

if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi

从上面的代码中可以看出,UID大于99的用户设置了umask为002,否则为022。所以umask值对于root用户是022,对于普通用户是002,这也就造成了上面我们看到的root用户和普通用户创建出来的文件和目录默认权限不一样,那么如何使用遮罩计算权限呢?
777用字符串表示为:rwxrwxrwx,如果遮罩值是022,用字符串表示为:----w–w-,那么前者第五位和第八位的w被遮罩掉,权限变为rwxr-xr-x,用数字表示就是755。如果遮罩值是002,用字符串表示为:-------w-,那么第八位的w被遮罩掉,权限变为rwxrwxr-x,用数字表示就是775。666用字符串表示为:rw-rw-rw-,如果遮罩值是022,用字符串表示为:----w–w-,那么前者第五位和第八位的w被遮罩掉,权限变为rw-r–r–,用数字表示就是644。如果遮罩值是002,用字符串表示为:-------w-,那么第八位的w被遮罩掉,权限变为
rw-rw-r–,用数字表示就是664。
特别强调一下,网络上有很多关于计算umask遮罩后权限值的讲解,比较主流但是错误的讲解方式是使用“同位相减”的做法来计算遮罩后的值,比如说777-022同位相减得到755,666-022同位相减得到644,这种看似正确的结果其实只是一种巧合,并不是了解遮罩的正确方式。假设有个文件的权限为666,在遮罩值为011的情况下,采用该“同位相减”的方法计算出的权限值为655,但实际上正确的权限值应该是666。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值