查看原文
其他

Linux文件与目录管理(8)

Cloud研习社 Cloud研习社 2023-06-06

上一篇文章我们为文件权限的学习做了环境准备,下面来说梳理一下:

  • james、eric、simon用户同属于jasonhome组;
  • jason单独是一个组;
  • root单独一个组。

好了,下面我们通过实例看看权限管理的情况:

# 以root用户登录,我们先来创建用于测试的目录和环境
[root@studyclub ~]# mkdir /attribute # 创建一个测试目录
[root@studyclub ~]# cd /attribute/
[root@studyclub attribute]# echo "echo welcome-to-studyclub" > welcome.sh # 创建一个测试文件
[root@studyclub attribute]# ll welcome.sh
-rw-r--r-- 1 root root 26 May 11 20:53 welcome.sh # 先看看测试文件默认的属性是什么



测试默认情况下文件的权限


从上面执行的结果看,welcome.sh文件的权限是:

文件所属用户:可读取,可写(可修改文件内容)这个文件。

文件所属用户组:可读取这个文件

其他用户:可读取这个文件

下面我们就来验证一下:

####################################################################################
# 以root用户身份登录系统,root是welcome.sh文件的拥有者,换句话说welcome.sh的用户是root。
####################################################################################
# 验证可读权限
[root@studyclub attribute]# cat welcome.sh
echo welcome-to-studyclub

# 验证可写权限
[root@studyclub attribute]# vim welcome.sh 
[root@studyclub attribute]# cat welcome.sh # 加上以#号开头的行
echo welcome-to-studyclub
#write


# 下面我们给welcome.sh文件添加可执行权限,然后验证该文件是不是可执行
[root@studyclub attribute]# chmod +x welcome.sh
[root@studyclub attribute]# ll welcome.sh
-rwxr-xr-x 1 root root 35 May 11 13:46 welcome.sh

# 验证可执行权限(注意,我们这个welcome.sh的内容是一个echo命令,具有可以执行的能力)
# 两种执行方式
[root@studyclub attribute]# sh welcome.sh # 方式1
welcome-to-studyclub
[root@studyclub attribute]# ./welcome.sh # 方式2
welcome-to-studyclub
# 下面这个方式是不对的,想想为什么?(提示:前面学过的环境变量)
[root@studyclub attribute]# welcome.sh
-bash: welcome.sh: command not found

#########################################
# 以james用户登录(另开一个终端)
###
######################################
[root@studyclub attribute]# su james
[james@studyclub attribute]$ whoami
james
[james@studyclub attribute]$ ll welcome.sh
-rwxr-xr-x 1 root root 26 May 11 20:53 welcome.sh

# 我们可以看到 welcome.sh文件属于root用户以及root用户组。对于welcome.sh这个文件来说,james用户属于其他用户。
[james@studyclub attribute]$ cat welcome.sh # james具有读权限
echo welcome-to-studyclub
[james@studyclub attribute]$ ./welcome.sh # james具有执行权限
welcome-to-studyclub
[james@studyclub attribute]$ echo "other write" >> welcome.sh # james没有写权限
bash: welcome.sh: Permission denied

# 在root用户登录的终端上,修改welcome.sh文件所属的用户及用户组
[root@studyclub attribute]# chown james.jasonhome welcome.sh
[root@studyclub attribute]# ll welcome.sh
-rwxr-xr-x 1 james jasonhome 26 May 11 20:53 welcome.sh #此时文件的用户(拥有者)是james,所属组是jasonhome

# 回到james用户登录的终端,测试文件拥有者的读、写、执行权限
[james@studyclub attribute]$ whoami
james
[james@studyclub attribute]$ cat welcome.sh # 文件拥有者有读的权限
echo welcome-to-studyclub
[james@studyclub attribute]$ echo "# user write" >> welcome.sh # 文件拥有者有写的权限
[james@studyclub attribute]$ ./welcome.sh # 文件拥有者有可执行的权限
welcome-to-studyclub

#########################################
# 以eric用户登录(另开一个终端)
###
######################################
[root@studyclub attribute]# su eric
# eric用户属于jasonhome用户组,相对于文件welcome.sh来说,eric属于用户组的一个用户,所以eric用户有用户组对应的权限
# 用户组对welcome.sh文件有读和执行的权限,没有写的权限,我们来看
[eric@studyclub attribute]$ cat welcome.sh # 有读权限
echo welcome-to-studyclub
# user write
[eric@studyclub attribute]$ ./welcome.sh # 有执行权限
welcome-to-studyclub
[eric@studyclub attribute]$ echo "# group write" >> welcome.sh # 没有写权限
bash: welcome.sh: Permission denied


