Chmod 未如預期般運作

Chmod 未如預期般運作

當我要像這樣更改我的檔案權限時

 $ sudo chmod a+x *.* 

出現這個錯誤

 chmod: cannot access ‘*.*’: No such file or directory

當我想更改目錄中每個檔案的權限時

 $ sudo chmod a+x directory/* 

出現同樣的錯誤

 chmod: cannot access ‘directory/*’: No such file or directory

當我在其他目錄中嘗試相同的命令時,它可以工作,但在此目錄 /var/www/html 下它不起作用,但即使我在運行時將文件的權限文件更改為 a+x

 ls

出現權限錯誤

 ls: cannot open directory .: Permission denied

答案1

Linux中的檔案副檔名沒什麼特別的,它只是檔案名稱的一部分。 shell 的文件通配符*用於所有字符,因此您可以使用chmod a+x *而不是.

答案2

這個ls問題聽起來像是您對該目錄沒有足夠的權限。作為https://stackoverflow.com/a/15800917/3501748狀態:目錄需要執行權限集才能查看其內容。

cd傳回一個層級並查看您剛剛來自的目錄的權限。 sudo如果 root 對某個資料夾沒有任何權限,則不會授予您存取該資料夾的任何權限。也許sudo -u <username>可能有幫助。

如果您需要遞歸遍歷起始點下方的目錄樹,請使用chmod -R.

答案3

首先,我想確認現有的答案:

  • 正如 UweBurger 所說,*在 Ubuntu(或者,我相信,一般的 Unix)中使用通用通配符。 (在你的例子中是否有可能directory是空的,導致錯誤chmod: cannot access ‘directory/*’: No such file or directory?)
  • 正如 Northern-bradley 所建議的,人們可以使用該R標誌chmod來使其遞歸地遍歷樹,從而更改當前點下所有內容的權限。也就是說,使用chmod -R directory, 或如果您缺乏權限sudo chmod -R directory(但是,請確保在使用時不要無意中更改系統檔案的權限sudochmod;您自己的用戶只是缺乏這樣做的權限,這使得第一個變體更安全)。

但是,我想補充一點,您可能不希望以與更改文件相同的方式更改目錄的權限。正如中所解釋的官方文檔,目錄的讀取(r)權限意味著能夠查看其內容(例如使用ls),寫入(w)權限允許用戶在其中創建/刪除文件,而執行(x)權限則允許用戶cd在其中創建/刪除文件。有一個很好的答案這裡建議一種在遞歸應用新權限時區分檔案和目錄的方法。使用的變體xargs據說更快。您可能希望添加r標誌以避免在不返回任何內容的xargs情況下發生錯誤,並且如果您需要特權,則應該對管道的兩半使用(再次,在ing as時要小心),因此將是:findrootsudochmodroot

sudo find [路徑/到/目錄] -type d -print0 | sudo xargs -0r chmod [所需的目錄權限]

sudo find [路徑/到/目錄] -type f -print0 | sudo xargs -0r chmod [所需檔案權限]

哪裡[desired-*-permissions]可以給明確地777) 或者使用字母(喜歡a+x)。

相關內容