如果應用程序正在運行其使用的其中一個共享庫被寫入或截斷,則應用程序將崩潰。移動文件或使用'rm'批量刪除文件不會導致崩潰,因爲操作系統(Solaris在這種情況下,但我認爲這在Linux和其他* nix上也是如此)足夠聰明,不會刪除與該文件在任何進程打開的時候。運行shell腳本時,如何防止覆蓋或截斷文件?
我有一個執行共享庫安裝的shell腳本。有時,它可能用於重新安裝已安裝的共享庫的版本,而無需首先卸載。由於應用程序可能正在使用已經安裝的共享庫,因此腳本非常聰明,可以將文件打包或移走(例如,當我們知道沒有應用程序時,cron可以清空的「已刪除」文件夾將運行),然後再安裝新的程序,以免它們被覆蓋或截斷。
不幸的是,最近一個應用程序在安裝後崩潰。巧合?很難說。這裏真正的解決方案是切換到一個比舊的巨型shell腳本更強大的安裝方法,但在交換機制作之前有一些額外的保護會很好。有沒有什麼方法可以包裝一個shell腳本以防止覆蓋或截斷文件(並且理想情況下會大聲地失敗),但仍然允許它們被移動或rm'd?
標準的UNIX文件權限不會做到這一點,因爲您無法區分移動/從覆蓋/截斷中刪除。別名可以工作,但我不確定整個命令是否需要別名。我想像truss/strace之類的東西,除非在每個動作之前檢查過濾器是否真的這樣做。我不需要一個完美的解決方案,甚至可以對付故意惡意的腳本。
不提示這個問題不屬於堆棧溢出,但我想你可能會在Serverfault上得到一些有趣的和有用的輸入。 – Emily 2010-03-06 21:43:37
是的,我在哪個網站發帖時發生衝突,shell腳本是重疊的網站。我會嘗試在那裏發帖,謝謝。 – 2010-03-07 01:44:59