################################################################################################
# 以jason用户登录系统(另开一个终端)
################################################################################################
# jason用户和james用户不在同一个组,对于welcome.sh文件而言,jason属于其他用户。其他用户对welcome.sh只有读和执行的权限,没有写的权限
[jason@studyclub attribute]$ cat welcome.sh # 可读
echo welcome-to-studyclub
#write
[jason@studyclub attribute]$ ./welcome.sh # 可执行
welcome-to-studyclub
[jason@studyclub attribute]$ vim welcome.sh # 不可写

echo welcome-to-studyclub
#write
#group write
保存时报错:E45: 'readonly' option is set (add ! to override)
[jason@studyclub attribute]$ echo "#group write" >> welcome.sh # 用echo也能看出来不可写
bash: welcome.sh: Permission denied

特别提醒:一个文件能不能执行,取决于两个方面:

1)文件本身有没有可以执行的能力:一般脚本文件、二进制文件等特殊文件才有可执行的能力

2)文件有没有可执行权限(文件属性里管控),就是我们本章学习的内容



修改文件属性后进行测试


我们把文件welcome.sh的默认属性改为如下:
-w---x-w-  # 文件所属用户有只有写权限,所属组仅有可执行权限,其他用户只有写权限。
[james@studyclub attribute]$ chmod u=w,g=x,o=w welcome.sh 
[james@studyclub attribute]$ ll welcome.sh 
--w---x-w- 1 james jasonhome 39 May 11 21:27 welcome.sh

接下来我们看看有什么效果:


# 验证文件的用户(文件的拥有者)的读写执行权限:用户只有写权限、用户组的用户只有执行权限,其他用户只有写权限

##########################
# 验证james用户的权限
##########################
[james@studyclub attribute]$ cat welcome.sh
cat: welcome.sh: Permission denied # 提示不被允许,没有权限读
# 验证写权限
[james@studyclub attribute]$ echo "# user write" >> welcome.sh # 由于文件的拥有者有写权限,故追加操作可以成功
[james@studyclub attribute]$ vim welcome.sh #这样执行会提示:"welcome.sh" [Permission Denied]
                      #因为vim编辑文件需要先读取到文件,由于文件的拥有者没有读权限,所以报错。
# 验证可执行权限
[james@studyclub attribute]$ ./welcome.sh
bash: ./welcome.sh: Permission denied # 我们看到,文件的用户没有可执行权限。

########################################################
# 验证与james同一个用户组的eric的权限(另一个终端用eric登录)
########################################################
# eric用户属于jasonhome用户组,相对于文件welcome.sh来说,eric用户属于用户组的一个用户,所以eric用户有用户组对应的权限
# 用户组里的用户对welcome.sh文件有执行权限,但是没有读和写的权限,我们来看
[eric@studyclub attribute]$ cat welcome.sh # 没有读权限
cat: welcome.sh: Permission denied
[eric@studyclub attribute]$ echo "# eric group write" >> welcome.sh # 没有写权限
bash: welcome.sh: Permission denied
[eric@studyclub attribute]$ ./welcome.sh # 只有执行权限
bash: ./welcome.sh: Permission denied # 为什么会提示没有执行权限呢?

# 验证其他用户的权限:这个例子不再讲解,请自行练习。


上面最后一个例子,为什么明明有执行权限,系统却提示没有权限呢?
我们回到root用户登录的终端,尝试执行这个welcome.sh文件:
[root@studyclub attribute]# ./welcome.sh 
welcome-to-studyclub

what?居然执行成功了。我们再回到刚才james登录的那个终端,给文件加上r权限后再回到eric登录的终端执行:


[eric@studyclub attribute]$ ./welcome.sh 
welcome-to-studyclub


所以,我们可以得出以下结论:
  • 作为普通用户,如果需要文件具有可执行(x)权限,那么应该同时给与可读(r)的权限

  • 作为root用户,没有只要有x权限就能执行


这一节的内容告一段落,总结一下测试结论
linux普通文件的读、写、执行权限说明:
  • 可读r:表示具有读取内容的权限

  • 可写w:表示具有新增、修改文件内容的权限

   如果没有r权限,那么会提示无法编辑,但可以把内容通过echo重定向追加到文件中。
  • 可执行x:表示具有执行文件的权限

    1)文件本身要能够执行

    2)普通用户同时还需要具备r的权限才能行

    3)root只要有x权限就能执行


下一讲我们来看看目录的权限,如果篇幅允许,我们再看看文件的默认权限与隐藏权限。


课后练习


  • 请把上面“验证其他用户的权限:这个例子不再讲解,请自行练习。”完成练习?

  • 请自己准备环境,把上面的例子重新温习一遍。

  • 如果一个文件的权限是rw-r--r--,请解释这是什么意思。解释完成后,请实操准备一个这种权限的文件,并验证你的解释是否正确。


新手应知:    尝鲜Rocky Linux
《Linux基础及进阶》:

    006 - Linux文件与目录管理(3)

    007 - Linux文件与目录管理(4)

    008 - Linux文件与目录管理(5)

    009 - Linux文件与目录管理(6)    010 - Linux文件与目录管理(7)


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存