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/루트를 소유자로 하여 루트로 복사되므로 다음과 같은 결과가 나타납니다.권한이 거부되었습니다디렉토리를 열려면 루트 권한이 필요하므로 /c/d/루트 터미널에서 열어보십시오. 또는 파일 소유자를 변경하거나 chown/를 사용하여 권한을 수정해야 chmod현재 사용자가 폴더에 액세스할 수 있습니다.

참고: 프로그램이 아닌 쉘 명령 sudo cd이므로 작동하지 않습니다 .cd

답변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

관련 정보