Linux文件权限与属性详解 之 一般权限
Linux文件权限与属性详解 之 ACL
Linux文件权限与属性详解 之 SUID、SGID & SBIT
Linux文件权限与属性详解 之 chattr & lsattr
Linux文件权限与属性详解 之 su & sudo
一般属性
- iNode: 3152621
1). 何为iNode
2). iNode内容
3). iNode 大小
4). iNode 号 - 文件类型
1). 文件和目录
2). 字符串设备和块设备文件:
3). 链接文件
4). socket文件 - 文件访问权限
- 链接数目:
- 文件所有者
- 文件所属组
- 文件大小
- 修改时间
- 文件名称
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段字符,每段字符的解释如下:
- iNode:节点,文件/目录在文件系统中对应的唯一值
- 文件类型:目录、文件还是其它
- 文件权限:不同用户对该文件所具备的权限
- 链接数目:硬链接数目
- 文件所有者:文件的主人
- 文件所属组:文件所属的组
- 文件大小:
- 文件修改时间:文件最后的访问/修改时间
- 文件名:
此处,我们以 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,读出数据。
我们可以使用 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/
看,里面是不是包含了所有的文件/目录名?
里面的.swp
文件为swap,请自行google.
8. 修改时间
一般,文件包括三个时间:
- atime (access time):
最近访问时间,即最近在社么时间访问了该文件- ctime (changed time):
状态该表时间,即对文件的执行权限进行了修改的时间- mtime (modify time):
修改时间,即最近什么时候对文件进行了修改
PS: Linux没有创建时间的概念
ls
显示的时间为mtime
另外,你可以使用 stat <file-name>
查看文件的详细信息(上面已述)
9. 文件名称
这里只有一点需要注意:
文件名前加
.
为隐藏文件