1、41 文件与文件系统的概念 用户在使用操作系统时,最经常用的就是文件系统。特别地,在Linux操作系统中把CPU、内存以外的所有设备都抽象为文件来处理。进程只和文件系统发生关系,当进程使用计算机系统中的硬件设备时,由文件系统屏蔽掉硬件设备的具体特性和如何提供服务等细节,这些具体细节由操作系统的设备管理模块实现并为文件系统提供一个简单、统一的接口。因此,在Linux系统中文件系统也是设备管理模块的接口。411 文件的概念文件是存储在某种存储介质上具有标识名的一组相关信息集合。文件具有以下特性:1、任何具有独立意义的一组信息都可以组织成一个文件。2、可保存性。3、可按名存取,无需了解它在存储介质上
2、的具体物理位置。Linux 系统中的一切都是以进程或文件的形式存在。例如:Linux系统把鼠标看成文件/dev/mouse,目录也是一种文件类型,内核被看成vmlinuz 文件或 bzImage 文件。甚至终端也被看成文件(如/dev/tty2)。因此、要让Linux 系统平稳地运行,必须要了解文件和文件结构。在DOS/Windows系统中,文件的属性有:只读、隐藏、系统和存档四种。而在Linux系统中,文件的属性主要包括文件类型和文件权限两个方面,如图4-1所示。图4-1文件属性4111 文件类型在不同的操作系统下文件的类型有一些差别,Linux系统中的文件类型有:普通文件普通文件 所有用编
3、辑程序、语言编译程序、数据库管理程序等产生的文本文件、二进制文件、数据文件等都是普通文件,它是一种无结构的流式文件,所谓流式文件它是相关信息的有序集合,或者说是有一定意义的字符流。它包含的内容最多,范围最广。普通文件又可进一步分为文本文件和二进制文件。如用文本编辑器编辑的hello.c(文本)文件,对hello.c文件编译生成的hello.o(二进制)文件,对hello.o文件连接生成的hello(二进制可执行)文件。目录文件目录文件 用于存放文件名和其他有关文件信息的文件,即用于检索文件的文件。目录文件可以包含下一级目录文件和普通文件,每一级的目录文件都是如此以便在系统中形成一棵目录树。Li
4、nux的目录文件由目录项构成,它包括两个部分:即文件名和文件号,文件号被称作i节点号 i_number。如图4-2所示图4-2 目录项要注意的是Linux下的目录文件与 DOS/Windows 下的“目录”不同,Linux这样做的目的是为了加快文件检索的速度。DOS/Windows下的目录也是由目录项构成,但是它的目录项中没有文件号,而是列出每个文件的属性、起始簇号、创建日期、修改日期等等,长度远大于16个字节。Linux下目录文件只包含文件名和文件号,目的是减少目录项的长度,这样在搜索文件时根据文件名进行比较,找到该文件名后再从对应的文件号(i_number)找出该文件的其他信息。由于目录项
5、短,相同容量下可存储的目录项就多,找到文件的几率就大,所以可以加快文件检索的速度。链(连)接文件链(连)接文件从使用的角度来说一个文件或目录出现在文件系统目录结构的几个地方常常是方便的(当然这会破坏真正的树型结构)。例如,两个程序员正在某个相同的项目上工作,都希望与项目关联的若干文件保存在自己的目录中;这可以通过文件的共享来实现。文件或目录的共享不同于文件或目录拷贝。在Linux系统中文件或目录的共享通过创建链接的方式来实现。Linux与Unix一样支持两种类型的链接;第一种是硬链接,它是复制指向相同存储区的目录条目,如图4-3所示,第二种是软链接(也称为符号链接)就是在自己目录文件中建立指向
6、共享目录或文件所在目录文件中目录项的指针,如图4-4所示。软链接实际上就是给文件或目录起一个绰号,可以用多个名字表示同一个目录或文件,软链接类似于MS Windows 中的快捷方式。图4-3硬链接图4-4软链接链接文件就是指向被链接目录或文件的文件。采用链接机制不需要复制文件,能有效地节省磁盘空间,特别是为文件共享提供了一条有效的途径。i节点在硬链接与软链接中都起到了重要的作用。硬链接硬链接硬链接指向文件的i节点。用ln命令就可以创建一个硬链接。例如,执行ln add addlink 命令就建立一个add文件的硬链接addlink文件。在下面的例子中可以看到add和addlink文件有相同的i
7、节点或索引号(297731);有相同的文件创建日期和时间(1月9日,22:20);有相同的文件大小(138字节)。#ls li add*297731-rw-r-r-2 root root 138 1月 9 22:20 add297731-rw-r-r-2 root root 138 1月 9 22:20 addlink如果要建立目录的硬链接,则要用命令ln d或ln F,也可以直接用lndir命令。只有超级用户或具有超级用户权限的系统管理员才能建立目录的硬链接。硬链接的文件可以被移动或编辑,这并不影响实际的文件。软链接软链接软链接是与要链接文件或目录的路径链接,而不是与i节点链接;因此,软链接
8、只是指向i节点号。可以用ln s命令创建一个软链接。例如,执行ln s add softlink命令就建立一个add文件的软链接softlink文件。在下面的例子中可以看到add和softlink文件有不同的i节点或索引号(分别为297731和297777);有不同的文件创建日期和时间(分别为1月9日,22:20和2月28日,20:41);有不同的文件大小(分别为138和3字节)。#ls li add softlink297731-rw-r-r-2 root root 138 1月 9 22:20 add297777 lrwxrwxrwx 1 root root 3 2月 28 20:41 s
9、oftlink-add与硬链接相比,软链接不直接访问文件系统,因此它可以位于不同的磁盘分区上;但是,移动它会影响原文件。对于采用硬链接方式,要对被链接的文件进行特殊管理,以免它被删除时引发系统错误。对Linux系统而言,系统为每个文件设有链接计数器。当指向一个文件的新链接建立时,该链接计数器加1;当一个文件链接被从目录中删除时,该链接计数器减1,如果链接计数器的值为0,则该文件所占据的空间被释放。对于采用软链接方式,如果原来被链接的文件删除,那么所有软链接将被留下悬空。这就像在MS Windows中为某个应用程序建立快捷方式后,如果该应用程序被删除,则系统不会自动删除对应的快捷方式一样。设备文
10、件设备文件设备文件是Linux系统中比较特殊的一类文件,设备文件有时也称为特别文件。通过这类文件用户才可以访问计算机系统的外部设备,如磁盘、打印机等;通过这类文件Linux系统实现了设备的独立性。现代计算机系统往往配置多种类型的设备,每一种类型的设备又可以配置多台。为了提高计算机系统的可适应性与可扩展性,操作系统希望用户不指定特定的设备,而代之以指定逻辑设备。逻辑设备是实际物理设备属性的抽象,它并不限于某个具体设备。例如,逻辑设备LPT1可以是并行打印机,也可以是其他并行设备;可以是0号打印机,也可以是1号打印机。同样,逻辑设备CON1可以是串行端口的鼠标,也可以是游戏杆等其他串行设备。所谓设
11、备独立性也称为设备无关性,它是指用户程序中的逻辑设备与实际使用的物理设备无关,可以脱离具体的物理设备来使用设备;由操作系统建立逻辑设备与物理设备之间的映像关系,并由操作系统做相应的连接工作。Linux 系统采用将外部设备看作是一个独立的文件来解决增加新设备的问题。无论向计算机系统中添加哪种类型的设备,只需要在系统内核中添加必要的设备驱动程序即可,当使用该设备时,系统内核都可以用与访问文件一样的方式来访问设备。设备文件就是在外部设备和操作系统之间提供一种标准的接口,使用户可以像使用普通文件一样来使用外设,所不同的就是打开一个设备文件相当于为一个进程分配设备,关闭一个设备文件相当于释放一个进程所占
12、用的设备。在Linux系统中,设备文件通常存放在/dev目录下。从设备文件的名称可以看出它使用设备的主设备号和次设备号来指定外设,主设备号用于说明设备类型,而次设备号用于说明具体是哪一个设备。例如,设备文件/dev/hda指的就是系统中的第一个硬磁盘驱动器。其中hd是硬磁盘的英文缩写(hard disk),同时也是主设备名;而a是次设备名,表示第一个硬磁盘。如果有多个硬磁盘,则以hda、hdb等表示;如果每个磁盘上有多个分区,则在次设备号后用数字编号来表示分区,如hda0、hdb3等等。设备文件还可细分为块设备和字符设备两种。块设备指以固定长度的数据块为单位来组织和传送数据的设备,如磁盘、磁带
13、等;字符设备指以单个字符为单位来传递信息的设备,如终端显示器、打印机等。大多数设备都同时提供数据块和字符两种数据访问方式,但是每一种设备都有其最佳的访问方式。例如,对于终端一般采用字符访问方式,而对于磁盘则两种方式都可以采用。设备文件中最特殊的是/dev/null,它就像“黑洞”一样,将所有写入的数据吞噬。通常将它作为一个废物池,将不需要的输出信息或是要删除的文件送到这里。注意,送到这里的文件是不可恢复的。如果用它作为一个输入文件,如catmyfile.txt,则会产生一个零长度的myfile.txt文件。在Linux系统中除了普通文件、目录文件、连接文件、设备文件外,还有管道(FIFO)文件
14、和套接字文件。4112 文件权限文件是系统和普通用户的软件资源,因此,文件有系统文件与用户文件。对于系统文件如果不加限制地访问,可能会由于无意或有意的操作造成这些文件被删除或修改而使操作系统无法正常工作;同样,对于用户文件如果不加限制地访问,也会使用户的程序与数据被破坏或泄密;另外,当文件被多个用户或进程共享时,如果不加以限制则可能会破坏文件的一致性,造成结果错误。换句话说,由于文件需要共享、保护和保密,所以操作系统要对文件设置权限(也称为文件存取权限)。文件权限即文件读、写和执行的许可权。Linux 系统是多用户、多任务的操作系统,为了保证系统、用户程序与数据的安全性,对文件的存取权限有严格
15、的规定。Linux采用存取控制表(access control lists)机制,把用户与文件的关系定为三类:第一类是文件所有者(文件主),即创建文件的人。第二类是同组用户,即几个有某些共同关系的用户组成的集体。第三类是其他用户。Linux 把文件权限也分为三类:第一类是可读,用r表示。第二类是可写,用w表示。第三类是可执行,用x表示。每一类用户的文件权限设置成三位,如果为可读、可写、可执行,则表示为rwx;如果没有某类权限,则用-表示;例如,某类用户的文件权限为r-x,表示该类用户对文件只有读、执行权限,而没有写的权限。因此,一个文件需要用9位来表示三类用户的文件权限。实际上在Linux系统
16、的终端中用 ls l 命令查看一个文件的权限时,系统显示的是文本视图,用户看到的是十个字符,第一个字符表示文件类型,如果为-表示普通文件、b是块设备文件、c是字符设备文件、l是连接文件、d是目录文件、s是隐藏文件。第二到四个字符表示文件主的权限,第五到七个字符表示同组用户的权限,第八到十个字符表示其他用户的权限。例如,显示为-rw-r-r-。Linux系统除了文本视图外,还可以采用数字视图,用9个二进制位表示权限。每个二进制位为1表示可读(显示 r)或可写(显示 w)或可执行(显示 x);为0表示不可读或不可写或不可执行(显示-)。但数字视图主要在文件权限修改命令中使用,用三位二进制一组的八进
17、制数字(07)输入。Linux系统默认文件主对所创建的文件拥有可读、可写和可执行(如果是可执行文件)权限,对创建的目录拥有所有的权限;同组用户和其他用户只有可读与可执行(如果是可执行文件或目录)权限。这样Linux系统根据用户与文件的关系和用户对文件的使用权限一起构成一个文件的完整权限。图形方式下文件权限如图4-5所示,图中表示三类用户对可执行文件f3的各自权限为:文件主可读、写和执行,同组和其他用户可读、执行但不可写;用文本视图的表示形式为rwxr-xr-x。图4-5 文件权限在Linux系统中,每个文件都在文件说明信息中保存着自己的文件存取控制表,当用户进行文件操作时,需要先验证用户的文件
18、存取权限。4113 特殊权限(特殊标志)Linux系统中的文件还有一类特殊权限。在图4-5文件权限选项卡中,可以看到特殊权限的设置项目有:“设置用户ID”、“设置组群ID”和“粘附”三项。1、SUID(设置用户ID)先通过一个例子来说明“设置用户ID”的作用。我们知道有些命令只有超级用户或具有超级用户权限的系统管理员才能运行;例如,fdisk、useradd等等。如果以普通用户stu登录系统,运行命令:stulocalhost stu$/sbin/fdisk l结果显示:Cannot open/dev/had这个结果说明以普通用户身份执行fdisk命令时没有打开磁盘块设备读/写的权限。如果超级
19、用户或系统管理员把/sbin/fdisk文件属性中的“设置用户ID”选项选中,则stu用户再次执行fdisk l命令时,显示结果为:Disk/dev/hda:8589 MB,8589934592 bytes255 heads,63 sectors/track,1044 cylindersUnits=cylinders of 16065*512=8225280 bytes Device Boot Start End Blocks Id System/dev/hda1 *1 196 1574338+7 HPFS/NTFS/dev/hda2 197 936 5944050 83 Linux/dev/
20、hda3 937 1002 530145 82 Linux swap/dev/hda4 1003 1044 337333+83 Linux这个结果说明,“设置用户ID”选项有效时普通用户也有打开磁盘块设备读/写的权限,就可以执行具有超级用户权限的命令了。Linux系统中本身就有一些命令是“设置用户ID”选项有效的,如su(改变用户身份)、sudo(改变用户身份执行命令)、passwd(设置用户口令)等命令,所以这个选项有效时实际上会改变用户的身份。也就是说,对于某些需要读、写外部设备的应用程序而言,设置 SUID之后,便能任意存取该应用程序的拥有者权限所及之全部资源。因此,对于SUID选项的设
21、置一定要慎重,特别是系统管理员千万不要把需要超级用户权限的命令设置SUID,否则可能会给系统带来极大的安全隐患。2、SGID(设置组群ID)在Linux系统中有一些应用程序的属性中“设置组群ID”选项设置成有效,如wall(向所有同意接受公告信息的用户终端发送消息)、write(向指定的终端发送消息)命令以及一些系统安装的游戏程序等。如果系统管理员把这个选项置为无效,则普通用户无法使用这些命令。例如,把write命令的SGID选项置为无效后,普通用户使用write命令发送信息时系统会显示权限不够。但就用户设置SGID选项而言,只对目录有效。若目录被设置SGID选项后,任何用户在此目录下创建或向
22、该目录复制的文件、目录的所属组群会被重设为该目录的所属组群而不是创建者所属的组群。3、Sticky(粘附)要了解“粘附”权限的作用先看看Linux系统是如何使用它的。在Linux图形界面的根目录下选中tmp目录并查看它的权限属性。如图4-6所示。图4-6 tmp目录的权限属性从图4-6可以看到,tmp目录对所有的用户都有读、写和执行的权限,而且特殊权限的“粘附”选项被选中。这意味着所有用户的临时文件都可以存放在该目录下,这样是否会导致用户之间的文件或目录误删除呢?下面做一个实验,以用户名stu1登录系统并在/tmp目录下建立一个临时文件temp.txt:stu1localhost tmp$vi
23、 temp.txt再从另一个虚拟终端以用户名stu2登录系统并进入/tmp目录,执行命令:stu2localhost tmp$rm temp.txt系统提示:无法删除temp.txt:不允许的操作。这就是“粘附”选项的作用,用户stu2即使有该目录的写权(可以建立文件),但不能改写或删除其他用户的文件或目录。因此,如果用户在使用中如果需要这样的目录时可以把该目录属性的权限“粘附”选项选中,这样该目录中的内容只能由各个文件、目录的拥有者或超级用户才能删除。412 文件系统的概念文件系统是操作系统中实现对文件的组织、管理和存取的一组系统程序和数据结构,或者说它是管理软件资源的软件,对用户来说它提供
24、了一种便捷地存取信息的方法。不同的操作系统可能会采用不同的文件系统,例如,MS-DOS的msdos文件系统、Windows的FAT16、FAT32、NTFS等文件系统。Linux操作系统自身采用的是ext2或ext3文件系统,目前ext3文件系统是Linux默认的文件系统;Linux系统能支持使用许多种类的文件系统,即这些文件系统可以挂接在Linux系统的某一个安装(挂接)点上,并由Linux系统来访问它们。4121 Linux文件系统结构在Linux操作系统中把ext2或ext3以及Linux系统所支持的各种文件系统称为逻辑文件系统。由于每一种逻辑文件系统服务于一种特定的操作系统,具有不同的
25、组织结构和文件操作函数,所以Linux系统在传统的逻辑文件系统上增加了一个虚拟文件系统(VFS)的接口,如图4-7所示。图4-7 Linux文件系统层次结构用户虚拟文件系统(VFS)逻辑文件系统Cache缓冲区网络协议字符设备块设备网络设备逻辑文件系统按照某种方式对系统中的所有设备,包括字符设备、块设备和网络设备进行统一管理,并为这些设备提供访问接口。虚拟文件系统位于层次结构中的最上层,它是用户与逻辑文件系统的接口,它管理系统中各种逻辑文件系统,屏蔽这些逻辑文件系统的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口。对于普通用户而言,感觉不到各种逻辑文件系统之间的差别,可以
26、使用Linux系统的命令来操作其他逻辑文件系统所管理的文件。例如,挂接磁盘上某个分区中Windwos操作系统的FAT32逻辑文件系统,并用cp命令复制文件或用vi命令编辑文件等。在Linux系统中,还有两种特殊的文件系统,即swap和proc文件系统。在安装Linux时,系统会要求用户划分一个swap类型的分区以便挂接swap文件系统。Linux系统与Unix系统一样,在内存与磁盘之间采用交换技术,把内存中长时间不活动的进程交换到swap分区(文件系统)上。这个文件系统安装一般在Linux系统安装过程中自动完成,Linux不支持使用mount命令挂接swap文件系统。对于proc文件系统,也称
27、为伪文件系统或虚拟文件系统,它所表现出来的是/proc目录,但该目录不占用任何磁盘空间,它实际上是Linux内核在内存中所建立的系统内核映像。proc文件系统被用于从内存读取进程的信息,因此,通过它可以让外部环境了解系统内核的执行情况、系统资源的使用情况等。4122 Linux使用的逻辑文件系统Linux最初设计时使用与minix操作系统兼容的文件系统,目的是便于和minix系统进行数据交换。但是这种文件系统严重局限于14个字符的文件名,并且文件的大小不能超过64MB。因此,minix文件系统很快被ext文件系统所取代,ext文件系统是第一个专门为Linux开发的文件系统类型,叫做扩展文件系统
28、。它对Linux早期的发展产生了重要作用。但是,由于它在系统稳定性、速度和兼容性上存在许多缺陷,现在已经很少使用了。为了提高ext文件系统性能并增加部分缺少的功能,Rey Card设计了ext2文件系统并于1993年发布。ext2文件系统是为解决早期ext文件系统的缺陷而设计的可扩展、高性能的文件系统,它又被称为第二版的扩展文件系统(即ext2fs)。ext2fs是Linux文件系统类型中使用最多的格式,采用磁盘高速缓冲区技术,在文件存取速度和CPU利用率上有较好的性能,是GNU/Linux系统中标准的文件系统。ext2文件系统可以支持长达255个字符的文件名,其单一文件大小和文件系统本身的容
29、量上限与文件系统本身的簇(若干个扇区组成一个簇)大小有关。在常见的Intel x86兼容处理器的计算机系统中,簇最大为4KB,单一文件大小上限为2048GB,而文件系统的容量上限为6384GB。尽管Linux可以支持种类繁多的文件系统,但是2000年以前几乎所有的Linux发行版都使用ext2作为默认的文件系统。ext2文件系统也存在一些问题,由于它的设计者主要考虑的是文件系统速度性能方面的问题,而在写入文件内容时,并没有同时写入文件的控制信息(例如文件存取权限、所有者及创建和访问时间等)。换句话说,Linux先写入文件的内容,然后等到有空的时候才写入文件的控制信息。如果出现写入文件内容之后,
30、但在写入文件的控制信息之前系统突然断电,就可能造成文件系统就会处于不一致的状态。在一个有大量文件操作的系统中,出现这种情况会导致很严重的后果。为了加快对文件的读、写操作,一般磁盘上文件系统都有磁盘高速缓冲区的支持,文件操作的数据暂时存放在磁盘高速缓冲区中。当不使用某个文件系统时必须将该文件系统卸下,以便将磁盘高速缓冲区中的数据写回到磁盘中,无论文件系统是在硬盘、软盘还是在U盘都是如此。因此,每当系统要关机时,必须将其所有的文件系统全部卸下后才能进行关机,这一点可以从Linux系统关机显示的信息中清楚地看到。如果在文件系统尚未卸下前就关机(如停电),那么重开机后就会造成文件系统的资料不一致,这时
31、操作系统就必须做文件系统的重整工作,将不一致与错误的地方修复。然而,这个过程是相当耗时的,特别是容量大的文件系统不能百分之百保证所有的资料都不会丢失,特别在大型的服务器上可能会出现严重的问题。针对文件一致性问题,由开放资源社区开发了ext3日志文件系统,早期主要开发人员是Stephen Tweedie。ext3文件系统被设计成是ext2文件系统的升级版本,并尽可能地方便用户向ext3文件系统迁移。ext3文件系统在ext2文件系统的基础上加入了记录元数据的日志功能,努力保持向前和向后的兼容性,也就是在目前ext2文件系统的格式之下再加上日志功能。ext3文件系统有更好的安全性,此类文件系统最大
32、的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回朔追踪。由于资料的写入动作包含许多的细节,例如,改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,如果每一个细节进行到一半时被中断,就会造成文件系统的不一致,因而需要重整。然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回朔到需要的地方并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快。除了与ext2文件系统兼容之外,ext3文件系统还通过共享ext2文件系统的元数据格式继承了ext2文件系统的其他优点。比如,ext3文件系统用户
33、可以使用一个稳固的fsck工具。由于ext3是基于ext2的代码,所以它的磁盘格式和ext2 的相同,这意味着一个干净卸载的ext3文件系统可以作为ext2文件系统毫无问题地重新挂接。如果现在使用的是ext2文件系统,并且对数据安全性有较高的要求,可以考虑升级使用ext3文件系统。ext3文件系统最大的缺点是,它没有现代文件系统所具有的能提高文件数据处理速度和解压缩的高性能。当然,Linux系统还有其他可用的文件系统,这取决于不同的Linux发行版本。如jfs日志文件系统、ReiserFS平衡树结构的文件系统和xfs日志文件系统。4123 Linux支持的逻辑文件系统Linux操作系统支持的文
34、件系统种类繁多,在/lib/modules/2.4.20-8/kernel/fs目录(不同Linux的发行套件和版本,目录的位置和名称可能有所不同)中保存有以Linux当前使用的和所支持的文件系统为名称的子目录,这些子目录里是对应文件系统模块的二进制代码。Linux支持的常见文件系统有:1、minix是Linux系统最早支持的一种文件系统,虽然本身没有什么特色,能力也有限,但一直被认为是最可靠的文件系统。2、xiaminix文件系统的一个修正版,改变了文件名和文件系统大小的限制,但没有增加其他的新特点,一直没有流行起来。3、msdos是在MS-DOS、Windows3.x和某些OS/2操作系统
35、上使用的一种文件系统,采用8个字符的文件名加上3个字符的扩展名。4、umsdosLinux下的扩展msdos文件系统,支持长文件名、文件所有者、文件权限、链接和设备文件等高级文件属性。允许Linux系统使用普通的msdos文件系统,而无须建立单独的分区。5、iso9600标准CDROM文件系统,支持长文件名。6、nfs网络文件系统,允许在多台计算机之间共享文件系统。便于从联网的计算机上使用资源。7、hpfs是微软LAN Manager中的文件系统,同时也是IBM的LAN Server和OS2操作系统的文件系统。HPFT能访问较大的硬盘驱动器,并改善了文件系统的安全特性。8、sysvSystem
36、 V和Coherent操作系统在Linux平台上的文件系统。9、vfatWindows 9.x和Windows NT/2000下使用的一种DOS文件系统,其在MS-DOS文件系统的基础上增加了对长文件名的支持42 Linux 目录介绍 Linux系统的文件系统与现代其他操作系统一样采用树形目录结构,对用户而言,所看到的文件系统目录结构就像一棵倒置的树,称为目录树,如图4-8所示。整个目录树有一个根节点“/”,称为root,树的根就是整个文件系统的最顶层目录,即根目录;每一个子目录都是目录树的枝节点,都可以作为独立的子树,即每一个子目录又可以包含文件和下级子目录;每一个文件在目录树上表现为一个叶
37、子节点,它们位于目录树的末端。从严格意义上来说,真正的目录树应该使每一个目录或文件都有唯一的绝对路径,但是,由于Linux系统中文件或目录的共享采用创建链接的方法,所以造成目录树由树形结构变成网状结构。图4-8 Linux文件系统目录结构/(root)binbootdevetchomelibmntprocrootsbintmpusrvarataraidvideostu1stuxmycmyshbinX11R6421 根目录在安装Linux系统时会创建根分区并在此安装逻辑文件系统ext2或ext3的根目录。在该目录下只有一些系统的隐藏文件(以.文件名表示)和系统固定设置的一些子目录。如果执行ls命
38、令我们可以看到:rootlocalhost/#ls al总用量 221drwxr-xr-x 21 root root 4096 3月 2 10:03.drwxr-xr-x 21 root root 4096 3月 2 10:03.-rw-r-r-1 root root 0 3月 2 10:03.autofsckdrwxr-xr-x 2 root root 4096 2003-02-04 .automount-rw-1 root root 156 1月 26 12:13.bash_historydrwxr-xr-x 2 root root 4096 2月 10 15:40 bindrwxr-xr
39、-x 3 root root 4096 2月 10 16:07 bootdrwxr-xr-x 21 root root 118784 3月 2 10:04 devdrwxr-xr-x 94 root root 8192 3月 2 10:03 etc-rw-r-r-1 root root 455 12月 2 20:16.fonts.cache-1drwxr-xr-x 17 root root 1024 2月 13 18:30 homedrwxr-xr-x 2 root root 4096 2003-01-25 initrddrwxr-xr-x 10 root root 4096 12月 3 03
40、:44 libdrwx-2 root root 16384 12月 3 01:35 lost+founddrwxr-xr-x 2 root root 4096 2003-01-28 miscdrwxr-xr-x 4 root root 4096 12月 2 20:14 mntdrwxr-xr-x 2 root root 4096 2003-01-25 optdr-xr-xr-x 77 root root 0 3月 2 10:02 procdrwxr-x-28 root root 4096 3月 2 14:17 rootdrwxr-xr-x 2 root root 8192 2月 10 15:4
41、0 sbindrwxr-xr-x 3 root root 4096 12月 3 03:17 tftpbootdrwxrwxrwt 13 root root 4096 3月 2 11:10 tmpdrwxr-xr-x 16 root root 4096 1月 31 22:35 usrdrwxr-xr-x 28 root root 4096 2月 10 15:57 var所有目录建立时,系统都会自动建立两个目录文件,“.”和“.”;前者代表该目录文件自身,后者代表该目录的父目录。Linux 文件系统由许多目录和文件组成,尽管没有强制的规定,但一般来说Linux各个目录的作用是不同的。422 基本目
42、录1、/bin目录该目录下存放的大多是二进制文件的可执行程序,也有一些较小的可执行程序是shell脚本程序。这些程序都是系统程序,实际上我们所使用的许多命令就是该目录中的程序。例如,cp复制文件命令、date查看日期命令、ls查看当前目录内容命令、rm删除文件命令、mv文件移动或更名命令等等。Linux系统为什么要把许多可执行程序放在/bin目录中呢?如果我们用echo命令显示系统变量PATH来查看系统设置的路径时可以看到:rootlocalhost/#echo$PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/loca
43、l/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin显示的信息中“:”为路径的分隔符,可以看到许多目录下都有bin和sbin目录,这些目录都是存放可执行的程序,系统预先设置好这些目录的路径,以后在任何权限许可的目录下执行这些程序时,命令解释程序都可以找到它,而不必切换到/bin目录下。这里显示的是超级用户登录的路径信息,如果是普通用户,则可能显示为:stu1localhost stu1$echo$PATH/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:
44、/home/stu1/bin普通用户不显示/root/bin路径信息,而显示/home/用户名/bin。2、/sbin目录该目录与/bin目录类似,也是存放二进制文件的可执行程序、shell脚本程序和一些符号链接文件,这些程序也是Linux系统的命令,不过这些命令是给超级用户或系统管理员进行系统维护使用的,普通用户没有使用它们的权限。例如,badblocks检查磁盘设备中损坏的区块命令、ifconfig显示或设置网络设备命令、mkfs建立各种文件系统命令、fdisk磁盘分区命令、shutdown系统关机命令等等。树形目录的特点之一就是可以方便地实现程序、数据的分类存放。Linux系统的sbin
45、目录一般都是用来存放与系统维护有关的程序,因此对用户的权限要求比较高。从上一小节的超级用户与普通用户的路径信息也可以清楚地看到这一点。例如,在普通用户的路径信息中都没有包含sbin目录。3、/lib目录该目录下存放是系统应用程序运行时所需要的动态链接库程序、shell脚本程序和一些符号链接程序。4、/boot目录该目录下存放系统引导、启动时使用的一些文件和目录,如grub目录、vmlinuz内核压缩文件以及必要的内核映像文件等。5、/root目录超级用户的目录。如果以超级用户登录系统,则该目录为超级用户的工作目录。6、/mnt目录该目录为超级用户或系统管理员安装临时文件系统时使用的目录(安装挂
46、接点)。一般系统会自动在该目录下建立cdrom和floppy两个子目录,以便用户在使用光驱或软驱这样的外部设备时挂接临时文件系统。如果用户要使用usb接口的存储设备,也可以在该目录下建立usbdisk子目录,插入U盘后用mount命令挂接U盘上的文件系统,这样访问/mnt/usbdisk目录实际上就是访问U盘。在Fedora Core 6.0中已经实现了自动挂接,插入U盘后,系统自动检测并在新增的media目录中自动建立一个disk子目录作为该U盘的挂接安装点。如果要共享MS Windows下的逻辑驱动器,则可以在该目录下建立winc、wind等子目录以表示C、D等逻辑驱动器,再用mount命
47、令分别挂接它们。例如:#cd/mnt#mkdir winc#mount/dev/hda1/mnt/winc要注意的是目前许多种Linux发行套件的内核对支持NTFS类型的文件系统存在问题,只能挂接FAT16和FAT32类型的文件系统;但是可以从相关网站上下载内核补丁程序以满足挂接NTFS类型文件系统的需要(见4.3.3.2的参考示例3)。7、/tmp目录该目录为临时文件目录,有时应用程序运行的时候会产生临时文件,/tmp目录就是用来存放临时文件的。/var/tmp目录的作用和这个目录相似。8、/opt目录该目录一般情况下为空,但有些软件包也可以安装在这里,比如在Fedora Core 5.0中
48、,OpenOffice就是安装在这里。有些我们自己下载、编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以指定./configure prefix=/opt/目录。9、/tftpboot目录该目录是实现TFTP服务的默认下载目录。TFTP服务在嵌入式系统开发中连接目标板与宿主机,目标板通过TFTP服务器从宿主机下载程序与数据。要使用该目录必须先开启TFTP服务,系统默认是关闭的,但只在第一次使用时需要配置,以后开机时自动运行。TFTP服务配置及测试说明:在Linux系统的终端下执行setup命令,用光标键或鼠标选择System services选项,找到其中的tftp并用空格键选
49、中(显示*时为选中状态),再去掉ipchains和iptables两项服务(即用空格键去掉它们前面的*号)。然后选择Firewall configuration选项,选中No firewall。最后,退出setup,执行如下命令来启动TFTP服务。#service xinetd restart配置完成后可以测试一下TFTP服务器是否可用。一般在宿主机上自己tftp自己即可检查,其步骤为:第一、执行 cp/etc/inittab/tftpboot(复制inittab文件到/tftpboot目录下)。第二、执行 tftp 192.168.10.25(宿主机的IP地址)。第三、在提示符tftp下输入
50、 get inittab。如果执行后显示类似如下信息:Received 741512 bytes in 0.7 seconds就表示TFTP服务器已经配置成功,在当前目录下就会有刚刚下载的inittab文件。如果出现的信息为:Timed out则表示TFTP下载没有成功,可以用下列命令查看TFTP服务是否开通。#netstat a|grep tftp如果TFTP服务器没有配置成功,则按以上步骤重新配置。10、/lost+found目录 在ext2或ext3文件系统中,当系统意外崩溃或计算机非正常关机时会产生一些文件碎片,这些文件碎片就放在这个目录里。当系统重新启动时fsck(文件系统检查)程序