巧妙刪除帶子目錄的目錄
如現在在操作係統中有個目錄文件(jiàn)compierebook,在其下麵(miàn)有兩個子目錄文件,分別為chap01與chap02。現在用戶需要刪(shān)除目(mù)錄文件compierebook。此時該如(rú)何操作呢?如(rú)果(guǒ)用戶直接使(shǐ)用rmdir compierebook命令,那麽係統會提示“目錄非(fēi)空,不能夠刪除”的錯誤(wù)信息。拿(ná)到用戶隻有先利用命令刪除(chú)各個子目錄,然後再來刪除(chú)這個compierebook目錄文件嗎?其實不用。下麵筆(bǐ)者就給大家介紹一個刪除帶子目錄的目錄文件。即同時刪除所(suǒ)有的子目錄文件與當前的目錄文件。
一、文件創建與(yǔ)刪(shān)除的控製管理。
在Unix操作係統中,普通文件與目錄都是文件。為(wéi)此(cǐ)在操作係統中無論是普通文件還是目錄文(wén)件都對應於一個文件名和inode數。當用(yòng)戶創建一個目錄(lù)時,在這個文(wén)件的上級目錄文件裏會添加關於創建目錄的 文件名和(hé)inode信息(xī)。同理,當刪除一個目錄文件時,也會同時(shí)刪除其上(shàng)級目錄文件中關於這個要刪除目錄的信息。所以在刪除一個目錄時,係統(tǒng)會查看這(zhè)個目錄文件,看看其是否有下級子目錄的(de)信息。如(rú)果(guǒ)有的話,就會拒絕刪除,並提醒用戶“目錄(lù)非空不能夠刪除”。如果沒有下一級子目錄信息的話,那麽係統就會刪除用(yòng)戶指定的目錄。所以說,在Unix係統中刪除(chú)某(mǒu)個目錄時,必須一級級的刪除。現刪除子目錄,然後再刪除上一級目錄。
二、在rmdir中(zhōng)帶多個參數。
在大部分(fèn)情況下,我們在使(shǐ)用rmdir命令刪除目錄的時候(hòu),都隻是帶一個目(mù)錄文件(jiàn)名參數,如rmdir compierebook。其實(shí)查看這個命令的幫助,可(kě)以發現這(zhè)個命令可以帶多個文件名參(cān)數,即(jí)同時刪除多個目錄文件。如用戶可以使所(suǒ)用rmdir 目(mù)錄文件1 目錄文件2 目錄文件3(中間利用空格分割)等(děng)來同(tóng)時刪除多個目(mù)錄文件(jiàn)。如果(guǒ)需(xū)要注意的是,其在刪除目錄的時候,有先後(hòu)順序。即先刪除目錄文件1、再刪除目錄文件2、最後刪除目錄文件3。所以說,雖然在同一個命令中帶入了三個參數,但是其在刪除(chú)的時候(hòu)不是一起刪(shān)除的,而是根據參數的順序來依次刪除文件。
這是否可以給我們一點啟示呢?既然其實一個個依次刪除的,那我們就可以將(jiāng)子目錄文(wén)件參數放(fàng)在前、將上級目錄文件參(cān)數放在後,是否可(kě)以一次性刪除帶子目錄的目錄文件呢?如上例所示,如果筆者使用rmdir chap01 chap02 compierebook會(huì)有什(shí)麽結果呢?執行這個命(mìng)令後,大家會驚奇的發現,這個命令可以(yǐ)執行成功(gōng)。然後再去查看相關的目錄,會發現這(zhè)個目錄文件(包括其(qí)下級(jí)的兩個子(zǐ)目錄文件)都(dōu)已經刪除了。所以(yǐ)說,我(wǒ)們在(zài)刪除帶子目錄的的目錄文件時(shí),不需要再分次去執行rmdir命令。而隻需要在這(zhè)個命令中依次填上多個目錄文件名參數,然後執行一次即可。在執行這(zhè)個命令的時候,係統先刪除子目錄chap01,然後會在其上級目錄文件compierebook中將關於chap01目錄的文件名(míng)和inode信息刪除。這(zhè)個步驟完成後,再來刪除第一個文件chap02。其也是進行這兩步操作,在刪除自身目錄的同時更新(xīn)上級目(mù)錄文件的相關(guān)信息。然後再刪除第(dì)三個(gè)文件。在刪除第三個文件的時候,由於在目錄文件中已經沒(méi)有了子目錄文件的信息,所(suǒ)以此時這第三個文件就可以正常刪除了。
在執行這個命令(lìng)的時候,主要注意三個細節問題。一是這個命令可以帶多個(gè)目(mù)錄文件參數,不同(tóng)的參數之間利用(yòng)空格隔開。注意這(zhè)裏不是利用分號或者冒(mào)號等符號分割,隻需要使用空格即可。二是這個命令中的各個參數(shù)文件是由先後(hòu)順序的。如果目錄文件的參數位置(zhì)不(bú)對,很可能刪除作業不會成功(gōng),甚至會出現一些莫名其妙的結果。對於這一點(diǎn),筆者(zhě)在後麵的(de)內容中還(hái)會具體舉例子說明。第三在刪除(chú)某個目錄文件時,用戶必須位於這個目錄之外的位置。如果這個命令中帶了多個目錄文件名參數時,要在這(zhè)些(xiē)指定的(de)目錄之外。否則的話係統會提示用戶無法刪(shān)除這些目錄(lù)。這個(gè)比較容(róng)易理解,因為在Windows操(cāo)作係統中也有(yǒu)類(lèi)似的控製。
筆者最好強調一點,當(dāng)刪(shān)除某個目錄文件時其主要會進(jìn)行兩步操作,分別為刪除自身目錄與更新上級目錄中的(de)信息。當一個命令(lìng)中帶有多個目錄文件參數時,這兩步操作也(yě)是同時(shí)完成的。而不(bú)是(shì)說先(xiān)全部刪除所指定的(de)目錄(lù)文(wén)件,然後再更新其上級目錄文件中的信息。理(lǐ)解這個內容,對於(yú)真正的理解(jiě)rmdir命令(lìng)刪除多個(gè)目錄文件會有很大的幫助。
三、若目錄文件名(míng)位置放(fàng)置不當會(huì)導致什麽(me)後果?
如果在使用這個rmdir命令(lìng)的時候,這個目錄文件名參數的位置放置不對,會有(yǒu)什麽(me)後果呢?如筆者現(xiàn)在是按這個格式書寫這個命令:rmdir compierebook chap01 chap02。在執行了這(zhè)個命令之後,我們再查看係統目錄會發現compierebook這個目錄文件沒有被刪除。但是其下麵的兩個子目錄文件chao01與chap02已經被刪除了(le)。最(zuì)後係統會提示用戶(hù)“目錄非空不能夠刪除”。這到底(dǐ)是怎麽回事情(qíng)呢?
在解釋這個原因之前,筆者再給大家舉(jǔ)一個例子。如筆(bǐ)者現在使用(yòng)命令rmdir chap01 compierebook chap02。將第一個目錄文件參數與第(dì)二個目錄文件參數位(wèi)置(zhì)對調一下。然(rán)後再執行(háng)這個命令,會出現什麽結果呢?其實這個命令的執行結果與上(shàng)麵(miàn)這個命令的執行結果一樣。compierebook目錄文件仍(réng)然存在,但是其與兩個子(zǐ)文件已經被刪除了(le)。不過最後係(xì)統仍然會提示一個“目錄非空、刪(shān)除失敗(bài)”的錯誤信(xìn)息。Unix操作係統到底是在變什麽(me)模(mó)式呢?
其實,我們(men)隻(zhī)要將這個命令分解成三(sān)個命令即可。如可以將rmdir compierebook chap01 chap02命(mìng)令分解為rmdir compierebook、rmdir chap01 與rmdir chap02。在執行第一個命令的時候,由於(yú)此時其下麵的子目(mù)錄文(wén)件還沒有被刪除,故第一個命令執行失敗。然後再執行第二個命(mìng)令,由於在目錄文件chao01下麵沒有子目錄文件了,故可以正常刪除。同(tóng)理,第三(sān)個命令也正確執行了(le)。從以上的分析中至少可(kě)以看出三點。一是某個目錄刪(shān)除失敗並不會影響其他的目錄的刪除操作。二是這(zhè)個命令並不會循環(huán)操作。即在(zài)刪除(chú)第一個目錄文件時,如果失敗了,則會直接跳過。在其他(tā)目錄(lù)刪除完成之後,不(bú)會再回過頭來嚐試再次刪除上(shàng)次刪(shān)除失敗的目錄文(wén)件(jiàn)。由於(yú)不會循環(huán)操作,為此這(zhè)個(gè)目錄文(wén)件參數位置的放置就直接(jiē)影響到這個命(mìng)令的(de)執行結果。第三是目錄(lù)刪除成功不會有錯誤(wù)警(jǐng)告信息。但是如果目錄(lù)刪除失敗(bài)了,則會提醒錯誤(wù)信息(xī)。如果有兩個目錄文件沒有被成功刪除,那麽係統就會提醒兩個錯誤信息。並且會(huì)提示,那個目錄文件沒有被(bèi)成功刪除。所以(yǐ)這個命令執行完成後,如果有錯誤信息的話,那麽(me)仔細查看這個錯(cuò)誤提示就非常有必要。特別是對比錯誤信息的條(tiáo)數與提供的目錄(lù)文件(jiàn)參(cān)數的數量,可以判(pàn)斷有多少(shǎo)目錄文件被成功(gōng)刪除了。如利用腳本程序來實現這個功能的話,就可以利用cat命令來統計錯誤信息(xī)出現的次數(shù),然後自(zì)動與參數的個數進行(háng)比較,並得出有多少目錄文件被成功刪除的結論。
四(sì)、利用mkdir來建立目錄樹。
了解了這(zhè)個rmdir目錄文(wén)件刪除操作的原理之後,那麽再來理解mkdir命令來建立目錄樹就會比較輕鬆了。建立目錄樹就是一次性建立多個目錄,並且是帶子目錄(lù)的目錄。也就是說,現在要一次性建立三個目錄(lù)computerbook、chap01、chap02。其中後(hòu)麵兩個目錄為第一個目(mù)錄的子目錄。現在這三個目錄都不存在。一個個的運行mkdir命令雖(suī)然可以最終實(shí)現既定的結果,但是顯然操作起來比較麻煩。如果要建立(lì)目錄比較多(duō)的話,那要執行能夠(gòu)多(duō)個(gè)命令了。其實根據上麵的rmdir命令的工作原(yuán)理(lǐ),大家也可以想的(de)到,通過(guò)mkdir命令加多個參數的形式來一次性建立目錄樹(shù)。如要實現上麵的(de)需求,可以使用命令mkdir conputerbook chap01 chap02命令即可。注意參數的順序非常的重要。如果參數的位置前後顛倒的話,那麽這個命令就可能執行不成功。會一個(gè)目錄(lù)文件都沒(méi)創(chuàng)建或者隻是創建(jiàn)了部分的(de)目錄。所以在使用這個命令的時候,需要注意參數的順序。同時要清楚一(yī)點,帶多(duō)個參(cān)數的情(qíng)況下,其建立各個目錄的動作(zuò)是相對獨立的。了解這些內容後(hòu),那麽利用mkdir命令(lìng)來一次性創建(jiàn)目錄樹就會變得(dé)簡單許多。
關鍵詞:文件目錄(lù)
閱讀本文後您有什麽感想? 已有 人給(gěi)出評價!
- 0
- 0
- 0
- 0
- 0
- 0