鸟哥的Linux私房菜_基础版_学习笔记2:第六章 linux的文件权限与目录配置

第六章 linux的文件权限与目录配置
6.1、用户与用户组
1、文件拥有者
2、群组概念
3、其他人的概念
在Linux里面,任何一个文件都有“User,Group和Others”3种身份的个别权限。
技术分享
技术分享

我们以王三毛为例,王三毛这个『文件』的拥有者为王三毛,他属于王大毛这个群组, 而张小猪相对于王三毛,则只是一个『其他人(others)』而已。

不过,这里有个特殊的人物要来介绍的,那就是『万能的天神』!这个天神具有无限的神力, 所以他可以到达任何他想要去的地方,呵呵!那个人在Linux系统中的身份代号是『 root 』啦!所以要小心喔!那个root可是『万能的天神』喔

6.2、Linux文件权限概念
6.2.1、Linux文件属性
1、查看文件命令:$ ls
2、查看文件命令包括隐藏文件:$ ls -a
3、查看文件详细属性:$ ls -al
技术分享
[root@www ~]# ls -al
total 156
drwxr-x---   4    root   root     4096   Sep  8 14:06 .
drwxr-xr-x  23    root   root     4096   Sep  8 14:21 ..
-rw-------   1    root   root     1474   Sep  4 18:27 anaconda-ks.cfg
-rw-------   1    root   root      199   Sep  8 17:14 .bash_history
-rw-r--r--   1    root   root       24   Jan  6  2007 .bash_logout
-rw-r--r--   1    root   root      191   Jan  6  2007 .bash_profile
-rw-r--r--   1    root   root      176   Jan  6  2007 .bashrc
-rw-r--r--   1    root   root      100   Jan  6  2007 .cshrc
drwx------   3    root   root     4096   Sep  5 10:37 .gconf      <=范例说明处
drwx------   2    root   root     4096   Sep  5 14:09 .gconfd
-rw-r--r--   1    root   root    42304   Sep  4 18:26 install.log <=范例说明处
-rw-r--r--   1    root   root     5661   Sep  4 18:25 install.log.syslog
[    1   ][  2 ][   3  ][  4 ][    5   ][     6     ][       7          ]
[  权限  ][连结][拥有者][群组][文件容量][  修改日期 ][      檔名        ]


技术分享


你应该可以发现这一栏其实共有十个字符:(图2.1.1及图2.1.2内的权限并无关系)

技术分享
图2.1.2、文件的类型与权限之内容

