用户名: 密码: 忘记密码? 注册

Linux文件及文件系统概述

作者:  时间: 2010-09-28

1、文件类型

LinuxWindows文件类型最显著的区别就是Linux对目录和设备都当着文件来进行处理,这样就简化了对各种不同类型设备的处理,提高了效率。Linux文件类型最主要的有四种:

(1)       普通文件

包括文本文件,Shell脚本,二进制可执行程序和各类型的数据

(2)       目录文件

Linux中,目录也是文件,它们包含文件名和子目录名以及指向那些文件和子目录的指针。目录文件时Linux中存储文件名的唯一地方,当把文件和目录相对应起来,也就是用指针将其连接起来之后,就构成了目录文件,因此,在对目录文件进行操作时,一般不涉及文件内容的操作,而只是对目录名和文件名的对应关系进行操作。

另外,在Linux系统中的每个文件都被赋予一个唯一的值,而这个数值被称作索引节点。索引节点存储在一个称作索引节点表中,该表在磁盘格式化时没分配。一个索引节点包含文件的所有信息,包括磁盘数据的地址和文件类型。

(3)       链接文件

链接文件相当于Windows的“快捷方式”,但是它有更强大的功能。可以实现对不同的目录、文件系统甚至是不同的机器上的文件直接访问,并且不必重新占用磁盘。

(4)       设备文件

Linux把设备都当着文件一样来进行操作,这样就大大方便了用户的使用。在Linux下与设备相关的文件一般都在/dev下,包括两种:块设备和字符设备。

块设备是指数据读写时,他们是以块(如由柱面和扇区编址的块)为单位的设备,最简单的如硬盘(/dev/hda1)等。

字符设备主要指串行端口的设备。

2、文件属性

- rwx rwx rwx

文件的拥有者可以把文件的访问属性设成3种不同的访问权限:可读(r)、可写(w)和可执行(x)。文件又有3个不同的用户级别:文件拥有者(u)、所属的用户组(g)和系统的其他用户(o)。

第一个字符显示文件的类型:

-表示普通文件;

d表示目录文件;

l表示链接文件;

c表示字符设备;

b表示块设备;

p表示命名管道,比如FIFO文件;

f表示堆栈文件比如LILF文件;

第一个字符以后有3个字符组,分别表示文件拥有者(u)、所属的用户组(g)和系统的其他用户(o)对文件的权限,如果没有此权限则为-

3、文件系统

3.1 ext2ext3

ext3是现在Linux常见的默认的文件系统,他是ext2的升级版本。Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。 linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。

Linux缺省情况下使用的文件系统为Ext2ext2文件系统的确高效稳定。但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了:其中系统缺省使用的ext2文件系统是非日志文件系统。这在关键行业的应用是一个致命的弱点。本文向各位介绍Linux下使用ext3日志文件系统应用。

Ext3文件系统是直接从Ext2文件系统发展而来,目前ext3文件系统已经非常稳定可靠。它完全兼容ext2文件系统。用户可以平滑地过渡到一个日志功能健全的文件系统中来。这实际上了也是ext3日志文件系统初始设计的初衷。

Ext3日志文件系统的特点:

1、高可用性

系统使用了ext3文件系统后,即使在非正常关机后,系统也不需要检查文件系统。宕机发生后,恢复ext3文件系统的时间只要数十秒钟。

2、数据的完整性:

ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。在保证数据完整性方面,ext3文件系统有2种模式可供选择。其中之一就是同时保持文件系统及数据的一致性模式。采用这种方式,你永远不再会看到由于非正常关机而存储在磁盘上的垃圾文件。

3、文件系统的速度:

尽管使用ext3文件系统时,有时在存储数据时可能要多次写数据,但是,从总体上看来,ext3ext2的性能还要好一些。这是因为ext3的日志功能对磁盘的驱动器读写头进行了优化。所以,文件系统的读写性能较之Ext2文件系统并来说,性能并没有降低。

4、数据转换

ext2文件系统转换成ext3文件系统非常容易,只要简单地键入两条命令即可完成整个转换过程,用户不用花时间备份、恢复、格式化分区等。用一个ext3文件系统提供的小工具tune2fs,它可以将ext2文件系统轻松转换为 ext3日志文件系统。另外,ext3文件系统可以不经任何更改,而直接加载成为ext2文件系统。

5、多种日志模式

Ext3有多种日志模式,一种工作模式是对所有的文件数据及metadata(定义文件系统中数据的数据,即数据的数据)进行日志记录(data=journal模式);另一种工作模式则是只对metadata记录日志,而不对数据进行日志记录,也即所谓data=ordered或者data=writeback模式。系统管理人员可以根据系统的实际工作要求,在系统的工作速度与文件数据的一致性之间作出选择。

3.2 swap文件系统

众所周知,现代操作系统都实现了虚拟内存这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,虚拟内存是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。  

Swap 空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一 些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统 总是在物理内存不够时,才进行Swap交换。

3.3 vfat文件系统

LinuxDOS中采用的FAT文件系统(包括FAT12FAT16FAT32)都称为vfat文件系统。

3.4 NFS文件系统

网络文件系统是FreeBSD支持的文件系统中的一种, 也被称为 NFS,也是Linux的独到之处。 NFS允许一个系统在网络上与它人共享目录和文件,而且NFS文件系统访问速度快,稳定性高,已经得到广泛使用,尤其是在嵌入式系统中。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。

以下是NFS最显而易见的好处:

l         本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。

l         用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。

l         诸如软驱,CDROM,和 Zip® 之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。

3.5 ISO9660文件系统

光盘所使用的文件系统,在Linux中对光盘已经有了很好的支持,它不仅可以实现对光盘的读写,同时可以实现对光盘的刻录。

4Linux的目录结构

/bin 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。

/boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息

/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;键入“cd /dev/mouse”即可看鼠标的相关文件。

/cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下, 例如“mount /dev/cdrom /cdrom

/etc 该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。

/sbin 该目录用来存放系统管理员的系统管理程序。

/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。

/lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库

/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。

/mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。

/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的

/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录

/tmp 用来存放不同程序执行时产生的临时文件

/usr 用户的很多应用程序和文件都存放在该目录下

/var 这个目录的内容是经常变动的,看名字就知道,我们可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地