壹  Linux文件属性描述:
在Linux里一切皆文件
Linux系统中的文件或目录的属性主要包括:索引节点(inode)、文件类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容。

例子:
[root@localhost etc]# ls -lhi
total 1.4M
50752632 drwxr-xr-x.  3 root root    101 Apr 23 14:59 abrt
17631870 -rw-r--r--.  1 root root     16 Apr 23 15:16 adjtime
16778352 -rw-r--r--.  1 root root   1.5K Jun  7  2013 aliases
18018101 -rw-r--r--.  1 root root    12K Apr 23 15:20 aliases.db
17779594 drwxr-xr-x.  2 root root     51 Apr 23 15:00 alsa
50456080 drwxr-xr-x.  2 root root   4.0K Apr 23 15:13 alternatives
17631850 -rw-------.  1 root root    541 Aug  3  2017 anacrontab
17037763 -rw-r--r--.  1 root root     55 Mar  1  2017 asound.conf
18040415 -rw-r--r--.  1 root root      1 Nov  6  2016 at.deny
 1216969 drwxr-x---.  3 root root     43 Apr 23 15:00 audisp
34216454 drwxr-x---.  3 root root     83 Apr 23 15:20 audit
18150015 drwxr-xr-x.  4 root root     71 Apr 23 15:05 avahi

如上10列所代表的Linux文件属性:
第①列:#inode索引节点编号
                 (相当于身份证,在Linux系统里是唯一的)
                 (系统读取文件时首先通过文件名找到inode,然后才能读取到文件内容)
第②列:#文件类型及权限
                 (共10个字符,第一个字符为类型,后9个字符为文件权限,最后一个字符.和selinux相关的标识)
第③列:#硬链接个数 (门的作用:1访问入口。2备份作用)
第④列:#文件或目录所属的用户(属主,拥有者)
                 (Linux里面文件和程序的存在必须要有用户组和组,满足相应的存在需求)
                 (组和拥有者可以不是一个)
第⑤列:#文件或目录所属的组
第⑥列:#文件大小 (在Linux里一切皆文件)
第⑦⑧⑨列:#最近修改时间 (月 日 时 分)
                         (find -mtime -ctime -atime:modify change access)
第⑩列:#实际的文件或目录名(严格的说文件名不算文件的属性)文件名不在inode里,而是在上级目录的block里。

贰  查看文件系统inode总量以及剩余量:

叁  查看磁盘的使用量:

PS:对于运维人员来说“磁盘满了”,一个是block满了,一个是inode满了。

磁盘空间是否满了,是由两项参数决定的:
1、inode是否满了。
2、block是否满了。
任何一项满了,你都无法放你最喜欢的片了。

磁盘满了的一个特征:
(no space on device left)

肆  有关inode的小结:(学会给阶段性的知识作小结是学好Linux的好习惯)
1)磁盘被分区并格式化为ext4文件系统后会生成一定数量的inode和block。

2)inode成为索引节点,它的作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)。

3)ext4/ext4文件系统的block存放的是文件的实际内容。

4)inode是磁盘上的一块存储空间,C6非启动分区inode默认大小256字节,C5是128字节。

5)inode的表现形式是一串数字,不同的为了见对应的inode(一串数字)在文件系统里是唯一的。

6)inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口。

7)ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个block。

8)ext3/ext4文件系统下,正常情况下一个文件占用且只能占用一个inode(像人和身份证),硬链接文件不算。

9)block是用来存储实际数据的,它的大小一般有1K,2K,4K几种。其中引导分区等为1K,其他普通分区多为4K(C6)。

10)如果一个文件很大(高清大片4G),需要占多个block,如果文件很小(0.01K),至少占一个block,并且这个block的剩余空间就浪费了,即无法在存储其他数据了。

11)inode大小和总量查看:(下面的i是不区分大小写)
[root@localhost etc]# dumpe2fs /dev/sda3|egrep -i "block size|lnode size"
[root@localhost etc]# dumpe2fs /dev/sda3|egrep -i "block count|lnode count"
默认block count一般会大于lnode count的数量。

12)查看inode的总量和使用量:
[root@localhost etc]# df -i

13)查看文件的inode信息方法:
[root@localhost etc]# ls -li
[root@localhost /]# stat /etc/hosts

