Linux文件与目录管理(8)
上一篇文章我们为文件权限的学习做了环境准备,下面来说梳理一下:
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)文件有没有可执行权限(文件属性里管控),就是我们本章学习的内容
修改文件属性后进行测试
[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@studyclub attribute]# ./welcome.sh
welcome-to-studyclub
what?居然执行成功了。我们再回到刚才james登录的那个终端,给文件加上r权限后再回到eric登录的终端执行:
[eric@studyclub attribute]$ ./welcome.sh
welcome-to-studyclub
作为普通用户,如果需要文件具有可执行(x)权限,那么应该同时给与可读(r)的权限
作为root用户,没有只要有x权限就能执行
可读r:表示具有读取内容的权限
可写w:表示具有新增、修改文件内容的权限
可执行x:表示具有执行文件的权限
1)文件本身要能够执行
2)普通用户同时还需要具备r的权限才能行
3)root只要有x权限就能执行
课后练习
请把上面“验证其他用户的权限:这个例子不再讲解,请自行练习。”完成练习?
请自己准备环境,把上面的例子重新温习一遍。
如果一个文件的权限是rw-r--r--,请解释这是什么意思。解释完成后,请实操准备一个这种权限的文件,并验证你的解释是否正确。
《Linux基础及进阶》:
006 - Linux文件与目录管理(3)
007 - Linux文件与目录管理(4)
008 - Linux文件与目录管理(5)
009 - Linux文件与目录管理(6) 010 - Linux文件与目录管理(7)看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
微信号|bjdream-1
Cloud研习社 ·