Quando um link simbólico é tratado como o link e como um link simbólico?

2

Quando um link simbólico é tratado como o link e como um link simbólico?

Um link simbólico pode ser vinculado a um arquivo de tipos diferentes. Por exemplo, deixe mylk ser um link simbólico que vincula a um diretório. Os dois seguintes farão coisas diferentes:

mv mylk ~

mv mylk/ ~

Será que um simbólico tratado como o que ele vincula ou ele próprio depende do que se espera que seja por um comando ou por como ele é especificado (independentemente do comando que usa o link)? Obrigado.

    
por Tim 14.10.2014 / 01:00

1 resposta

3

Um programa que age sobre o conteúdo de um arquivo sempre age no alvo, não no link simbólico, porque os links simbólicos não têm conteúdo próprio.

Um programa que age nos metadados de um arquivo (registros de data e hora, proprietário, permissões, etc.) geralmente atua no destino, mas alguns programas têm opções para agir no link simbólico (por exemplo, chown -h , touch -h ,…).

Um programa que atua em uma entrada de diretório geralmente atua no link simbólico. Operações como renomear e excluir atuam em uma entrada de diretório, seja ela qual for. Existem chamadas de sistema separadas para acessar os metadados (incluindo o tipo de arquivo) de um arquivo, dependendo se o programa deseja seguir links simbólicos ( stat ) ou não ( lstat ) . Alguns programas que podem atuar em qualquer tipo de entrada de diretório têm opções para dizer-lhes para atuar no destino em vez do link quando encontram um link. Por exemplo, muitos utilitários que atravessam diretórios recursivamente ( find , chown -R , cp -R ,…) agem em links simbólicos por padrão, mas seguem todos os links simbólicos se você passar a opção -L e seguir os links simbólicos na linha de comando, mas não links simbólicos para diretórios encontrados durante a travessia recursiva se você passar a opção -H .

Se um nome de arquivo tiver uma barra final, então isso força o nome do arquivo a ser interpretado como um diretório . Se o nome é um link simbólico, ele será seguido. Então, mv mylk ~ move qualquer mylk (link simbólico ou outro), enquanto mv mylk/ ~ move mylk se for um diretório ou o destino se mylk é um link simbólico para um diretório e reclama se mylk não é um diretório nem um link simbólico para um. Esse comportamento geral

    
por 14.10.2014 / 01:40