用戶的資料和程序大多以文件的形式保存。用戶使用Linux系統的過程中,需要經常對文件和目錄進行操作。本節講述了文件與目錄的基本概念、有關文件和目錄操作的命令以及如何在Linux環境下運行DOS命令。
文件與目錄的基本概念
在多數操作系統中都有文件的概念。文件是Linux用來存儲信息的基本結構,它是被命名(稱為文件名)的存儲在某種媒介(如磁盤、光盤和磁帶等)上的一組信息的集合。Linux文件均為無結構的字符流形式。文件名是文件的標識,它由字母、數位、下劃線和圓點組成的字串構成。用戶 應該選擇有意義的文件名。Linux要求文件名的長度限制在255個字符以內。
為了便於管理和識別,用戶可以把擴展名作為文件名的一部分。圓點用於區分文件名和擴展名。擴展名對於將文件分類是十分有用的。用戶可能對某些大眾已接納的標准擴展名比較熟悉,例如,C語言編寫的源代碼文件總是具有C的擴展名。用戶可以根據自己的需要,隨意加入自己的副文件名。
以下例子都是有效的Linux文件名。
reface
chapter1.txt
xu.c
xu.bak
1.文件的類型
Linux系統中有3種基本的文件類型:普通文件、目錄文件和設備文件。
普通文件是用戶最經常面對的文件,它又分為文本文件和二進制文件。
(1)文本文件:這類文件以文本的ASCII碼形式存儲在電腦中。它是以“行”為基本結構的一種信息組織和存儲方式。
(2)二進制文件:這類文件以文本的二進制形式存儲在電腦中,用戶一般不能直接讀懂它們,只有通過相應的軟件才能將其顯示出來。二進制文件一般是可執行程序、圖形、圖像、聲音等。
設計目錄文件的主要目的是用於管理和組織系統中的大量文件。它存儲一組相關文件的位置、大小等與文件有關的信息。目錄文件往往簡稱為目錄。
設備文件是Linux系統很重要的一個特色。Linux系統把每一個I/O設備都看成一個文件,並與普通文件一樣處理,這樣可以使文件與設備的操作盡可能統一。從用戶的角度來看,對I/O設備的使用和一般文件的使用一樣,不必了解I/O設備的細節。設備文件可以細分為塊設備文件和字符設備文件。前者的存取是以一個個字符塊為單位的,後者則是以單個字符為單位的。
2.樹型目錄結構
在電腦系統中存有大量的文件,如何有效地組織與管理它們,並為用戶提供一個使用方便的接口是文件系統的一大任務。Linux系統以文件目錄的方式來組織和管理系統中的所有文件。所謂文件目錄就是將所有文件的說明信息采用樹型結構組織起來,即我們常說的目錄。也就是說,整個文件系統有一個“根”(root),然後在根上分“杈”(Directory),任何一個分杈上都可以再分杈,杈上也可以長出“葉子”。“根”和“杈”在Linux中被稱為是“目錄”或“文件夾”。而“葉子”則是一個個的文件。實踐證明,此種結構的文件系統效率比較高。
如前所述,目錄也是一種類型的文件。Linux系統通過目錄將系統中所有的文件分級、分層組織在一起,形成了Linux文件系統的樹型層次結構。以根目錄為起點,所有其他的目錄都由根目錄派生而來。一個典型的Linux系統的樹型目錄結構如圖10-1所示。用戶可以浏覽整個系統,也可以進入任何一個已授權進入的目錄,訪問那裡的文件。
圖10-1 目錄樹結構
上圖中,我們只給出了目錄節點名稱,而沒有給出各個目錄之下的每一個文件。實際上,各個目錄節點之下都會有一些文件和子目錄。並且,系統在創建每一個目錄時,都會自動為它設置兩個目錄文件,一個是“.”,代表該目錄自己,另一個是“..”,代表該目錄的父目錄。對於根目錄,“.”和“..”都代表其自己。
Linux目錄提供了一個管理文件的方便途徑。每個目錄裡面都包含文件。用戶可以為自己的文件創建自己的目錄,也可以把一個目錄下的文件移動或復制到另一目錄下,而且能移動整個目錄,並且可以和系統中的其他用戶共用目錄和文件。也就是說。我們能夠方便地從一個目錄切換到另一個目錄,而且可以設置目錄和文件的管理許可權,以便允許或拒絕其他人對其進行訪問。同時文件目錄結構的相互關聯性使分享資料變得十分容易,幾個用戶可以訪問同一個文件。因此允許用戶設置文件的共享程度。
需要說明的是,根目錄是Linux系統中的特殊目錄。Linux是一個多用戶系統,操作系統本身的駐留程序存放在以根目錄開始的專用目錄中,有時被指定為系統目錄。在圖10-1中那些根目錄下的目錄就是系統目錄。
3.工作目錄、用戶主目錄與路徑
如前所述,目錄是Linux系統組織文件的一種特殊文件。為使用戶更好地使用目錄,我們介紹有關目錄的一些基本概念。
(1)工作目錄與用戶主目錄
從邏輯上講,用戶在登錄到Linux系統中之後,每時每刻都處在某個目錄之中,此目錄被稱做工作目錄或當前目錄(Working Directory)。工作目錄是可以隨時改變的。用戶初始登錄到系統中時,其主目錄(Home Directory)就成為其工作目錄。工作目錄用“.”表示,其父目錄用“..”表示。
用戶主目錄是系統管理員增加用戶時創建起來的(以後也可以改變),每個用戶都有自己的主目錄,不同用戶的主目錄一般互不相同。
用戶剛登錄到系統中時,其工作目錄便是該用戶主目錄,通常與用戶的登錄名相同。
用戶可以通過一個~字符來引用自己的主目錄。
例如命令
/home/WANG$ cat ~/class/software_1
和下面的命令
/home/WANG$ cat /home/WANG/class/software_1
意義相同。Shell將用用戶主目錄名來替換~字符。目錄層次創建好之後,用戶就可以把有關的文件放到相應的目錄中,從而實現對文件的組織。
(2)路徑
顧名思義,路徑是指從樹型目錄中的某個目錄層次到某個文件的一條道路。此路徑的主要構成是目錄名稱,中間用“/”分開。任一個文件在文件系統中的位置都是由相應的路徑決定的。
用戶在對文件進行訪問時,要給出文件所在的路徑。 路徑又分相對路徑和絕對路徑。 絕對路徑是指從“根”開始的路徑,也稱為完全路徑;相對路徑是從用戶工作目錄開始的路徑。
應該注意到,在樹型目錄結構中到某個確定文件的絕對路徑和相對路徑均只有一條。絕對路徑是確定不變的,而相對路徑則隨著用戶工作目錄的變化而不斷變化。這一點對於我們以後使用某些命令如cp和tar等大有好處。
用戶要訪問一個文件時,可以通過路徑名來引用,並且可以根據要訪問的文件與用戶工作目錄的相對位置來引用它,而不需要列出這個文件的完整路徑名。例如,用戶WANG有一個名為class的目錄,該目錄中有兩個文件:software_1和hardware_1。若用戶WANG想顯示出其class目錄中的名為software_1的文件,可以使用下列命令:
/home/WANG$ cat /home/WANG/class/software_1
用戶也可以根據文件software_1與當前工作目錄的相對位置來引用該文件。這時命令為:
/home/WANG$ cat class/software_1
文件和目錄操作相關命令
1.顯示文件內容命令
用戶需要查看一個文件的內容時,可以根據顯示要求的不同選用以下的命令。
(1)cat命令
功能1:在標准輸出上顯示文件。
語法:cat [ - 選項 ]文件
說明:該命令功能之一是用來顯示文件。它依次讀取其後所指文件的內容並將其輸出到標准輸出。
cat命令中各個選項的含義為:
- v 用一種特殊形式顯示控制字符,LFD與TAB除外。加了- v選項後,- T和- E選項將起作用。其中:
- T 將TAB顯示為 ^I,該選項需要與- v選項一起使用,即如果沒有使用- v選項,則這個選項將被忽略。
- E 在每行的末尾顯示一個$符,該選項需要與- v選項一起使用。
- u 輸出不經過緩沖區。
- A 等於- vET。
- t 等於- vT。
- e 等於- vE。
功能2:連接兩個或多個文件。
說明:該命令功能之二是用來將兩個或多個文件連接起來。
$ cat file1 file2 > file3
這樣就把文件filel和文件file2的內容合並起來,放入文件file3中。(此時在屏幕上並不能直接看到該命令執行後的結果。若想看到連接後的文件內容,可以再使用cat file3。)
需要說明的是,當文件內容過多時,就帶來一個問題,因為文本在屏幕上迅速地閃過,用戶來不及看清其內容。因此,當文件內容較大時,一般可用more命令分屏顯示,以免因屏幕滾動太快而無法看清。
(2)more命令
功能:在終端屏幕按屏顯示文字文件。
語法:more [ - 選項 ]文件
說明:該命令一次顯示一屏文本,顯示滿之後,停下來,並在終端底部顯示出- - More- - ,系統還將同時顯示出已顯示文本占全部文本的百分比。若要繼續顯示,按輸入或空白鍵即可。
more命令中各個選項的含義為:
- p 顯示下一屏之前先清屏。
- c 作用同- p基本一樣。
- d 在每屏的底部顯示更友好的提示信息:
- - More- - (XX%)[Press space to contiune , ‘q’ to quit . ]
而且若用戶輸入了~個錯誤命令,則顯示出錯信息,而不是簡單地鳴響。
- l 不處理< Ctrl+l >(換頁符)。如果沒有給出這個選項,則more命令在顯示了一個包含有< Ctrl+l >字符的行後將暫停顯示,並等待接收命令。
- s 文件中連續的空白行壓縮成一個空白行顯示。
2.執行中的命令
在more命令的執行過程中,用戶可以使用more自己的一系列命令動態地根據需要來選擇顯示的部分。more在顯示完一屏內容之後,將停下來等待用戶輸入某個命令。下面列出了more命令在執行中用到的一些常用命令,而有關這些命令的完整內容,可以在more執行時按h查看。這些命令的執行方法是先輸入i(行數)的值,再輸入所要的命令,不然它會以默認值來執行命令。
i空格 若指定i,顯示下面的i行;否則,顯示下一整屏。
i輸入鍵 若指定i,顯示下面的i行;否則,顯示下一行。
iÙ D 按【Ctrl+D】,若指定i,顯示下面的i行;否則,往下顯示半屏(一般為11行)。
id 同iÙ D 。
iz 同“i空格”類似,只是i將成為以下每個滿屏的默認行數。
is 跳過下面的i行再顯示一個整屏,默認值為1。
if 跳過下面的i屏再顯示一個整屏,默認值為1。
iÙ B 按【Ctrl+B】,往回跳過(即向文件首回跳)i屏,再顯示一個滿屏,默認值為1。
與iÙ B相同。
’ 回到上次搜索的地方
q或Q 退出more。
= 顯示當前行號。
v 在當前行啟動/usr/bin/vi對之進行編輯修改。
h 顯示各命令的幫助信息。
i/pattern 查找匹配該模式的第i行,默認值為1。
in 查找符合運算式的倒數i行,默認值為1。
!或! 在子Shell中執行命令。
i:n 在命令行中指定了多個文件名的情況下,可用此命令使之顯示第i個文件,若i過大(出界),則顯示文件名列表中的最後一個文件。
i:p 在命令行中指定了多個文件名的情況下,可用此命令使之顯示倒數第i個文件。若i過大(出界),則顯示第一個文件。
i:f 顯示當前文件的文件名和行數。
· 重復上次鍵入的命令。
例10-10:用分頁的方式顯示一個文件的內容。
$ more example1.c
/*-------------------------------------------*/
/* example1.c */
/*-------------------------------------------*/
/* author f [email protected] */
/* target f BBS main/login/top-menu routines */
/* create f 99/10/23 */
/* update f 99/12/15 */
/*-------------------------------------------*/
#define _MAIN_C_
#inc1ude < BBS. h >
jmp_buf byebye;
int talkrequest=NA;
tatic uschar Enter_uflag i
#ifdef SHOW_IDLE_TIME
--More- (3%)
3.less命令
less命令的功能幾乎和more命令一樣,也是用來按頁顯示文件,不同之處在於,less命令在顯示文件時允許用戶既可以向前又可以向後翻閱文件。
less命令的使用與more命令類似,在此就不贅述了,用戶如有不清楚的地方可直接查看幫助。
用less命令顯示文件時,若需要在文件中往前移動,按【b】鍵;要移動到用文件的百分比表示的某位置,則指定一個0~100之間的數,並按【p】鍵即可。
例如,需要按頁顯示test文件:
$ less test
4.head命令
如果用戶希望查看一個文件究竟保存的是什麼內容,可以只查看文件的頭幾行,而不必浏覽整個文件。用head命令只顯示文件或標准輸入的頭幾行。
語法:head [- n ] 文件
功能:顯示指定文件的前n行。
說明:該命令顯示每個指定文件的前面n行。如果沒有給出n值,默認為10。如果沒有指定文件,head就從標准輸入讀齲
例如,顯示文件example.c的前3行:
$ head - 3 example.c
/*-------------------------------------------*/
/* example1.c */
/*-------------------------------------------*/