chmod 777 後權限設定為未知

chmod 777 後權限設定為未知

我剛剛注意到跑步後

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 當然是我們目錄的名稱。一旦我們這樣做了,一切都會恢復正常。

相關內容