2.1 Linux文件系统入门
文件系统是Linux系统的核心模块之一,通过使用文件系统,用户可以很好地管理系统中各种文件和目录。本节将对Linux系统下常用的文件系统、文件,以及目录等基本概念进行系统全面地介绍。
2.1.1 Linux常用文件系统介绍
随着Linux系统的不断发展,其所支持的文件系统类型也在迅速扩充,尤其是2.4内核推出之后,涌现出了大量新的文件系统,其中包括日志文件系统Ext3、ReiserFS、XFS以及JFS等。目前Linux系统可以支持十多种文件系统类型,其中使用较为普遍的有:
· Minix是Linux系统支持的第一种文件系统,它对用户有很多限制,性能较低,有些还没有时间标记,文件名最长只能支持14个字符。Minix文件系统最大的缺点是只能使用64MB的硬盘分区,因而目前已经不再使用了;
· Xia是Minix文件系统修正之后的版本,在一定程度上解决了文件名和文件系统大小的局限,但由于没有新的特色,目前也很少有人使用;
· ISO9660是标准的CDROM文件系统,允许长文件名,目前使用较为普遍;
· NFS(Network File System)是Sun公司推出的网络文件系统,它允许在多台计算机之间共享同一文件系统,方便计算机之间的数据传输;
· SysV是System V/Coherent在Linux平台上的文件系统;
· Ext(Ext File System)称为扩展文件系统,它是随着Linux系统的不断成熟而引入的,它包含了一些重要的扩展,但提供的性能不太令人满意,于是在1994年又引入了Ext2(second Extended Filesystem);
· Ext3(third Extended Filesystem)是由开放资源社区开发的日志文件系统,它被设计为Ext2的升级版本,尽可能地方便用户从Ext2向Ext3迁移。Ext3在Ext2的基础上加入了记录元数据的日志功能,并尽力保持向前和向后的兼容性。Ext3文件系统也许称为Ext2的下一个版本更为恰当,它还支持异步的日志,其性能要比Ext2更好。
除了上面这些Linux文件系统之外,它还可以支持基于Windows和Netware的文件系统,例如UMSDOS、MSDOS、VFAT、HPFS、SMB以及NCPFS等。兼容这些文件系统对Linux用户来说也是非常重要的,因为在桌面环境下目前毕竟Windows文件系统还是很流行的,而Netware网络用户也不少,Linux用户需要共享这些文件系统的数据。
· UMSDOS是一种Linux系统下的MSDOS文件系统驱动,它支持长文件名、所有者、访问权限、链接,以及设备文件等。UMSDOS允许一个普通的MSDOS文件系统用于Linux,而无须为其建立单独的分区。
· MSDOS是在DOS、Windows以及一些OS/2操作系统上使用的一种文件系统,其命名采用“8+3”的形式,即8个字符的文件名加3个字符的扩展名。
· VFAT(Virtual File Allocation Table)是在Windows 9x和Windows 2000下使用的一种DOS文件系统,它是在DOS文件系统的基础上增加了对长文件名的支持。
· HPFT(High Performance File System)称为高性能文件系统,它是微软LAN Manager上的文件系统,同时也是IBM LAN Server和OS/2的文件系统。HPFT能够访问较大的硬盘驱动器,同时提供了更多的组织特性,并改善了文件系统的安全特性。
· SMB是一种支持Windows for Workgroups、Windows NT和Lan Manager的基于SMB协议的网络操作系统。
· NCPFS是一种Novell NetWare使用NCP协议的网络文件系统。
· NTFS(New Technology File System)是由Windows 2000/XP/2003操作系统支持,一种专门为网络和磁盘配额、文件加密等安全特性而设计的文件系统。
2.1.2 Linux文件介绍
本节将详细介绍Linux系统中文件的定义、文件名的命名规则,以及文件的类型等内容。
1.文件与文件名
大多数操作系统中都有文件的概念。Linux系统中文件是存储信息的基本结构,是被命名(称为文件名)的存储在某种介质(磁盘、光盘,或磁带等)上的一组信息的集合。Linux系统中的文件均为无结构的字符流形式。文件名是文件的标识,由字母、数字、下画线以及圆点组成的字符串构成。用户应该尽量选择有意义的文件名,以方便识别和记忆。
注意
Linux系统中的文件名长度应控制在255个字符以内。
为了便于管理和识别,用户可以把扩展名作为文件名的一部分。圆点用于区分文件名和扩展名。扩展名对文件分类是十分有用的。用户可能对某些大众已接纳的标准扩展名比较熟悉。例如,用C++语言编写的源代码文件总是采有cpp的扩展名。用户可以根据自己的需要,随意添加自己的文件扩展名。下面给出一些有效的Linux文件名:
Test // 不带扩展名的文件 Readme.txt // 文本文件 example.pl // perl脚本文件 libXRes.so // 动态链接库文件
2.文件的类型
Linux系统中有三种基本的文件类型:普通文件、目录文件和设备文件。
(1)普通文件:可以分为文本文件和二进制文件两种,它是用户最为常用的文件。
· 文本文件:以文本的ASCII码形式存储在计算机中,是以“行”为基本结构的一种信息组织和存储方式。
· 二进制文件:以文本的二进制形式存储在计算机中。用户一般不能直接阅读其内容,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像,以及声音等。
(2)目录文件:简称为目录,主要用于文件的管理和组织,目录中存储着相关文件的位置、大小等信息
(3)设备文件:Linux系统把每一个I/O设备都看成一个文件(这点与Windows系列操作系统有很大区别),与普通文件一样处理,这样可以使文件和设备的操作尽可能统一。从用户的角度来看,对I/O设备的使用和一般文件的使用一样,不必了解I/O设备的细节。设备文件可以细分为块设备文件和字符设备文件,前者的存取是以字符块为单位的,后者则以单个字符为单位。
2.1.3 Linux目录介绍
本节将详细介绍Linux系统中树型目录结构、工作目录,以及用户主目录等重要概念。
1.树型目录结构
计算机系统中存储着大量的文件,如何有效地组织与管理它们,并提供一个使用方便的用户接口是文件系统的主要任务。Linux系统以文件目录的方式来组织和管理系统中的所有文件。所谓文件目录就是将文件采用树型结构组织起来。整个文件系统有一个“根”(root),然后在根上分“杈”(directory),任何一个分杈上都可以再分杈,杈上也可以长出“叶子”。“根”和“杈”在Linux中被称为“目录”或“文件夹”,而“叶子”则为文件。这种结构的文件系统效率比较高,现代操作系统基本上都采用这种结构方式。
如前所述,目录本质上也是一类文件。Linux系统通过目录将系统中所有的文件分级、分层组织在一起,形成了Linux文件系统的树型层次结构。以根目录为起点,所有其他的目录都由根目录派生而来,用户可以浏览整个系统,可以进入任何一个已授权进入的目录,从而访问其中的文件。
实际上,各个目录结点之下都会有一些文件和子目录。并且系统在建立每一个目录时,都会自动为它设定两个目录文件,一个是“.”,表示目录本身;另一个则是“..”,表示目录的父目录。
注意
对于根目录(/),“.”和“..”都代表其自身。
Linux目录提供了管理文件的一个方便途径。用户可以为自己的文件创建目录,也可以把一个目录下的文件移动或复制到另一个目录下,同时也能移动整个目录,或者与系统中的其他用户共享某个目录和文件。也就是说,用户能够方便地从一个目录切换到另一个目录,而且可以设置目录和文件的访问权限,以便允许或拒绝其他用户对其进行访问。同时,文件目录结构的相互关联性使分享数据变得十分容易,几个用户可以访问同一个文件,而且还允许用户设置文件的共享程度。
注意
根目录(/)是Linux系统中的一个特殊目录。Linux是一个多用户的操作系统,其本身驻留的程序都存放在以根目录开始的专用目录之中。
2.工作目录、用户主目录和路径
从逻辑上讲,用户登录Linux系统之后,每时每刻都处在某个目录之中,此目录被称做用户的工作目录或当前目录(Working Directory),用户可以随时更改自己的工作目录。工作目录用“.”表示,其父目录用“..”表示。
用户主目录(Home Directory)是系统管理员添加新用户时建立起来的(以后也可以根据实际情况进行更改),每个用户都有自己的主目录,不同用户的主目录一般互不相同。用户刚登录到Linux系统中时,其工作目录便是该用户的主目录,该目录的名称一般与用户的登录名相同。
用户可以通过一个“~”符来引用自己的主目录。
下面给出的两条路径就是完全一样的:
//使用显示文件内容的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。如果该用户要显示出class目录中的名为time.conf的文件,可以使用下列命令:
/home/Patterson#cat /home/Patterson/class/time.conf
用户也可以根据文件time.conf与当前工作目录的相对位置来引用这个文件,如下所示:
/home/Patterson#cat class/time.conf
2.1.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:一般用户的主目录都会放在这个目录下。用户可以通过#cd ~ 来进入到自己的主目录。
· /etc:这里保存着绝大多数的系统配置文件。相对来讲,用户的系统配置文件会保存在用户自己的主目录中。下面列举其中一些重要的子目录。
➣ /etc/X11:存放X窗口系统(Linux中的图形用户界面系统)所需要的配置文件。
➣ /etc/init.d:这个目录保存着启动描述文件,包括各种模块和服务的加载描述。所以如果不清楚的话,千万不要随便删除其中的文件,这里存放的文件都是系统自动进行配置的,不需要用户配置;
➣ /etc/rc0.d - /etc/rc6.d:这里存放着一些链接到/etc/init.d的文件,根据runlevel的不同而执行相应的描述。其中rc0.d为停机模式;rc1.d为单用户模式;rc2.d为多用户模式,但没有NFS支持;rc3.d为网络多用户文本模式,为完整的多用户模式,是标准的运行级;rc4.d一般情况下不使用;rc5.d为网络多用户图形模式,也就是X11,进到X Window系统了;rc6.d为重启。在上述文件夹中,以S开头的文件表示重启,以K开头的文件表示关闭。
· /bin,/sbin:存放系统中的二进制可执行文件,主要包括一些系统命令和启动时所需要的程序。其中/sbin存放的程序主要为root调用。
· /usr:这是一个很复杂、庞大的目录。除了上述目录之外,几乎所有的文件都存放在这下面。下面列举其中一些重要的子目录。
➣ /usr/X11R6:这里保存着X窗口系统所需要的文件;
➣ /usr/bin:二进制可执行文件存放的目录,这里放着绝大部分的应用程序;
➣ /usr/sbin:这里存放着绝大部分的系统程序;
➣ /usr/games:游戏程序和相应的数据会放在这里;
➣ /usr/include:这个目录保存着C和C++的头文件;
➣ /usr/lib:启动时用不到的库文件都会放在这里;
➣ /usr/src:这里保存着源代码文件;
➣ /usr/local:这里面保存着本地计算机所需要的文件。在用户进行远程访问的时候特别有意义。这个目录在有些Linux系统下就是一个单独的分区,存放一些这台机子所属的那个用户的文件。里面的结构和/usr类似;
➣ /usr/share:这里保存着各种共享文件。