技术分享
技术分享
  • 第一个字符代表这个文件是『目录、文件或链接文件等等』:

    • 当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
    • 当为[ - ]则是文件,例如上表档名为『install.log』那一行;
    • 若是[ l ]则表示为连结档(link file);
    • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

  • 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

    • 第一组为『文件拥有者的权限』,以『install.log』那个文件为例, 该文件的拥有者可以读写,但不可执行;
    • 第二组为『同群组的权限』;
    • 第三组为『其他非本群组的权限
    • 第二栏表示有多少档名连结到此节点(i-node):

    每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了。 关于i-node的相关数据我们会在第八章谈到文件系统时再加强介绍的。

    • 第三栏表示这个文件(或目录)的『拥有者账号』
    • 第四栏表示这个文件的所属群组

    在Linux系统下,你的账号会附属于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如图2.1.2所示(-rwxrwx---), 则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。 但如果是不属于projecta的其他账号,对于此文件就不具有任何权限了。

    • 第五栏为这个文件的容量大小,默认单位为bytes;
    • 第六栏为这个文件的建档日期或者是最近的修改日期:
    • 第七栏为这个文件的档名

    这个字段就是档名了。比较特殊的是:如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』,例如上表中的.gconf那一行,该文件就是隐藏档。 你可以使用『ls』及『ls -a』这两个指令去感受一下什么是隐藏档啰!

    6.2.2如何改变文件属性与权限

    chgrp :改变文件所属群组

    chown :改变文件拥有者

    chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

     

    改变所属群组, chgrp

    假设你已经知道在/etc/group里面已经存在一个名为users的群组,但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为userstesting分别会有什么现象发生呢?

    [root@www ~]# chgrp [-R] dirname/filename ...
    选项与参数:
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录
         都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
    范例:
    [root@www ~]# chgrp users install.log
    [root@www ~]# ls -l
    -rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
    [root@www ~]# chgrp testing install.log
    chgrp: invalid group name `testing‘ <== 发生错误讯息啰~找不到这个群组名~

    改变文件拥有者, chown

    要注意的是,用户必须是已经存在系统中的账号,也就是在/etc/passwd这个文件中有纪录的用户名称才能改变。

    此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上-R的选项即可!

    [root@www ~]# chown [-R] 账号名称 文件或目录
    [root@www ~]# chown [-R] 账号名称:组名 文件或目录
    选项与参数:
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
    
    范例:将install.log的拥有者改为bin这个账号:
    [root@www ~]# chown bin install.log
    [root@www ~]# ls -l
    -rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
    
    范例:将install.log的拥有者与群组改回为root:
    [root@www ~]# chown root:root install.log
    [root@www ~]# ls -l
    -rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

    可以同时改变拥有者和群组。


    改变权限, chmod

    [root@www ~]# chmod [-R] xyz 文件或目录
    选项与参数:
    xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
    -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

    举例来说,如果要将.bashrc这个文件所有的权限都设定启用,那么就下达: 

    [root@www ~]# ls -al .bashrc
    -rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
    [root@www ~]# chmod 777 .bashrc
    [root@www ~]# ls -al .bashrc
    -rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

    符号类型改变文件权限

    基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外,a则代表 all 亦即全部的身份!

    chmod u
    g
    o
    a
    +(加入)
    -(除去)
    =(设定)
    r
    w
    x
    文件或目录
    [root@www ~]# ls -al .bashrc
    -rwxr-xr-x  1 root root 395 Jul  4 11:45 .bashrc
    [root@www ~]# chmod  a+w  .bashrc
    [root@www ~]# ls -al .bashrc
    -rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
    

    而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:

    [root@www ~]# chmod  a-x  .bashrc
    [root@www ~]# ls -al .bashrc
    -rw-rw-rw-  1 root root 395 Jul  4 11:45 .bashrc

    6.2.3目录与文件之权限意义:

    权限对文件的重要性

    r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;

    w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件)

    x (execute):该文件具有可以被系统执行的权限。

     

    6.2.4 Linux文件种类与扩展名

    文件种类:

    第一个字符为文件的类型。除了常见的一般文件(-)与目录文件(d)之外,还有哪些种类的文件类型呢?

    (1)正规文件(regular file )

    就是一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字符为 [ - ],例如 [-rwxrwxrwx ]。另外,依照文件的内容,又大略可以分为:纯文本档(ASCII);二进制文件(binary);数据格式文件(data)

    (2)目录(directory)

    就是目录啰~第一个属性为 [ d ],例如 [drwxrwxrwx]

    (3)连结档(link)

    就是类似Windows系统底下的快捷方式啦!第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] 

    (4)设备与装置文件(device)
    与系统周边及储存等相关的一些文件,通常都集中在/dev这个目录之下!通常又分为两种:

    区块(block)设备档:会发现第一个属性为[ b ]喔!

    字符(character)设备文件:亦即是一些串行端口的接口设备,第一个属性为 [ c ]

    (5)数据接口文件(sockets)

    既然被称为数据接口文件,想当然尔,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求,而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ]最常在/var/run这个目录中看到这种文件类型了。

    (6)数据输送文件(FIFO, pipe)
    FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFOfirst-in-first-out的缩写。第一个属性为[p]

    6.3目录树(directory tree)

    技术分享
    图3.2.1、目录树架构示意图


    郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。