Linux下文件的权限管理
文章主要从以下几个方面展开介绍:
- 文件的属性和权限
- 文件的权限和属性的更改
- 文件和目录的默认and隐藏权限
- 文件的特殊权限
注: 建议在Linux下使用root权限练习本部分;
第一部分 初识文件的类型和权限
1.1 文件类型和权限的查看方式
使用Linux的同学都知道,在Linux下列出当前目录下的文件和子目录的命令是 ls, 同时 ls 又有许多参数,我们现在要查看文件的类型和权限使用ls -al;
(也可单独用 ll 或者 stat 命令查看一个文件的属性)
:# ls -l / ; // 查看根目录下所有文件和目录
( 取部分截图)
分析: 我们可以看到每个文件都有7列的选项,那么我们就来分析这七列内容分别代表的含义;
取其中一行做示范:
-r-xr-xr-x. 5 root root 1024 Dec 24 04:00 test
[类型和属性] [链接数] [属主] [属组][文件大小] [修改时间][文件名]
[编号] 1 2 3 4 5 6 7
1.1.1:文件的类型和权限
-r-xr-xr-x 这个字符串我们需要分成两部分来看,第一部分是第一个字符,代表文件的类型;
linux下文件的类型通常有以下几类:
d : 代表一个目录;
- : 代表一个普通文件;
l : 代表一个普通文件;
b : 代表设备文件里面的可供存储的接口设备;
c : 代表设备文件里的串行端口设备;
比较常见的就是前三种文件类型,那么此时我们知道了test 是一个普通文件;
那么-r-xr-xr-x 剩余的那部分有代表了什么意思呢?代表了文件的权限;
我们可以又将 r-x r-x r-x 分为三部分来看,三个字符一组;
前三个字符代表的是文件的属主(文件的拥有者)的权限:Owner ;
中间三个字符代表文件的属组的同组其它用户的权限: Group;
最后三个字符就代表剩余的其它用户的权限:Others;
那么权限其中字符的含义是什么呢?
r : 代表可读权限,即可以读取文件内容;
w : 代表可修改权限,即可以对文件进行增删查改;
x : 代表文件可执行权限,对于目录又有不同的含义,后面说明;
- : 代表缺省;
那么此时我们就可以了解到 test 文件的权限为,test的属主对它拥有可读可执行权限,test的属组的其它同组用户对它拥有可读可执行权限,而剩余的其它用户对test的权限也是可读可执行;
当然,文件的权限的表示形式可不止字符一种,这个我们在讲修改文件权限的时候进行讲述;
1.1.3 : 文件的属主和属组,即编号3和编号4
我在这里将文件的属主和属组放在一块讲;
所谓属主:即文件的拥有者,是存在于Linux中的一个用户; 所谓属组:即文件的的所属组,是存在于Linux中的一个用户组;
在上面的的例子中,文件test的属主和属组都是root,那么我们在在说明代表文件权限的9个字母的时候也说了文件的属主和属组这个概念, 那么,这两个有什么作用呢?
当然就是直观的让你知道文件的属主和属组; 这里大概说明一下,具体的会在关于Linux的用户管理中讲到;
下一小节,会该诉你如何对文件的属组和属组进行修改;
1.1.6 : 文件的名字,即编7
这个再明显不过了,本来可以一句话带过的,但是在Linux下就不得不提一下和windows的区别之处;
即,在Linux下文件的名字的后缀是没有实际意义的,真正的作用是可以让用户显示的区别这些不同的文件,而真正对文件的起作用的还是我们前面讲过的文件的9个字符权限,其中最关键的还是 x 可执行权限,决定这个文件是否为可执行文件(注意不要和目录搞混了);
而对于可执行文件的执行方法无外乎 ./ 的方法,就像你在执行 C的可执行文件一样;
第二部分:文件的权限和属性的更改
前面针对 ll 命令的结果,对文件的信息进行了分析,其中最为重要的无外乎表示文件权限的那9个三组的字符组合;那么下面我们就这9个字符进行更深一步的学习;
2.1 权限的2种表示与对应修改方式
Linux对文件的权限的表示,一般情况下都是采用我们前面所看到的字符的表示方法,三个字符一组,分别表示文件的属主,属组和其它用户;
第二种方式即将字符对应为二进制的01,同样三个三个一组,为了方便起见,又将三个一组的01转化为8进制表示,这样就可以用3个数字表示文件的权限了;
例如: 字符表示 :
-rwx r-x --x
二进制表示: 111 101 001
八进制表示 : 7 5 1
对于字符到二进制之间的转化关系很简单,即有对应位上有权限即为1 ,没有即为0; 而二进制到八进制的转换就更加简单了,即按照三个二进制向十进制的转换就可以,因为8以下的表示八进制和十进制是一样的;
接下来就是讲讲怎么去修改权限了;
在Linux下我们对文件的权限的修改命令即是: chmod;
命令格式:
chmod [选项] [模式[,模式] 文件名
2.1.1 选项: 先以字符表示为例
- 用户对象
u : 表示用户,即文件属主;
g : 表示属组,即同组的其它用户的权限;
o : 表示其它用户;
a : 表示所用用户;
- 操作符号
+: 添加某个权限;
-:取消某个权限;
=:赋予给定的权限; - 操作权限
r : 可读
w :可写
x : 可执行
2.1.2 八进制权限的修改
上面演示了用chmod如何修改字符表示的权限,下面我们看看八进制表示的权限怎么修改:
很简单,我们是怎么从字符权限转换为八进制的权限的方法如果你会了,就是分分钟掌握的事情,举个最简单的例子;
比如: 我想要test 变为 -rwx rwx rwx 权限的文件,用八进制修改怎么搞?
chmod 777 test //就是怎么简单
2.1.3 文件属性的修改
这里我们对文件属性的修改更直接点说就是对文件的属主和属组的修改;
什么? 这都可以改?
当然,在Linux下你就要把自己当成是主任,不会再是windows下被限制自由的你,Linux就是人民当家做主的自由平台,只要你愿意,随便你怎么搞;
扯远了,,,,,,,,,,,,,,,,
至于修改文件的属组和属主,我们需要学习两条命令:
chgrp 和 chown
chgrp 用来修改文件的 属主,用法很简单:
chgrp [你所想改的属组名称] [文件名]
演示:
我们先来回看一下test这个文件的属组:
恩,这个test文件的属组和属主都是 root 现在我想把test文件的属组改为 america 试试看:
chgrp america test
分析:
恩? 报错了。,怎么回事?
奥,想起来了,我就没有这个 america 这么一个用户组,所以这说明,不能把文件的 属组改为不存在的属组,属主同理;
下面我们把test的属组改为一个存在的属组 bossliu,恩,很霸气;
chgrp bossliu test
成功改变;
chown 如果只改变文件的属主的话用法和chgrp是一样的,这里不做演示;
chown 更强的的一点是它可以顺手把属组也改变掉,这样当你希望即改变文件的属主又改变文件的属组的话,就可以执行一条命令了;
例如:
chown 属主: 属组 文件名:
chown bossliu : root test
//我们将test的属组又变回来同时将属主变为bossliu;
更改成功;