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소유자는 나( )입니다.

다음으로 다음 명령과 함께 sudo를 사용하여 a2를 만듭니다 echo.

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

오! 지금은 주인이 어떻게 바뀌었나요? 내가 아니라 루트입니다. 왜 그런 변형이 echovim! 놀랍게도명령의 변경생성된 파일의 소유자는 어떻게 변경되나요?

답변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 a3sudo를 사용하는 예에서는 vim a3루트로 실행됩니다. 그리고 vim은 루트로 실행되므로 파일은 루트가 소유합니다.

관련 정보