Linux 基本工具(权限管理)
本篇文章将详细介绍下 Linux
环境的文件系统权限的基本信息,便于我们在使用过程中,对权限有合理的规划和使用.
每一个文件(目录)均有一个拥有者(Owner)
root@server:~# ll /bin/bash
-rwxr-xr-x 1 root root 1037528 May 10 04:20 /bin/bash*
这里第一个 root
即为拥有者,也即为系统的可登陆账户名,每个文件(目录)均有一个拥有者(Owner)
每个文件(目录)均有一个用户组
每个文件(目录)均有一个用户组, 用户组是系统账户管理过程中, 对某一类用户的统一归类和抽象.默认情况下, 系统会初始化多个用户组.常见的有 wheel
组, 该组下的用户将享有和 root
相同的系统管理权限.
每个文件(目录)均有 可读(r
)/可写(w
)/可执行(x
)权限
可读(r
)/可写(w
)/可执行(x
)权限合并在一起,构成一个权限集rwx
,对于每个文件(目录)有三组 rwx
权限集,其中一个和用户的所有者关联, 一个和文件的用户组关联,最后一个权限和既不是拥有者也不是用户组的其他身份的角色的权限信息.
我们还是拿 ll /bin/bash
来举例
root@server:~# ll /bin/bash
-rwxr-xr-x 1 root root 1037528 May 10 04:20 /bin/bash*
/bin/bash
的权限描述信息为 -rwxr-xr-x
/bin/bash
第一个 -
表示当前是一个文件, 如果权限信息的第一个字符是 d
的话, 表示当前为一个目录, 例如:
root@server:~# ls -l /
total 76
drwxr-xr-x 2 root root 4096 Jun 10 11:23 bin
... ...
/bin/bash
第一组权限 rwx
描述的是拥有者的权限, 第二组权限 r-x
描述的组权限, 第三组权限为 r-x
其他用户或者组的权限信息.
因此 /bin/bash
文件, 只有拥有者才能对文件变更, 除外所有用户或者组均可读可执行.
前面我们已经介绍过文件权限操作的一些命令, 比如chown
/chgrp
/chmod
等等命令, 可以很方便的对文件系统的权限做变更.
变更文件(目录)拥有者
chown {USER} {FILENAME}
变更文件(目录)用户组
chgrp {GROUP_NAME} {FILENAME}
变更文件权限信息,给文件赋予可执行权限
chmod +x {FILENAME}
一般普通文件的权限
chmod 644 {FILENAME}
umask
命令用于设置默认新文件的权限, 后续通过 touch
等命令创建的文件将使用 umask
配置的默认权限.
类似上面我们将普通文件的权限设置为 644
, 权限管理可以通过权限描述符, 也可以通过数值来描述:
r
== 4w
== 2x
== 1-
== 0
因此为了表达文件的三组权限信息, 我们可以将上述数值整合, 之后由 3 位数值来描述三组权限信息, 比如文件权限为r--
, 意味着文件权限数值为4
, 如果文件权限为r-x
, 意味着权限数值为 5
, 将整理好的三组权限拼在一起就可以通过数值的模式来表达文件权限信息了. 比如上面提到的644
, 拥有者权限为 rw-
, 组权限为 r--
, 其他用户和组的权限也为 r--
.
使用经验统计来看, 更多的文件权限为 644
, 更多的目录权限为 755
.
如果要对目录下的所有文件/目录批量设置权限, 则可以使用我们前面介绍的, find
命令 或者 find
命令配合 xargs
命令来完成.
将当前目录下的所有文件的权限设置为 644
, 即rw-r--r--
find . -type f -print0 | xargs -0 -l -i chmod 644 '{}'
将当前目录下的所有目录的权限设置为 755
, 即 rwxrw-rw-
.
find . -type d -print0 | xargs -0 -l -i chmod 755 '{}'
将当前目录下的所有文件的拥有者设置为 xyz
find . -type f -exec chown xyz {} ';'