/usr에 왜 그렇게 많은 하드 링크가 있나요? [닫음]

/usr에 왜 그렇게 많은 하드 링크가 있나요? [닫음]

나는 읽었다이 링크이제 그 안에 하드 링크가 왜 그렇게 많은지 알고 싶습니다 /usr.

예를 들어 , 설치된 Ubuntu 서버에서 git다음 명령을 찾았습니다 git. /usr/bin/git실행 ls -l /usr/bin/git하고 다음 출력을 얻습니다.

-rwxr-xr-x 119 root root 11178080 Mar  6 03:48 /usr/bin/git

보시다시피 119개의 하드 링크가 있습니다.

여기에 119개의 하드 링크가 필요한 이유는 무엇입니까? 더 일반적으로 말하자면, 이미 환경 변수가 있고 PATH실행 파일을 넣었으며 /usr/bin/일부 호환성 이유로 소프트 링크를 만들고 어디에서나 실행할 수 있으므로 하드 링크가 있는 이유는 무엇입니까 usr?

부분 출력 find /usr -samefile /usr/bin/git:

/usr/libexec/git-core/git-prune
/usr/libexec/git-core/git-diff-index
/usr/libexec/git-core/git-ls-remote
/usr/libexec/git-core/git-merge-recursive
/usr/libexec/git-core/git-push
/usr/libexec/git-core/git-update-index
/usr/libexec/git-core/git-check-mailmap
/usr/libexec/git-core/git-interpret-trailers
/usr/libexec/git-core/git-archive
/usr/libexec/git-core/git-upload-archive
/usr/libexec/git-core/git-rev-parse
/usr/libexec/git-core/git-ls-files
/usr/libexec/git-core/git-am

에 대한 모든 하드 링크는 /usr/bin/git에서 찾을 수 있습니다 /usr/libexec/git-core/.

답변1

이러한 git링크는 경로 독립적이며 공간 절약 조치입니다.

일반적으로 "설치된" 소프트웨어의 경우 대부분의 경우 하드 링크가 더 효율적이고 탄력적이기 때문에 심볼릭 링크보다 선호됩니다. /usr/bin를 포함하여 하드 링크가 있는 많은 바이너리를 볼 수 있습니다 perl. 괜찮습니다.

git관련된 링크가 많고 패키지가 심볼릭 링크를 사용하는 경향이 있습니다.가능한 문제. 소스에서 설치하는 경우 git가능하면 기본적으로 하드 링크를 사용합니다. 명령 NO_INSTALL_HARDLINKS=1에 인수를 추가하여 이를 비활성화할 수 있습니다.make install

답변2

일반적으로 여러 관련 기능이 있는 단일 바이너리에는 각 기능에 고유하고 기억하기 쉬운 명령을 제공하고 모든 기능에 공통될 수 있는 코드를 복제하지 않기 위해 여러 하드 링크가 있습니다.

단일 바이너리 파일의 다양한 기능을 다른 명령으로 표시하는 것도 기능을 TAB 완료 가능하게 만드는 간단하고 쉘 독립적인 방법입니다. 예를 들어 bash명령의 처음 몇 글자만 기억하는 경우 다음 문자를 입력하기만 하면 됩니다. 기억하고 TAB을 두 번 누르면 이 첫 글자가 포함된 모든 명령 목록이 표시됩니다.

이 목적으로 기호 링크도 사용할 수 있지만 링크된 모든 명령이 동일한 디렉토리에 있을 것으로 예상되는 경우 하드 링크가 가장 공간 효율적인 솔루션입니다. 전체 파일을 복사하거나 기호와 같은 추가 inode를 사용하는 대신 link (일부 파일 시스템에서는) 하드 링크가 하나의 디렉토리 항목만 차지하도록 할 수도 있습니다.

원하는 경우 스크립트가 다음과 같이 동작하도록 쉽게 만들 수도 있습니다.

#!/bin/sh

case "${0##*/}" in
    name1)
        # do something
        ;;
    name2)
        # do something else
        ;;
    *)
        # output an error message, or perhaps usage instructions
        ;;
esac

관련 정보