2013-04-04 283 views
18

我試圖遞歸地改變「數據」目錄的目錄和子目錄的權限,並運行到以下錯誤..有人可以提供有關以下錯誤的輸入嗎?chmod:無法讀取目錄`。':權限被拒絕

<username:/local/mnt/workspace/data>chmod -R 0644 . 
chmod: cannot read directory `.': Permission denied 
+0

試試'sudo chmod -R 0644 .'。 – Blender 2013-04-04 00:48:00

+0

'sudo !!'失敗後。 – alex 2013-04-04 00:48:21

+1

@Blender:'sudo chmod -R -644 .'將從當前目錄及其下的所有目錄中刪除執行(搜索)權限 - 不是一個好主意。 – 2013-04-04 00:57:09

回答

40

目錄需要設置執行權限才能看到其內容。

http://content.hccfl.edu/pollock/AUnix1/FilePermissions.htm

你可以把讀取和執行上的目錄是這樣的:目錄是持有的兩條信息對中,該文件的名稱爲每個文件的數據文件,它的inode編號。需要讀取權限才能訪問目錄中文件的名稱。如果您已經知道該文件的名稱,則需要執行(a.k.a. search)權限才能訪問目錄中文件的索引節點。

將目錄權限更改爲644時,雖然可以讀取該目錄以查看其存在,但無法讀取該目錄中的文件。

你需要這樣做:

$ chmod -R 0755 . 

一個更好的辦法可能是使用字符串的權限,如果你只是想關閉

否則,您可以看到目錄,但無法訪問該信息在那個目錄中。

你也許最好不要使用相對的權限,而不是絕對的權限:

$ chmod -R go-w . 

將從組和其他刪除寫權限,但沒有觸及執行權限。

您還可以使用find剛剛設置的目錄,或者只是文件集:

$ find . -type d -exec chmod 755 {} \; 

這隻會觸及目錄,閱讀設置和所有目錄的執行權限,並設置寫入權限,爲業主。這樣,你不會對文件本身設置執行權限。

+0

基本上我想刪除目錄和子目錄中的文件的執行權限,但保持directoreis .. exe文件我可以做到這一點? – user2125827 2013-04-04 01:18:52

+1

這幾乎是一回事。在'find'中使用'-type f'標誌只返回文件並且瀏覽目錄:'find。 -type f -exec ugo-x {} \;'。這是使用符號名稱(u = user g = group o = other。-x表示刪除執行權限)。這樣,你不會碰觸文件。您需要將執行權限添加回您從第一個刪除它們的目錄中,因此'find'可以讀取它們的內容。 – 2013-04-04 01:22:19

0

我想,因爲你正在使用遞歸,你正試圖CD到一個沒有執行權限的目錄。

相關問題