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