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. 文件名称

    这里只有一点需要注意:

    文件名前加 . 为隐藏文件


  • 相关阅读:
    年终总结-致敬2014
    NCover的安装和使用-NUnit
    某大型银行深化系统之二:设计策略
    某大型银行深化系统之一:平台技术
    自己动手写Web容器之TomJetty之五:包装请求参数
    robot framework环境搭建
    解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题
    robotframework中文显示乱码
    RF常用快捷键
    抓包工具Fidder移动端HTTP请求抓包详解
  • 原文地址:https://www.cnblogs.com/Jimmy1988/p/7243699.html
Copyright © 2011-2022 走看看