這個小東西的功用是啥呢 ? 說穿了也沒什麼,就是將被程式鎖定的檔案解鎖,一般來說都是要刪檔或更名的時候發現做不到,才會發覺該檔被不知名的東西鎖定,雖然說那個 "不知名" 的東西大多都是 explorer.exe .... 其實還蠻諷刺的。有人會說,之所以會被鎖定,絕大多數都是因為執行了有問題的程式,然後跟作業系統的交互作用不正常,因而產生了一些錯誤,只要重開機就可以搞定,不要再去碰那個有問題的程式即可。可是問題來啦,首先你可能根本不知道那個 "問題程式" 是什麼 (所以光看 "工作管理員" 也沒用),二來當你做事做到一半,遇到這種鳥事卻只能重開機解決,有時實在讓人氣結,而這就是 Unlocker 存在的價值。
不過就如某 PTT 網友說的 "Windows 裡很多好用的第三方軟體在 Mac OSX 裡不過是個笑話",有人見過 Unlocker for Mac 嗎 ? 小弟見識不夠廣,還真的沒聽過。但是 Mac OSX 裡會不會發生類似的 "檔案被鎖定" 的靈異事件 ? 其實也會,但是機會微乎其微 [1]。原因說來複雜,跟作業系統及檔案系統的設計都有關係,特別是檔案系統,Mac OSX 使用的 HFS + 日誌式檔案系統相當優秀 [2],它可以追蹤每個檔案的路徑、名稱等資訊,所以很多在 Windows 裡做不到的怪事 (其實那些事情大多也是不該做的,比如說在檔案使用時胡亂地把檔案更名、移位或刪除等等),在 Mac OSX 裡可能都不是問題 (也就是不會出現警示視窗)。僅管如此,偶爾還是有機會遇到靈異現象,那時該怎麼處理呢 ?
這篇文章將提及兩個 shell command (其實也可以算是一個),它們必須在終端機下執行,其功用是監控檔案系統的一舉一動,而這種事情簡直就是偷窺系統核心 (kernel) 的 IO 狀況,故必須有 root 權限才行。
1. fs_usage
sudo fs_usage | grep "XXX"
這個指令只適用於 10.4,執行它之後,使用者的一舉一動都會被顯示在終端機的視窗裡,如果出了什麼問題,fs_usage 也會列出哪個程式是罪魁禍首,這對於找出問題的癥結很有幫助,視情況去把該程式關掉即可。
不過,由於 fs_usage 能給出的資訊太多了,所以照單全收反而是無意義的行為,我們只要擷取出有興趣的資訊即可,但 fs_usage 內建的過濾功能 (加上 -f filesys "XXX" 等等) 有點怪,試了好幾次都有問題,若要輸入 PID (Process ID) 又很不方便,故採用 pipe "|" 及 grep 去過濾資訊,而上面的截圖就是以 "test.txt" 為例,執行 fs_usage 後的部分結果。
2. opensnoop
sudo opensnoop -n AAA (應用程式)
sudo opensnoop -f BBB (檔案路徑)
sudo opensnoop | grep "CCC"
這個指令是 DTrace 的一部分,系統需求是 10.5 之上,其功能跟 fs_usage 差不多,但呈現的資訊較為精煉,且內建的過濾功能好用很多。
=======================
如上,雖然看起來有些艱深,但對於很少出問題的 Mac OSX 來說,偶爾用一次應該還不至於無法忍受吧 ? 不過有些人會發現 -- 耶 ? 怎麼執行失敗 ? 錯誤訊息說我不能用 sudo ?
讓一般使用者執行需 root 權限的指令
這部分算是本篇文章的題外話,因為使用 sudo 去執行需 root 權限的指令是有條件的。很久以前,當一般使用者要執行需 root 權限的指令時,必須用 su 指令將 login shell 轉換成 root 本身 (簡單的說就是以 root 登入),可是用 root 登入是很危險的事,因為這時對於惡意程式的攻擊毫無抵抗力,更別說自己可能會手滑刪到什麼不該刪的系統檔 ... 因此後來有人寫出了 sudo 這個指令,它可以讓使用者在輸入自己登入密碼的情況下,短時間內擁有 root 權限以執行高階指令。但由於不需 root 密碼即可使用,故並非所有使用者都有使用 sudo 的權限,這份權限被記載在 /etc/sudoers 中,不在該名單內的使用者將無法使用 sudo。
一般來說,有使用 sudo 權限的帳號即為 "管理者帳號",以 Mac OSX 為例,它根本沒有 root 密碼這種東西,系統預設不讓任何人以 root 登入,因為使用 sudo 就已足夠,且安全性較高 [3]。那 "非管理者" 的一般使用者要執行需 root 權限的指令該怎麼做 ? 我個人不建議一般人去更改 /etc/sudoers 裡的清單,因為那有語法限制,改錯了反而更糟,而且那會破壞一般使用者才有的 "權限保護",以後做錯事時系統可能不會提醒你。因此,我使用 su 指令來做類似的事 :
上圖是我的使用流程,在我的 Mac mini 中有兩個帳號 -- apple 及 home,前者為管理者帳號,故我使用 su 或 su - 指令登入 apple 帳號 (輸入的密碼是 apple 的登入密碼),之後再用 sudo 執行需 root 權限的指令 (使用完請記得用 exit 登出),如此一來就不用更改系統檔案了。
其實我本來想將這兩個指令包成 GUI 程式,但後來發現有人做過類似的東西 (即使大多不是免費軟體 [4]),再加上這指令需要 root 權限才能執行,故必須跟使用者詢問管理者帳密,在不知道程式碼的情況下用起來應該是怕怕的吧 ? 除非其他人信得過我 ....... So ..... 還是別把時間浪費在這種事情上,反正也很少用 (攤手)。
附註
1. Win 7 我是不確定啦,在 XP 裡倒是常常莫名地發生,有些連 Unlocker 都解不開,最後只能等重灌時一次解決 ....
2. 嗯,格式化硬碟之後,那個 "格式" 本身也是一套系統,稱為檔案系統,它也是會佔空間的,好像有蠻多人不知道這件事 .....。不過知道歸知道,之前我看到某雜誌的專文,裡面有個比較檔案系統的圖表,他老兄居然把檔案系統的大小也列進去了,個人覺得比那個還蠻無聊的 ...........
3. 雖然我不清楚原因,但 10.5 (或 10.6 ? 我有點忘了) 之後,系統提供 GUI 介面讓使用者以 root 登入,至於要怎麼做我就不提了,個人是覺得沒有必要啦 .......
4. 關於這個,其實 Apple 本身有將 DTrace 包進一個 GUI 程式 -- Instrument (使用範例),只是要安裝 Xcode 3.0 以上的版本才會有,這可要耗費不少硬碟空間。
樓主真的很強也...
回覆刪除趕快升到10.7吧~然後研發好用的功能造福人群!!!
不敢當 <(_ _)>
回覆刪除不管是以一個 user 或是一個 scripter (我還不能稱為開發者 ...) 來說,10.6 就已經多了很多好用的工具,10.7 更多,不升級實在損失太大。
但是我的 2006 mid MacBook 到現在還是猛得很 .... orz 目前的目標是下一代 15" MBP,看我有沒有閒錢好了 ..... (也希望下一代 MBP 可以更輕薄 ....)