14)如何生成及指定inode大小:
格式化命令:mkfs.ext4-b 2048-l 256 /dev/sdb

伍  有关block的知识小结:
1)磁盘读取数据是按block为单位读取的。

2)一个文件可能占用多个block,但是每读取一个block就会消耗一次磁盘I/O。

3)如果要提升磁盘IO性能,那么就要尽可能一次性读取数据尽量的多。

4)一个block只能存放一个文件的内容,无论内容有多少,如果block默认是4K大小,那么存放一个1K的文件,剩余3K就不能存放别的文件,只能浪费了。
5)block并非越大越好。太大对于存放小文件就会浪费磁盘空间(比如1000K的文件,block大小为4K和1K,则分别占用250和1000个block,消耗IO分别为250次和1000次)。

6)根据业务需求,确定默认的block大小:1K>文件>16K==block小一点、大一点。
 
7)block太大例如4K,文件都是0.1K的,大量浪费磁盘空间,但是访问性能高。

8)block太小例如1K,文件都是1000K的,消耗大量IO。

9)block大小设置也是格式化分区时候确定的,命令:mkfs.ext4-b 2048-l 256 /dev/sdb。

10)企业里文件都会比较大一般>4K,block大一点会提升磁盘访问效率。

11)ext3/ext4文件系统(centos5/centos6),一般都设置为4K。

总的小结:
1)磁盘被分区格式化文件系统后,会分为inode和block俩部分内容。

2)inode存放文件的属性以及指向文件实体的指针,文件名不再inode里,一般上级目录的block里。

3)访问文件原理:通过文件名==inode==blocks。

4)inode一般情况默认大小256B,block大小1,2,4K,默认是4K。注意,引导分区等特殊分区除外。

5)通过df-i查看inode的数量及使用情况,dumpe2fs /dev/sda3查看inode及block的大小及数量。

6)一个文件至少要占用一个inode及一个block,等多个文件可以占用同一个inode(硬链接),相同文件。

7)一个block只能被一个文件使用,若文件很小block很大其剩余空间浪费,无法继续被其他文件使用。

8)block不是越大越好,要根绝业务的文件大小进行选择,一般centos6就是默认4K。

9)可以在格式化的时候改变inode及block的大小。命令:mkfs.ext4-b 2048-l 256 /dev/sdb。

文件删除恢复:ext3grep,应该养成好习惯,先备份再操作,要能快速还原,不容易还原的,先通过多套测试环境测试,然后再操作。

企业面试题:一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写多少。

错误解答:很容易计算1K的个数:100*1000=10000个,1M文件的个数:100、1=100个。

以上题考察的知识点:不要直接给答案。
1 上面的题目考察文件系统inode和block的知识。
2 inode是存放文件属性信息的(也包含指向文件实体的指针),默认大小128byte(C58),256byte(C64).
3 block是存放文件实际内容的,默认大小1K(boot)或4K(非系统分区默认给4K)一般企业用4K的。
4 一个文件至少要占用一个inode及一个block。
5 默认较大分区常规企业真实场景情况下,inode数量是足够的,而block数量消耗的会更快。

假设B 4K 写入1K文件的数量,基本上就是block的数量。
假设B 4K 写入1M文件的数量:总block数量/250block=存放1M的数量。

企业面试题:如果向磁盘写入数据提示No space left on device,通过df -h查看磁盘空间,发现没满,原因。企业场景什么情况下会导致这个问题呢?

解答:
1  可能是inode数量被耗尽了。
2  企业工作中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件占满导致No space left on device的错误。clientmquene目录只有安装了sendmail服务,才会有,是sendmail邮件的临时队列。centos5.8默认就会装sendmail,centos6.6默认没有sendmail,但是有postfix。

