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
sudo cat /etc/foo.txt > ~/foo.txt
. 파일은 이유 때문에 루트 만 읽을 수 있으므로 루트가 아닌 사용자가 사본을 읽을 수있게하려면 해당 이유를 명심해야합니다.