當使用 sudo 複製目錄時,它僅複製其層次結構的第一級

當使用 sudo 複製目錄時,它僅複製其層次結構的第一級

這個問題也被問到了這裡

當我在bash 中使用sudo 遞歸複製某個目錄(dir)時,它僅複製dir 層次結構的第一級,但在不使用sudo 的情況下使用時,它會複製dir 及其所有子目錄,儘管命令列中的命令僅在sudo 的存在。

為什麼會出現這種情況?

例如:

k@l:/$ tree
.
|
|__a
|  |
|  |__b
|     | 
|     |__1.htm   
|
|__c
k@l:/$ sudo cp -r /a/b /c/d
k@l:/$ cd /c
k@l:/c$ ls
d
k@l:/c$ cd d
bash: cd: /c/d: Permission denied
k@l:/c$ tree
.
|__d [error opening dir]

1 directory, 0 files

答案1

當您執行此操作時sudo cp -r /a/b /c/d,資料夾將複製到/c/d/root 並以 root 為所有者,因此您會得到一個沒有權限由於您需要 root 權限才能開啟該目錄,請嘗試/c/d/在 Root 終端機中開啟;或者,您需要更改檔案擁有者或使用chown/修復權限,chmod以便目前使用者能夠存取該資料夾。

注意:sudo cd不起作用,因為cd它是 shell 命令,而不是程式。

答案2

也許 /c/d 擁有不同所有者的權限 700。嘗試sudo chmod -R 755 /c/d

答案3

我寧願使用cp -a而不是cp -r.後者可能不會保留某些檔案屬性。

答案4

cp您可以sudo作為特定使用者運行,而不是更改命令,執行類似的操作

sudo -u thisUser cp -r /a/b /c/d

thisUser儘管如此,這僅在擁有以下權限時才有效/a/b

相關內容