Corepathy realpath: saída confusa quando usada com um link hard (?)

2

Eu estava "brincando" e baguncei minha instalação do pip (gerenciador de pacotes Python). De qualquer forma, no meu sistema, /bin/pip é (?) Um link duro de /usr/bin/pip (ou o contrário, já que me disseram com hard links que não há noção de qual arquivo é o original).

$ realpath /bin/pip /usr/bin/pip
/usr/bin/pip
/usr/bin/pip

Os resultados de realpath me confundem. Se não houver noção de qual arquivo é o original, por que realpath exibe /usr/bin/pip em vez de /bin/pip para /bin/pip ?

Sei que ou pode ser um link físico porque:

$ stat -c "%n is a %F pointing to inode %i, which has %h hard link(s)" /bin/pip /usr/bin/pip
/bin/pip is a regular file pointing to inode 152837, which has 1 hard link(s)
/usr/bin/pip is a regular file pointing to inode 152837, which has 1 hard link(s)

Apenas no caso, minha máquina está rodando o CentOS 7 e meu comando realpath vem do GNU coreutils 8.22.

-------- EDITAR -------

De fato, / bin é um link simbólico que aponta para / usr / bin, enquanto / usr / bin é um diretório regular:

$ ls -ld /bin /usr/bin
lrwxrwxrwx. 1 root root     7 May 15 12:49 /bin -> usr/bin
dr-xr-xr-x. 2 root root 53248 Jul 13 18:44 /usr/bin
    
por Samuel Santana 19.07.2017 / 21:22

1 resposta

2

Eu testei isso e isso não acontece comigo. Eu suspeito (como sugerido) que é devido a um link simbólico em algum lugar, já que realpath resolve isso.

Tente:

ls -li /bin/pip /usr/bin/pip  

Isso deve verificar novamente se as duas entradas do diretório referenciam o mesmo inode / file (direta ou indiretamente).

Agora tente:

ls -ld /bin /usr/bin  

Isso deve mostrar dois diretórios ( d na primeira coluna). Se um deles (quase certamente /usr/bin mostrar um l nessa coluna, então é um link simbólico, e isso explicaria o comportamento que você está vendo (como observado anteriormente, realpath resolve links simbólicos).

Esclarecimento final: se um dos /bin ou /usr/bin for um link simbólico para o outro, o realpath seguirá o symlink até o destino e usará esse destino como o caminho real.

O GNU realpath (mas não todos os outros) tem a opção --no-symlinks ; se você usar isso, provavelmente obterá o resultado esperado originalmente.

    
por 19.07.2017 / 22:55

Tags