루트 만 액세스 할 수있는 디렉토리를 루트 만 액세스 할 수있는 디렉토리에 복사하는 방법은 무엇입니까?


11

서버의 nfs 마운트 디렉토리가 있습니다. /home/myname/.rubies

루트는이 디렉토리에 액세스 할 수 없습니다 :

[mitchell.usher@server ~]$ stat /home/mitchell.usher/.rubies
  File: `/home/mitchell.usher/.rubies'
  Size: 4096            Blocks: 8          IO Block: 32768  directory
Device: 15h/21d Inode: 245910      Links: 3
Access: (0755/drwxr-xr-x)  Uid: (  970/mitchell.usher)   Gid: (  100/   users)
Access: 2016-08-22 15:06:15.000000000 +0000
Modify: 2016-08-22 14:55:00.000000000 +0000
Change: 2016-08-22 14:55:00.000000000 +0000

[mitchell.usher@server ~]$ sudo !!
sudo stat /home/mitchell.usher/.rubies
stat: cannot stat `/home/mitchell.usher/.rubies': Permission denied

/opt루트 만 액세스 할 수 있는 디렉토리 내에서 무언가를 복사하려고 합니다.

[mitchell.usher@server ~]$ cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot create directory `/opt/ruby-2.1.3': Permission denied

[mitchell.usher@server ~]$ sudo !!
sudo cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot stat `.rubies/ruby-2.1.3/': Permission denied

분명히 나는 ​​다음을 할 수 있습니다 (그리고 당분간 내가 한 일입니다).

[mitchell.usher@server ~]$ cp -r .rubies/ruby-2.1.3/ /tmp/
[mitchell.usher@server ~]$ sudo cp -r /tmp/ruby-2.1.3/ /opt/

이를 중간 단계로 복사하거나 권한을 변경하지 않는 방법이 있습니까?


cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /opt이 작동하지 않습니까? 그렇지 않다면 왜 그렇습니까?
MelBurslan

@ MelBurslan은 질문에 명시된 바와 같이 내가 한 일입니다. 그러나 파일 시스템의 어느 곳에도 맞지 않는 50GB 파일이라고 가정 해 보겠습니다.cp <file> /tmp/tmpfile
Mitch

답변:


29

tar버퍼 프로세스로 사용할 수 있습니다

cd .rubies
tar cf - ruby-2.1.3 | ( cd /opt && sudo tar xvfp - )

첫 번째 tar는 사용자와 같이 실행되므로 홈 디렉토리를 읽을 수 있습니다. 두 번째 tar는 아래에서 실행 sudo되므로에 쓸 수 /opt있습니다.


1
이것은 메모리에 어떻습니까? 내가 10GB 파일을 가지고 있다면 파이프와 타르를 풀기 전에 10GB의 메모리를 채울 것입니까, 아니면 타르를 풀 때 타르를 풀겠습니까?
Mitch

5
그들은 병렬로 실행됩니다. 일반적인 파이프에는 64Kbyte 버퍼가 있습니다. 파이프 크기 세부 사항 은 :-) unix.stackexchange.com/questions/11946/… 에 대해 걱정할 것이 없습니다 .
Stephen Harris


cpio거의 같은 방식으로 사용할 수 있습니다.
Toby Speight

GNU tar가있는 경우, -C디렉토리를 변경하기 위해 인수를 사용하여 서브 쉘을 저장할 수 있습니다 (예 :) tar cf - ruby-2.1.3 | sudo tar -C /opt xpf -. sudo암호를 묻지 않도록 (예 : sudoers항목 또는 캐시 된 자격 증명을 통해) 확인하고 싶을 수도 있습니다 .
Toby Speight

6

당신은 사용할 수 있습니다 rsync또는 scp복사 할 user@localhost로컬 디렉토리로 이동합니다.

rsync:

# rsync "$real_user@localhost:$PWD/.rubies/ruby-2.1.3" /opt

대신에

$ rsync .rubies/ruby-2.1.3 "root@localhost:/opt"

root가 localhost에 직접 액세스하도록 허용하는 경우 (권장되지 않음) 일반적으로 루트 액세스는을 통해 선호 sudo됩니다.


-4

FAT (또는 무엇이든)에 두 번째 항목을 만들 수 있습니다.
나는 내 HOSTS파일을 위해 이것을한다 . 파일을 참조하는 쓰기 가능한 디렉토리에 링크가 있으며 다른 권한을 가지고 있으므로 /Hosts/HOSTS쉽게 수정할 수 있으며 변경 사항은 두 파일 (예 : "하나")에 있습니다. 파일 1 개에 대한 2 개의 항목입니다. 명령이 기억 나지 않습니다. 죄송합니다.

의 경우 /opt모든 파일에 대한 링크를 만들고에서 .rubies를 변경하면의 /opt파일과 동일합니다 .rubies.


4
이것은 질문에 대답하지 않는 것 외에 거짓과 오도입니다.
와일드 카드

우리는 다른 파일 시스템을 다루기 때문에 거짓입니다. 응답자는 분명히이 질문에 적용 할 수는 없지만 언급 한대로 작동하는 하드 링크를 분명히 언급하고 있습니다.
Julie Pelletier

고마워 와일드 카드, 나는 많은 측면을 얻는 것에 대한 대답에 선을 가지고 있었지만 Michael이 그것을 개선했을 때 편집되었습니다. : p
엔지니어
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.