Linux

我可以防止創建某個名稱的文件夾嗎?

  • October 4, 2016

我正在開發一個 LAMP 網路應用程序,並且在某處有一個計劃的程序,它不斷創建一個shop在站點根目錄中呼叫的文件夾。每次出現這種情況都會導致與應用程序中的重寫規則發生衝突,不好。

在我找到有問題的腳本之前,有沒有辦法防止shop在根目錄中創建任何名為的文件夾?我知道我可以更改文件夾的權限以防止其內容被更改,但我還沒有找到防止創建某個名稱的文件夾的方法。

你不能,因為創建目錄的使用者有足夠的權限在父目錄上寫。

相反,您可以利用inotifyLinux 核心提供的系統呼叫系列來監視給定目錄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 for moved_toevent:

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") }'

引用自:https://unix.stackexchange.com/questions/313940