sudo 명령을 사용하여 파일을 생성한 경우 파일 소유자는 누구입니까?

sudo 명령을 사용하여 파일을 생성한 경우 파일 소유자는 누구입니까?

내 사용자 이름을 사용하여 로그인합니다 ravbholua.

ravbholua@ravbholua-Aspire-5315:~$ echo $LOGNAME ravbholua

내가 만든 파일 이름은 다음과 같습니다 a1.

ravbholua@ravbholua-Aspire-5315:~$ echo>a1
ravbholua@ravbholua-Aspire-5315:~$ ll a1
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a1

역시 ravbholua위 파일의 소유자는 저()입니다.

echo다음으로 sudo와 다음 명령을 사용하여 a2를 만듭니다.

ravbholua@ravbholua-Aspire-5315:~$ sudo echo>a2
ravbholua@ravbholua-Aspire-5315:~$ ll a2
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a2

주인은 바로 나, 즉 ravbholua.

이제 sudo를 다시 사용하여 a3을 생성하지만 vim다음 명령을 사용합니다.

ravbholua@ravbholua-Aspire-5315:~$ sudo vim a3
ravbholua@ravbholua-Aspire-5315:~$ ll a3
-rw-r--r-- 1 root root 10 Oct  8 09:57 a3

오! 지금은 왜 주인이 바뀌었나요? 제가 아니고 루트입니다. 왜 그런 echo변화 가 생겼습니까 vim! 놀랍게도변경 명령생성된 파일의 소유자를 변경하는 방법

답변1

두 번째 예는 echo에서 실행 sudo되지만리디렉션원래 쉘에서 발생합니다.

sudo bash -c "echo > a4"

답변2

sudo그냥 명령이에요.

첫 번째 예는 다음과 같습니다. sudo echo>a2

sudo그것은 명령이다. 리디렉션은 에코와 모순되지만 아무 의미도 없습니다.

예를 들어, echo cat /etc/passwd > /tmp/foo /tmp/foo에서 /etc/passwd의 내용을 얻을 수 없습니다. 당신은 그것을 갖게 될 것입니다 cat /etc/passwd. sudo도 예외는 아닙니다. echo 부분은 sudo에 대한 매개변수일 뿐입니다. sudo는 이를 사용하여 작업을 수행하지만 쉘은 이를 모릅니다.

이는 sudo 액세스가 루트 액세스와 매우 다른 점 중 하나입니다.

sudo vim a3예 를 들어 vim a3sudo를 사용하여 루트로 실행합니다. 그리고 vim은 루트로 실행되므로 파일은 루트가 소유합니다.

관련 정보