zoukankan      html  css  js  c++  java
  • 说说Linux文件权限那些事儿

    首先我们要知道Linux的标准文件权限和安全机制与Unix的一致。因此要学习这方面的知识,我们能够參考一下Unix方面的书籍。

    文件全部权

    在Linux系统中。一切都是文件。

    因此文件既包括普通文件也包括文件夹,下文也就不再区分文件和文件夹了。

    说到Linux文件权限(permission),我们不得不先说说文件的全部权问题。

    在Linux系统中,文件有两个全部者:用户全部者(u)和组全部者(g)。文件的组全部者独立于拥有该文件的用户。也就是说
    大多数情况下。文件全部者所在的用户组就是文件的组全部者,但这不是必须的。文件的用户全部者不一定属于文件的组全部者。这两者之间没有什么必定的联系。所以假设你赋予文件的组全部者某个权限,并不会同一时候赋予给用户全部者。假设想要实现此功能,最佳的方法就是将用户全部者加入到组全部者的成员中。

    显示文件的全部权

    使用ls -l能够显示文件的用户和组全部者:

        $ ls -l
        drwxr-xr-x 5 sun family  4096 Mar  4 11:33 dir2
        drwxr-xr-x 3 sun family  4096 Mar  4 11:40 dir3
        -rw-r--r-- 1 sun family   711 Mar  4 11:21 exp
        -rwxr-xr-x 1 sun family  5189 Mar  5 08:20 feb

    更改文件的全部权

    假设要更改文件到的全部权。能够使用chownchgrp命令。chown(大多数情况下。仅仅能使用root用户使用)能够更改一个或多个文件的用户全部者:

        # chown sun hello.c

    chgrp则能够用来改动文件或文件夹属于的用户组。

    文件的权限

    Linux对于文件的权限设置事实上是非常好理解的。拥有r权限,便能够读取文件。查看文件的内容;拥有w权限,便能够更改文件的内容;拥有x权限,并且该文件是二进制可运行文件那么就能够运行该文件。

    可是对于文件夹的话,就没有那么好理解了。假设用户拥有某文件夹的运行(x)权限,那么他就能够cd到该文件夹;假设要列出该文件夹下的文件(也就是使用ls命令)。那么就必须要有对文件夹的读(r)权限。假设您仅仅须要訪问该文件夹。那么您仅仅须要对该文件夹有x权限就够了。有一点须要强调的是,假设你使用ls -l命令显示文件夹下的文件的具体信息,可是你此时对该文件夹并没有运行权限。那么你将得到例如以下的结果:

        ?--------- ? ?

    ? ? ?

    hello.c ?

    --------- ? ? ?

    ? ? deb.txt ?--------- ? ? ? ? ? strip.c

    你会发现结果中仅仅显示了文件的名字。其它信息基本都是?

    。事实上这是由于文件的大小等信息须要从磁盘信息中才干推断出来,因此必须具有对文件夹的运行(x)权限,才干使-l选项真正发挥效果。

    另外另一点须要注意,删除文件不须要对文件具有写入(w)权限,仅仅须要对该文件夹具有写入(w)权限就可以。可是在这样的情况下,系统会提示你是否要覆盖对文件的写保护设置。

    改动文件的权限

    要改动文件的权限,能够使用chmod命令,注意不要与chown(改动文件的全部者)混淆。

    事实上我们能够这样区分:chown事实上是“change owner”(改变主人)的简写。而chmod事实上是“change mode”
    (改变(訪问)模式)的简写。

    用符号表示法改动

    要加入(使用“+”)用户全部者的写权限能够这样:

        $ chmod u+w hello.c

    要剥夺(使用“-”)组全部者的读权限能够这样:

        $ chmod g-r hello.c

    要设置用户全部者具有特定的权限能够使用“=”:

        $ chmod u=rw hello.c

    PS:须要说明的是,这里u代表用户全部者。g代表组全部者,o代表其它用户,a代表全部用户。

    用数字表示法改动

    在使用之前我们须要先理解一下数字表示法的原理。在数字表示法中,依据每种权限是否被许可,将其设置为0或1。并将得到的三位二进制数转换为八进制数。

    将这三个八进制数组合在一起便是该文件权限的数字表示。当中r相应的权值为4,w相应的权值为2,x相应的权值为1.

    用户 其它
    权限 r w x r - x r - -
    二进制 1 1 1 1 0 1 1 0 0
    八进制 7 5 4
    数字表示法 754

    看完这个表格我想你应该大致明确了,数字表示法的基本原理。以下让我们具体操作一下:

        $ chmod 754 hello.c

    数字表示法和符号表示法各有优劣,前者使用起来更加简洁,运行一条命令就能够完毕我们想要的结果。缺点是这样的表示法不直观令人费解;而后者非常直白。通俗易懂,可是运行起来效率不高,往往须要运行几条命令才干达到我们要的结果(假设你想要的结果复杂的话)。

    使用umask指定默认的文件权限

    讲完数字表示法,我们不得不提一下Linux文件管理中的一个重要的命令——umask命令。

    依据维基百科上的说法。umask是一串二进制码,使文件创建时权限具有一个初始值。当中曾这样做比喻,mask码就相当于一个最后的过滤器,每当文件创建时就剥除文件相应的权限。每当你创建了一个文件,系统会依据umask码自己主动为你设置文件的权限。

    当某个权限的二进制值为1时表示禁止该权限。举个样例来说,假如umask码为0022,在这里仅仅有后三位022是我们所须要的。第一位是为特殊权限设置,我们暂不讨论。

    当你创建文件夹exa时,系统中便会这样计算该文件夹的权限:777-022=755。对于文件来说,这一数字的最大值各自是6。系统不同意你在创建一个文本文件时就赋予它运行权限,必须在创建后用chmod命令添加这一权限。文件夹则同意设置运行权限。这样针对文件夹来 说。umask中各个数字最大能够到7。

        $ umask
        0022
        $ mkdir example
        $ ls -ld example/
        drwxr-xr-x 2 2014012537 xg+jsj14 4096 Mar 12 12:02 example/

    參考文献

    1. Robert Love.Linux系统编程。2014,5.人民邮电出版社
    2. Scott Grannerman.Linux命令速查手冊,2009.10.人民邮电出版社
    3. Aeleen Friscb.Unix与Linux系统管理,2006.11.清华大学出版社
    4. 维基百科-umask.https://en.wikipedia.org/wiki/Umask
    5. umask命令的作用

    知识共享许可协议
    本作品採用知识共享署名-非商业性使用-同样方式共享 4.0 国际许可协议进行许可。

  • 相关阅读:
    LeetCode OJ 107. Binary Tree Level Order Traversal II
    LeetCode OJ 116. Populating Next Right Pointers in Each Node
    LeetCode OJ 108. Convert Sorted Array to Binary Search Tree
    LeetCode OJ 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode OJ 98. Validate Binary Search Tree
    老程序员解Bug的通用套路
    转载 四年努力,梦归阿里,和大家聊聊成长感悟
    转载面试感悟----一名3年工作经验的程序员应该具备的技能
    Web Service和Servlet的区别
    关于spring xml文件中的xmlns,xsi:schemaLocation
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7277818.html
Copyright © 2011-2022 走看看