Khi sao chép thư mục bằng sudo, nó chỉ sao chép cấp đầu tiên của hệ thống phân cấp


1

Câu hỏi này cũng đã được hỏi đây .

Khi tôi sao chép một số thư mục (dir) đệ quy với sudo trong bash, nó chỉ sao chép mức đầu tiên của hệ thống phân cấp dir, nhưng khi được sử dụng mà không có sudo, nó sao chép thư mục với tất cả các thư mục con của nó, mặc dù các lệnh trong dòng lệnh chỉ có sự khác biệt trong sự hiện diện của sudo.

Lý do tại sao điều này xảy ra?

Ví dụ:

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

Có thông báo lỗi trong danh sách của bạn. Có lẽ bạn muốn tìm hiểu ý nghĩa của chúng đầu tiên.
n.m.

Câu trả lời:


2

Khi bạn làm sudo cp -r /a/b /c/d thư mục được sao chép vào /c/d/ là root với root là chủ sở hữu, do đó bạn nhận được một Quyền bị từ chối Vì bạn cần quyền root để mở thư mục, hãy thử mở /c/d/ trong một thiết bị đầu cuối gốc; cách khác, bạn cần thay đổi chủ sở hữu tệp hoặc sửa quyền bằng cách sử dụng chown / chmod vì vậy người dùng hiện tại của bạn sẽ có thể truy cập vào thư mục.

Chú thích: sudo cd sẽ không làm việc kể từ khi cd là một lệnh shell, không phải chương trình.


2

Có thể / c / d có quyền 700 với chủ sở hữu khác. Thử sudo chmod -R 755 /c/d.


2
+1: Hoặc bạn có thể thử ' sudo chown -R me /c/d '.
Jonathan Leffler

Yup, điều đó cũng làm việc.
jman

0

Tôi thích sử dụng cp -a thay vì cp -r. Cái sau có thể không bảo tồn một số thuộc tính tập tin.


0

Thay vì thay đổi cp lệnh, bạn có thể chạy sudo như một người dùng cụ thể đang làm một cái gì đó như

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

Tuy nhiên, điều này sẽ chỉ hoạt động nếu thisUser có quyền cho /a/b

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.