파일 소유자를 변경하지 않고 sudo와 함께 명령을 사용하려면 어떻게해야합니까?


12

sudo를 사용하여 파일로 일부 활동을 수행하면 이러한 파일의 소유권이 변경됩니다. 파일 소유자를 변경하지 않고 sudo와 함께 명령을 사용하려면 어떻게해야합니까?

예제 파일 archivos35.sh는 Apache에서 왔지만 sed를 사용합니다 (usr admin sudo 사용)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

adminsudo가있는 사용자 ---

sudo sed -i s/old/new/g archivos35.sh

그러나 sudo로 해당 명령을 수행하면 파일 소유자가 변경됩니다.

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

sudo와 함께 명령을 사용하여 파일 소유자를 변경하지 않으려면 어떻게해야합니까? 소유자를 수정하지 않고 파일을 변경하고 싶습니다.


왜 대본을 쓸 수 있습니까?
Jim L.

실수로 나는 그것을 756으로 설정했다. 안된다
Dok Gus

답변:


29

sudo파일을 수정하는 데 사용해야 하는 경우 파일을 사용하여 올바른 사용자로 전환하십시오. 루트로 전환 할 필요 가 없습니다 . 기본값 일뿐입니다. 따라서 귀하의 경우 다음을 수행하려고합니다.

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

그러면 sed사용자로서 명령 이 실행됩니다 apache.


2

실제로 파일의 소유권을 변경하는 것이 아니라 이전 파일을 제거하고 새 파일을 만드는 것입니다. 그렇게하면 새 파일이 작성자의 uid가 소유 한 것으로 작성됩니다. 이를 피하려면 파일을 제자리에 수정해야합니다. 원본 파일을 덮어 써서 저장하는 텍스트 편집기를 사용하여 편집하십시오. 또는 출력을 사용하여 sed 명령을 임시 파일로 실행 한 다음 임시 파일을 원본 파일로 복사하십시오.


1
당신은 있다고 생각 -i옵션은 일명 --in-place... 실제로 올바른 위치를 수정하는 것
JShorthouse

Whit @teldon 응답, 나는 필요한 것을 할 수 있었다. sed로 파일을 열지 않고 장소를 수정합니다.
Dok Gus

1
@JShorthouse 당신은 생각하지만, 적어도 모든 곳에서 그렇지는 않습니다.
Kyle Jones

3
@JShorthouse 가장 이른바 'in-place'편집은 대부분 임시 파일을 변경 한 다음 원본보다 mv 파일을 mv로 변경합니다. "in-place edit"옵션을 사용하십시오. 실제 내부 편집을 원한다면 edor ex또는 vi/ 와 같은 스크립트 가능한 텍스트 편집기를 사용하십시오 vim.
cas

1
일부 텍스트 편집기조차도 파일을 쓸 때 temp + rename 방법을 사용하며, 글을 쓰는 동안 충돌이 발생할 경우 안전 장치로 사용됩니다. 예를 들어 Emacs는 기본적으로이 작업을 수행하지만 구성으로 덮어 쓸 수 있습니다.
Barmar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.