[本站原创] [连载教程系列] 《Windows和它的父亲》关于DOS 第二章 第一节
第二章 文件系统和命令系统
第一节 DOS的文件系统
DOS有一套完备、严谨的文件系统。其实,这只是DOS提供给用户的管理信息的方法,实质上是用来管理信息的。首先要弄清楚某个文件到底代表的是什么信息,然后再对它进行有目的操作。从文件本身的角度看,每一个文件都有以下几个特性(properties):
1. 文件主名(File Main Name):人要有自己的名字,每个文件也要有自己的名字。DOS下,文件主名可以由不超过8个字节的(至多8个半角字或4个全角字)字符组成,但是以下几个字符是禁用的:?、*、〈、〉、/、、|、:、;、,、.、+、空格。但是Windows对这个规定做了加工,文件主名的长度扩充至256个字节,取消了空格的禁用。为什么要有禁用呢?因为DOS中这些字符已经有了它的特定含义,关于这一点在以后会有介绍。还有一点要注意:DOS还为每个常用的外部设备都起了名字,这些名字也不能被用作一般文件的主名,列表如下:
|
表2-1-1 设备名表
2. 文件扩展名(File Extension Name):就像人为了标明自己的身份而穿上不同的工作服一样,文件光有文件名还不够,还要有一个不超过3个字符的'扩展名'以标明该文件的用途(Windows中长度要求放宽到与文件主名之和不超过256个字节)。文件的扩展名是区分文件类型的重要依据。一些常用的文件扩展名列表如下:
|
表2-1-2 常用扩展名表
*文档是文件的一种,它是由用户编辑的各种文件;
**临时文件的扩展名也可能是T01、%A%…;
***压缩包是这样一类文件:许多文件由压缩软件压缩后存储在一个文件中,这种文件就叫做压缩包。它是把压缩前的文件恢复的信息源,所以要保证它的完好。
通常我们把文件主名和文件扩展名统称为文件名(File Name),用“文件主名.文件扩展名”的形式写出,比如一个文件的文件主名是MYFILE,文件扩展名是EXT,那么该文件的文件名就是MYFILE.EXT,我们实际是通过文件名来找到它代表的文件的。文件名是文件的最重要的特性,这一点在Windows下是可以完全套用的。
3. 文件属性(File Attribute):每个文件都可能有四种属性,它们是只读(Read Only)、隐含(Hidden)、系统(System)和归档(Archive)。只读文件不能任意改写和删除;隐含文件不能任意查看;系统文件不能任意改写、删除和查看;归档属性几乎为所有文件所共有,没有什么限制作用。一个文件可以同时具有多种属性,互不冲突。
4. 文件大小(File Size):文件大小也是文件的一种特性?Yes。文件的大小在DOS下也是有专门的字节来记录的,刚刚建立的文件的大小是0个字节。当然文件大小也是可以修改的,所以文件逻辑大小和实际大小并不一定一致,有些病毒就是通过把文件大小改小来隐藏其罪恶之躯的。文件大小和文件占用磁盘空间有区别,也有联系。文件占用的磁盘空间和磁盘的簇(cluster)的大小有关,假设磁盘最小簇为xKB,文件大小为yKB,则文件占用的磁盘空间为([y÷x]+1)×xKB。
5. 文件建立日期和时间(File Created Date & Time):任何一个文件,一经建立,DOS便自动把建立时的系统日期和时间写入文件中,这就能确定文件的建立的时间和日期了。那么DOS又是怎么知道系统日期和时间的呢?是DOS控制基本输入输出系统(BIOS)从互补金属氧化物半导体(CMOS)上读取的,它也是可改的。
文件系统是DOS的核心,也是以后的章节的基础,一定要牢牢掌握。
第二章 文件系统和命令系统
第二节 DOS的树形目录管理模式
文件多了,就有了一个管理的问题。最好是像书柜里的书一样,一类书放在特定的一个抽屉里。DOS为文件也准备了这样的“逻辑抽屉”,只不过在DOS中,它被称为目录(directory)罢了!一张已经格式化的磁盘上,都有一个根目录(Root Directory),好比是一个柜子;在根目录下,又有许多子目录(Sub Directory),就相当于柜子上的抽屉。目录下面可以存储文件,而子目录也是一种特殊的文件,有自己的文件名、建立日期和时间,大小为一个最小磁盘最小簇。所以有人争论说文件还有一种目录属性,我是赞同的。
这样,DOS下的文件系统,就形成了这样一种格局:根目录下存储着一些文件和子目录,而子目录下又存储着一些文件更下一级的子目录…这多么像自然界中的树呀!不是吗?根目录就像树干,子目录就像树枝,而树枝又分叉儿。文件就像树叶,长在树干和树枝上。根目录下的子目录称为一级子目录,其下级子目录称为二级子目录,依此类推,但级数是有限制的。那么怎样才能准确无误地找到每一个文件呢?不难。DOS提出了一个路径(path)的概念,在DOS中表达一个文件的定位遵从以下的规则:
1. 首先确定盘符(drive)。DOS给软盘分配的盘符是A和B,给硬盘分配的盘符是从C开始的若干个字母,给光盘和网络映射盘分配的盘符又在最后一个硬盘盘符以后。弄清文件存在以哪个盘符为代号的盘中,这是第一步。
2. 其次确定所在的目录。不同级的目录用“\”号隔开,根目录用单独一个“\”号表示。这样说也许有一点儿抽象,举个例子来说。比如一个文件名是Eiyl7xb9.DAT文件在根目录下的Windows子目录下的Java子目录下的Packages子目录下的Data子目录下(吓人吧),它的路径就是“\Windows\Java\Packages\Data”;
3. 文件的准确定位就要写成“盘符:路径\文件名”的形式。如果上面那个文件存在C盘上,“C: \Windows\Java\Packages\Data\ Eiyl7xb9.DAT”就是这个文件的准确定位。
4. 每个子目录中都有两个下一级子目录:“.”和“..”,前者代表当前目录(Current Directory) ,也就是这个目录本身;后者代表其所在目录(Location Directory),也叫其父目录(Parent Directory)。比如:“C:\Windows\.”和”C:\Windows”是一回事,“C:\Windows\Java\..”和“C:\Windows”也是一回事。
5. 为了方便用户,DOS提供了两个通配符(Wildcard Character)“?”和“*”。用它们可以一次指定一批文件。“?”代表一个半角未禁用字符或者空格,“*”代表任意多个未禁用字符或者空格。“?”和“*”既可以用在文件主名中,也可以用在文件扩展名中,但不能用在路径中。比如,所有文件(All the Files)可以用”*.*”来匹配;以M开头的所有文件可以用“M*.*”来匹配;所有的Word文档可以有“*.DOC”来匹配;A1.TXT,A3.TXT,A10.TXT,A100.TXT、A100.EXE和ABC.WAV这6个文件中,前2、3、4、5、6个,可以分别用A?.TXT、A??.TXT、A???.TXT、A???.?X?和A*.*匹配;C盘当前目录的上级目录的所有以GB开始的MIDI文件可以用“C:..\GB*.MID”来匹配。而“C:\Windows\Ja??\Pack*\E*.*”则是非法的。一般用户如果要用一批文件,它们一定会在文件名上有某些共同点,用通配符匹配就特别快捷。DOS高版本和Windows系统规定:若扩展名和“.”省略不写,相当于写了“.*”。
6. 每个文件都处在一定的目录下,DOS会可以指定一个目录为系统的当前目录,又叫缺省目录(Default Directory)。为什么叫缺省目录呢?因为如果系统处在这个目录下,文件可以不必写出路径,而是直接写文件名。也就是说,系统是在路径前加上缺省目录后才把文件定位的,除非你连盘符都指定了。若系统的缺省目录是“C:\Windows”的话 ,“C:\Windows\ Progman.EXE”写成“Progman.EXE”就行了。而且,长长的“C: \Windows\Java\Packages\Data\ Eiyl7xb9.DAT”也可以简写成“Java\Packages\Data\ Eiyl7xb9.DAT”。注意,“Java”前的“\”也要一起省去!“\Java\Packages\Data\ Eiyl7xb9.DAT”表示当前盘(Current Drive,缺省目录所在的盘)的根目录下的Java子目录下的Packages子目录下的Data子目录下的Eiyl7xb9.DAT文件。
这就是DOS的树形管理模式。这个管理模式对计算机操作系统界的影响是不可估量的,DOS 2.0版本开始起采用。从此人们摆脱了费时费力的“分辨模块”,可以清清楚楚地把不同性质、种类或归属的文件分别放入不同的子目录内。在不同的子目录下的文件可以同名。这样,就产生了一批“标准”的文件名(当然是不成文的),比如安装文件名一般是SETUP或INSTALL,说明文件一般是README等,从而潜移默化地促进了计算机世界的统一。
Windows对子目录的概念做了加工,提出了文件夹(File Folder)的概念,文件夹里不仅能放文件,还能放其他计算机资源,使计算机资源的任何一个部分不在一个文件夹内,就是一个文件夹本身,但它的管理模式仍然是树形的,文件定位方式也完全一样,由此可见,DOS对Windows产生了多么深远的影响!
第二章 文件系统和命令系统
第三节 DOS的命令系统
以上两节详细地介绍了DOS的文件系统。那么,我们用户如何来实际地操作文件呢?当然如果从深入的汇编观点来看,文件的建立和管理是极繁琐的。难道每个人都得先学汇编再学DOS吗?不,那只是程序员的事儿。DOS为普通用户准备了一套“命令系统”,用户只需要花一点力气记住一些常用的命令(command),就能简单地完成文件和磁盘管理任务了。
图2-3-1 DOS命令的输入和执行示意
那么到底什么是DOS的命令呢?要回答这个问题,还是先打开计算机。DOS启动完毕后,系统便会出现一个命令提示符(Command Prompt),图2-3-1举的例子中,“C:\WINDOWS\Desktop>”便是一般会出现的命令提示符,它由两个部分组成,一个是系统的当前目录(C盘的Windows子目录下的Desktop子目录),还有一个是大于号(“>”),后面停着一个闪闪的光标(Cursor),表示用户可以输入命令了。图2-3-1中输入了一个“DIR A:\*.EXE/W”的DOS命令,怎样才算是一条命令输入完了呢?只要按下键盘上的回车(Enter或Return)键就行了。可见,直观地讲,命令就是用户在命令提示符和回车键之间输入的一串字符。
但是,仅仅给出这种解释,恐怕朋友们不会满意。难道说随便打进去一段字符都能叫做命令?是的。但是,DOS只能识别和执行其中的合法(Correct)命令,对于非法(Bad)命令,它只是冷冰冰地给出一个“Bad command or file name”的提示,便又开始等待输入下一条命令了。
我们一般地讲DOS命令,当然是指DOS的合法命令。命令有哪些种类,又有怎样的格式呢?先来看看DOS本身的组成再说吧!一张可以启动DOS系统的软盘至少有以下的三个文件:IO.SYS 、MSDOS.SYS和COMMAND.COM。前面两个文件是系统文件,它们中包括基本设备的驱动程序,还为用户提供了一批命令。这一批由系统文件提供的命令直接驻留内存,不需要任何外部文件的支持就能执行,因而被称为内部命令(Internal Command)。内部命令具有强大的文件管理功能,可以基本满足用户的一切文件管理需要。凡是由内部命令不能解决的问题,可以通过程序文件、命令文件和批处理文件这三种COMMAND.COM能解释的可执行文件来实行外部支持,这三种文件就称为DOS的外部命令(External Command)。任何一个软件都是通过外部命令的方式得到执行的,而任何一个非外部命令的文件如果得不到一个外部命令的使用,就永远不会有机会进入内存。所以,编写外部命令和其所用数据文件,就是所谓的”软件开发”,以后会专门讨论。
命令都有共同的格式。一般地,一个完整的DOS命令分三个部分:
1. 命令主体(Command Body):当然,这是一个命令的最重要的部分。一个内部命令和一个外部命令文件的文件主名都可以是命令主体。
2. 命令行参数(Command Line Parameter):命令主体后加一个空格符,就可以加写一些参数提供给命令主体。一般地,命令主体指向的程序会根据不同的参数产生不同的执行结果。比如在图2-3-1中的命令中,“A:\*.EXE”就是命令行参数,DIR命令会根据不同的参数得出不同的显示结果。
3. 开关(Switch):一个“/”或“-”号后加一个或一串字符,就形成了一个命令的开关。在命令主体和命令行参数都相同的情况下,开关的不同同样会使命令的执行结果不同,在图2-3-1中的命令中,“/W”就是一个开关。开关一般位于命令行参数之后,开关与命令行参数之间、开关与开关之间无须留有空格。
DOS简洁、明了的命令系统比较符合自然语言习惯,这使得它十分易学易用。在第三、四两章中,我们将熟悉一些常用的DOS命令。因为本专栏的读者朋友们都有一定的DOS基础,所以我会讲一些重点和难点。Windows系统中取消了命令系统,而实行的图标化的操作。但它的本质还是和一条条地执行命令没有什么区别的。