Linux 文件的 ugo 权限把对文件的访问者划分为三个类别:文件的所有者、组和其他人。所谓的 ugo 就是指 user(也称为 owner)、group 和 other 三个单词的首字母组合。
文件的所有者
文件的所有者一般是创建该文件的用户,对该文件具有完全的权限。在一台允许多个用户访问的 Linux 主机上,可以通过文件的所有者来区分一个文件属于某个用户。当然,一个用户也无权查看或更改其它用户的文件。
文件所属的组
假如有几个用户合作开发同一个项目,如果每个用户只能查看和修改自己创建的文件就太不方便了,也就谈不上什么合作了。所以需要一个机制允许一个用户查看和修改其它用户的文件,此时就用到组的概念的。我们可以创建一个组,然后把需要合作的用户都添加都这个组中。在设置文件的访问权限时,允许这个组中的用户对该文件进行读取和修改。
其他人
如果我想把一个文件共享给系统中的所有用户该怎么办?通过组的方式显然是不合适的,因为需要把系统中的所有用户都添加到一个组中。并且系统中添加了新用户该怎么办,每添加一个新用户就把他添加到这个组中吗?这个问题可以通过其他人的概念解决。在设置文件的访问权限时,允许其他人户对该文件进行读取和修改。
使用 ll 命令可以查看文件的属性信息:
第一组指明文件的类型和 ugo 权限信息。
第二组是对文件的引用计数。
第三组是文件的所有者。
第四组是文件所属的组。
其它的信息我们暂时忽略。
文件类型
第一组的第一个字符描述文件的类型,常见的类型有如下几种:
d 表示目录
- 表示普通文件
l 表示链接文件
b 表示块设备文件
c 表示字符设备文件
s 表示 socket 文件
文件的 ugo 权限信息
第一组信息一个 10 个字符,除去第一个表示文件类型的字符,其它 9 个字符表示文件的 ugo 权限信息:
这 9 个字符以三个为一组,都是 rwx 或 - 的组合。其中,r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 这三个权限的位置不会改变,如果没有对应的权限,就会以 -(减号)代替。
以上图所示,第一组为文件所有者的权限,第二组为文件所属组的权限,第三组为其他人的权限。其表示的具体含义为:文件所有者具有对文件的读写权限,文件所属组的用户具有对文件读写的权限,而其他人只有读取文件的权限。
下面让我们来详细的解释一下读写执行的权限。
r (read):可以读取文件的实际内容,比如读取文本文件内的文字等。
w (write):可以编辑、增加、删除文件的内容(但不含删除该文件)。
x (execute):该文件具有可以被系统执行的权限。
可以看出,对于文件来说,rwx 主要针对的是文件的内容。
对目录而言,目录中存储的主要是目录下文件名称的列表,这与普通文件是有些不同的:
r (read contents in directory)
表示具有读取目录下文件名称的权限,也就是说你可以通过 ls 命令把目录下的文件列表查询出来。
比如我们使用用户 nick 创建一个目录 testdir,并在该目录下创建两个文件,此时 testdir 的权限为:
其他人具有 r 权限,所以可以通过 ls 命令查看该目录下的文件,这里我们通过 tester 用户查看:
然后我们修改该目录的权限:
现在其他人已经没有这个目录上的 r 权限了,再让用户 tester 执行 ls 命令试试:
现在其他人已经没有权限查看目录下的文件名了。
w (modify contents of directory)
具有 w 权限表明你可以在该目录下执行如下的操作:
创建新的文件和目录
删除已经存在的文件与目录(不论该文件的权限为何!)
重命名已存在的文件或目录
移动该目录内文件、目录的位置。