실행 권한과... 인수가 있는 Symlink?

실행 권한과... 인수가 있는 Symlink?

저는 Ubuntu 20.04를 기반으로 하는 Linux Mint 20.1을 사용하고 있습니다. 내 커널은 5.4.0-60-generic. 아래의 모든 명령은 다음에서 실행됩니다.GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

다른 명령에서도 동일한 동작을 보았지만 ping여기서는 예로 사용하겠습니다. 다음 명령을 실행하면 어떤 일이 발생하는지 살펴보겠습니다.

nikolay@KoLin:~$ ping4 -c1 google.com
PING google.com (108.177.14.139) 56(84) bytes of data.
64 bytes from lt-in-f139.1e100.net (108.177.14.139): icmp_seq=1 ttl=107 time=41.3 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 41.301/41.301/41.301/0.000 ms
nikolay@KoLin:~$ ping6 -c1 google.com
ping6: connect: Network is unreachable
nikolay@KoLin:~$

출력은 합리적입니다. 내 랩톱에 IPv6 네트워크가 구성되어 있지 않기 때문에 분명히 두 번째 실행에서 오류가 발생합니다. 그러나 출력은 내 시스템에서 두 가지 다른 것임을 ping4증명 합니다. ping6하지만 실제로는 무엇입니까? 둘 다 다음 위치에 있습니다 /usr/bin.

nikolay@KoLin:~$ whereis ping{4,6}
ping4: /usr/bin/ping4 /usr/share/man/man8/ping4.8.gz
ping6: /usr/bin/ping6 /usr/share/man/man8/ping6.8.gz
nikolay@KoLin:~$

그리고 이 파일들은 실제로 무엇입니까?

nikolay@KoLin:~$ ls -l /usr/bin/ping*
-rwxr-xr-x 1 root root 72776 Jan 31  2020 /usr/bin/ping
lrwxrwxrwx 1 root root     4 Jan 11 21:00 /usr/bin/ping4 -> ping
lrwxrwxrwx 1 root root     4 Jan 11 21:00 /usr/bin/ping6 -> ping
nikolay@KoLin:~$

우와! 둘 다 동일한 실행 파일에 대한 심볼릭 링크입니다 /usr/bin/ping! 그런데 그게 어떻게 가능합니까? 심볼릭 링크에 실행 인수를 추가하는 마법 같은 방법이 있나요?

답변1

알고 보니아니요, 불가능합니다실행 명령줄 인수에 영향을 미치는 심볼릭 링크를 만듭니다. 그러면 어떻게 작동합니까 ping? 분명히 유틸리티를 실행하는 데 어떤 파일을 사용하고 있는지 알아내는 데 ping사용됩니다 . argv[0]파일 이름에만 관심이 있습니다. 쉽게 확인할 수 있는 방법은 다음과 같습니다.

nikolay@KoLin:~/Desktop$ cp /usr/bin/ping ./ping4
nikolay@KoLin:~/Desktop$ ./ping4 -c1 google.com
PING google.com (64.233.164.113) 56(84) bytes of data.
64 bytes from lf-in-f113.1e100.net (64.233.164.113): icmp_seq=1 ttl=107 time=19.2 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 19.152/19.152/19.152/0.000 ms
nikolay@KoLin:~/Desktop$ mv ping4 ping6
nikolay@KoLin:~/Desktop$ ./ping6 -c1 google.com
./ping6: connect: Network is unreachable
nikolay@KoLin:~/Desktop$

여기서 우리는 분명히 동일한 실행 파일(링크 등 없음)을 사용하고 있으며 유일한 차이점은 이름입니다.

관련 정보