Linux 文件权限介绍
长期在 Windows 上工作的用户可能对权限没有什么概念,但我想你或多或少遇到过这样的情况,当执行某个程序的时候需要以管理员身份运行,移动、删除、复制某些文件或者目录的时候也提示无法移动,无法复制,无法删除,请使用管理员身份操作等。其实这就是权限,Windows 系统默认登录的是一个普通用户,它还有一个默认的管理员用户叫做 administrator。相信 Windows 的用户也听说过。那么 Linux 系统下的权限是怎么样的呢?今天我们就来一起了解一下 Linux 系统下的权限相关的内容。
1. 用户和用户组
要说清楚 Linux 系统中的权限问题,需要先介绍一下 Linux 下的用户和用户组,我们前面的文章中已经提到过,Linux 系统一般默认有一个超级用户(root),还有一个我们登录系统的普通用户,如果你忘记了可以去看看 Linux 命令行介绍 这篇文章的介绍。为了使每篇文章都足够简单,能够让新入门的人看懂,所以对于用户的添加、删除、修改等具体操作,我将重新写文章介绍。
除了用户外,Linux 系统还有一个用户组的概念,一个用户组中可以包含多个用户,这是为了方便操作系统对用户的集中管理。用户组是用来管理用户的,同样,操作系统也是需要管理用户组的,操作系统管理用户组也涉及用户组的添加、删除和修改。用户组的增加、删除和修改实际上就是对/etc/group文件的更新。我也会单独写文章介绍用户组的管理操作。
2. 文件权限
首先我先介绍几个和文件相关的概念,Linux 下一切皆文件,Linux 的 VFS(Virtual File System)虚拟文件系统就是用来抽象各种设备为文件的。
- 属主:每个文件都有一个属主,这个属主是一个用户,一般哪个用户创建了文件,那它的属主就是谁,但是是可以修改的。
- 属组:属组是跟这属主的,一般哪个属主创建了文件,那么用户的属组也是它创建的文件的属组,也是可以修改。
- 其他组:除了属主和属组外的其他系统用户和用户组都是其他组。
接下来,我们来看看文件的权限。我们打开终端,输入ls -l
,如下图:
我们拿 -rw-r--r-- 1 elliot elliot 8980 3月 5 18:08 examples.desktop
这一行来解释,其他行都是文件,只有这一个是文件,所以我们先拿它来解释。
文件的权限又四部分组成:
- 第一部分:第 1 位,有三种取值:普通文件(-)、目录(d),链接(l),这个例子是 - 代表是一个普通文件。
- 第二部分:第 2-4 位,表示属主的权限:可读(r)、可写(w)、可执行(x),如果对应的位没有权限用 - 表示。
- 第三部分:第 5-7 位,表示属组的权限,表示方法同属主。
- 第四部分:第 8-10 位,表示其他组的权限,表示方法同属主。
好了,我们来具体描述一下上面的例子:
- 第一列:-rw-r--r--,代表这是一个普通文件,属主权限是可读可写不可执行(rw-),数组权限是可读不可写不可执行(r--),其他组权限是可读不可写不可执行(r--)。
- 第二列:1,代表该文件硬链接数为 1 。注:若是文件则代表该文件的硬链接数。若是目录,则代表该目录下的子目录数。
- 第三列:当前文件所属的用户名,若该用户被删除,则会显示该用户删除前的用户id。
- 第四列:当前文件所属的用户组。
- 第五列:若是文件则代表该文件的大小,若是目录则代表该目录的大小(不包括目录下的子目录和文件的大小)。
- 第六列:该文件最近修改或者查看的时间。
- 第七列:文件名称。
最后再来看看如何修改文件的权限吧。先补充一下,在修改权限时会用到 u、g、o,它们分别代表属主、数组、其他组。下面看几个例子来学习修改文件权限吧。
- 使用 + 和 - 来增加和减少权限,如下图,安装图中的操作试一试吧,我只演示了 u+x 和 o-r,你可以试试其他组合,比如:u+x、o+rw、u+w 等等.
- 使用数字来描述权限,我们可以分别使用一个八进制数字表示属主、属组、其他组的权限。比如:八进制 5 转换成四位二进制是 0101,我们去后三位分别表示 rwx 权限,1 代表有权限,0 代表没有权限,所以八进制 5 代表的权限是 r-x。那么 755 代表的 权限就是 rwxr-xr-x,我们将上图的 1.txt 的权限用数字的方式改一下看看,如下图:
现在只需要安装上面的两个方法多加联系,就可以掌握修改文件的权限了,修改目录的权限和修改文件一样,只需要将文件名换成目录名就可以了,要注意的是,如果想把整个目录包括子目录下的所有文件目录都改成某个权限,可以在 chmod 后加上参数 -R。
3. 修改文件属主、数组
先来看图吧,我们根据图中的操作来解释。
20190315153151891_165920347.png首先,我使用 ````ls -l 1.txt``` 查看了 1.txt 的信息。
-
chown root 1.txt
修改属主为 root 的时候提示拒绝,这里就需要用超级用户执行了,所以我接着使用sudo chown root 1.txt
就成功修改了文件的属主。 -
sudo chgrp root 1.txt
修改属组为 root。 -
sudo chown elliot:elliot 1.txt
同时修改属主和属组为 elliot,这里注意:属主和属组之间用冒号分隔。
其实就是两个命令,一个是修改属主的,chown,它同时可以修改属组;另一个命令是修改属组的,chgrp。修改目录的属主和属组和修改文件一样,如果要修改目录下说有文件和目录的属主和属组,在命令后面加上 -R 参数就可以了。
对于初学者,知道这些差不多了,如果感兴趣可以深入的研究哦,有什么问题欢迎和我一起讨论。