Linux服务器 /var/spool/clientmqueue 目录下产生大量文件的解决办法
今天收到nagios报警邮件,其中一台server中的磁盘分区空间超过95%,登录到服务器查看
[root@hadoop-node-29 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5              19G   16G  2.8G  95% /var
到目录/var查看哪个目录中的文件最大
[root@hadoop-node-29 var]# du -sh *
找到是/var/spool目录占了很大空间,进入spool目录继续查看 找到是clientmqueue目录中的文件很多占了大部分空间。
删除所有文件
[root@hadoop-node-29 clientmqueue]# rm -rf *
结果返回-bash: /bin/rm: Argument list too long
换用命令find . -print|xargs rm  过了一段时间终于删除了所有文件
不过这种方法只是治标不治本的方法。
为什么var/spool/clientmqueue会产生大量的文件呢,查资料是因为cron执行时会将相关结果以mail方式发送到执行用户的帐号,可是当sendmail 沒有启动 那么所有信件就会暂存在这个目录中,此时就会出现这种情况。
治本的方法是在cron 任务中的后面加上 > /dev/null 2>&1
例如
* * * * * /etc/init.d/snmp_cron.sh > /dev/null 2>&1

有关inode的小结:(学会给阶段性的知识作小结是学好Linux的好习惯)
1)磁盘被分区并格式化为ext4文件系统后会生成一定数量的inode和block。

2)inode成为索引节点,它的作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)。

3)ext4/ext4文件系统的block存放的是文件的实际内容。

4)inode是磁盘上的一块存储空间,C6非启动分区inode默认大小256字节,C5是128字节。

5)inode的表现形式是一串数字,不同的为了见对应的inode(一串数字)在文件系统里是唯一的。

6)inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口。

7)ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个block。

8)ext3/ext4文件系统下,正常情况下一个文件占用且只能占用一个inode(像人和身份证),硬链接文件不算。

9)block是用来存储实际数据的,它的大小一般有1K,2K,4K几种。其中引导分区等为1K,其他普通分区多为4K(C6)。

10)如果一个文件很大(高清大片4G),需要占多个block,如果文件很小(0.01K),至少占一个block,并且这个block的剩余空间就浪费了,即无法在存储其他数据了。

11)inode大小和总量查看:(下面的i是不区分大小写)
[root@localhost etc]# dumpe2fs /dev/sda3|egrep -i "block size|lnode size"
[root@localhost etc]# dumpe2fs /dev/sda3|egrep -i "block count|lnode count"
默认block count一般会大于lnode count的数量。

12)查看inode的总量和使用量:
[root@localhost etc]# df -i

13)查看文件的inode信息方法:
[root@localhost etc]# ls -li
[root@localhost /]# stat /etc/hosts

14)如何生成及指定inode大小:
格式化命令:mkfs.ext4-b 2048-l 256 /dev/sdb

inode总结

什么是inode?

理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫扇区(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block)。这种由多个扇区组成的块是文件存取的最小单位,块的大小,最常见的是4KB,即连续八个sector组成一个block,文件数据都储存在块中,那么很明显,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创年日期、文件的大小等等。这种储存元信息的区域叫做inode,中文译名为”索引节点”。inode (index node) 表中包含文件系统的所有文件列表。

inode包含文件的信息(元数据)

Inode编号

用来识别文件类型,以及用于stat C函数的模式信息

文件权限

文件的拥有者的UID

文件所属组的GID

链接数(指向这个文件名路径名称个数)

文件的大小

文件的间戳(ctime指inode上一次变动的时间,mtime是指文件内容上一次变动的时间,atime指文件上一次打开的时间)

指向磁盘文件的数据块指针

有关文件的其它数据

注意:要想查看文件的inode信息可以使用stat命令查看

inode表结构

    

直接块指针:

前12个直接指针,直接指向存储数据的区域。如Blocks大小为4*1024KB,前12个直接指针就可以保存48KB的文件

间接块指针:

设每个指针占用4个字节,则以及指针指向的Blocks可以保存(4*1024)/4KB,可指向1024个Blocks,一级指针可存储文件数据大小为1024*(4*1024)KB=4MB

双重间接块指针:

同样Blocks大小为4*1024,则二级指针可保存Blocks指针数量为((4*1024)/4)*((4*1024)/4),则二级指针保存文件数据大小为(1024*1024)*(4*1024)=4GB

三重间接块指针:

以次类推三级指针可以储存文件数据大小为(1024*4*1024*1024)*(4*1024)=4TB

inode的大小:

每个inode都有一个编号,操作系统用inode号来识别不同文件。Unix/Linux系统不使用文件名,而使用inode号来识别文件,对于系统来说,文件名只是inode号码便于识别的别称或绰号。表面上,通过文件名打开文件;实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号;其次,通过inode号,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

