1.5 Linux文件系统入门
Linux文件系统是Linux系统的核心模块。通过使用文件系统,用户可以很好地管理各项文件及目录资源。本节将对Linux常用的文件系统、文件的基本概念和目录的基本概念等进行系统、全面的介绍。
1.5.1 Linux常用文件系统介绍
随着Linux的不断发展,其所能支持的文件格式系统也在迅速扩充。特别是Linux2.4内核正式推出后,出现了大量新的文件系统,其中包括日志文件系统Ext3、ReiserFS、XFS、JFS和其他文件系统。Linux系统核心可以支持10多种文件系统类型:JFS、ReiserFS、Ext、Ext2、Ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。其中,较为普遍的有如下几种:
● Minix是Linux支持的第一个文件系统,对用户有很多限制,性能低下,有些没有时间标记,文件名最长为l4个字符。Minix文件系统最大的缺点是只能使用64MB的硬盘分区,所以目前已经没有人使用该文件系统了。
● Xia是Minix文件系统修正后的版本,在一定程度上解决了文件名和文件系统大小的局限;但没有新的特色,目前很少有人使用。
● ISO9660标准CDROM文件系统,通用的Rock Ridge增强系统,允许长文件名。
● NFS(Network File System)是Sun公司推出的网络文件系统,允许在多台计算机之间共享同一文件系统,易于从所有这些计算机上存取文件。
● SysV是System V/Coherent在Linux平台上的文件系统。
● 扩展文件系统(Ext File System)是随着Linux不断地成熟而引入的,它包含了几个重要的扩展,但提供的性能不令人满意。1994年人们引入了第二扩展文件系统(second Extended Filesystem,Ext2)。
● Ext3(third Extended Filesystem)是由开放资源社区开发的日志文件系统,被设计成Ext2的升级版本,尽可能地方便用户从Ext2向Ext3迁移。Ext3在Ext2的基础上加入了记录元数据的日志功能,努力保持向前和向后的兼容性。这个文件系统也许称为Ext2的下一个版本更为合适些。Ext3还支持异步的日志,这意味着其性能可能比Ext2还好。
除了上面这些Linux支持的文件系统外,Linux还可以支持基于Windows和Netware的文件系统,例如UMSDOS、MSDOS、VFAT、HPFS、SMB和NCPFS等。兼容这些文件系统对Linux用户来说是很重要的,毕竟在桌面环境下Windows文件系统还是很流行的,而Netware网络也有许多用户,Linux用户也要共享这些文件系统的数据。
● UMSDOS是一种Linux下的MSDOS文件系统驱动,支持长文件名、所有者、允许权限、连接和设备文件。允许一个普通的MSDOS文件系统用于Linux,而且无须为其建立单独的分区。
● MSDOS是在DOS、Windows和某些OS/2操作系统上使用的一种文件系统,其名称采用“8+3”的形式,即8个字符的文件名加上3个字符的扩展名。
● VFAT是在Windows 9X和Windows 2000下使用的一种DOS文件系统,其在DOS文件系统的基础上增加了对长文件名的支持。
● HPFT——高性能文件系统(High Performance File System,HPFS)是微软LAN Manager中的文件系统,同时也是IBM的LAN Server和OS/2的文件系统。HPFT能访问较大的硬盘驱动器,提供了更多的组织特性,并改善了文件系统的安全特性。
● SMB是一种支持Windows for Workgroups、Windows NT和Lan Manager的基于SMB协议的网络操作系统。
● NCPFS是一种Novell NetWare使用NCP协议的网络操作系统。
● NTFS是由Windows 2000/XP/2003操作系统支持,一个特别为网络和磁盘配额、文件加密等安全特性设计的磁盘格式。
1.5.2 Linux文件介绍
本节详细介绍Linux文件系统中文件的定义、文件名的规定以及文件的类型。
1.文件与文件名
在多数操作系统中都有文件的概念。在Linux中文件是存储信息的基本结构,是被命名(称为文件名)的存储在某种介质(如磁盘、光盘和磁带等)上的一组信息的集合。Linux文件均为无结构的字符流形式。文件名是文件的标识,由字母、数字、下画线和圆点组成的字符串构成。用户应该尽量选择有意义的文件名,以方便识别和记忆。
为了便于管理和识别,用户可以把扩展名作为文件名的一部分。圆点用于区分文件名和扩展名。扩展名对文件分类是十分有用的。用户可能对某些大众已接纳的标准扩展名比较熟悉。例如,用C++语言编写的源代码文件总是具有cpp的扩展名。用户可以根据自己的需要,随意加入自己的文件扩展名。以下例子给出一些有效的Linux文件名:
Test //不带扩展名的文件 Readme.txt //文本文件 example.pl //perl脚本文件 Auto.bat //批处理文件
2.文件的类型
Linux系统中有三种基本的文件类型:普通文件、目录文件和设备文件。
(1)普通文件:是用户最经常使用和熟悉的文件,它又分为文本文件和二进制文件两种。
● 文本文件:这类文件以文本的ASCII码形式存储在计算机中,是以“行”为基本结构的一种信息组织和存储方式。
● 二进制文件:这类文件以文本的二进制形式存储在计算机中。用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等。
(2)目录文件:主要目的是用于管理和组织系统中的大量文件,其存储一组相关文件的位置、大小等与文件有关的信息。目录文件一般简称为目录。
(3)设备文件:Linux系统把每一个I/O设备都看成一个文件(这点与Windows系列操作系统有很大区别),与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。从用户的角度来看,对I/O设备的使用和一般文件的使用一样,不必了解I/O设备的细节。设备文件可以细分为块设备文件和字符设备文件。前者的存取是以字符块为单位的,后者则以单个字符为单位。
1.5.3 Linux目录介绍
本节详细介绍Linux系统中树型目录结构、工作目录、用户主目录等重要概念。
1.树型目录结构
在计算机系统中存有大量的文件,如何有效地组织与管理它们,并为用户提供一个使用方便的接口是文件系统的主要任务。Linux系统以文件目录的方式来组织和管理系统中的所有文件。所谓文件目录就是将所有文件的说明信息采用树型结构组织起来。整个文件系统有一个“根”(root),然后在根上分“杈”(directory),任何一个分杈上都可以再分杈,杈上也可以长出“叶子”。“根”和“杈”在Linux中被称为是“目录”或“文件夹”。而“叶子”则是文件。实践证明,此种结构的文件系统效率高,现代操作系统基本上都采用这种结构方式。
如前所述,目录也是一种类型的文件。Linux系统通过目录将系统中所有的文件分级和分层地组织在一起,形成了Linux文件系统的树型层次结构。以根目录为起点,所有其他的目录都由根目录派生而来,用户可以浏览整个系统,可以进入任何一个已授权进入的目录,从而访问其中的文件。
实际上,各个目录结点之下都会有一些文件和子目录。并且,系统在建立每一个目录时,都会自动为它设定两个目录文件,一个是“.”,代表该目录自己;另一个则是“..”,代表该目录的父目录。
Linux目录提供了管理文件的一个方便途径。每个目录都包含文件。用户可以为自己的文件创建自己的目录,也可以把一个目录下的文件移动或复制到另一个目录下,而且能移动整个目录,与系统中的其他用户共享目录和文件。也就是说,用户能够方便地从一个目录切换到另一个目录,而且可以设置目录和文件的管理权限,以便允许或拒绝其他人对其进行访问。同时,文件目录结构的相互关联性使分享数据变得十分容易,几个用户可以访问同一个文件,因此允许用户设置文件的共享程度。
2.工作目录与用户主目录和路径
从逻辑上讲,用户登录Linux系统之后,每时每刻都处在某个目录之中,此目录被称作工作目录或当前目录(Working Directory)。工作目录是可以随时改变的。用户初始登录到系统中时,其主目录(Home Directory)就成为其工作目录。工作目录用“.”表示,其父目录用“..”表示。
用户主目录是系统管理员增加用户时建立起来的(以后也可以根据实际情况改变),每个用户都有自己的主目录,不同用户的主目录一般互不相同。用户刚登录到系统中时,其工作目录便是该用户的主目录,通常与用户的登录名相同。用户可以通过一个“~”符来引用自己的主目录。如下所示的两条路径就是完全一样的:
//使用显示文件内容的cat命令对路径为/home/test/tool/software的文件进行显示 /home/test#cat ~/tool/software /home/test#cat /home/test/tool/software
3.路径
对文件进行访问时,要用到“路径”(Path)的概念。顾名思义,路径是指从树型目录中的某个目录层次到某个文件的一条道路。此路径的主要构成是目录名称,中间用“/”隔开。任一文件在文件系统中的位置都是由相应的路径决定的。
用户在对文件进行访问时,要给出文件所在的路径。路径又分相对路径和绝对路径两种。绝对路径是指从“根”开始的路径,也称为完全路径;相对路径是从用户工作目录开始的路径。
用户要访问一个文件时,可以通过路径名来引用。并且为操作方便起见,完全可以根据要访问的文件与用户工作目录的相对位置来引用它,而不需要列出这个文件完整的路径名。例如,用户Patterson有一个名为class的目录,该目录中有两个文件:time.conf和test.java。若用户Patterson想显示其class目录中的名为time.conf的文件,可以使用下列命令:
/home/Patterson#cat /home/Patterson/class/time.conf
用户也可以根据文件time.conf与当前工作目录的相对位置来引用该文件。这时命令为:
/home/Patterson#cat class/time.conf
1.5.4 Linux目录结构
Linux系统的目录层次结构比较复杂,下面将对其进行介绍。
● /:根目录。在Windows,DOS或者其他类似的操作系统里面,每个分区都会有一个相应的根目录。但是Linux和其他UNIX系统则把所有的文件都放在一个目录树里面,/就是唯一的根目录。一般来讲,根目录下面很少保存什么文件,或者只有一个内核映像在这里。
● /boot:很多Linux系统把内核映像和其他一些和启动有关的文件都放在这里。
● /tmp:一般只有启动时产生的临时文件才会放在这个地方。我们自己的临时文件都放在/var/tmp。
● /mnt:这个目录下面放着一些用来安装其他设备的子目录,比如说/mnt/cdrom或者/mnt/floppy。在有些Linux中这个目录被/mount代替。
● /lib:启动的时候所要用到的库文件都放在这个目录下。那些非启动用的库文件都会放在/usr/lib下。内核模块是放在/lib/modules/(内核版本)下的。
● /proc:这个目录在磁盘上其实是不存在的。里面的文件都是关于当前系统的状态,包括正在运行的进程、硬件状态、内存使用的多少等。
● /dev:这个目录下保存着所有的设备文件。里面有一些是由Linux内核创建的用来控制硬件设备的特殊文件。
● /var:这里有一些被系统改变过的数据。比如说/var/tmp,就是用来储存临时文件的。还有很多其他的进程和模块把它们的记录文件也放在这个地方,包括如下一些重要的子目录:
➢ /var/log:这里放着绝大部分的记录文件。随着时间的增长,这个目录会变得很庞大,所以要定期清理;
➢ /var/run:包括了各种运行时的信息;
➢ /var/lib:包括了一些系统运行时需要的文件;
➢ /var/spool:邮件,新闻,打印序列的所在地。
● /root:root用户的主目录。
● /home:一般用户的主目录都会放在这个目录下。在Linux下,可以通过#cd ~来进入自己的主目录。
● /etc:这里保存着绝大部分的系统配置文件。相对来讲,单个用户的系统配置文件会保存在这个用户自己的主目录里面。下面列举其中一些重要的子目录:
➢ /etc/X11:这里放着X窗口系统(Linux中的图形用户界面系统)所需要的配置文件。XF86Config就是把配置储存到这个地方的。/etc/X11/fonts里面放着一些服务器需要的字体,还存放一些窗口管理器存放的配置文件;
➢ /etc/init.d:这个目录保存着启动描述文件,包括各种模块和服务的加载描述。所以如果不清楚的话,千万不要随便删除其中的文件,这里存放的文件都是系统自动进行配置的,不需要用户配置;
➢ /etc/rcS.d:这里放着一些连接到/etc/init.d的文件,根据runlevel的不同而执行相应的描述。这里的文件名都是由S来开头的,然后是一个两位的数字——表示各种服务启动的顺序。比如,S24foo就是在S42bar前面执行的。接着就是相应的连接到/etc/init.d下面的文件名字了;
➢ /etc/rc0.d - /etc/rc6.d:这里面也是一些连接文件,和/etc/rcS.d差不多。不同的是,这些只会在指定的runlevel下运行相应的描述。0表示关机,6表示重启。所有以K开头的文件表示关闭,所有以S开头的文件表示重启。目前来讲,文件的命名方式和/etc/rcS.d是一样的。
● /bin,/sbin:这里分别放着启动时所需要的普通程序和系统程序。很多程序在启动以后也很有用,它们放在这个目录下是因为它们经常要被其他程序调用。
● /usr:这是一个很复杂、庞大的目录。除了上述目录之外,几乎所有的文件都存放在这下面。下面列举其中一些重要的子目录:
➢ /usr/X11R6,/usr/X11,/usr/Xfree86:这里保存着X窗口系统所需要的文件,它的目录结构和/usr是一样的;
➢ /usr/bin:二进制可执行文件存放的目录,这里放着绝大部分的应用程序;
➢ /usr/sbin:这里放着绝大部分的系统程序;
➢ /usr/games:游戏程序和相应的数据会放在这里;
➢ /usr/include:这个目录保存着C和C++的头文件;
➢ /usr/lib:启动时用不到的库文件都会放在这里;
➢ /usr/info:这里保存着GNU Info程序所需要的数据;
➢ /usr/man:这里保存着man程序所需要的数据;
➢ /usr/src:这里保存着源代码文件;
➢ /usr/doc:这里保存着各种文档文件。这些文件可以帮助你了解Linux,解决问题和提供一些技巧;
➢ /usr/local:这里保存着本地计算机所需要的文件。在用户进行远程访问的时候特别有意义。这个目录在有些Linux系统下就是一个单独的分区,存放一些这台机子所属的那个用户的文件。里面的结构和/usr是一样的;
➢ /usr/shared,/usr/share这里保存着各种共享文件。