나는 심볼릭 링크와 하드 링크 사이의 기술적 차이점을 이해하고 실제로 사용하는 문제이며 특히 겉보기에 비슷한 조건인 디렉토리에서 둘 다 사용되는 이유가 무엇인지 궁금합니다 /bin
.
내 시스템에 나열된 내용의 일부는 다음과 같습니다.
~$ ls -lai /bin
total 10508
32770 drwxr-xr-x 2 root root 4096 Jun 14 11:47 .
2 drwxr-xr-x 28 root root 4096 Sep 6 13:15 ..
119 -rwxr-xr-x 1 root root 959120 Mar 28 22:02 bash
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bunzip2
127 -rwxr-xr-x 1 root root 1832016 Nov 16 2012 busybox
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzcat
6191 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzcmp -> bzdiff
5640 -rwxr-xr-x 1 root root 2140 Dec 15 2011 bzdiff
5872 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzegrep -> bzgrep
3520 -rwxr-xr-x 1 root root 4877 Dec 15 2011 bzexe
6184 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzfgrep -> bzgrep
5397 -rwxr-xr-x 1 root root 3642 Dec 15 2011 bzgrep
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzip2
2851 -rwxr-xr-x 1 root root 10336 Dec 15 2011 bzip2recover
6189 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzless -> bzmore
5606 -rwxr-xr-x 1 root root 1297 Dec 15 2011 bzmore
더 나은 가시성을 위해 동일한 인덱스 노드에 대한 하드 링크를 들여씁니다. 따라서 bzcmp
의 경우에는 심볼릭 링크를 사용하고, bzegrep
의 경우에는 하드링크를 사용합니다.bzfgrep
bzless
bzip2
bzcat
bunzip2
둘 다 일반 파일(디렉토리가 아님)이고 파일 시스템에 상주하며 시스템 유틸리티이며 심지어 동일한 작업인 bzip 아카이브를 처리하도록 설계되었습니다. 이 특별한 경우에 하드/기호 링크를 사용하는 이유는 순전히 역사적인 것입니까, 아니면 뭔가 빠졌습니까?
내 질문을 명확히하려면 :
그래요아니요묻다:
- 심볼릭 링크와 하드 링크의 기술적 차이점
- 이론적으로 각각의 장점과 단점
이러한 문제는 SO의 다른 스레드에서 해결되었습니다. 저는 특정 상황, 즉 관련 시스템 유틸리티 세트에서 왜 다른 결정이 내려지는지 이해하려고 노력하고 있습니다. 기술적으로 둘 다 심볼릭 링크일 수도 있고, 둘 다 하드 링크일 수도 있습니다. 둘 중 하나의 옵션이 작동할 것입니다(그리고 두 경우 모두 프로그램은 호출을 어떻게 통과했는지 계속 파악할 수 있습니다 argv[0]
). 여기의 의도(있는 경우)를 이해하고 싶습니다.
관련된:
답변1
하드 링크와 심볼릭 링크를 사용하는 이유
이 경우 기호 링크보다 하드 링크를 사용하면 세 가지 주요 이점이 있습니다.
하드 링크
- 하드 링크의 경우 링크는 inode를 직접 가리킵니다.
- 하드 링크는 실행 파일의 여러 복사본을 가지고 있지만 그 중 하나의 디스크 공간만 사용하는 것과 같습니다.
- 어떤 것도 손상시키지 않고 하드 링크의 모든 분기 이름을 바꿀 수 있습니다.
심볼릭 링크
- 링크는 개체를 가리킵니다(이 개체는 inode를 가리킵니다).
- 파일 시스템에 걸쳐 있을 수 있지만 하드 링크는 그럴 수 없습니다.
일반 링크의 장점
이러한 링크는 많은 실행 파일이 호출 방법에 따라 다르게 동작하기 때문에 존재합니다. 예를 들어, 이 두 명령은 bzless
실제로 bzmore
하나의 실행 파일입니다. bzmore
실행 파일은 호출되는 이름에 따라 다르게 동작합니다.
여기에는 몇 가지 이유가 있습니다. 다음은 좀 더 분명한 것들입니다:
- 단일 실행 파일을 개발하는 것이 여러 실행 파일을 개발하는 것보다 쉽습니다.
- 디스크 공간 절약
- 더 쉬운 배포
왜 둘 다 사용됩니까?
이 특정 애플리케이션에서는 둘 중 하나를 선택하는 것이 의미가 없습니다. 둘 다 단일 실행 파일을 다시 로드할 수 있도록 별칭 역할을 하는 기능을 용이하게 합니다. 이는 실제로 다양한 프로그램 개발자가 활용하고 있는 핵심 기능입니다.
보고FHS(파일 시스템 계층 표준)이런 식으로 지정하더라도 둘 중 하나일 수 있습니다.
발췌
/bin/sh가 실제 Bourne 쉘이 아닌 경우 실제 쉘 명령에 대한 하드 또는 기호 링크여야 합니다.
그 이유는 sh와 bash가 반드시 같은 방식으로 동작하지 않을 수 있기 때문입니다. 또한 기호 링크를 사용하면 사용자는 /bin/sh가 실제 Bourne 쉘이 아님을 쉽게 알 수 있습니다.
...
...
gunzip 및 zcat 프로그램이 존재하는 경우 gzip에 대한 기호 링크 또는 하드 링크여야 합니다. /bin/csh는 /bin/tcsh 또는 /usr/bin/tcsh에 대한 심볼릭 링크일 수 있습니다.
인용하다
답변2
어떤 종류의 링크를 사용해야 하는지 알려주는 비기술적인 규칙이 있는지 기존 관행을 통해 파악하려고 하는 것 같습니다. (나는 말했다비기술적인둘 중 하나를 사용해야 하는 기술적 이유를 이미 알고 있기 때문입니다. )
대답은 다른 규칙이 없다는 것입니다. 당신이 우분투 패키지에서 지적한 예는 bzip2
많은 개발자들이 별다른 생각 없이 우분투 패키지들을 혼합한다는 것을 보여줍니다. 기술적인 차이 외에는 강력한 지침이 없고, 이러한 차이는 미미하기 때문입니다.
개인적으로 나는 자체 문서화 특성을 대신하여 약간의 오버헤드를 기꺼이 지불할 의향이 있기 때문에 심볼릭 링크를 사용하는 것을 선호했습니다.
다른 개발자들은 최소한의 효율성을 제공하기 때문에 하드 링크를 선택합니다.
이 질문은 다음과 매우 유사합니다.공백과 탭또는동적 타이핑과 정적 타이핑또는이맥스와 vi하지만 트리거할 만큼 흥미롭지는 않습니다.성전. 더 흥미로운 전투와 마찬가지로 두 가지 옵션 중 하나를 선택해야 하는 이유가 있지만, 누군가가 어떤 옵션을 사용해야 하는지 알려주지 않는 한 자신에게 더 적합한 옵션을 선택해야 합니다.