文件权限
先观察一下文件和目录的详细信息:
# 查看文件和目录
fu@fu-virtual-machine:~$ ls -lh | grep -E [a-z]$
-rw-rw-r-- 1 fu fu 13 10月 30 14:43 hw.txt
drwxrwxr-x 3 fu fu 4.0K 10月 30 14:43 test
# 1 2 3
如上所示,截取了详细信息的3段,每一段的含义如下:
第1段:表示文件的类型和文件具有的权限,一共10个字符来表示;第1个字符表示文件类型,"d"表示该文件是目录,"-"表示该文件是个普通文件;剩余的9个字符分成3组,每一组3个字符,第1组表示文件的s所有者拥有的权限,第2组表示文件所属的用户组成员拥有的权限,第3组表示路人用户拥有的权限。
对于普通文件来说:r
表示该文件可读
,w
表示该文件可写
,x
表示该文件可执行
;对于目录文件来说:r
表示该目录结构可以被展示
,即通过ls
命令可读取目录结构和内容;w
表示可以在目录中增删改文件
;x
表示可以使用cd
命令访问目录文件
。
第2段:表示文件的所有者,刚创建出来的文件的所有者就是创建者。
第3段:表示文件所属的用户组。
(1)改变文件的所有者和所属用户组:
改变文件所属用户组的命令:chgrp
chgrp joker1 hw.txt
:表示将hw.txt
普通文件的所属用户组修改为joker1
用户组。
# 查看文件详细信息
# 此时"hw.txt"普通文件的所属用户组为"fu"组
fu@fu-virtual-machine:~$ ls -lh | grep -E [a-z]$
-rw-rw-r-- 1 fu fu 13 10月 30 14:43 hw.txt
drwxrwxr-x 3 fu fu 4.0K 10月 30 14:43 test
# 修改"hw.txt"普通文件的所属用户组为"joker1"用户组
fu@fu-virtual-machine:~$ sudo chgrp joker1 hw.txt
[sudo] fu 的密码:
# 修改成功,此时"hw.txt"普通文件的所属用户组变为"joker1"用户组
fu@fu-virtual-machine:~$ ls -lh | grep -E [a-z]$
-rw-rw-r-- 1 fu joker1 13 10月 30 14:43 hw.txt
drwxrwxr-x 3 fu fu 4.0K 10月 30 14:43 test
chgrp -R joker1 test
:递归将test
目录文件的所属用户组修改为joker1
用户组。
# 递归展示"test"目录中各文件的所属用户组
fu@fu-virtual-machine:~$ ls -Rl | grep -E [a-zA-Z]:*$
-rw-rw-r-- 1 fu joker1 13 10月 30 14:43 hw.txt
# 可观察到,所属用户组均为"fu"用户组
drwxrwxr-x 3 fu fu 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 fu fu 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 fu fu 4096 10月 30 14:43 test
./test/test/test:
# 递归修改所属用户组为"joker1"用户组
fu@fu-virtual-machine:~$ sudo chgrp -R joker1 test
# 递归展示
fu@fu-virtual-machine:~$ ls -Rl | grep -E [a-zA-Z]:*$
-rw-rw-r-- 1 fu joker1 13 10月 30 14:43 hw.txt
# 可观察到,所有文件的所属用户组均为"joker1"用户组
drwxrwxr-x 3 fu joker1 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 fu joker1 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 fu joker1 4096 10月 30 14:43 test
./test/test/test:
改变文件所有者的命令为:chown
;chown
可以在改变文件所有者的同时捎带
上修改文件的所属用户组。
chown joker1 hw.txt
:修改hw.txt
文件的所有者为joker1
用户。
# 查看"hw.txt"文件信息
# "hw.txt"文件的所有者为"fu"用户
fu@fu-virtual-machine:~$ ls -l | grep -E "\.[a-z]*"
-rw-rw-r-- 1 fu joker1 13 10月 30 14:43 hw.txt
# 改变"hw.txt"文件的所有者
fu@fu-virtual-machine:~$ sudo chown joker1 hw.txt
# 修改后的"hw.txt"文件的所有者变成了"joker1"用户
fu@fu-virtual-machine:~$ ls -l | grep -E "\.[a-z]*"
-rw-rw-r-- 1 joker1 joker1 13 10月 30 14:43 hw.txt
chown -R joker1 test
:递归修改test
目录的所有者为joker1
用户。
# 递归查看"test"目录文件,发现所有者均为"fu"用户
fu@fu-virtual-machine:~$ ls -Rl | grep -E ".*test.*"
drwxrwxr-x 3 fu joker1 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 fu joker1 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 fu joker1 4096 10月 30 14:43 test
./test/test/test:
# 递归改变"test"目录所有者为"joker1"用户
fu@fu-virtual-machine:~$ sudo chown -R joker1 test
# 递归查看"test"目录,发现所有者均被修改为"joker1"用户
fu@fu-virtual-machine:~$ ls -Rl | grep -E ".*test.*"
drwxrwxr-x 3 joker1 joker1 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 joker1 joker1 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 joker1 joker1 4096 10月 30 14:43 test
./test/test/test:
chown joker2:joker2 hw.txt
:将hw.txt
文件的所有者和所属用户组同时修改为joker2
用户和joker2
用户组。
# 查看"hw.txt"文件信息
fu@fu-virtual-machine:~$ ls -l | grep txt
-rw-rw-r-- 1 joker1 joker1 13 10月 30 14:43 hw.txt
# 使用"chown"目录将"hw.txt"文件的所有者修改为"joker2"用户
# 将"hw.txt"文件的所属用户组修改为"joker2"用户组
fu@fu-virtual-machine:~$ sudo chown joker2:joker2 hw.txt
# 修改成功
fu@fu-virtual-machine:~$ ls -l | grep txt
-rw-rw-r-- 1 joker2 joker2 13 10月 30 14:43 hw.txt
chown -R joker2:joker2 test
:递归将test
目录的所有者和所属用户组修改为joker2
用户和joker2
用户组。
# 递归查看"test"目录
# 发现所有者和所属用户组均为"test1"用户和"test1"用户组
fu@fu-virtual-machine:~$ ls -lR | grep -Ew test
drwxrwxr-x 3 joker1 joker1 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 joker1 joker1 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 joker1 joker1 4096 10月 30 14:43 test
./test/test/test:
# 递归修改
fu@fu-virtual-machine:~$ sudo chown -R joker2:joker2 test
# 修改成功
fu@fu-virtual-machine:~$ ls -Rl | grep -Ew test
drwxrwxr-x 3 joker2 joker2 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 joker2 joker2 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 joker2 joker2 4096 10月 30 14:43 test
./test/test/test:
(2)修改文件权限
修改文件权限的命令:chmod
数字方式修改文件权限:
文件权限分为三组,分别是:所有者的权限、所属组用户的权限、路人用户的权限。这里拿所有者用户的权限来举例:r
、w
、x
都表示1
,-
表示0
,例如rwx
二进制表示为111
,换算成十进制为7
;再例如--x
二进制表示为001
,换算成十进制为1
。
chmod 770 hw.txt
:表示将hw.txt
文件的三组权限修改为rwxrwx---
,二进制表示为111111000
,文字表述就是所有者、所属用户组用户具有对hw.txt
文件的所有权限,而路人用户对hw.txt
文件什么权限也没有。
# 查看"hw.txt"文件信息
fu@fu-virtual-machine:~$ ls -l | grep -E txt
-rw-rw-r-- 1 joker2 joker2 13 10月 30 14:43 hw.txt
# 修改"hw.txt"文件权限
fu@fu-virtual-machine:~$ sudo chmod 770 hw.txt
# 修改成功
fu@fu-virtual-machine:~$ ls -l | grep -E txt
-rwxrwx--- 1 joker2 joker2 13 10月 30 14:43 hw.txt
符号方式修改文件权限:
u
、g
、o
分别代表所有者、所属组用户、路人用户,+
、-
、=
分别表示加上权限
、减去权限
、赋值权限
,r
、w
、x
分别表示读权限
、写权限
、执行权限
。
chmod -R ugo-x test
:表示递归将test
目录的三组权限都撤消掉执行权限
(对于目录来说是访问权限
)。
# 递归展示"test"目录
fu@fu-virtual-machine:~$ ls -Rl | grep -Ew test
drwxrwxr-x 3 joker2 joker2 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 joker2 joker2 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 joker2 joker2 4096 10月 30 14:43 test
./test/test/test:
# 撤销"x"权限
fu@fu-virtual-machine:~$ sudo chmod -R ugo-x test
# 撤销成功,无法进入该目录,递归显示内容失败
fu@fu-virtual-machine:~$ ls -lR | grep -Ew test
ls: 无法访问 './test/test'drw-rw-r-- 3 joker2 joker2 4096 10月 30 14:43 test
./test:
: 权限不够
ls: 无法打开目录 './test/test': 权限不够
d????????? ? ? ? ? ? test
fu@fu-virtual-machine:~$ ls -l | grep -Ew test
drw-rw-r-- 3 joker2 joker2 4096 10月 30 14:43 test
fu@fu-virtual-machine:~$ cd test
# "cd"命令提示权限不足
bash: cd: test: 权限不够
chmod -R ugo+x test
:递归将test
目录的三组权限都授予执行权限
(对于目录来说就是访问权限
)。
# 显示"test"目录没有访问权限
fu@fu-virtual-machine:~$ ls -l | grep test
drw-rw-r-- 3 joker2 joker2 4096 10月 30 14:43 test
# 为"test"目录加上访问权限
fu@fu-virtual-machine:~$ sudo chmod -R ugo+x test
# 权限修改成功
fu@fu-virtual-machine:~$ ls -Rl | grep -Ew test
drwxrwxr-x 3 joker2 joker2 4096 10月 30 14:43 test
./test:
drwxrwxr-x 3 joker2 joker2 4096 10月 30 14:43 test
./test/test:
drwxrwxr-x 2 joker2 joker2 4096 10月 30 14:43 test
./test/test/test:
# 可以"cd"到"test"目录中了
fu@fu-virtual-machine:~$ cd test
fu@fu-virtual-machine:~/test$ pwd
/home/fu/test
chmod -R o=x test
:递归将test
目录的路人用户权限设置为x
,即路人用户只有访问权限。
# 递归显示"test"目录信息
fu@fu-virtual-machine:~/test$ ls -Rl | grep -Ew test
drwxrwxrwx 3 joker2 joker2 4096 10月 30 14:43 test
./test:
drwxrwxrwx 2 joker2 joker2 4096 10月 30 14:43 test
./test/test:
# 修改权限
fu@fu-virtual-machine:~/test$ sudo chmod -R o=x test
# 此时"fu"用户是一个路人用户,路人用户只有访问权限
# 所以无法通过"ls"目录查看目录结构
fu@fu-virtual-machine:~/test$ ls -l test
ls: 无法打开目录 'test': 权限不够
# 但是可以"cd"到目录里面
fu@fu-virtual-machine:~/test$ cd test
# 也无法对目录内的文件"增删改"
fu@fu-virtual-machine:~/test/test$ touch test.txt
touch: 无法创建 'test.txt': 权限不够