我剛剛注意到跑步後
chmod 777 *
在包含子目錄的目錄上執行您所期望的操作。它將所有內容(包括子目錄)的權限設為 777。
chmod 644 *
現在,子目錄的內容被設定為未知權限,並且您無法將其變更回來。
為什麼會發生這種情況?這是預期的行為還是錯誤?有沒有辦法恢復檔案權限?
由於我的文件位於另一個位置的 zip 文件中,我只是刪除了整個目錄,並再次解壓縮了 zip 文件,但我想知道這個“問題”的原因以及補救措施。
一些附加信息,我正在透過 SSH 在遠端電腦上運行這些命令。
答案1
對於這種事情,最好使用 find 。
目錄需要 x 存取權限,檔案則不需要,因此權限集不同。
# Files
find . -type f -exec chmod 644 '{}' \;
# Directories
find . -type d -exec chmod 755 '{}' \;
答案2
檔案和目錄的權限位解釋方式有所不同。閱讀info coreutils 'File permissions'
和man 2 chmod
了解詳細資訊。為什麼要讓所有東西對所有者、群組和世界來說都是可讀、可寫、可執行的?
由於證據消失了,我只能猜測在您之後chmod
,您失去了對.
當前目錄的寫入存取權。這可以透過以下方式解決:
chmod u+w $PWD
然後,您可以變更檔案的模式(權限)$PWD
透過執行chmod 644 *
,您還刪除了執行任何擁有它的檔案的權限,因此它們不再由任何所有者、群組、世界執行。
答案3
當您想要設定目錄和子目錄的權限時,您應該使用:
chmod -R
-R, --recursive 遞歸地更改檔案和目錄
答案4
我找到了解決我遇到的問題的方法。
首先感謝各位發文的人,你們的回答確實很有幫助。
問題是為目前目錄中的所有檔案分配權限 664:
chmod 644 *
刪除目錄的執行權限,目錄需要執行權限才能正常運作。解決方案非常簡單。我們只需要像這樣更改目錄的權限:
chmod 744 dir_name
其中 dir_name 當然是我們目錄的名稱。一旦我們這樣做了,一切都會恢復正常。