"sudo ls ~"가 /root 대신 /home/username의 내용을 표시하는 이유는 무엇입니까?

"sudo ls ~"가 /root 대신 /home/username의 내용을 표시하는 이유는 무엇입니까?

내가 로그인할 때username, 왜

sudo ls ~

대신에 무엇이 표시됩니까? 명령이 루트로 실행되고 있다고 가정합니다. 이 경우 루트는 를 나타냅니다./home/username/rootsudo~/root

추가 설명:

또한 해당 명령을 실행 su한 다음 실행 하면 ls ~표시되는 내용을 얻게 됩니다 /root. 그래서 나는 이것을 하는 것이 sudo ls ~.

또 다른 예로, 플래그가 있는 일부 명령은 --user실행 시 사용자를 루트로 해석합니다 sudo. 예를 들어 는 의 디렉터리에 설치하고 는 의 디렉터리에 설치합니다. 마지막 명령을 실행하는 것은 권장되지 않습니다. 저는 단지 설명했던 기능을 표시하기 위해 이 명령을 사용했습니다.pip install --user packagename/home/usernamesudo pip install --user packagename/root

답변1

~실행하기 전에 쉘이 확장됩니다 sudo. 다음을 사용하여 이를 확인할 수 있습니다 set -x.

$ set -x
$ sudo ls ~
+ sudo ls /home/skitt

이는 실제로 실행된 명령이 확장 시 현재 사용자를 사용하여 홈 디렉터리를 확장했음을 나타냅니다.

대상 사용자의 홈 디렉터리를 보려면 다음을 연기해야 ​​합니다.물결표 확장:

sudo bash -c 'ls ~'

관련 정보