zoukankan      html  css  js  c++  java
  • Linux学习笔记:Linux命令之权限管理命令

    权限管理命令

    chmod(重要)

    • 命令名称:chmod
    • 英文原意:change the permissions mode of a file
    • 执行权限:所有用户
    • 功能描述:改变文件或目录权限
    • 语法:chmod [{ugoa}{+-=}{rwxX}] [文件或目录] [mode=421] [文件或目录]
    • -R:递归修改
    • u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
    • + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
    • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
    • 关于mode,用数字来表示权限
      • r ---- 4
      • w ---- 2
      • x ---- 1
      • 所以`rwxrw-r--`对应的是764
      • image-20210510190713527
        image-20210510190713527

    例子1:

    1root@atomy-virtual-machine:/tmp# ls -l linuxstudy.list 
    2-rw-r--r-- 1 root root 0 5月  10 18:53 linuxstudy.list
    3root@atomy-virtual-machine:/tmp# chmod u+x linuxstudy.list 
    4root@atomy-virtual-machine:/tmp# ls -l linuxstudy.list 
    5-rwxr--r-- 1 root root 0 5月  10 18:53 linuxstudy.list

    上述例子中我们用chmod u+x linuxstudy.list语句修改了linuxstudy.list文件的权限,其含义是赋予该文件的拥有者执行权限。

    例子2:

    1root@atomy-virtual-machine:/tmp# chmod g+w,o-r linuxstudy.list 
    2root@atomy-virtual-machine:/tmp# ls -l linuxstudy.list 
    3-rwxrw---- 1 root root 0 5月  10 18:53 linuxstudy.list

    可以同时修改多个权限,用逗号分隔即可。上述语句令用户组拥有写的权限,去除了其他人读的权限。

    例子3:

    1root@atomy-virtual-machine:/tmp# chmod g=rwx linuxstudy.list 
    2root@atomy-virtual-machine:/tmp# ls -l linuxstudy.list 
    3-rwxrwx--- 1 root root 0 5月  10 18:53 linuxstudy.list

    我们也可以直接用=来赋予权限!

    不过,我们在实际操作中用的最多的并不是这种方式,而是用数字来表示。

    例子4:

    1root@atomy-virtual-machine:/tmp# chmod 640 linuxstudy.list 
    2root@atomy-virtual-machine:/tmp# ls -l linuxstudy.list 
    3-rw-r----- 1 root root 0 5月  10 18:53 linuxstudy.list

    640代表要将权限修改为rw-r-----

    例子5:关于-R,递归修改权限的操作

    创建一个递归的文件夹,两个文件夹a和b的权限如下:

    1root@atomy-virtual-machine:/tmp# mkdir -p /tmp/a/b
    2root@atomy-virtual-machine:/tmp# ls -ld /tmp/a
    3drwxr-xr-x 3 root root 4096 5月  10 19:12 /tmp/a
    4root@atomy-virtual-machine:/tmp# ls -ld /tmp/a/b
    5drwxr-xr-x 2 root root 4096 5月  10 19:12 /tmp/a/b

    修改文件夹a的权限,然后查看两者的权限:

    1root@atomy-virtual-machine:/tmp# chmod 777 /tmp/a
    2root@atomy-virtual-machine:/tmp# ls -ld /tmp/a
    3drwxrwxrwx 3 root root 4096 5月  10 19:12 /tmp/a
    4root@atomy-virtual-machine:/tmp# ls -ld /tmp/a/b
    5drwxr-xr-x 2 root root 4096 5月  10 19:12 /tmp/a/b

    可以发现我们只改变了文件夹a的权限,文件夹b的权限没有变化。如果我们有一个需要,改版一个目录权限时,该目录下的文件也随着改变。我们将其权限改为766试试:

    1root@atomy-virtual-machine:/tmp# chmod -R 766 /tmp/a
    2root@atomy-virtual-machine:/tmp# ls -ld /tmp/a
    3drwxrw-rw- 3 root root 4096 5月  10 19:12 /tmp/a
    4root@atomy-virtual-machine:/tmp# ls -ld /tmp/a/b
    5drwxrw-rw- 2 root root 4096 5月  10 19:12 /tmp/a/b

    关于rwx权限的补充

    权限 对于文件 对于目录
    r——读权限 可以查看文件内容 可以列出目录中的内容
    w——写权限 可以修改文件内容 可以在目录中创建、删除文件
    x——执行权限 可以执行文件· 可以进入目录

    特别注意w权限,举个例子:

    一个目录的权限是777,该目录下一个文件的权限是700,那么创建了一个同组用户,能否删除这个文件?

    答案是可以的!

    因为对于文件来说,w权限只是针对修改文件内容,而删除文件的权限在目录中!

    所以,题目提到目录权限是777,不管文件是什么权限,都可以被删除。

    chown

    • 命令名称:chown
    • 英文原意:change file ownership
    • 执行权限:所有用户
    • 功能描述:改变文件或目录的所有者
    • 语法:chown [用户] [文件或目录]

    以下实例来自菜鸟教程

    把 /var/run/httpd.pid 的所有者设置 root:

    1chown root /var/run/httpd.pid

    将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :

    1chown runoob:runoobgroup file1.txt

    将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:

    1chown -R runoob:runoobgroup *

    把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:

    1chown :512 /home/runoob

    chgrp

    • 命令名称:chgrp
    • 英文原意:change file group ownership
    • 执行权限:所有用户
    • 功能描述:改变文件或目录的所属组
    • 语法:chgrp [用户组] [文件或目录]
    • 选项:
    • -v或--verbose  显示指令执行过程。
    • -c或--changes 效果类似"-v"参数,但仅回报更改的部分。
    • -f或--quiet或--silent  不显示错误信息。
    • -R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
    • -h或--no-dereference  只对符号连接的文件作修改,而不更动其他任何相关文件。

    与chown命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。

    实例1:改变文件的群组属性

    命令:

    chgrp -v bin log2012.log

    输出:

     1[root@localhost test]ll
    2
    3---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
    4
    5[root@localhost test]chgrp -v bin log2012.log
    6
    7log2012.log” 的所属组已更改为 bin
    8
    9[root@localhost test]ll
    10
    11---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log

    说明:

    将log2012.log文件由root群组改为bin群组

    实例2:根据指定文件改变文件的群组属性

    命令:

    chgrp --reference=log2012.log log2013.log

    输出:

     1[root@localhost test]# ll
    2
    3---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
    4
    5-rw-r--r-- 1 root root   61 11-13 06:03 log2013.log
    6
    7[root@localhost test]# chgrp --reference=log2012.log log2013.log 
    8
    9[root@localhost test]# ll
    10
    11---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
    12
    13-rw-r--r-- 1 root bin   61 11-13 06:03 log2013.log

    说明:

    改变文件log2013.log 的群组属性,使得文件log2013.log的群组属性和参考文件log2012.log的群组属性相同

    实例3:改变指定目录以及其子目录下的所有文件的群组属性

    命令:

    输出:

     1[root@localhost test]ll
    2drwxr-xr-x 2 root root  4096 11-30 08:39 test6
    3[root@localhost test]cd test6
    4[root@localhost test6]ll
    5---xr--r-- 1 root root 302108 11-30 08:39 linklog.log
    6---xr--r-- 1 root root 302108 11-30 08:39 log2012.log
    7-rw-r--r-- 1 root root   61 11-30 08:39 log2013.log
    8-rw-r--r-- 1 root root   0 11-30 08:39 log2014.log
    9-rw-r--r-- 1 root root   0 11-30 08:39 log2015.log
    10-rw-r--r-- 1 root root   0 11-30 08:39 log2016.log
    11-rw-r--r-- 1 root root   0 11-30 08:39 log2017.log
    12[root@localhost test6]cd ..
    13[root@localhost test]chgrp -R bin test6
    14[root@localhost test]cd test6
    15[root@localhost test6]ll
    16---xr--r-- 1 root bin 302108 11-30 08:39 linklog.log
    17---xr--r-- 1 root bin 302108 11-30 08:39 log2012.log
    18-rw-r--r-- 1 root bin   61 11-30 08:39 log2013.log
    19-rw-r--r-- 1 root bin   0 11-30 08:39 log2014.log
    20-rw-r--r-- 1 root bin   0 11-30 08:39 log2015.log
    21-rw-r--r-- 1 root bin   0 11-30 08:39 log2016.log
    22-rw-r--r-- 1 root bin   0 11-30 08:39 log2017.log
    23[root@localhost test6]cd ..
    24[root@localhost test]ll
    25drwxr-xr-x 2 root bin  4096 11-30 08:39 test6
    26[root@localhost test]#

    说明:

    改变指定目录以及其子目录下的所有文件的群组属性

    实例4:通过群组识别码改变文件群组属性

    命令:

    chgrp -R 100 test6

    输出:

     1[root@localhost test]chgrp -R 100 test6
    2
    3[root@localhost test]ll
    4
    5drwxr-xr-x 2 root users  4096 11-30 08:39 test6
    6
    7[root@localhost test]cd test6
    8
    9[root@localhost test6]ll
    10
    11---xr--r-- 1 root users 302108 11-30 08:39 linklog.log
    12
    13---xr--r-- 1 root users 302108 11-30 08:39 log2012.log
    14
    15-rw-r--r-- 1 root users   61 11-30 08:39 log2013.log
    16
    17-rw-r--r-- 1 root users   0 11-30 08:39 log2014.log
    18
    19-rw-r--r-- 1 root users   0 11-30 08:39 log2015.log
    20
    21-rw-r--r-- 1 root users   0 11-30 08:39 log2016.log
    22
    23-rw-r--r-- 1 root users   0 11-30 08:39 log2017.log
    24
    25[root@localhost test6]#

    说明:

    通过群组识别码改变文件群组属性,100为users群组的识别码,具体群组和群组识别码可以去/etc/group文件中查看

    umask默认权限

    概述

    当我们新建一个文件或者文件夹时,系统都会默认设置权限,默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644,建立的目录的默认权限是755,可以通过建立一个文件和文件夹通过ls -l验证。

    当我们登录系统之后创建一个文件是会有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

    语法

    1umask [-S][权限掩码]
    • -S  以文字的方式来表示权限掩码。

    使用指令"umask"查看当前权限掩码,则输入下面的命令:

    1umask

    执行上面的指令后,输出信息如下:

    10022

    接下来,使用指令"mkdir"创建一个目录,并使用指令"ls"获取该目录的详细信息,输入命令如下:

    1mkdir test1 
    2ls –d –l test1/

    得到结果显示,该文件夹的权限为drwxr-xr-x。即755。

    umask计算权限

    对于文件和目录来说, 最大的权限其实都是777,但是执行权限对于文件来说是很危险的,而对目录来说执行权限是个基本权限。所以默认目录的最大权限是777,而文件的默认最大权限就是666。

    对于root用户的umask=022这个来说,777权限二进制码就是(111)(111)(111),022权限二进制码为(000)(010)(010)。

    • 所有权限二进制的1:代表有这个权限
    • umask二进制1:代表要去掉这个权限,不管你原来有没有权限,你最终一定没有这个权限。
    • umask二进制的0:代表我不关心对应位的权限,你原来有权限就有权限,没有就没有, 我不影响你。

    umask为022的目录默认权限计算方法

    所有者 r 所有者 w 所有者 x 所在组 r 所在组 w 所在组 x 其他 r 其他 w 其他 x
    所有权限777 1 1 1 1 1 1 1 1 1
    umask掩码022 0 0 0 0 1 0 0 1 0
    计算后的值 1 1 1 1 0 1 1 0 1

    umask为022的文件默认权限计算方法

    所有者 r 所有者 w 所有者 x 所在组 r 所在组 w 所在组 x 其他 r 其他 w 其他 x
    所有权限666 1 1 0 1 1 0 1 1 0
    umask掩码022 0 0 0 0 1 0 0 1 0
    计算后的值 1 1 0 1 0 0 1 0 0

    umask为023的目录默认权限计算方法

    所有者 r 所有者 w 所有者 x 所在组 r 所在组 w 所在组 x 其他 r 其他 w 其他 x
    所有权限777 1 1 1 1 1 1 1 1 1
    umask掩码023 0 0 0 0 1 0 0 1 1
    计算后的值 1 1 1 1 0 1 1 0 0

    umask为023的文件默认权限计算方法

    所有者 r 所有者 w 所有者 x 所在组 r 所在组 w 所在组 x 其他 r 其他 w 其他 x
    所有权限666 1 1 0 1 1 0 1 1 0
    umask掩码023 0 0 0 0 1 0 0 1 1
    计算后的值 1 1 0 1 0 0 1 0 0

    上面就是一个umask的正常计算过程,但是这样实在是太麻烦了。我们使用如下的简单的方法快速计算。

    • 对于目录,直接使用777-umask即可,就得到了最终结果。
    • 对于文件,先使用666-umask。
    • 如果对应位上为偶数:最终权限就是这个偶数值。
    • 如果上面的对应为上有奇数,就对应位+1。

    上面的这个方法计算是非常方便的, 为何得到奇数要+1呢。

    文件的最大权限是666,都是偶数,你得到奇数,说明umask有奇数,读为4,写为2,都是偶数,说明你有执行权限的。

    就按照上面的umask=023为例,在计算其他用户权限的时候6-3=3 ,6是读写,3是写和执行,其实应该是读写权限减去读权限的得到写权限的,相当于我们多减去了一个执行权限。所以结果加1。

  • 相关阅读:
    客户端用mstsc不能用一台设备连接终端服务器的解决办法
    [转]知识管理ABC
    Visual Studio常用小技巧[备忘]
    一套外企的数据库设计面试题
    MSDN中的图形元素和文档约定[备忘]
    设计模式概述
    ASP.Net 4.0中新增加的23项功能[转]
    Dreamweaver 8 的相关使用
    浅谈ThreadPool 线程池
    C#委托的异步调用[学习]
  • 原文地址:https://www.cnblogs.com/kylinxxx/p/14794245.html
Copyright © 2011-2022 走看看