Files
觸摸:無法觸摸“測試”:權限被拒絕
我正在嘗試在目錄中創建一個文件,但我得到:
`touch`: cannot touch ‘test’: Permission denied
這是我的命令:
[user@xxx api]$ ls -l total 184 ... drwxrwxr-x 2 root root 4096 2016-04-12 14:38 public .. [user@xxx api]$ cd ./public [user@xxx public]$ touch test touch: cannot touch ‘test’: Permission denied
如果您沒有寫入和執行權限,則無法編輯公共目錄的內容。
- 您表示您正在嘗試創建一個新文件。如果該
test
文件在 中不存在public
,touch
將嘗試創建一個新文件。如果沒有對父目錄的寫入和執行權限,它就無法做到這一點。遍歷目錄需要execute;需要 write 才能為新文件添加 inode 條目。顯然,您沒有這些權限中的一項或兩項。- 如果
test
文件已經存在於 中public
,touch
預設情況下會更新文件的修改時間。由於修改日期/時間儲存在文件的 inode 中,因此只需要對該文件的寫訪問權。如果文件已經存在,您將需要使用類似命令檢查文件的權限以確定您是否具有寫入權限。ls -l public/test
目錄上的權限位遮罩
rwxrwxr-x
, 表示:
- 使用者,即目錄的
root
所有者,具有對目錄的寫入權限,如第一個rwx
塊所示。該使用者還可以讀取目錄(r
位)並遍歷它以訪問其內容(x
位)。- 組的成員
root
,即目錄上的組,本身不是root
使用者,也具有類似的權限來讀取、寫入和遍歷目錄,如第二個rwx
塊所示
r-x
如最後一個塊所示,所有其他使用者只有讀取和執行權限。如前所述,對於目錄,執行權限允許您遍歷該目錄並訪問其內容。請參閱此問題以更清楚地了解這一點。我如何獲得權限?
您將需要與您的系統管理員(可能是您!)交談以執行以下操作之一:
- 使用類似的命令使您成為目錄的****所有者
public/
chown user public/
。如果您是唯一需要擁有編輯權限的使用者,這將是合適的。- 可能創建一個具有合適名稱的新組,並使用類似的命令
publiceditors
將其設置為目錄上的組。確保您和任何其他需要能夠修改目錄的使用者被列為該組的成員。這種方法適用於多個使用者需要編輯功能的情況。public/``chgrp publiceditors public/
- 使您的使用者帳戶成為該
root
組的成員(我不建議這樣做)。- 為您提供**登錄或偽裝
root
**的訪問權限,例如使用密碼sudo
或密碼su``root
- 使用類似的命令更改目錄的權限以授予所有使用者寫入權限
chmod o+w public
。請注意,這使框上的每個人都能夠編輯和刪除公共目錄中的文件。*您可能不想要這個!*在沒有其他訪問控制強制執行的情況下,例如核心中的強制訪問控制。
目錄上下文中的讀、寫和執行權限是什麼意思?
假設您在 Linux 機器上,在目錄上,讀取權限位允許您讀取目錄列表。寫權限位允許您更新列出的目錄,這是創建文件*、編輯文件名、取消連結(刪除)文件所必需的。執行位允許您遍歷目錄、訪問其文件等。有關Linux 目錄權限的更多資訊。
- 實際上,您正在將文件連結到目錄中。大多數情況下,您會在創建文件時執行此操作,但還有更複雜的範例。例如,對最初存在於文件系統中其他地方的文件進行硬連結將需要對連結的目標目錄的寫訪問權,儘管事實上您沒有創建新文件。
為什麼要對目錄進行寫訪問?
您需要能夠寫入目錄以添加對您正在添加的文件的相關 inode 的引用。