zoukankan      html  css  js  c++  java
  • Linux文件权限与属性详解 之 一般权限

    Linux文件权限与属性详解 之 一般权限
    Linux文件权限与属性详解 之 ACL
    Linux文件权限与属性详解 之 SUID、SGID & SBIT
    Linux文件权限与属性详解 之 chattr & lsattr
    Linux文件权限与属性详解 之 su & sudo

    一般属性

    1. iNode: 3152621
      1). 何为iNode
      2). iNode内容
      3). iNode 大小
      4). iNode 号
    2. 文件类型
      1). 文件和目录
      2). 字符串设备和块设备文件:
      3). 链接文件
      4). socket文件
    3. 文件访问权限
    4. 链接数目:
    5. 文件所有者
    6. 文件所属组
    7. 文件大小
    8. 修改时间
    9. 文件名称

    Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

    对于文件或目录,除了具备一般的读写执行等普通属性(权限)外,其实还具备了很多的特殊属性(权限),下面听我慢慢道来!

    一般属性

    Linux的文件或目录属性主要包括:文件或目录的节点、种类、权限、链接数量、所有者和所属组、最近访问或修改的时间等内容;

    例如,我们可以使用 ls -alih

    [niesh@aat-sh aat-r1a]$ ls -alih
    total 116K
    1595625 drwxr-x---. 11 niesh niesh 4.0K Jul 26 15:40 .
    1575954 drwx------. 10 niesh niesh 4.0K Jul 26 15:40 ..
    1595627 -rw-r--r--.  1 niesh niesh  43K Jul 21 17:37 .13ca1a0c-b2e8-11e6-a60b-8b459dcd00e6
    3152621 -rwxr-xr-x.  1 niesh niesh  12K Jul 21 17:34 aat
    3152671 -rw-rw-r--.  1 niesh niesh  367 Jul 24 15:08 AAT.conf
    1600855 drwxr-xr-x. 17 niesh niesh 4.0K Jul 21 17:34 data
    3152663 drwxr-xr-x.  4 niesh niesh 4.0K Jul 21 17:34 license
    3151254 drwxrwxr-x. 15 niesh niesh 4.0K Jul 21 17:34 local
    3151228 drwxrwxr-x.  2 niesh niesh 4.0K Jul 24 14:19 log
    1575043 -rwxr-xr-x.  1 niesh niesh  12K Jul 24 15:42 .serviceaat
    [niesh@aat-sh aat-r1a]$
    

    以上总共对应了8段字符,每段字符的解释如下:

    1. iNode:节点,文件/目录在文件系统中对应的唯一值
    2. 文件类型:目录、文件还是其它
    3. 文件权限:不同用户对该文件所具备的权限
    4. 链接数目:硬链接数目
    5. 文件所有者:文件的主人
    6. 文件所属组:文件所属的组
    7. 文件大小
    8. 文件修改时间:文件最后的访问/修改时间
    9. 文件名

    此处,我们以 aat 为例进行解释:

    3152621 -rwxr-xr-x.  1 niesh niesh  12K Jul 21 17:34 aat
    

    1. iNode: 3152621

    1). 何为iNode

    顾名思义为索引节点.
    每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是 inode ,另一部份是 Block. Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件.

    2). iNode内容

    我们可以使用 stat aat 来查看aat文件的iNode的详细内容。

    [niesh@aat-sh aat-r1a]$ stat aat
    File: `aat'
    Size: 12046           Blocks: 24         IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 3152621     Links: 1
    Access: (0755/-rwxr-xr-x)  Uid: (  558/   niesh)   Gid: (  558/   niesh)
    Access: 2017-07-24 14:08:09.178005527 +0800
    Modify: 2017-07-21 17:34:14.773005438 +0800
    Change: 2017-07-21 17:37:05.799005438 +0800
    [niesh@aat-sh aat-r1a]$
    

    由以上信息可以看出,iNode包含如下信息:

    • 文件名
    • 文件大小(以字节为单位)
    • 文件数据的Block位置
    • 链接数
    • UID
    • GID
    • 文件的执行权限
    • 时间戳:atime(最近访问时间),ctime(状态改变时间),mtime(最近修改时间)

    3). iNode 大小

    iNode同样会占用硬盘空间, 所以硬盘格式化的时候,OS会自动分成两个区域:iNode区(存放iNode)和Block区(存放数据).
    一个iNode所占用空间的大小一般为128/256Byte,我们可以使用 df -i查看系统的iNode总量和使用情况,如下:

    niesh@server65:~$ df -ih|grep -v none
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    /dev/sda3         12M  111K   12M    1% /
    udev             3.0M   453  3.0M    1% /dev
    tmpfs            3.0M   597  3.0M    1% /run
    /dev/sda1        299K   298  298K    1% /boot
    

    查看一下iNode占用空间的大小,使用 dumpe2fs -ih /dev/sda1 | grep -i node进行查看:

    niesh@server65:~$ dumpe2fs -ih /dev/sda1 | grep -i node
    Inode size:          256
    

    4). iNode 号

    每个inode都有一个号码,Linux系统内部不使用文件名,而使用inode号来识别文件。对于系统来说,文件名只是inode号码便于识别的别称。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

    OS读取文件的流程

    iNode流程图2

    我们可以使用 ls -i命令查看文件/目录的iNode号

    [niesh@aat-sh aat-r1a]$ ls -il aat
    3152621 -rwxr-xr-x. 1 niesh niesh 12046 Jul 21 17:34 aat
    

    2. 文件类型

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。

    Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等

    可使用 file <file-name> 命令进行查看文件类型:

    [niesh@niesh Desktop]$ file other.py
    other.py: Python script, ASCII text executable
    

    1). 文件和目录

    我们使用 ls -lh 查看一下桌面文件:

    [niesh@niesh Desktop]$ ls -lh
    总用量 8.0K
    -rw-rw-r--. 1 niesh niesh 2.2K 7月  27 10:20 endian.c
    drwxr-xr-x. 2 root  root    70 6月  19 16:36 LN
    -rw-r--r--. 1 niesh niesh  115 6月  15 17:07 other.py
    

    查看第一个字符:

    - :普通文件(包括字符文件和二进制文件),可使用 touch <file-name进行创建;
    d : 目录文件,可使用 mkdir <dir-name>进行创建

    2). 字符串设备和块设备文件:

    我们去查看/dev目录下的文件,显示如下:

    [niesh@niesh ~]$ ls -lh /dev/
    crw--w----. 1 root tty       4,   0 6月  29 23:18 tty0
    brw-rw----+ 1 root cdrom    11,   0 6月  29 23:18 sr0
    

    c : 为字符串设备,若路由器等设备
    b : 块设备,若硬盘、光驱等

    3). 链接文件

    同样去查看/dev目录,我们发现了一些以l开头的文件,如下所示:

    [niesh@niesh ~]$ ls -lh /dev/
    lrwxrwxrwx. 1 root root          15 6月  29 23:18 stderr -> /proc/self/fd/2
    lrwxrwxrwx. 1 root root          15 6月  29 23:18 stdin -> /proc/self/fd/0
    lrwxrwxrwx. 1 root root          15 6月  29 23:18 stdout -> /proc/self/fd/1
    

    l : 为链接文件,具体请看第4小节目

    4). socket文件

    查看 /dev目录下的文件,会发现有s类型的文件,如下所示:

    [niesh@niesh ~]$ ll /dev/
    srw-rw-rw-. 1 root root           0 6月  29 23:18 log
    

    s:套接字文件,仅作了解即可

    3.文件访问权限

    Linux的访问权限分为 执行三种,可以使用 ls -l进行查看:

    [niesh@niesh Desktop]$ ls -lh
    总用量 8.0K
    -rw-rw-r--. 1 niesh niesh 2.2K 7月  27 10:20 endian.c
    drwxr-xr-x. 2 root  root    70 6月  19 16:36 LN
    

    r:可读(4)
    w:可写(2),对于目录来说表示可在目录中新建文件
    x:可执行(1),对于目录来说为可进入到该目录中
    -:表示无对应位上的权限

    仔细数一下,你会发现权限位总共有9位,每3位一组,那么这三组分别为何方神圣呢?(以 LN为例)

    第一组(rwx):表示文件所有者的权限,该文件的所有者为root,具备可读 可写 可执行的全部权限
    第二组(r-x):文件所属组的权限,具备可读 可执行
    第三组(r-x):其他人的权限(跟本文件无关的人),具备可读 可执行

    • 更改文件权限
      命令:chmod xxx < file-name >
      r=4, w=2, x=1
    [niesh@niesh Desktop]$ ls -lh
    -rw-rw-r--. 1 niesh niesh 2.2K 7月  27 10:20 endian.c
    [niesh@niesh Desktop]$ chmod 754 endian.c
    [niesh@niesh Desktop]$ ls -lh
    -rwxr-xr--. 1 niesh niesh   98 7月  27 10:34 endian.c
    

    4代表读权限,2代表写权限,1代表执行权限

    7=4+2+1,表示拥有可读可写可执行权限
    5=4+1,表示拥有可读可执行权限,但是没有写权限
    4 代表拥有可读权限
    0 代表没有任何权限
    以此类推

    4. 链接数目:

    对于一个文件来说,有唯一的索引接点与之对应,而对于一个索引接点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件。
    链接文件,是Linux中经常使用和非常重要的一个概念,Linux下,链接可以分为两类:

    • 软链接
      又称为符号链接,类似于Windows下的快捷方式,方便文件的查询等,只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理
      创建方式:ln -s source target
    • 硬链接
      硬链接相当于为本文件开设了一个新的文件,但两个文件执行同一个iNode,改变一个文件的内容另一个随之改变,相当于“连体婴”;两个文件时平权的,一个删除另一个照样可用
      创建方式:ln source target

    可以使用ls -l进行查看,如下:

    [niesh@niesh ~]$ ls -lh /dev/
    lrwxrwxrwx. 1 root root          15 6月  29 23:18 stderr -> /proc/self/fd/2
    lrwxrwxrwx. 1 root root          15 6月  29 23:18 stdin -> /proc/self/fd/0
    lrwxrwxrwx. 1 root root          15 6月  29 23:18 stdout -> /proc/self/fd/1
    

    目录,用于记录本目录下的文件名等信息,iNode本身不记录文件名,因此对文件的新增、删除、修改必须具备上层目录的 w(写) 权限。

    硬链接
    多个档名对应同一个inode,硬链接只是在某个目录下新增一笔档名链 接到某个inode号码的关联记录而已。如果将上图中任何一个档名删除,档案的inode与block都还存在,依然还可以通过另一个档名来读取正确的档 案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的inode和block中,因此均能进行数据的修改。

    软链接
    软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它link的那个档案的档名,由于只是作为指向的动作,所以当来源档案被删除之后,软连接的档案无法开启,因为找不到原始档名。连结档的内容只有档名,根据档名链接到正确的目录进一步取得目标档案的inode,最终就能够读取到正确的数据。如果目标档案的原始档名被删除了那么整个环节就进行不下去了。

    我们使用ls -l查看到的链接数目,其实就是有多少个文件/目录链接到本文件/目录;对文件而言比较容易理解;对目录而言,内部包含多少个子目录就有多少个链接文件(目录不允许用户创建软连接):

    [niesh@niesh ~]$ ll
    总用量 0
    drwxr-xr-x. 3 niesh niesh 77 7月  27 10:34 Desktop
    以上,Desktop有3个链接文件,为 . .. LN
    
    [niesh@niesh Desktop]$ ll
    总用量 20
    drwxr-xr-x.  3 niesh niesh    77 7月  27 10:34 .
    drwx------. 19 niesh niesh  4096 7月  27 13:51 ..
    drwxr-xr-x. 2 root  root    70 6月  19 16:36 LN
    
    [niesh@niesh Desktop]$ mkdir test
    我再建一个目录test
    [niesh@niesh Desktop]$ ll
    总用量 20
    drwxr-xr-x.  3 niesh niesh    77 7月  27 10:34 .
    drwx------. 19 niesh niesh  4096 7月  27 13:51 ..
    drwxr-xr-x. 2 root  root    70 6月  19 16:36 LN
    drwxrwxr-x.  2 niesh niesh     6 7月  27 13:54 test
    
    下面我们查看一下Desktop的链接数目:
    [niesh@niesh ~]$ ll
    drwxr-xr-x. 4 niesh niesh 88 7月  27 13:54 Desktop
    变为4个了,验证完毕
    

    5. 文件所有者

    即文件的拥有者,通常为文件的创建者。
    创建文件/目录有其默认的属性:

    文件:-rw-rw-rw- (666)
    目录:drwxdwxdwx (777)

    但实际上我们新建文件/目录后,查看属性,发现并不是以上默认值:

    [niesh@niesh Desktop]$ mkdir dir
    [niesh@niesh Desktop]$ touch file
    [niesh@niesh Desktop]$ ls -lh
    总用量 0
    drwxrwxr-x. 2 niesh niesh  6 7月  27 14:37 dir
    -rw-rw-r--. 1 niesh niesh  0 7月  27 14:37 file
    drwxr-xr-x. 2 root  root  70 6月  19 16:36 LN
    

    以上可以看出

    • 文件的权限为-rw-rw-r--
    • 目录的权限为drwxrwxr-x

    这是由于 umask 造成的

    [niesh@niesh Desktop]$ umask
    0002
    

    umask的默认值为0002,

    第一位为特殊权限(后面讲解),
    第二位为文件所有者权限,
    第三位为文件所属组权限
    第四位为其它人权限

    则用户创建后的权限为:

    文件权限: -rw-rw-rw- - -------w- = -rw-rw-r--
    目录权限:drwxdwxdwx - ----w--w- = dwrxrwxr-x

    当然你也可以自己更改:

    [niesh@niesh Desktop]$ umask 007
    [niesh@niesh Desktop]$ umask
    0007
    [niesh@niesh Desktop]$ touch aa
    [niesh@niesh Desktop]$ mkdir bb
    [niesh@niesh Desktop]$ ls -lh
    总用量 0
    -rw-rw----. 1 niesh niesh  0 7月  27 14:53 aa
    drwxrwx---. 2 niesh niesh  6 7月  27 14:53 bb
    drwxr-xr-x. 2 root  root  70 6月  19 16:36 LN
    [niesh@niesh Desktop]$
    

    你看,改了吧!

    • 更改文件所有者
      命令:chown username file|directory
    [niesh@niesh Desktop]$ ll
    总用量 0
    drwxr-xr-x. 2 root root 70 6月  19 16:36 LN
    
    [niesh@niesh Desktop]$ sudo chown niesh LN
    [sudo] password for niesh:
    
    [niesh@niesh Desktop]$ ll
    总用量 0
    drwxr-xr-x. 2 niesh root 70 6月  19 16:36 LN
    

    6. 文件所属组

    即文件的所属Group,其设置等方法类似文件所有者

    • 更改文件所属组
      命令:chgrp groupname file|directory
    [niesh@niesh Desktop]$ ll
    总用量 0
    drwxr-xr-x. 2 niesh root 70 6月  19 16:36 LN
    
    [niesh@niesh Desktop]$ chgrp niesh LN
    
    [niesh@niesh Desktop]$ ll
    总用量 0
    drwxr-xr-x. 2 niesh niesh 70 6月  19 16:36 LN
    [niesh@niesh Desktop]$
    

    7. 文件大小

    文件大小即文件锁占用的字节数,这对于文件来说很容易理解,但对于目录,需要清晰的知道目录是什么,占用空间的目的等。

    • 何为目录
      目录其实就是文件夹,是一组信息的集合,用于连接和包含各个文件名
    • 目录内容
      RedHat 默认的目录最小为4k,但我的CentOs是按照实际显示的
      你可以用 vim 来查看目录锁包含的内容
    [niesh@niesh Desktop]$ ll
    总用量 0
    drwxr-xr-x. 2 niesh niesh 70 7月  27 15:29 LN
    
    [niesh@niesh Desktop]$ ll LN/
    总用量 32
    -rwxr-xr-x. 1 root root 8976 6月  19 16:36 getlongopt
    -rwxrwxrwx. 1 root root 1578 6月  19 16:40 getlongopt.c
    -rwxrwxrwx. 1 root root 8734 6月  19 13:29 getopt
    -rwxrwxrwx. 1 root root 1237 6月  19 13:29 getopt.c
    
    [niesh@niesh Desktop]$ vim LN/
    

    mark
    看,里面是不是包含了所有的文件/目录名?
    里面的.swp文件为swap,请自行google.

    8. 修改时间

    一般,文件包括三个时间:

    • atime (access time)
      最近访问时间,即最近在社么时间访问了该文件
    • ctime (changed time)
      状态该表时间,即对文件的执行权限进行了修改的时间
    • mtime (modify time)
      修改时间,即最近什么时候对文件进行了修改

    PS: Linux没有创建时间的概念

    ls显示的时间为mtime
    另外,你可以使用 stat <file-name>查看文件的详细信息(上面已述)

    9. 文件名称

    这里只有一点需要注意:

    文件名前加 . 为隐藏文件


  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/Jimmy1988/p/7243699.html
Copyright © 2011-2022 走看看