일부 기호 링크가 프로그램 동작에 영향을 미치는 이유는 무엇입니까?

일부 기호 링크가 프로그램 동작에 영향을 미치는 이유는 무엇입니까?

한동안 나를 괴롭히던 한 가지는 다음과 같습니다.

% which halt
/sbin/halt
% file /sbin/halt
/sbin/halt: symbolic link to `reboot'

그러나 실행 sudo halt은 물론아니요시스템을 다시 시작하십시오. 왜 그런 겁니까?

예를 들어, 이런 방식으로 작동하는 다른 여러 프로그램이 있습니다 pdflatex.

답변1

각 프로그램은 프로그램을 실행하는 데 사용된 전체 명령줄을 확인합니다(셸 확장 와일드카드 및 변수 제외).

C 프로그램에서 명령줄은 에 저장됩니다 argv.매개변수 벡터.
프로그램 이름은 의 첫 번째 요소입니다 argv. argv[0]즉,

halt분명히 및 의 경우 reboot프로그램은 에 따라 동작을 변경합니다 argv[0].

ps -p <pid> -o cmdBash에서는 프로그램을 사용하거나 실행하기 위한 전체 명령줄을 볼 수 있습니다 cat /proc/<pid>/cmdline.

동일한 효과를 갖는 하드 링크라는 또 다른 유형의 링크가 있습니다. 예를 들어, 내 시스템에서 sudosudoedit은 동일한 파일이지만 두 개의 이름과 동작이 다릅니다.

ls -i다음과 같은 명령을 찾는 데 도움이 됩니다.

$ ls -il | awk '$3 != 1 { print }'
total 156872
2491111 -rwsr-xr-x 2 root   root     127560 2011-01-20 05:03 sudo
2491111 -rwsr-xr-x 2 root   root     127560 2011-01-20 05:03 sudoedit

man ln하드 링크에 익숙하지 않은 경우 하드 링크에 대한 자세한 내용은 참고자료를 참조하세요.

관련 정보