Por que existem muitos hard links em / usr [closed]

0

Eu li este link , agora eu simplesmente quero saber por que existem muitos hard links em /usr .

Por exemplo, no meu servidor Ubuntu, instalei git , achei o comando git aqui: /usr/bin/git . Eu executo ls -l /usr/bin/git e obtenho a saída como abaixo:

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

Como você pode ver, existem 119 hard links ...

Por que precisamos de 119 links aqui? Em termos mais gerais, como temos a variável de ambiente PATH e os arquivos executáveis foram colocados em /usr/bin/ , também podemos criar links suaves por alguma razão de compatibilidade, podemos executá-los a qualquer momento e em qualquer lugar, por que links físicos em usr ?

Parte da saída de 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

Todos os links de /usr/bin/git são encontrados em /usr/libexec/git-core/ .

    
por Yves 06.03.2018 / 04:31

2 respostas

3

Os links git não têm nada a ver com o PATH, eles são uma medida de economia de espaço.

De modo geral, na maioria dos casos, para softwares "instalados", os links físicos são preferíveis a links simbólicos sempre que possível, porque são mais eficientes e resilientes. Você verá alguns binários em /usr/bin com links físicos, incluindo perl , e tudo bem.

git packages tendem a usar links simbólicos, devido ao grande número de links envolvidos e os problemas que podem causar . Se você instalar git da origem, ele usará hard links por padrão se for possível; você pode desativar isso adicionando NO_INSTALL_HARDLINKS=1 aos argumentos do comando make install .

    
por 06.03.2018 / 07:09
3

Geralmente, um único binário com várias funções relacionadas possui vários links físicos, para permitir que cada função tenha um comando distinto e memorável e ainda não duplique qualquer código que todas essas funções possam ter em comum.

Fazer com que as várias funções de um único binário apareçam como comandos distintos também é uma maneira fácil, independente de shell de tornar as funções TAB-completáveis: por exemplo, em bash , se você lembrar apenas as primeiras letras de alguns comando, basta digitar as letras que você lembra e pressione TAB duas vezes: você obterá uma lista de todos os comandos com essas letras iniciais.

Links simbólicos também podem ser usados para isso, mas se espera-se que todos os comandos vinculados estejam no mesmo diretório, links físicos são a solução mais eficiente em termos de espaço: em vez de duplicar um arquivo inteiro ou apenas usar um extra inode como um symlink pode fazer (em alguns sistemas de arquivos), um hard link ocupa apenas uma entrada de diretório.

Se você quiser, pode facilmente fazer um script se comportar assim:

#!/bin/sh

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

Tags