Linux文件权限简析

Linux是一个多用户操作系统,在Linux中,可以添加非常多的用户。而用户的等级,只有Root用户和非Root用户之分。Root用户,相当于Windows系统中的超级管理员,拥有至高无上的权利。Root用户可以对系统进行任意操作,甚至可以强制删除整个Linux操作系统。所以除非你明确的知道你自己在做什么,否则不要以Root身份来操作。

说完了用户,再说一下用户组的概念。用户组,如果和现实生活做类比的话,就相当于人的职业。现实中一个人可以有多个职业。同样地,在Linux中,每个用户必定至少属于一个用户组。

有了以上铺垫,我们就可以正式介绍Linux下文件权限的概念了。

如果将Linux系统比作一个大酒店,那么系统中的各个用户就相当于住在不同房间内的房客。而文件就如同客人携带的行李。我们一定不希望别人随便翻动自己的行李,所以我们需要给行李上把锁。锁就是文件的权限。

在Linux系统中,每个文件都会有一个特定的拥有者和所属用户组,这是一个文件的固有属性。文件可以利用这两个固有属性来控制拥有者和它所属用户组里的其他用户是否对它拥有读写执行的权利。另外,文件还可以规定其他用户对它是否拥有读写执行的权利。这三个属性结合在一起,构成了Linux系统中文件的所有访问控制权限。

现在我们结合实例来说明一下文件属性的查看方法。

打开终端,使用ls -l命令可以查看文件的属性和详细权限。

屏幕快照 2015-12-08 20.38.37

以第一行为例,可以看到从左到右以空格为限分为了七个部分,分别是

  • 文件类型和权限
  • 连接数
  • 拥有者
  • 所属用户组
  • 文件大小
  • 最后修改日期
  • 文件名

在这些属性中最重要的是第一个部分。

drwxr-xr-x

第一个字符用于描述文件类型,可选的取值是:-、d、l、b、c、s和p。

-:代表这是一个普通文件

d:代表这是一个目录

l:代表这是一个软连接

b:代表这是一个块设备

c:代表这是一个字符设备,如鼠标、键盘等需要连续串行读写的设备

s:代表套接字文件

p:表示命名管道文件

余下的九个字符三个一组,分别表示拥有者、所属用户组、其他用户对此文件的读写和执行权限。

第二部分代表着连接数。

Linux系统所使用的文件系统是一种基于inode的文件系统。inode翻译成中文就是索引节点,是所有Linux操作系统中都存在的一种数据结构,也是Linux文件系统的核心。每一个新创建的文件都会分配一个inode,且每一个文件都有一个唯一的inode编号。我们可以将inode理解成一个指针,它指向的是文件所在磁盘中的物理位置。系统是通过inode定位每一个文件的,因此为了提高文件系统的执行效率,访问过的文件的inode会被缓存在内存中。那么,连接数其实就是inode的引用计数。更详细的内容将在以后专门拿一篇博文来讲解。

因此,这是一个目录文件,它的拥有者tamarous可以对它读、写、执行,和它同属于staff组的用户可以对它读和执行,其他组的用户也可以对它进行读和执行。

如果要更改文件的权限,我们就需要使用另一个命令:chmod,它的含义不言自喻了。这个命令的玩法比较多,可以分为数字法和文字法两种,我们先介绍下数字法。

所谓数字法呢,就是用数字来代替rwx。r相当于4,w相当于2,x相当于1。每组的权限就是用这些数字的和来表示。比如r-x权限就是5,rw-权限就是6,rwx权限则是7。

之前看到的drwxr-xr-x,如果换成数字来表示就是d755,如果要修改它的权限,比如允许所有用户对它进行读写和执行操作,那么使用如下命令:

chmod 777 AFNetworking

另一种是文字法。引入四个字母u(ser),g(roup),o(ther),a(ll)表示拥有者、所属组、其他用户和全部。接着引入三个操作符+-=,分别表示增加、减去和赋值。这四个字符和操作符可以联合使用。比如如果要给拥有者设定全部权限,给所属组和其他组设置读写权限,那么应该这样操作:

chmod u=rwx,go=rx AFNetworking

关于Linux文件权限的部分,暂时就介绍到这里。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据