일반 사용자로 실행할 때와 루트로 실행할 때 동일한 명령이 다른 명령 스크립트를 사용하는 이유는 무엇입니까?

일반 사용자로 실행할 때와 루트로 실행할 때 동일한 명령이 다른 명령 스크립트를 사용하는 이유는 무엇입니까?

date일반 사용자의 명령에 대한 스크립트 위치가 표시되며 다음과 같이 표시됩니다.

which date
/bin/date

그러나 루트에서 동일한 명령을 실행하면 출력이 표시됩니다 /usr/bin/date. 왜 이런거야?

답변1

which date다른 사용자에 대해 다른 결과가 생성 되면 root해당 사용자의 결과도 다른 값을 가질 수 있습니다 PATH. 일반 사용자는 /bin이전 /usr/bin(또는 /usr/bin전혀 없음)과 이전 root(또는 전혀 없음)을 경험했습니다./usr/bin//bin/bin

다음 명령을 실행하여 이를 확인할 수 있습니다.

echo ${PATH}

root루트가 아닌 사용자 로 .

PATH변수는 절대 경로가 제공되지 않을 때 쉘이 명령을 찾을 콜론으로 구분된 디렉토리 목록입니다. 쉘은 나열된 순서대로 왼쪽에서 오른쪽으로 이러한 디렉토리를 검색합니다. 쉘이 디렉토리에서 명령을 찾으면 이를 실행합니다. 이 which명령은 유사한 순회를 수행하고 찾은 첫 번째 일치 항목을 보고합니다.

답변2

$PATH현재 로그인한 사용자에 따라 달라지는 변수 입니다 . 스크립트가 여러 디렉터리에 있는 경우 발견된 첫 번째 디렉터리가 사용됩니다. 이 경우 $PATH루트는 다음과 같아야 합니다.

PATH="/usr/bin:/bin:... 

사용자에게는 다음과 같이 표시됩니다.

 PATH="/bin...

관련 정보