linux的文件属性
Linux系统中文件或目录属性主要包括:索引节点(inode)、文件类型、权限属性、链接数、修改时间等。可以通过命令ls -lih 来查看文件的基本信息。
[root@lt1 ~]# ls -lih
total 36K
264589 -rw-------.1 root root 1.1K Aug 2 07:15 anaconda-ks.cfg
各列解释:
第1列:inode索引节点编号(唯一性)。系统读取文件时首先通过文件名找到inode,然后才能读取到文件内容。
第2列:文件类型和属性(除.以外有9列,.号是和selinux相关的一个标识)。
第3列:硬链接的数量。
第4列:文件或目录的属主。Linux里面文件和程序的存在必须要有用户和满足相应的存在需求。
第5列:文件或目录属组
第6列:文件大小
第7、8、9列:文件或目录的修改时间(默认是月日 时分)
第10列:实际的文件名或目录名
1 索引节点inode
1.1 inode概述
inode位于li -lih打印信息的第一列,也就是上面的264589。inode的中文意思是索引节点(index node)。在每个linux存储设备或存储设备分区(存储设备是硬盘,软盘,u盘……)被格式化为ext4文件系统后,一般有两部分:第一部分是Inode(很多个),第二部分是Block(很多个)。
Block是用来存储实际数据的,例如:照片,视频等普通文件数据。
Inode用来存储数据属性信息(ls -l的结果),inode属性信息包括不限于文件大小,属主,归属用户组,文件权限,文件类型,修改实时间,还包含指向文件实体的指针功能(inode节点--block的对应关系),但是唯独不包含文件名。
1.2 查看inode信息
展示inode信息:
使用命令ls -i 查看inode
[root@lt1 ~]# ls -i /etc/hosts
130589 /etc/hosts
使用stat命令查看文件具体信息
[root@lt1 ~]# stat /etc/hosts
File: `/etc/hosts'
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 130589 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-09-16 08:22:49.578263441+0800
Modify: 2010-01-12 21:28:22.000000000+0800
Change: 2017-09-11 00:23:44.663863836+0800
1.3 inode的大小
CentOS5的inode默认大小事128字节,CentOS6的inode默认大小事256字节;inode的大小在分区被格式化创建文件系统之后定下来的,格式化以后就无法更改inode大小,格式化前可以通过参数指定inode的大小。
查看当前分区的inode大小:dumpe2fs /dev/sda1 | grep-i “inode size”
[root@lt1 ~]# dumpe2fs /dev/sda1 | grep-i "inode size" #<==boot分区
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
[root@lt1 ~]# dumpe2fs /dev/sda2 | grep-i "inode size" #<==swap分区,读不到
dumpe2fs 1.41.12 (17-May-2010)
dumpe2fs: Bad magic number insuper-block while trying to open /dev/sda2
[root@lt1 ~]# dumpe2fs /dev/sda3 | grep-i "inode size" #<==root分区
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
查看文件系统inode总量以及剩余量:df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 1166880 53768 1113112 5% /
tmpfs 125551 1 125550 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
磁盘空间是否满了,是由两项参数决定的:
第一个是inode是否满了,第二个是block是否满了,任何一项满了,都无法使用磁盘了。
磁盘满的特征:no space left on device
1.3 inode知识小结
1) 磁盘被分区并格式化为ext4文件系统后会生成一定数量的inode和block;
2) inode称为索引节点,他的作用是存放文件属性信息以及作为文件的索引(指向文件实体);
3) ext3/ext4文件系统的block存放的是文件的实际内容;
4) inode是磁盘的一块存储空间,CentOS6系列非启动分区inode默认大小256字节,CentOS5系列默认是128字节;
5) inode的表现形式是一串数字,同一块磁盘上,不同的文件对应的inode在文件系统里是唯一的;
6) inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口;
7) ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个block;
8) ext3/ext4文件系统下,正常情况一个文件占用且只能占用一个inode;
9) block是用来存储实际数据的,他的大小一般有1k,2k,4k几种,其中引导分区等为1K,其他普通分区多为4K(CentOS6);
10) 如果一个文件很大,可能占用多个block;如果文件很小,至少占用一个block,并且剩余空间浪费了,无法再存储其他数据;
11) inode大小和block大小查看。
[root@lt1 ~]# dumpe2fs /dev/sda3 | egrep -i"block count|inode count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count: 1166880
Block count: 4667136
Reserved block count: 233356
12) 查看inode的总量和使用量:df -i
13) 查看文件的inode:ls -li 或stat /etc/hosts
14) 如何生成和指定inode大小:mkfs.ext4-b 2048 -I 256 /dev/sdb
1.4 block知识小结
1)磁盘读取数据是按block为单位读取的;
2)一个文件可能占用多个block。但是每读取一个block就会消耗一次IO;
3)如果要提升磁盘IO性能,那么就要尽可能一次性读取数据量尽量多;
4)一个block只能存放一个文件的内容,无论内容大小。如果block默认是4K大小,那么存放一个1K的文件,剩余3K就不能存放别的文件了;
5)block并非越大越好。block太大对于小文件存放就会浪费磁盘空间;
6)大文件(大于16K)一般设置block大一点,小文件(小于1K)设置block小一点;
7)block太大例如4K,文件都是0.1K的,大量浪费磁盘空间;
8)block太小例如1K,文件都是1000K,消耗磁盘IO;
9)block的设置时格式化分区的时候,mkfs.ext4-b 2048 -I 256 /dev/sdb
10)ext3/ext4文件系统(CentOS5和6),一般设置为4K。(centos7文件系统是xfs)
2 文件类型
位于第二列第一个字符,即上文中的”-”。在linux系统中,一切皆为文件。文件类型好汉普通文件,目录,链接文件、块文件,字符文件,socket文件,管道文件。
文件类型和标识符 |
文件类型说明 |
d(directory) |
目录文件 |
-(regluar file) |
普通文件(纯文本文件,二进制文件等) |
l(link) |
符号链接文件,实际上它指向另一个文件 |
b(block) |
块设备和其他外围设备,是特殊类型的文件 |
c(charcter) |
字符设备文件 |
s(socket) |
socket文件 |
p(named pipe) |
管道文件 |
3 文件权限
位于第二列的后9位,即上文中的“rw-------”。其中前三位是文件所属用户的权限;中间三位是文件所属用户组的权限;后面三位是其他用户的权限。其中每一位可以用字符”r、w、x、-”表示,每位字符含义如下:
r:read,读,表示对文件拥有可读的权限,其对应数值是0
w:write ,写,表示对文件有可写的权限,其对应数值是2
x:执行,表示对文件有可执行的权限,其对应数值是1
-:没有权限,表示没有任何权限,其对应数值是0
4 链接文件
4.1 链接的概念
在linux系统中,链接可分为两种:一种为硬链接(Hard Link),另一种为软链接或符号链接(Sysbolic Link or softlink)。ln命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建的链接是硬链接。
如果使用ln -s创建链接则为软链接,前面文件类型为1(字母L)的是软链接。
硬链接:ln 源文件目标文件
软链接:ln -s 源文件目标文件(目标文件不能事先存在)
4.2 硬链接文件小结
1、具有相同inode号的多个文件时互为硬链接文件。
2、删除硬链接文件或者删除源文件任意之一,文件实体并未被删除。
3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
4、当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收。
5、硬链接文件就是文件的另一个入口。
6、可以通过给文件设置硬链接文件,来防止重要文件被误删。
7、通过执行命令“ln 源文件 硬链接文件”,即可完成创建硬链接
8、硬链接是普通文件,可以用rm命令删除。
9、对于静态文件,当对应硬链接数为0(i_link),文件就被删除。(ls -l结果第三列)
[root@lt1 oldboy]# echo hello > a
[root@lt1 oldboy]# ls -lih a
391976 -rw-r--r-- 1 root root 6 Sep 1623:04 a
[root@lt1 oldboy]# cat a
hello
[root@lt1 oldboy]# ln a b
[root@lt1 oldboy]# ls -lih a
391976 -rw-r--r-- 2 root root 6 Sep 1623:04 a
[root@lt1 oldboy]# cat b
hello
[root@lt1 oldboy]# rm -f a
[root@lt1 oldboy]# cat b > a
[root@lt1 oldboy]# cat a
hello
4.3 软链接小结(符号链接)
相当于windows下面的快捷方式,是一个指向文件。
软链接的创建:ln -s 源文件 目标文件
[root@lt1 test]# touch file
[root@lt1 test]# ln -s file softfile
[root@lt1 test]# ls -lih
total 0
391995 -rw-r--r-- 1 root root 0 Sep 1708:37 file
391996 lrwxrwxrwx 1 root root 4 Sep 1708:38 softfile -> file
1)软连接类似于windows的快捷方式。
2)软连接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
3)删除源文件,软连接文件依然存在,但是无法访问指定的源文件路径内容。
4)失效的时候一般是白字红底闪烁提示。
5)执行命令“ln -s 源文件软链接文件”,完成创建软连接(目标不能存在)。
6)软连接和源文件是不通类型的文件,也是不通的文件。inode号也不相同。
7)软链接文件类型为(l),删除软连接可以用rm命令。
4.4 有关目录的链接小结
对于目录,不能创建硬链接,但是能创建软链接;
目录的硬链接不能跨越文件系统;
每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接”..”;
在父目录里创建一个子目录,父目录的连接数增加1(每个子目录里都有..来指向父目录,但是在父目录里创建文件,父目录的链接数不会增加)
文件删除原理
删除文件条件:i_link和i_count为0
i_link(硬链接数量),为0,文件就被删除;
i_count(进程引用计数),为0,文件就被删除;
5 用户和组
ls -lih 的第4、5列
5.1 角色划分
对于linux系统来说,用户的角色是通过UID和GID识别的;特别是UID,在linux系统运维中,一个UID是唯一标识一个系统用户的账号(相当于我们的×××)。
超级用户:UID和GID都为0,默认root用户。(UID=0)
[root@lt1 logs]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash #<==分别为UID和GID
operator:x:11:0:operator:/root:/sbin/nologin
普通用户:一般是由系统管理员root的权限人员添加的。(UID=500~65535)
虚拟用户:给一些系统程序添加的傀儡角色(/sbin/nologin)(UID=2~499)
用户及用户组的配置文件
/etc/passwd #<==用户账户信息文件
[root@lt1 logs]# ls -l /etc/passwd
-rw-r--r--1 root root 1144 Sep 17 11:13 /etc/passwd
[root@lt1 logs]# tail -5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oldboy:x:501:501::/home/oldboy:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
/etc/shadow #<==管理用户密码的文件
[root@lt1 logs]# ls -l /etc/shadow
---------- 1 root root 846 Sep 17 11:13/etc/shadow
[root@lt1 logs]# head -1 /etc/shadow
root:$6$cNt2sw4LN7CdypLW$rWp1fo/ShgEKMgv6BATxkYRGp4sTrC4tGpYW6WjKZvfqFQ5TeYDWA2IQOIFQGRMMAmwVIRDijVZatIToF8NE2/:17379:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
/etc/group #<==组账户信息文件
/etc/gshadow #<==管理组用户密码文件
查看用户组信息
id user
6 时间属性
ls -lih 的第7、8、9列,表示文件的修改时间。
modify 修改时间-mtime 一般是修改文件内容后会变
change 改变时间-ctime 文件属性改变
access 访问时间 -atime 访问文件内容