2009年2月24日 星期二

資源回收桶應用

在windows xp裡,刪除了一個檔案(當然是指圖形下),使用者可以很輕易的在資源回收桶裡找到該檔案並還原至原來的位置;however,我目前的gnome的環境已經到2.22,nautilus已經到2.20,竟然還是沒有實現原地回復的功能,必須要自己跑到垃圾桶下把檔案放到他應有的位置。在終端機環境裡,利用rm來刪除資料除了使用rm -i來多一層讓自己麻煩的問答外(特別是該目錄下有超過1000個檔案),一旦刪除了就沒有後悔的餘地;偏偏刪除的當下認為可以刪除,過幾天後才後悔為什麼不留著...


本文分別提供圖形與文字介面的資源回收桶介紹,有誤刪檔案情況的朋友可以參考。

1.圖形介面的檔案回復:

nautilus沒辦法從垃圾桶復原當原來的位置,因此我們不考慮用他;我們使用在XFce的好用檔案管理員:thunar來當我們桌面環境的預設管理。

dpkg -l thunar || aptitude install thunar
安裝完後,可以開啟他,試著刪除隨便一個檔案:
Fig 1.按右鍵可以選擇在桌面製作一個軟連結(捷徑),或是傳送到mail client,或是傳到floppy上。介面很接近pcmanfm,不過功能上是比較完整一點。

我們試著刪除這個檔案,再到垃圾桶裡去找他:

Fig 2.在垃圾桶裡找到這個檔案,可以不必為了到底他原本的位置在哪裡而傷腦筋;可以利用restore的功能,就會回復到原來的位置。

這是一個相當貼心的功能!thunar裡除了好用的檔案管理之外,你還可以使用他的重新命名檔案工具:Bulk Rename(批次重新命名),不過這不在本文的範圍,我關心的重新命名比較接近變更副檔名、變換大小寫。
如果你的需求跟我接近,或許您還可以參考:bash練習(1)--大小寫互換



2.文字介面下的檔案回復:

我們需要一個可以刪除該檔案,又能夠把刪除的檔案回覆到原地的好工具:safedelete。不過debian並沒有維護這個好東西,他是由redhat來維護的,不過別擔心,我們可以透過alien來把他轉換成deb來安裝:

wget -c ftp://ftp.muug.mb.ca/mirror/redhat/redhat/linux/7.1/en/powertools/i386/RedHat/RPMS/safedelete-1.3-10.i386.rpm && dpkg -l alien || aptitude install alien -y
alien safedelete-1.3-10.i386.rpm
dpkg -i safedelete*deb
接著,我參考Jamyy大大的部落格,裡面詳細的介紹基本的設定跟應用。如果你想知道safedelete所帶來的command有哪些,可以透過
dpkg -L safedelete | grep bin
可得知有四個command可用:safedelete, undelete,safecnvtsafedelchk
首先,在家目錄的.bashrc或是.profile多增加幾個變數跟別名:
export SAFEDAYS=30  #30天保存期限
alias rm='/usr/bin/safedelete'
alias rmreal='/bin/rm -i'
修改完別忘了讓shell重新讀取.bashrc或.profile。接著我們檢視一下safedelete的參數:
-i, --interactive
-v, --verbose
-f, --force
-r, -R, --recursive
看來跟原本的rm接收的參數都一樣,很好,那麼直接把rm換成safedelete是很安全的。
再檢視undelete的參數:
-i , --info, 也就是檢視檔案的詳細資訊,包含權限等等。
-l, --list, 列出清單
-f, --file
-r, --replace
-p, --pattern <pattern> 是很常用到的參數。
-a, --all,也是很常用到的參數。
那麼safedelchk的參數呢?
不加參數時,就是清除超過保期限的檔案。
-d 10: root only command。
   root要刪除所有超過10天的檔案。所得到的後果是,root的safedelete的SAFEDAYS
   變成10天,無論原先的設定是大於或小於10天。這個期限跟使用者設定的天數無關。
-u   : root only command。root使用safedelchk不帶參數時,會清除所有超過保存期限
   的檔案;root透過-u參數讓自己只清除被自己刪除的檔案,以避免清除到使用者的資料。
   不過man page裡提到一個有趣的現象:
   假設使用者使用"su"變成root,雖然身份是root,但是login shell還是使用者本人,
   此時使用safedelchk -u還是刪到自己的。
   正確的切換到root身份及root的shell應該要使用"su -"才對,請注意。 
safecnvt則是一個轉換log版本的指令,在此我們可以忘記他。

根據以上,我們作幾個小筆記:
rm ~/.happy
undelete ~/.happy #一個檔案簡單的回覆

rm -r ~/.books/  #刪除一整個資料夾
undelete -l      #先列出有哪些被我們自己刪過的檔案
undelete -p /home/$USER/.books/* -a
             #回復符合pattern的所有檔案。
             #就算指復原一個檔案,也會把該資料夾復原回來。

safedelchk       #清除超過保存天數的檔案。
需要注意的是,這個rm是safedelete的alias阿!如果想要用原本的rm硬幹的話,就用我們剛剛的別名吧:
rmreal -rf  .no_more_ms/ 

參考來源:Jamyy's Weblog
檔案來源:http://rpm.pbone.net/index.php3/stat/4/idpl/2402345/com/safedelete-1.3-10.i386.rpm.html

沒有留言: