를 수행 sudo cp /etc/foo.txt ~/foo.txt
하면 새 파일이 root
소유자로 생성됩니다 .
현재 마지막 두 명령을 사용하는 것 외에 다른 방법은 없습니다 ( ls
사용 사례를 명확히하기 위해).
belmin@server1$ ls /etc/foo.txt
> -rw------- 1 root root 3848 Mar 6 20:35 /etc/foo.txt
>
belmin@server1$ sudo cp /etc/foo.txt ~/foo.txt
belmin@server1$ sudo chown belmin: $_
내가 선호하는:
- 하나의
sudo
명령으로 수행합니다 . - 현재 사용자를 지정할 필요가 없습니다 (변수를 사용하고 있습니까?).
답변
install
대신에 사용하십시오 cp
:
sudo install -o belmin /etc/foo.txt ~/foo.txt
답변
A의 POSIX 호환cp
할 수있는 것은 sudo cp -p foo bar
하는 다음과 같은 파일 메타 데이터를 보존 복사 할 때 :
- 접근 시간
- 수정 시간
- 아이디
- 그룹 ID
- 방법
다른 사용자 를 설정 하려면 JennyD의 솔루션 이 가장 좋습니다.
답변
당신이 할 경우 :
sudo cat /etc/foo.txt > ~/foo.txt
다음 ~/foo.txt
과 같은 쉘이 열려있을 것입니다 당신이 (그래서 당신의 자격 증명을 사용하여 생성) 한 다음 sudo
그 리디렉션의 표준 출력으로 실행됩니다.
결국, 파일은 귀하가 소유하게됩니다.
이러한 접근 방식은 또한 수행하는 작업을 제한하는 데 도움이됩니다 root
. 여기서는 root
그의 권한 만 open에 사용하고 /etc/foo.txt
잠재적으로 유해한 작업은 수행하지 않습니다 (작성을 위해 파일을 열면 ~/foo.txt
예를 들어 symlink 인 경우 나쁜 결과를 초래할 수 있음 ).
답변
를 사용 sudo
하여 다른 사용자로 전환합니다. 이것이 명령의 핵심입니다. 첫 번째 파일에 정기적으로 액세스 할 수 없기 때문에 다른 사용자 ( root
이 경우)에 액세스해야합니다.
sudo
모든 sudo
것을 수행하는 것은 명령을 실행하기 위해 다른 사용자로 전환하기 때문에 자체적으로 관리 할 수있는 방법이 없습니다 .
당신은해야합니다
- 두 명령 (또는 복합 명령)을 계속 사용하십시오.
- 다른 명령을 찾으십시오 (예 : 다른 응답에서 볼 수있는 설치).
- 또는 스크립트를 작성하고을 통해 해당 스크립트를 실행하십시오
sudo
.
답변
Sudo는 로그인 한 사용자 (실제로 Sudo를 실행 한 사용자)를 찾는 데 사용할 수있는 환경 변수 “SUDO_USER”를 작성합니다.
Sudo를 루트로 가정하면 (Sudo를 사용하여 다른 사용자도 액세스 할 수 있음) 다음 두 단계를 자동화하는 스크립트를 작성할 수 있습니다.
cp source target
chown $SUDO_USER target
(루트 만 파일을 제공 할 수 있기 때문에 루트가 아닌 사용자에게 sudo 인 경우에는 작동하지 않습니다.)
그것을 자동화하는 것은 약간의 일이 될 것입니다. 소스가 단일 파일이고 대상이 디렉토리가 아닌 경우 작업이 완료된 것입니다. 나는 문제가 더 복잡한 상황, 예를 들어 다음과 같은 일을 할 때 실제 문제 일 뿐이므로 질문을했다고 가정합니다.
cp /path/source/some*files /path/target/directory/
어떤 파일과 어떤 디렉토리가 전달되는지, 어떤 파일이 이미 존재하는지, 어떤 파일이 실제로 덮어 써 졌는지, 그리고 성공적으로 복사 된 파일의 소유권을 변경하는 복잡한 스크립트를 작성할 수 있습니다.
이 작업은 이미 완료되었습니다. 사용할 수 있습니다 cpio
-sudo to root 후 cpio를 사용하여 파일을 복사하십시오. cpio는 복사 할 파일 목록이 필요하므로 2 단계 프로세스입니다. 아래 ls
에서 복사 할 파일 목록을 생성하는 데 사용 합니다.
ls /path/source/some*files | cpio -pdm --owner $SUDO_USER /path/target/directory/
-pdm
수단 “패스 스루 모드, 파일 수정 시간을 필요에 따라 디렉토리를 만듭니다 유지”
--owner $SUDO_USER"
지정된 사용자가 파일을 소유하게합니다.
마지막 피연산자는 cpio가 파일을 저장해야하는 디렉토리입니다.
cpio awesomeness에 대한 자세한 내용은 CPIO 매뉴얼 페이지를 참조하십시오.
단일 sudo 명령으로이 작업을 수행 할 수도 있습니다. 사용자에게 파일에 액세스 할 수있는 권한이 있다고 가정하면 다음과 같이 cpio 부분에만 sudo를 사용하십시오.
ls /path/source/some*files | cpio -pdm --owner $USER /path/target/directory/
위의 경우 Sudo가 실행되기 전에 평가되기 때문에 $ SUDO_USER 대신 $ USER를 사용하고 있습니다. 또는 사용자가 파일을 나열 할 액세스 권한이없는 경우, 파일을 랩퍼 스크립트에 넣고 sudo를 사용하여 랩퍼를 실행하십시오. 이것은 더 어려워 질 수 있지만 가장 간단한 경우 래퍼는 소스와 대상이라는 두 가지 인수를 사용합니다.
이것은 “cp_as_user”랩퍼로 들어갑니다.
ls $1 | cpio -pdm --owner $SUDO_USER $2
그런 다음 래퍼를 다음과 같이 사용하십시오.
sudo cp_as_user “/ path / to / some * files”/ path / to / target / directory