/usr/bin
및 에 있는 링크의 경우 /usr/local/bin
하드 링크 또는 심볼릭 링크 중 어느 것이 더 좋습니까? 그것들은 모두 상징적인 것 같나요? 왜?
답변1
링크가 /usr/bin
또는 에 삽입되는 경우 /usr/local/bin
는 일반적으로 실제 바이너리가 다른 곳에 위치하기 때문입니다. 왜 다른 곳에 사는 걸까요? 일반적으로 이는 기능에 의존하는 파일 세트의 일부(일반적으로 자체 하위 디렉토리에 있음)이기 때문입니다. 왜 이 모든 파일을 /usr/bin
OR 에 덤프할 수 없습니까 /usr/local/bin
? 이러한 위치는 바이너리 파일에만 적용되므로 바이너리는 해당 디렉터리의 최상위 수준에 있으며 하위 디렉터리는 허용되지 않습니다.
그렇다면 여기서 하드 링크를 사용하는 것은 어떨까요? 파일에 대한 하드 링크는 원본 파일과 동일한 상태(동일한 inode 공유)를 갖는 것으로 간주되고 하드 링크가 존재할 때 파일이 삭제되지 않기 때문입니다. 대신, 심볼릭 링크는 "실제"에 대한 포인터일 뿐입니다. 실제로 다른 위치/하위 디렉터리에 있는 다른 파일을 삭제하면 파일이 자체적으로 실행될 수 없기 때문에 다른 곳에 있는 바이너리에 대한 하드 링크를 넣는 것은 별 의미가 없습니다.
한 가지 예 는 에 있는 다양한 TeX 유틸리티입니다 /usr/bin
. 이를 살펴보면 이들 중 다수가 에 있는 실제 유틸리티를 가리키는 것을 볼 수 있습니다 /usr/share/texlive/texmf-dist/scripts/
.ls -la | grep texmf
muru가 언급했듯이 또 다른 이유는 하드 링크가 파일 시스템 전체에서 작동하지 않는다는 것입니다.
데비안 대체 시스템에서 파일에 링크가 사용되는 또 다른 경우는 /usr/bin
또는입니다. /usr/local/bin
이 경우 바이너리는 의 심볼릭 링크를 가리키는 심볼릭 링크일 수 있으며 /etc/alternatives
, 이는 일반적으로 자신을 가리키는 실제 바이너리를 가리킵니다 /usr/bin
.
예:
ls -la /usr/bin/awk
lrwxrwxrwx 1 root root 21 Jul 31 2013 /usr/bin/awk -> /etc/alternatives/awk
ls -la /etc/alternatives/awk
lrwxrwxrwx 1 root root 13 Aug 11 2013 /etc/alternatives/awk -> /usr/bin/gawk
이 경우 심볼릭 링크는 가능한 모든 바이너리 범위를 가리키므로 올바른 메커니즘임이 분명합니다.