本节内容
1、文件类型
2、文件扩展名
3、索引节点inode和block块
首先需要申明一点,
1、在linux里面文件扩展名和文件类型是没有关系的
2、为了容易区分和兼容用户使用windows的习惯,在linux里面也会用扩展名来表示文件类型
3、在linux里面需要提起一个概念“一切皆文件”。
文件类型
文件类型分为:普通文件、目录、字符设备文件、符号链接文件、块设备文件、套接口文件、管道
之前我们通过find命令查找过文件,所以可以查看一下find命令里面的规定,man find然后/type,输入n来往下查找
下面大概讲解下(如果没提到,真的是没必要了解了)
输入ll命令可以查看到如下,最前面一列代表权限,最前面一列第一个字符代表文件类别
1、普通文件 -或者f
其中普通文件有分为三种类型
1、纯文本文件ASCII,绝大多数文件几乎是这种类型 2、二进制文件binary,可执行文件基本都是,比如文件命令cat、ls 3、数据格式文件data,具有特定格式的文件
可以通过file + 文件路径 查看
2、目录文件 d
通过命令查看本身类型
ls -F 查看当前目录的各个文件及属性(也可以用ls -p命令)
dandy* ==> 文件
dddd/ ==> 目录
3、字符设备(tty) c
比如串行端口的接口设备,通过mknod 文件名 c 5 1实现
4、块设备文件(/dev/sda) b
比如硬盘,光驱
5、套接口文件(sock) s
用于网络间进行数据连接的文件
6、符号链接文件 l
创建软链接:ln -s 源文件名 新文件名
7、管道文件(FIFO) p
创建
mkfifo filename
文件扩展名
基本上,Linux的文件是没有所谓的『扩展名』的,我们刚刚就谈过,一个Linux文件能不能被执行,与x有关,与文件名根本一点关系也没有。这个观念跟Windows 的情况不相同!在Windows 底下,能被执行的档案扩展名通常是 .com .exe .bat 等,而在Linux底下,只要你的权限当中具有 x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行!
但是能执行与能执行成功是不同的。虽然扩展名不起作用但是我们还是希望可以由扩展名了解此文件是什么东西。所以。。。
1、tat;tar.gz;tgz;zip;tar.gz 表示压缩文件,创建tar;gzip 2、sh 表示shell脚本文件 3、pl 表示perl语言文件 4、py 表示python语言文件 5、html;htm;php;jsp;do 表示语言开发的程序 6、conf 表示系统服务的配置文件 7、rpm 表示rpm安装包的文件
索引节点inode和block块
首先看一个命令
i inode 文件索引号
h human 人类可读的大小格式,K、M、G
第一个红色框就是代表文件的inode号,即文件索引号。
第二个红框就是带h参数的效果,带着单位便于阅读,如果不加是一串文件大小的数字。
第三个红框是硬链接的个数。
inode概述
1、磁盘分区格式化文件系统后,会分为inode和block两部分内容。
2、inode存放文件的属性以及指向文件实体的指针,文件名不在inode里,一般在上级目录的block
3、block是用来存储实际数据用的;
inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,即通过inode的值最快的找到对应的文件实体block,可以对应多个block(block的大小是1、2、4k)。
centos5 inode默认大小是128字节;6默认大小是256字节;inode的大小在文件系统被格式化之后就无法更改了,格式化前可以指定inode大小,但是一般工作环境没有这个需求
查看inode&block的大小和数量
查看inode的大小:dumpe2fs -h /dev/sda2 | grep "Inode size" 查看inode的数量:dumpe2fs -h /dev/sda2 | grep "Inode count" 查看block的大小:dumpe2fs -h /dev/sda2 | grep "block size" 查看block的数量:dumpe2fs -h /dev/sda2 | grep "block count"
报错dumpe2fs: Bad magic number in super-block 当尝试打开 /dev/sda2 时,找不到有效的文件系统超级块。这种是因为文件系统的类型是xfs而不是ext造成的,怎么解决,暂时没找到。。
查看inode的总量跟使用量 df -i
查看磁盘大小 df -h(也可以当作human来理解)
小结
一个文件至少占用一个inode和一个block。 ext3/ext4文件系统的block大小一般有1,2,4k,centos6正常大小是4k
有关block大小
磁盘读取数据是按block为单位读取的。 一个block只能存放一个文件的内容。所以block并非越大越好。block块越大对于单个的小文件多(0.5k)的业务,会非常浪费空间。
因为一个文件无论多大,至少占用一个inode和一个block。但是对于大文件,可以提升读取效率,因为block太小,就要读取多个block,这样就消耗磁盘IO
生产环境:block大小如何处理?
如果是大文件业务,block尽量大一点。小文件业务,block就给小一点。 ext3/ext4最大只能4k,而工作中几乎就没有小于4k的文件,所以以后只要建立ext3/ext4文件系统,block都分配4k。
如果真的是存放大文件的可以搜一下使用更大的文件系统,比如分布式的文件系统。
mkfs -I 2048 -b 2048 /dev/sda1 更改分区的inode跟block,这需要在分区格式化的时候操作
常识:
一般分区情况下,block的数量要大于inode的数量
补命令
less a.log 查看文件,按屏查看
小结
1、磁盘分区格式化文件系统后,会分为inode和block两部分内容。 2、inode存放文件的属性以及指向文件实体的指针,文件名不在inode里,一般在上级目录的block 3、访问文件,通过文件名找到inode,再根据inode找到一个或多个block 4、inode一般情况默认大小是256字节,block大小1,2,4k,一般默认是4k,引导分区等特殊分区除外 5、通过df -i查看inode的数量及使用情况,dumpe2fs/dev/sda3查看inode及block的大小和数量 6、一个文件至少要占用一个inode及一个block,其中多个文件可以占用同一个inode(硬链接) 7、一个block只能被一个文件使用,block太大浪费,无法继续被其他文件使用 8、block不是越大越好,要根据业务的文件大小进行选择,一般就是默认4k 9、可以在格式化的时候改变inode及block的大小