linux系统中文件类型介绍

运维技术 jikk345 2458℃ 0评论

1. 简介

(1) Windows里是通过扩展名来区分文件类型的。*.txt 文件名与扩展名。
(2) 在Linux里文件扩展名和文件类型没有关系。
(3) 为了容易区分和兼容用户使用windows的习惯,我们也会用扩展名来表示Linux里的文件类型。

2.Linux中的文件类型

概述
在Linux系统中,可以说一切皆文件。文件类型包含有普通文件、目录、字符文件、块设备文件、符号链接文件等等。
-rw-r–r– 1 root root 438848 Jun 12 2014 HELP.docx 其中第一个”-“是表示文件类型的,其他的信息都是属性。
(1)普通文件
-rw-r–r– 其中第一个“-”就是是表示普通文件。
这些文件一般是相关的应用程序或系统命令创建,比如touch、cp、tar、echo、cat等。
普通文件的删除方式可以使用rm命令
windows里拷贝到linux中,windows下的doc.ppt.zip.jpg等格式的文件均显示为普通文件。
充补:
—-纯文本文件(ASCII):内容可直接读取,数字字母等,比如配置文件几乎都是这种类型。
查看到该文件是属于什么文件类型。

[root@Qinglin-BJ home]# file help.doc 
help.doc: Zip archive data, at least v2.0 to extract

—-二进制文件(binary):Linux中的可执行文件,比如命令文件,cat、cp、ls。
以下显示的是可执行的命令。

[root@Qinglin-BJ home]# file /bin/cat
/bin/cat: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

—-数据格式文件(data):具有特定格式的文件。
以下显示的就是数据格式文件类型。

[root@Qinglin-BJ home]# file /var/log/wtmp 
/var/log/wtmp: data

(2)字符设备及块设备文件
crw-r–r– 其中第一个是“c”就是表示字符设备。
字符设备就是串行端口的接口设备,如猫的串口设备。
如果我们进入/dev目录,列一下文件,会看到类似如下的内容:
显示结果后/dev/tt会有特别的显示颜色

[root@Qinglin-BJ home]#  ls -l /dev/tty
crw-rw-rw-. 1 root tty 5, 0 May  8 10:38 /dev/tty

brw-r–r– 其中第一个是“b”就是表示块设备。(Block的缩写)
块设备就是硬盘、光驱,都是块设备。
(3)套接口文件
srw-r–r– 其中第一个是“s”就是表示套接口文件。(Socket的缩写)
当我们启动MySQL服务时,会产生一个mysql.sock文件。这个文件属性的第一字符是s。
(4)符号连接文件
lrw-r–r– 其中第一个是“l”就是表示符号连接文件。
连接文件,有的也称为“软连接”
下面的显示结果就是l,表示软连接。

[root@Qinglin-BJ home]#  ls -l /etc/init.d -d 
lrwxrwxrwx. 1 root root 11 May 12  2015 /etc/init.d -> rc.d/init.d

ln -s 源文件名 新文件名
(5)管道文件
prw-r–r– 其中第一个是“p”就是表示符号连接文件。
FIFO也是一个特殊的文件类型,主要解决多个程序同时访问一个文件所造成的错误
管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。
有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建
扩展名的作用
在linux中,虽然扩展名没什么实际意义,但是为了兼容windows,同时,便于我们大多数习惯了windows的用记区分文件的不同,所以我们还是习惯通过扩展名来表示不同的文件类型。
举例如下:
1) .tar、.tar.gz、.tgz .zip、.tar.bz 表示压缩文件,创建命令一般为tar,gzip,unzip等。
2).sh 表示shell脚本文件,通过perl语言开发的程序。
3).pl 表示perl语言文件,通过perl语言开发的程序。
4).py 表示python语言文件,通过python语言开发的程序。
5)html、html、.php、.jsp、.do 表示网页语言的文件。
6).conf 表示系统服务的配置文件。
7).rpm 表示rpm安装包文件
运维开发语言:shell/python/perl/php 必会shell python php

3. Linux中的文件属性

下列ls -l代表查看链接文件,-h代表人类可读方式显示,-i代表显示inode

[root@Qinglin-BJ home]# ls -lhi
total 8.0K
131367 -rw-r--r--. 1 root root 66 May  4 23:02 a.sh
131352 -rw-r--r--. 1 root root 21 May  8 10:45 a.txt

以上结果:
第一列:inode(索引节点,他就是文件目录,在磁盘里的唯一标识),唯一标识,读文件首先要读取到这个索引节点。
第二列:文件类型,-为普通文件,d为目录。-rw-r–r–为文件权限(r:read,w:write,x:exec),最后一个点是selinux为开启状态,关闭就不显示这个.
第三列:文件的硬连接数,硬链接是文件又一个入口。标识是和inode一样的。
第四列:用户的属主或用户
第五列:文件对应的用户组用属组
第六列:文件的大小
第七、八、九列:是文件被改动的时间