注意:inode号并不是无限的,如果一个分区的节点数被使用完了,那么即使磁盘空间还有剩余也不能再存放任何数据。可以使用df -i命令查看节点使用情况

注:1节点总数、2使用过节点数、3剩余节点数、4节点使用率

目录文件:

Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件目录文件的结果非常简单,就是一系列目录项(direct)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号。

ls命令只列出目录文件中的所有文件名:

ls -i命令列出整个目录文件,即文件名和inode号(箭头标的即为inode号):

如果要查看文件的详细信息,就必须根据inode号,访问inode节点,读取信息。ls -i -l 目录文件 列出整个目录文件,即文件名和inode号(箭头标注的列即为inode号)

理解了上面的知识,就能理解目录的权限,文件的读权限(r)和写权限(w),都是针对目录文件本身。由于目录文件内只有文件名和inode号,所以只有读权,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而读取inode节点内的信息需要目录文件的执行权限(x)。

Linux中cp、rm、mv 、ln对inode的影响:

cp命令

  • 分配一个未被使用的inode号,在inode表中添加一个新项目,(注意:如果是cp到讴歌已经存在的文件,则inode号采用被覆盖之前的目标文件的inode号,如果对运行中的apache共享模块so文件进行cp操作,就会出现Segmentation fault<段错误>)

  • 在目录中新建一个目录项,并指向步骤1中的inode

  • 把数据复制到block中

rm命令

  • 减少链接数量,如果链接数为0,释放inode(inode号也已被重新使用);

  • 如果inode被释放,则数据块放到可用空间列表中;

  • 删除目录中的目录项

mv命令

1.如果mv命令的目标文件和源文件所在额文件系统相同:

使用新文件名建立目录项;

删除带有原来文件名的目录项;

注意:该操作对inode表没有影响(除时间戳),对数据的位置也没有影响,不移动任何数据。(即使是mv到一个已经存在的目标文件,新目录项指源文件inode,会先删除目标文件的目录项,所以如果对运行中的apache的共享模块so文件进行这种操作的话不会有问题,新的so文件inode号变了)

2.如果目标和源文件所在的问价系统不相同,就是cp和rm;

ln命令

符号(软)链接:

符号链接的内容是它引用文件的名称,可以是任意文件或目录,也可以链接不同问价系统的文件,甚至可以链接不存在的文件,这就产生一般称为断裂的问题,还可以不断的循环链接源文,但是其大小为指向的路径字符串的长度;不增加或减少目标文件inode 的引用计数。

使用ln -s source_file softlink_file (注意:源文件(source_file)的路径是相对路径(也可以是绝对路径,通常使用的是相对路径),一定是相对于软链接文件的路径,而非相对于当前工作目录的路径)创建符号链接,在对符号链接进行读写操作的时候,系统会自动把该操作转换为对源文件的操作,但是删除连接文件时,系统仅仅删除符号链接文件,而不是删除源文件本身。

硬链接:

不允许给目录创建硬链接,创建硬链接会正价额外的记录项以引用文(不能跨驱动或分区创建硬链接),硬链接件对应于同一文件系统上的一个物理文件,硬链接节点编号是相同的,创建硬链接链接数递增,删除文件时:rm命令递减计数的链接,文件如果存在,至少有一个链接数,当链接数为0时,该文件被删除。

使用ln existfile newfile 命令创建硬链接

硬链接于软连接的区别:

1、本质不同:硬链接是指向同一个文件,软链接指向的不是同一个文件

2、删除时:硬链接不受影响,软链接失效

3、创建链接时:创建硬链接链接数加1,创建软链接连接数不变

4、是否可以跨分区:硬链接不可以跨分区,软链接可以跨分区

5、目录是否可以创建链接:硬链接不可以对目录创建,软链接可以对目录创建

6、硬链接的inode号相同,软链接inode号不同

