한동안 나를 괴롭히던 한 가지는 다음과 같습니다.
% 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 cmd
Bash에서는 프로그램을 사용하거나 실행하기 위한 전체 명령줄을 볼 수 있습니다 cat /proc/<pid>/cmdline
.
동일한 효과를 갖는 하드 링크라는 또 다른 유형의 링크가 있습니다. 예를 들어, 내 시스템에서 sudo
및 sudoedit
은 동일한 파일이지만 두 개의 이름과 동작이 다릅니다.
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
하드 링크에 익숙하지 않은 경우 하드 링크에 대한 자세한 내용은 참고자료를 참조하세요.