列表名
注释
说明
28675
inode节点号(文件的索引,相当于书的目录)
索引节点编号
-rw-r–r– 1
文件类型及权限
文件类型是“-”,表示这是一个普通文件。
文件权限是rwxr–r– 1,表示文件属主可读、可写、可执行,文件所属于的用户组可读可执行,其他用户可读可执行。
1
文件的硬连接数
硬链接数:表示qinglin这个文件没有其他的硬链接,因为链接数是1,就是他本身。
root
文件的属主(这个文件属于谁?就写谁)
文件属主:这个文件所属于的用户,这里意思是qinglin文件被root用户拥有,注:是第一个root。
root
文件的属组(同组里的人都有权限可以看的意思)
文件属主:这个文件所属的用户组,在这里是root用户组,是显示信息里的第二个root。
429k
文件或目录的大小
文件大小:文件大小是429k
Jun 12 2014
最近修改的时间 文件修改时间:这里的时间是该文件最后被更新(包括文件创建、内容更新、文件名更新等)的时间,可用如下命令查看文件的修改,访问,创建的时间。
[root@shell~]#  stat HELP.docx 
File: `HELP.docx’
Size: 438848          Blocks: 864        IO Block: 4096   regular file
Device: ca01h/51713d    Inode: 286785      Links: 1
Access: (0644/-rw-r–r–)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-01-20 19:36:16.899554784 +0800
Modify: 2014-06-12 20:50:08.912761814 +0800
Change: 2014-06-12 20:50:08.912761814 +0800
HELP.docx
文件名或目录名

(1)索引节点编号
Inode,中文意思是索引节点(Index node)。每个Linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘。。)被格式化为ext3文件系统后,一般都有两部分:
硬盘要分区,然后格式华,创建文件系统。
第一部分是Block 存储实际数据用的,例如:照片,视频普通文件数据。(cenos5 默认128字节 centos6 默认inode256字节)
第二部分是Inode 存储数据属性信息(也就是ls -l的结果),inode包含属性信息包括文件大小、属主、归属的用户组、读写权限、文件类型,修改时间,还包含指向文件实体的指针功能(inode节点–block的对应关系)等,但是,inode唯独不包含文件名。
Inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode,block之间的关系见下图:
1
过程: 访问Qinglin文件夹-查询Inode的权限-或者拒绝或者访问内容。(每个文件都会创建一个inode)
查看磁盘inode大小
通过dumpe2fs命令查看inode的大小,inode越大,存储的属性更多。

[root@Qinglin-BJ home]# dumpe2fs /dev/sda1|grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size:               128

查看磁盘inode和block分配的量和剩余的量

[root@Qinglin-BJ home]# dumpe2fs /dev/sda1|grep -iE "inode count|block count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count:              51200
Block count:              204800

剩余的量

[root@Qinglin-BJ home]# dumpe2fs /dev/sda1|grep -iE "Free blocks:|Free inodes:"|grep -v "^ "
dumpe2fs 1.41.12 (17-May-2010)
Free blocks:              168656
Free inodes:              51162

查看磁盘挂载Ionode的情况

[root@Qinglin-BJ home]# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda3      1171456 55487 1115969    5% /
tmpfs           126544     1  126543    1% /dev/shm
/dev/sda1        51200    38   51162    1% /boot

小节:
1)磁盘分区格式化为ext4文件系统会会生成一定数量的inode和block。
2)inode是索引节点,作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)。
3)ext3/ext4 文件系统block大小一般有1k,2k,4,。其中引导分区等为1k,其他普通分区为4k(Cetos 6)

[root@Qinglin-BJ home]# dumpe2fs /dev/sda3|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size:               4096
[root@Qinglin-BJ home]# dumpe2fs /dev/sda1|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size:               1024
[root@Qinglin-BJ home]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        18G  1.6G   16G  10% /
tmpfs           495M     0  495M   0% /dev/shm
/dev/sda1       194M   29M  155M  16% /boot

4)查看inode和block的大小以及数量。(df -i能查看inode)
5)一个block只能存放一个文件的内容,所以Block并非越大越好。
6)ext3/ext4 文件系统中的block存放的是文件的实际内容。
7)inode 是一块存储空间,Centos6非启动分区inode默认大小256字节,Centos5是128
8)inode是一串数字,不同的文件对应的inode(一串数字)在文件系统是唯 一的。
9)inode相同的文件,互为硬链接文件(文件的又一个入口)。
10)一个文件被创建后至少要占用一个inode和一个block。
11)如果一个文件很大,可能占多个block(4k)。
12)如果文件很少,至少占一个Block,并且剩余空间不可以使用了。
block可以是多个,inode只能1个。
指定生成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并非越大越好。Block太大对于小文件存放就会浪费磁盘空间,例如:1000K的文件,Block
为4K,占用250个Block,Block为1K,占1000个Block。访问效率谁更高?消耗IO分别为250次和1000次。
6)大文件(大于16K)一般设置Block大一点,小文件(小于1K)一般设置Block小一点。
7)Block太大例如4K,文件都是0.1K的,大量浪费磁盘空间。
8)Block太小例如1K,文件都是1000K,消耗磁盘IO。
9)Block的设置也是格式化分区时候,mkfs.ext4 -b 2048 -l 256 /dev/sdb
10)文件较大时,block设置大一些会提升磁盘访问效率。
11)ext3/ext4文件一般设置为4K
Block如何分配:
如果是大文件的业务,block尽量大一点。
如果是小文件的业务,block尽量小一点。
ext/ext4 最大只能4k。
而工作中几乎没有小于4k的文件,所以,ext3,ext4的文件系统,block都分配4k。
总结:
1)磁盘分区格式化文件系统后,会分为inode和block两部分内容。
2)inode存放文件的属性以及指向文件实体的指针,文件名不再inode里,一般是在上级目录block里面。
3)访问文件,通过文件–>>inode–>>blocks。
4)inode一般默认大小为256字节,block大小124k,默认是4k,注意::引导分区等特殊分区除外。
5)通过df -i 查看inode的数量及使用情况 ,dumpe2fs /dev/sda3 查看inode及block的大小及数量。
6)一个文件至少要占用一个inode及一个block,对多个文件可以占用一个inode(硬链接)。
7)一个block只能被一个文件使用,如果文件很小block很大,剩余空间浪费,无法继续被其他文件使用。
8)block不是赵大越好,要根据业务的文件大小进行选择,一般默认4k。
9)可以在格式化的时候改变inode及block的大小。

转载请注明:清麟博客 » linux系统中文件类型介绍

喜欢 (2)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址