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

这里只有一点需要注意:

文件名前加 . 为隐藏文件


posted @ 2017-07-28 13:49  Jimmy_Nie  阅读(30684)  评论(2编辑  收藏  举报