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列:文件大小

  • 789列:文件或目录的修改时间(默认是月 时分)

  • 10列:实际的文件名或目录名

1      索引节点inode

1.1 inode概述

    inode位于li -lih打印信息的第一列,也就是上面的264589inode的中文意思是索引节点(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的大小

CentOS5inode默认大小事128字节,CentOS6inode默认大小事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文件系统后会生成一定数量的inodeblock

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,其他普通分区多为4KCentOS6);

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就不能存放别的文件了;

5block并非越大越好。block太大对于小文件存放就会浪费磁盘空间;

6)大文件(大于16K)一般设置block大一点,小文件(小于1K)设置block小一点;

7block太大例如4K,文件都是0.1K的,大量浪费磁盘空间;

8block太小例如1K,文件都是1000K,消耗磁盘IO;

9block的设置时格式化分区的时候,mkfs.ext4-b 2048 -I 256 /dev/sdb

10ext3/ext4文件系统(CentOS56),一般设置为4K。(centos7文件系统是xfs

2 文件类型

位于第二列第一个字符,即上文中的”-”。在linux系统中,一切皆为文件。文件类型好汉普通文件,目录,链接文件、块文件,字符文件,socket文件,管道文件。

文件类型和标识符

文件类型说明

ddirectory

目录文件

-regluar file

普通文件(纯文本文件,二进制文件等)

llink

符号链接文件,实际上它指向另一个文件

bblock

块设备和其他外围设备,是特殊类型的文件

ccharcter

字符设备文件

ssocket

socket文件

pnamed pipe

管道文件

3 文件权限

位于第二列的后9位,即上文中的rw-------。其中前三位是文件所属用户的权限;中间三位是文件所属用户组的权限;后面三位是其他用户的权限。其中每一位可以用字符”rwx-”表示,每位字符含义如下:

rread,读,表示对文件拥有可读的权限,其对应数值是0

wwrite ,写,表示对文件有可写的权限,其对应数值是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、对于静态文件,当对应硬链接数为0i_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_linki_count0

i_link(硬链接数量),为0,文件就被删除;

i_count(进程引用计数),0,文件就被删除;

5 用户和组

ls -lih 的第45

5.1 角色划分

对于linux系统来说,用户的角色是通过UIDGID识别的;特别是UID,在linux系统运维中,一个UID是唯一标识一个系统用户的账号(相当于我们的×××)。

  • 超级用户:UIDGID都为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 的第789列,表示文件的修改时间。

modify 修改时间-mtime   一般是修改文件内容后会变

change 改变时间-ctime    文件属性改变

access  访问时间 -atime    访问文件内容