【前端&运维那点事儿】四:Linux中的文件权限管理

1,716 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

Hi~,我是一碗周,如果写的文章有幸可以得到你的青睐,万分有幸~

🍈 写在前面

先来介绍一下新开的这个专栏:《前端&运维那点事儿》将会从前端的角度,依次学习Linux→Nginx→Docker→持续集成→k8s,从而打造一个属于站在前端角度的运维专栏。

在上一篇文章中,介绍了用户和用户组的相关内容,这篇文章介绍一下与用户息息相关的文件权限管理;

这篇文章中的主要内容如下:

  • ls -l回显详解;

  • 文件权限

  • 文件夹权限

  • 修改权限相关的命令

🍓 先说概念

在开始之前我们先来解释一下ls -l回显内容的展示,Linux的文件权限具体是什么意思。

🍒 ls -l回显

这里我们先来解释一下ls -l的回显内容:

[zhou@ywanzhou ~]$ ls -l
total 8
drwxrwxr-x 2 zhou zhou 4096 Oct 14 13:49 demo
lrwxrwxrwx 1 zhou zhou    8 Oct 14 13:50 test-link.txt -> test.txt
-rw-rw-r-- 1 zhou zhou    7 Oct 14 13:54 test.txt

上面中的每一行记录都可以拆分为7个字段,每个字段的意思如下:

ll回显详解.png

🍑 文件权限详解

文件或者文件夹的权限由最前面的10个字符,该字符的含义如下:

权限各字段详解.png

常见的文件类型主要类型有:

  • -: 表示普通文件类型;

  • d: 表示目录;

  • c: 表示字符设备文件;

  • b: 块设备文件,简单的说就是硬盘;

  • s: 套接字文件;

  • p: 管道文件;

  • l: 链接文件;

接下来了解一下具体的权限分别表示什么,如下图:

权限字段详解.png

Linux中的权限还能用8进制展示,8进制转换为2进制表示为xxx,即最大为111,最小为000,这里的3位正好对应rwx三个字符;如果用8进制表示,最大权限表示7即rwxrwx分别对应的数字如下:

  • 1:可执行

  • 2:可写

  • 4:可读

如果某文件的权限为771,则对应的字符为-rwxrwx--x

更多对应关系如下图:

数字权限对应管理.png

其实只需要记住1、2、4然后进行加减操作即可。

🍎 文件和目录权限的操作

在前面介绍了文件和文件目录权限的具体含义以及表示方法,现在介绍一下Linux中对于权限操作的命令。

🍌 chmod命令

chmod命令用于修改文件和目录的权限,该命令有两种设置方式,如下所示:

chmod [who] [+ | - | =] [permission] 文件或者目录
##################################################
# who 表示为谁设置权限,可选值如下:
#   * u 所有者
#   * g 所有组
#   * o 其他用户
#   * a 所有(all)
# + - = 表示加上 减去 赋值指定权限
# 权限的值分别为 r w x -
##################################################

或者下面这种

chmod 代表权限的三个八进制数字 文件或者目录
# 例如:
chmod 777 test.txt

现在我们先创建两个用户:

  • yiwan

  • zhou

现在我们使用yiwan这个用户创建文件和目录,并使用zhou这个用户进行操作。

第一步,我们使用yiwan这个用户创建yDir目录

[yiwan@ywanzhou tmp]$ cd /tmp/   # 在tmp中操作
[yiwan@ywanzhou tmp]$ mkdir yDir # 创建目录
[yiwan@ywanzhou tmp]$ ls -l | grep 'yDir' # 查看创建结果 grep 用作筛选
drwxrwxr-x 2 yiwan yiwan  4096 Oct 14 16:45 yDir
# 根据权限得出,其他用户无法在该目录中创建文件

第二步,使用zhou这个用户切换到 yDir 这个目录,并创建文件

[zhou@ywanzhou yDir]$ cd /tmp/yDir/
[zhou@ywanzhou yDir]$ mkdir text.txt
mkdir: cannot create directory ‘text.txt’: Permission denied
# 创建文件抛出异常

第三步,使用yiwan这个用修改yDir这个目录其他用户也具有写权限

[yiwan@ywanzhou tmp]$ chmod o+w yDir/
[yiwan@ywanzhou tmp]$ ll | grep 'yDir'
drwxrwxrwx 2 yiwan yiwan  4096 Oct 14 16:45 yDir

第四步,现在我们就可以通过zhou用户去创建文件了

[zhou@ywanzhou yDir]$ touch text.txt
[zhou@ywanzhou yDir]$ ll | grep 'text.txt'
-rw-rw-r-- 1 zhou zhou 0 Oct 14 17:13 text.txt

这里我是对目录进行的操作,对文件操作亦是如此

🍋 chown命令

该命令可以修改文件或者文件夹的所有者和所属组,该命令只能root用户执行,语法如下:

chown [-cfhvR] user[:group] file...
########################
# -c : 显示更改的部分的信息
# -f : 忽略错误信息
# -h :修复符号链接
# -v : 显示详细的处理信息
# -R : 递归处理文件及文件夹
#######################

示例代码如下:

chown -vR zhou:zhou yDir/ # 递归修改yDir目录的所有者和所属组为zhou
ownership of ‘yDir/text.txt’ retained as zhou:zhou
changed ownership of ‘yDir/’ from yiwan:yiwan to zhou:zhou

🍊 chgrp命令

该命令可以文件或者文件夹所属组,该命令不需要root用户,只要该用户是这个组里面的一员就可以进行修改,示例代码如下:

chgrp -v yiwan text.txt # 将 text.txt 的所属组修改为 yiwan 并展示详细信息

🍍 umask命令

该命令可以设置创建文件时预设的权限掩码。

[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

直接键入umask命令可以查看当前的默认权限掩码,修改权限掩码只需要在其后面输入对应的数值即可,示例代码如下:

[yiwan@ywanzhou tmp]$ umask
0002
[yiwan@ywanzhou tmp]$ umask 007
[yiwan@ywanzhou tmp]$ umask 
0007

常见的umask值与新建文件和目录的权限对应关系如下:

umask值新建目录的权限新建文件的权限
022777-022=755666-022=644
027777-027=750666-027=640
002777-002=775666-002=664
006777-022=771666-006=660
007777-007=770666-007=660

新建文件从666开始是因为新建的文件默认不能具备执行权限,需要手动设置。

🍉 写在最后

这篇文章中介绍了文件以及目录的权限,加上前面的三篇文章对于前端来说Linux的基本操作就已经够了,后续计划介绍Shell编程、软件安装以及Linux的网络。

如果对本篇文章对你有所帮助,可以点赞收藏评论支持一下我;如果有所疑问,欢迎私信~