[本站原創] [連載教程系列] 《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. 文件大?。‵ile 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系統中取消了命令系統,而實行的圖標化的操作。但它的本質還是和一條條地執行命令沒有什么區別的。