Linux学习之路(一):关于文件权限的学习

来源:互联网 发布:查看80端口是否被占用 编辑:程序博客网 时间:2024/06/06 00:02

在《鸟哥的Linux私房菜》一书中,有这样一段

例题:

如果我的目录为底下的样式,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?
    drwxr-xr--   1 test1    testgroup    5238 Jun 19 10:25 groups/
答:
  • 文件拥有者test1[rwx]可以在本目录中进行任何工作;
  • 而testgroup这个群组[r-x]的账号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
  • 至于other的权限中[r--]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!
对于“至于other的权限中[r--]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!”这句话,我不是很理解,继续看书,发现后面有详细的讲解
  • 权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x (execute):该文件具有可以被系统执行的权限。

那个可读(r)代表读取文件内容是还好了解,那么可执行(x)呢?这里你就必须要小心啦! 因为在Windows底下一个文件是否具有执行的能力是藉由『 扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的

至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对『文件的内容』而言,与文件档名的存在与否没有关系喔!因为文件记录的是实际的数据嘛!


  • 权限对目录的重要性

文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?

  • r (read contents in directory)

    表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

  • w (modify contents of directory)

    这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:

    • 建立新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何!)
    • 将已存在的文件或目录进行更名;
    • 搬移该目录内的文件、目录位置。

    总之,目录的w权限就与该目录底下的文件名异动有关就对了啦!

  • x (access directory)

    咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰!
  • 先用root的身份建立所需要的文件与目录环境

我们用root的身份在所有人都可以工作的/tmp目录中建立一个名为testing的目录, 该目录的权限为744且目录拥有者为root。另外,在testing目录下在建立一个空的文件, 档名亦为testing。建立目录可用mkdir(make directory),建立空文件可用touch(下一章会说明)来处理。 所以过程如下所示:

[root@www ~]# cd /tmp                     <==切换工作目录到/tmp[root@www tmp]# mkdir testing             <==建立新目录[root@www tmp]# chmod 744 testing         <==变更权限[root@www tmp]# touch testing/testing     <==建立空的文件[root@www tmp]# chmod 600 testing/testing <==变更权限[root@www tmp]# ls -ald testing testing/testingdrwxr--r-- 2 root root 4096 Sep 19 16:01 testing-rw------- 1 root root    0 Sep 19 16:01 testing/testing# 仔细看一下,目录的权限是 744 ,且所属群组与使用者均是 root 喔!# 那么在这样的情况底下,一般身份用户对这个目录/文件的权限为何?
  • 一般用户的读写权限为何?观察中

在上面的例子中,虽然目录是744的权限设定,一般用户应该能有 r 的权限, 但这样的权限使用者能做啥事呢?假设鸟哥的系统中含有一个账号名为 vbird 的, 我们可以透过『 su - vbird 』这个指令来变换身份喔!看看底下的操作先!

[root@www tmp]# su - vbird <==切换身份成为 vbird 啰![vbird@www ~]$ cd /tmp     <==看一下,身份变了喔!提示字符也变成 $ 了![vbird@www tmp]$ ls -l testing/?--------- ? ? ? ?             ? testing# 因为具有 r 的权限可以查询档名。不过权限不足(没有x),所以会有一堆问号。[vbird@www tmp]$ cd testing/-bash: cd: testing/: Permission denied# 因为不具有 x ,所以当然没有进入的权限啦!有没有呼应前面的权限说明啊!
  • 如果该目录属于用户本身,会有什么状况?

上面的练习我们知道了只有r确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到的, 同时也不能将该目录变成工作目录(用 cd 进入该目录之意)。那如果我们让该目录变成用户的, 那么用户在这个目录底下是否能够删除文件呢?底下的练习做看看:

[vbird@www tmp]$ exit               <==让 vbird 变回原本的 root 身份喔![root@www tmp]# chown vbird testing <==修改权限,让vbird拥有此目录[root@www tmp]# su - vbird          <==再次变成vbird来操作[vbird@www ~]$ cd /tmp/testing      <==可以进入目录了呢![vbird@www testing]$ ls -l-rw------- 1 root root 0 Sep 19 16:01 testing  <==文件不是vbird的![vbird@www testing]$ rm testing     <==尝试刪除这个文件看看!rm: remove write-protected regular empty file `testing'? y# 竟然可以删除!这样理解了吗?!

透过上面这个简单的步骤,你就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建文件或目录, 是个很重要的参数啊!这样可以理解了吗?! ^_^


0 0
原创粉丝点击