Linux文件属性与权限的管理
1. Linux文件属性与权限的含义
首先我们以root用户的身份登陆Linux,执行ls -al
查看文件:
1 | [root@layne ~]# ls -al |
ls是list的缩写,能显示文件的文件名和相关属性。而-al
表示列出所有的文件详细的权限与属性(包含隐藏文件,诸如文件名以“.”开头的文件)。显示信息详细含义如下:
(1)第一列
第一列代表这个文件的类型与权限(permission),仔细看可以发现其中总共有10个字符。
任何设备在Linux下都是文件。上述10个字符的第一个字符表示文件的类型,文件的类型有:
-
若是[d]则是目录(directory)
-
若是[-]则是文件
-
若是[l]则是链接文件(link), 类似window系统下的快捷方式。
-
块设备文件[b]
-
字符设备文件[c]
-
数据接口文件(sockets)[s]
-
数据输送文件(FIFO,pipe)[p]
与系统外设和存储等相关的一些文件,通常都集中在/dev这个目录中。分为两种:
A. 块(block)设备文件[b]:就是一些存储数据,以提供系统随机访问的接口设备,例如硬盘、软盘等。你可以随机的在硬盘的不同块读写,这种设备就是成组设备。
例如:
1 | [root@layne ~]# ls -al /dev | grep sda |
B. 字符(character)设备文件[c]:是一些串行端口的接口设备,例如键盘,鼠标。这些设备的特征就是“一次性读取”的,不能够截断输出。
例如:
1 | [root@layne ~]# ls -al /dev | grep vcs |
总结:设备文件是我们系统很重要的文件,最好不要随意修改之外(通常它也不会让你修改的);另外一个比较有趣的文件就是链接文件,类似window的桌面快捷方式,同样可以将linux下的连接文件简单的视为一个文件或目录的快捷方式。
数据接口文件(sockets):
既然被称为数据接口文件,这种类型ss的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求,而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为[ s ],最常在/var/run目录中看到这种文件类型了。
数据输送文件(FIFO,pipe):
FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO是first-in-first-out的缩写(先进先出)。第一个属性为[p]。
上述10个字符的后9个字符,三个一组,且均为[rwx]的3个参数组合。
其中[r]代表可读(read),[w]代表可写(write),[x]代表可执行(excute)。
这三个参数的出现顺序不会改变,若没有某个权限,则会以[-]代替。这三组参数中,第一组是文件所有者的权限;第二组是同用户组的权限;第三组是其他用户的权限。这三组权限均是针对某些账号而言的权限。另外,文件权限和目录权限意义不同,这是因为文件与目录记录的数据内容不相同,后面我们会详细叙述。
(2)第二列
第二列表示有多少文件名链接到此节点(i-node)。
每个文件都会将他的权限与属性记录到文件系统的i-node中,但是Linux所使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个i-node。这个属性记录的就是有多少不同的文件名链接到相同的一个i-node号码。
(3)第三列
第三列表示这个文件(或目录)的所有者账号
(4)第四列
第四列表示这个文件的所属用户组。
在Linux系统下,每个账号会附属于一个或多个用户组中(一个主组,多个附加组)。
(5)第五列
第五列表述这个文件的容量大小,默认单位为bytes 。目录前面的数字都是4096,不是表示整个目录的大小。而文件前面的数字表示该文件的大小。
(6)第六列
第六列为这个文件的创建文件日期或者是最近的修改日期
如果想要显示完整的时间格式,可以使用ls参数,即”ls -l --full-time”,这样做就可以显示出完整的时间格式。
(7)第七列
第七列为该文件名
注意,前缀为”.”的是隐藏文件。
Linux文件权限最大的用途实在数据安全性上,它能根据不同用户的不同权限实现对不同文件的操作。为此,在我们设置Linux文件与目录的属性之前,需要弄清到底什么数据是可变的,什么数据是不可变的。
2. Linux文件属性与权限的管理
接下来,我们介绍几个常用于用户组,所有者,各种身份的权限的修改的命令:
chgrp:改变文件所属用户组 (chgrp 即 change group)
chown:改变文件所有者 (chang owner)
chmod:改变文件的权限 (change mode)
2.1 改变文件所属用户组
语法:chgrp [-R] 用户组 dirname/filename
参数:-R 表示如果为目录则递归修改组(该目录下的文件和目录都可以改)。
**作用:**使用chgrp命令可以改变一个文件的用户组,它是changegroup的简称。
**注意:**需要注意的是,要被改的组名必须要在/etc/group文件内存在才行,否则会报错。
**案例:**将a.txt和b.txt所属用户组改为lucy
1 | [root@layne testdir]# ll |
将dir目录及该目录下所有的文件所属用户组改为lucy
1 | [root@layne testdir]# ll |
2.2 改变文件所有者
语法:chown [-R] 用户账号 dirname/filename
或
chown [-R] 用户账号:用户组名 dirname/filename
**作用:**使用chown命令可以改变一个文件的所有者,还可以直接修改群组的名称;它是changeowner的缩写。
**注意:**用户必须是已经存在于系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名称才能改变。如果要将目录下的所有子文件或目录同时改变文件所有者,加-R参数即可。
案例:
chown -R root:root etc
将etc目录及目录下所有的目录和文件 的所有者和所属用户组改为root
chown lucy install.log
将install.log的所有者改为lucy用户
通过实例我们可以修改文件的用户组和所有者,那么什么时候使用chown,什么时候使用chgrp呢?我们举个例子:复制文件给其他用户,我们使用cp命令:
假设我们要将profile这个文件复制成为profile_test文件名,并且要将他给lucy这个用户使用,做法如下:
1 | [root@layne tdir]# ll |
不难发现,cp命令会复制执行者的属性与权限,profile_test还是归root所有。因此,lucy拿到该文件是无权进行操作的。所以你需要修改这个文件的所有者和用户组。
2.3 改变文件权限
语法:chmod [-R] mode dirname/filename
**作用:**文件或目录权限的改变使用的是chmod(change file mode bits)这个命令。
**注意:**权限的设置方法分两种,可以通过数字或符号进行修改。-R
含义同上
(1)数字类型改变文件权限
Linux的基本权限有9个,分别是owner,group,others三种身份各自的read,write,excute权限,各个权限对应的数字如下:
1 | r:4、w:2、x:1 |
为此每种身份各自的三个权限数字相加即可得出数字表示的权限。
例如,-rwxrwx
可以表示为:
1 | owner = rwx = 4+2+1 = 7 |
最终得到的数字肯定是唯一的。
数字分别表示为:
- 7代表rwx
- 6代表rw-
- 5代表r-x
- 4代表r–
- 3代表-wx
- 1代表–x
- 0代表—
范例:将文件a.txt的用户组权限改为r-x,所有者和other的权限不变
1 | [root@layne testdir]# ll a.txt |
(2)符号类型改变文件权限
另一种改变权限的方法就是通过符号了。上文提到,Linux总共9种权限,对应着三种身份,为此我们可以通过u,g,o代表三种身份,另外a代表全部身份。对应的权限可以写为r,w,x,如下图所示:
u是user,g是group,o是others,a是all
+是加一个权限,等号是设定最终的结果,-是在原来的基础上减一个。
chmod g+w test.sh
给该文件的用户组加一个w权限chmod u=rwx,go=rx a.txt
给该文件所有者设定rwx权限,用户组和其它人设定rx权限。chmod u=rwx,g=rx,o=r b.txt
给该文件分别设定权限
a-x等于 -x,a+等于+x
chmod a-x a.txt
或chmod -x a.txt
给该文件的所有者、用户组、其他人减去一个x权限chmod a+r a.txt
或chmod +r a.txt
给该文件的所有者、用户组、其他人加上一个r权限
3. 目录与文件的权限意义
3.1 权限对文件的重要性
文件是实际含有数据的地方,包括一般文本文件,数据库内容文件,二进制可执行文件(binary program)等等,因此,文件权限有如下意义:
- r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
- w(write):可以编辑、新增或者是修改该文件的内容
- x(execute):该文件具有可以被系统执行的权限。
注意:在Linux中,文件是否能被执行是由是否具有”x”这个权限来决定,与拓展名无关。
3.2 权限对目录的重要性
-
r(read contents in directory):表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。所以你就可以利用ls这个指令将该目录的内容列表显示出来。
-
w(modify contents of directory):这个可写入的权限对目录来说,表示你具有改变目录结构清单的权限,也就是底下这些权限:
- 建立新的文件或子目录
- 删除已经存在的文件或子目录(不论该文件的权限)
- 将已存在的文件或目录进行重命名;
- 移动该目录内的文件、目录位置。
-
x(access directory):在Linux中,目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途。所谓的工作目录(work directory)就是你目前所在的目录。举例来说,当你登入Linux时,你所在的Home目录就是你当下的工作目录。
如果你对一个目录用rw权限,没有x权限,即不能作为工作目录,则你可以在目录外面对目录里面的文件进行创建和删除,但是不能cd到里面里面操作。
综上: