修改权限命令chmod
chmod [选项] 模式 文件名
选项:-R递归修改权限
模式:
模式分为两类:
1.ugoa
字母依次代表所属人,所属组,其他人和所有人(全部人)。
在这个模式下,使用+-增加或者删除某个权限即可。
例如:
chmod u+x 文件名
意思即为所属人增加执行权限。
这种模式使用的并不常见,需要事先知道文件的权限。
2.421模式
意思即为用数字421表示权限,r为4,w为2,x为1。
某个组的权限用他们的权限的和表示。
例如,修改所属人的权限为7,即所属人的权限为rwx。
因为4,2,1分别代表二进制数字,所以求和并不会产生歧义。
这个模式是常用的修改权限模式。
常用的权限:
777 最高权限
644 普通文件权限
755 执行文件权限
等等。
权限的作用:
权限对于文件和目录具有不同的作用,虽然好像都是rwx,但是对于文件和目录的作用的表现形式是不同的。
我们知道,Linux文件系统存储文件会在表中创建一个项,这个表叫Inode Table。
其他的字段在这里我都不关注,只关注inode-no编号和pointer两个字段。
存储的文件会大致是这样的形式。
目录内容指向文件,文件内容指向某一块区域,包含实际内容。
所以对于文件,权限的作用如下:
r: 读取文件内容
w: 编辑,新增,修改文件内容
x: 执行文件
需要注意的是,对于文件,即使有w权限,我们也无法删除这个文件,只能对文件内容进行修改。
对于目录:
r:可以查询目录下包含哪些文件
w:可以修改目录结构。例如删除某个文件,创建某个文件
x:进入目录
到这里我们就知道了,权限对于文件来说,就是操作文件本身,x就是进入pointer去执行。
所以r,w都只能对文件本身进行修改,而删除文件等是修改了上一级目录的结构。
对于文件来说:最高权限为x。
对于目录来说:最高权限为w。
权限我们知道如何设置了。那么我们需要对用户进行分类分组等等操作。
修改文件所有者:chown(change owner)
chown 用户名 文件名
修改文件所属组:chgrp(change group)
chgrp 组名 文件名
默认权限
在linux中,一个刚刚创建的文件,使用touch创建出来的文件是有一个默认权限的,即为644。
在windows系统中,也是存在默认权限的,windows系统中使用的是继承权限,继承上一级目录中的权限。
在Linux中如何查看默认权限呢?
使用umask命令即可查看默认权限。
[root@localhost ~]# umask
0022
这个是什么意思呢?
第一个0:文件特殊权限
第二个0:读权限
第一个2:写权限
第二个2:执行权限。
再其次我们需要只要一些规则:
对于文件:
1.默认不能建立执行文件
2.默认文件最大权限为666
对于目录:
1.默认最大权限为777
到这里我们还是不知道默认权限是怎么来的?
实际上默认权限是当前文件最大权限与umask设置的权限做逻辑异或运算得到的权限。
例如:
对于文件默认为666。即4+2,4+2,4+2。在二进制中即为110,110,110。
而umask设置的默认权限为022。二进制即为000,010,010。
做逻辑异或运算得到什么呢?
最终就得到110,100,100.也就是644。可以简单的理解为减法。
同样的,目录得到的默认权限即为111,101,101.也就是755。
我们可以修改umask的值来测试是否如此。
原本:
[root@localhost ~]# mkdir test
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1209 Apr 25 11:20 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 May 3 16:18 test
[root@localhost ~]#
修改:
[root@localhost ~]# umask 0000
[root@localhost ~]# umask
0000
[root@localhost ~]# mkdir test2
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1209 Apr 25 11:20 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 May 3 16:18 test
drwxrwxrwx. 2 root root 6 May 3 16:20 test2
[root@localhost ~]#
最后得到的test2目录为777。
使用umask修改的值为临时修改,如果要永久修改,可以到/etc/profile文件下进行修改。