2021-10-30 Ubuntu文件权限

文件权限

        先观察一下文件和目录的详细信息:

# 查看文件和目录
fu@fu-virtual-machine:~$ ls -lh | grep -E [a-z]$
-rw-rw-r-- 1 fu fu   13 1030 14:43 hw.txt
drwxrwxr-x 3 fu fu 4.0K 1030 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 1030 14:43 hw.txt
drwxrwxr-x 3 fu fu 4.0K 1030 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 1030 14:43 hw.txt
drwxrwxr-x 3 fu fu     4.0K 1030 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 1030 14:43 hw.txt

# 可观察到,所属用户组均为"fu"用户组
drwxrwxr-x 3 fu fu     4096 1030 14:43 test
./test:
drwxrwxr-x 3 fu fu 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 fu fu 4096 1030 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 1030 14:43 hw.txt

# 可观察到,所有文件的所属用户组均为"joker1"用户组
drwxrwxr-x 3 fu joker1 4096 1030 14:43 test
./test:
drwxrwxr-x 3 fu joker1 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 fu joker1 4096 1030 14:43 test
./test/test/test:

        改变文件所有者的命令为:chownchown可以在改变文件所有者的同时捎带上修改文件的所属用户组。

        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 1030 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 1030 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 1030 14:43 test
./test:
drwxrwxr-x 3 fu joker1 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 fu joker1 4096 1030 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 1030 14:43 test
./test:
drwxrwxr-x 3 joker1 joker1 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 joker1 joker1 4096 1030 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 1030 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 1030 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 1030 14:43 test
./test:
drwxrwxr-x 3 joker1 joker1 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 joker1 joker1 4096 1030 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 1030 14:43 test
./test:
drwxrwxr-x 3 joker2 joker2 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 joker2 joker2 4096 1030 14:43 test
./test/test/test:

        (2)修改文件权限
        修改文件权限的命令:chmod

        数字方式修改文件权限:
        文件权限分为三组,分别是:所有者的权限、所属组用户的权限、路人用户的权限。这里拿所有者用户的权限来举例:rwx都表示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 1030 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 1030 14:43 hw.txt

        符号方式修改文件权限:
        ugo分别代表所有者、所属组用户、路人用户,+-=分别表示加上权限减去权限赋值权限rwx分别表示读权限写权限执行权限

        chmod -R ugo-x test:表示递归将test目录的三组权限都撤消掉执行权限(对于目录来说是访问权限)。

# 递归展示"test"目录
fu@fu-virtual-machine:~$ ls -Rl | grep -Ew test
drwxrwxr-x 3 joker2 joker2 4096 1030 14:43 test
./test:
drwxrwxr-x 3 joker2 joker2 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 joker2 joker2 4096 1030 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 1030 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 1030 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 1030 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 1030 14:43 test
./test:
drwxrwxr-x 3 joker2 joker2 4096 1030 14:43 test
./test/test:
drwxrwxr-x 2 joker2 joker2 4096 1030 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 1030 14:43 test
./test:
drwxrwxrwx 2 joker2 joker2 4096 1030 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': 权限不够

猜你喜欢

转载自blog.csdn.net/D___H/article/details/121050944