NO20文件属性--inode--block-企业场景题的更多相关文章

  1. 磁盘操作- inode/Block深入实战

    一 思路: 1,磁盘物理结构及大小计算 2,分区 MBR GPT知识 3,fdisk分区 挂载 自动挂载 4,格式化文件系统 5,inode block 软硬链接 查看磁盘: [root@moban ...

  2. [svc][op]磁盘MBR分区机制- inode/Block深入实战

    一 思路: 1,磁盘物理结构及大小计算 2,分区 MBR GPT知识 3,fdisk分区 挂载 自动挂载 4,格式化文件系统 5,inode block 6,软硬链接 查看磁盘: [root@moba ...

  3. # linux文件系统(inode block superblock)

    先说一下格式化:每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区格式化,以成为操作系统能够利用的文件系统格式.linux的文件格式为Ext2/Ext3,现在好像 ...

  4. Storm流计算从入门到精通之技术篇(高并发策略、批处理事务、Trident精解、运维监控、企业场景)

    1.Storm全面.系统.深入讲解,采用最新的稳定版本Storm 0.9.0.1 :   2.注重实践,对较抽象难懂的技术点如Grouping策略.并发度及线程安全.批处理事务.DRPC.Storm ...

  5. ext2文件系统的运行—superblock/inode/block

    鸟哥私房菜书上内容: superblock:记录此 filesystem 的整体信息,包括inode/block的总量.使用量.剩余量, 以及文件系统的格式与相关信息等:inode:记录文件的属性,一 ...

  6. Linux 文件的详解[分类/扩展名/inode/block]

    关于Linux文件的介绍 Linux里文件扩展名和文件类型没有关系,Linux系统中一切皆文件 关于Linux文件分类 纯文本文件(可以cat的)     二进制文件(Linux的可执行文件等,如/b ...

  7. Linux 深入理解inode/block/superblock

    基础命令学习目录首页 原文链接:https://blog.csdn.net/Ohmyberry/article/details/80427492 档案系统特性 传统的磁盘与档案系统之应用中,一个分割槽 ...

  8. inode block 软硬链接

    inode block 软硬链接 1 inode 1.1 inode(索引节点)作用 (1)用于存储文件数据属性信息(2)用于存储数据指针信息 1.2 如何产生 格式化时,创建文件系统 1.3 如何查 ...

  9. linux文件属性描述(inode,block)

    1.ls   -lhi 文字解释: 第一列:inode索引节点编号(人的身份证,全国唯一) 系统读取文件时首先通过文件名找到inode,然后才能读取到文件内容. 第二列:文件类型及权限(共10个字符, ...

随机推荐

  1. Vue项目的准备

    1.下载nodejs 检查是否安装成功 2.使用gitee作为线上仓库 3.使用脚手架工具--命令行工具 能在8080里显示出以下画面即为成功

  2. Mysql 8.0 新特性测试

    Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Po ...

  3. Python 之并发编程之线程中

    四.线程锁lock(线程的数据安全) 在数据量较大的时候,线程中的数据会被并发,所有数据会不同步,以至于数据会异常. 下面还介绍了两种的上锁方法. 例: from threading import T ...

  4. BlockingQueue的几个实现分析

    ArrayBlockingQueue 底层以数组的结构存放队列元素,容量大小不可改变. 先看下变量: items:数组,用于存放队列中的元素 takeIndex:获取元素的索引位置 putIndex: ...

  5. c#DDOS代码

    //在工程属性中设置"允许不安全代码"为true ?using System; using System.Net; using System.Net.Sockets; using ...

  6. Vacuum Pump Manufacturer - Vacuum Pump Range Use: Considerations

    The vacuum pump is a versatile bottle that holds your lotion, shampoo and conditioner. Keep away fro ...

  7. PAT A1091 Acute Stroke

    对于坐标平面的bfs模板题~ #include<bits/stdc++.h> using namespace std; ; ][][]={false}; ][][]; int n,m,l, ...

  8. nginx日志模块与HTTP过滤模块与sub模块修改返回内容

    日志格式使用指令 指令介绍 Syntax: log_format name [escape=default|json|none] string ...; Default: log_format com ...

  9. 1 Struts2基本概述及其入门

    什么是Struts2? webwork+Struts1 一个基于MVC设计模式的web层框架,本质上相当于一个Servlet.. 在MVC设计模式中,Struts2作为控制器Controller来建立 ...

  10. Markdown中实现折叠代码块

    <details> <summary>展开查看</summary> <pre><code> System.out.println(" ...