Linux
我可以防止創建某個名稱的文件夾嗎?
我正在開發一個 LAMP 網路應用程序,並且在某處有一個計劃的程序,它不斷創建一個
shop
在站點根目錄中呼叫的文件夾。每次出現這種情況都會導致與應用程序中的重寫規則發生衝突,不好。在我找到有問題的腳本之前,有沒有辦法防止
shop
在根目錄中創建任何名為的文件夾?我知道我可以更改文件夾的權限以防止其內容被更改,但我還沒有找到防止創建某個名稱的文件夾的方法。
你不能,因為創建目錄的使用者有足夠的權限在父目錄上寫。
相反,您可以利用
inotify
Linux 核心提供的系統呼叫系列來監視給定目錄mv
中目錄的創建(和可選 -ing)shop
,如果創建(或可選mv
-ed)rm
目錄。在這種情況下您需要的使用者空間程序是
inotifywait
(附帶inotify-tools
,如果需要,請先安裝它)。假設目錄
shop
將駐留在目錄中,讓我們為創建/foo/bar
設置一個監視,如果創建則立即:/foo/bar/shop``rm
inotifywait -qme create /foo/bar | \ awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
inotifywait -qme create /foo/bar
監視/foo/bar
可能創建的任何文件/目錄的目錄,即監視任何create
事件- 如果已創建,
awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
則檢查文件是否恰好是目錄且名稱為shop
(/,ISDIR shop$/
),如果是rm
則目錄 (system("rm -r -- /foo/bar/shop")
)您需要以對目錄具有寫入權限的使用者身份執行該命令,以便從目錄
/foo/bar
中刪除shop
。如果你也想監控
mv
-ing 操作,也可以添加 watch formoved_to
event:inotifywait -qme create,moved_to /foo/bar | \ awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
請注意,如果您正在尋找一個文件,而不是目錄,命名為
shop
:inotifywait -qme create /foo/bar | \ awk '$NF == "shop" { system("rm -- /foo/bar/shop") }' inotifywait -qme create,moved_to /foo/bar | \ awk '$NF == "shop" { system("rm -- /foo/bar/shop") }'