Pergunta

Eu só queria esclarecer se um link rígido/simbólico é realmente um arquivo criado?

Eu corri o comando:

ln source hardlink
ln -s source softlink

- O comando LS mostra esses 2 links como um arquivo.

Então minha consulta é, faz ln / ln -s realmente criar um arquivo?

Atenciosamente, Darkie15

Foi útil?

Solução

Sim e não :-)

No Unix, o conteúdo de um arquivo é distinto das entradas do diretório para esse arquivo. Você pode ter várias entradas de diretório apontando para o mesmo conteúdo (procure inode Para uma descrição de como isso funciona) e, aqui está a parte complicada:

Todas essas entradas de diretório são iguais. Mesmo que se possa ter sido criado primeiro, não há nada de especial nisso. Se você removê -lo, o conteúdo não desaparece, apenas a entrada do diretório. O conteúdo desaparecerá quando o inode tiver zero entradas de diretório apontando para ele (e todos os processos fecham o arquivo - já fui mordido antes tentando limpar o espaço do disco excluindo arquivos de log apenas para descobrir isso, porque um processo ainda tem o arquivo Aberto, o conteúdo do arquivo não é recuperado, mesmo que nenhuma entrada de diretório aponte para eles).

Isso é para links difíceis.

Links suaves são um pouco mais complicados. Eles criam uma espécie de "arquivo" (um inode separado), contendo o caminho para o arquivo de destino. E esses links são não igual. A exclusão do original deixará você com um link suave, apontando em nenhum lugar.

Como os inodos são únicos em um determinado sistema de arquivos, os links difíceis não podem se referir a dados em um sistema de arquivos diferente.

Os links suaves não têm essa limitação, pois armazenam o caminho para o arquivo de destino, não o seu inode.

A transcrição a seguir pode ajudar:

$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    hello
$ cat f2
    hello
$ cat f3
    hello
$ rm f1
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    cat: f1: No such file or directory
$ cat f2
    hello
$ cat f3
    cat: f3: No such file or directory

Eu usei apenas os últimos quatro dígitos do número do inode para manter a entrada curta (e não atingir você com números de inode como 43910096366994672) Mas você pode ver isso f1 e f2 tem exatamente o mesmo inode enquanto f3 é diferente. Você também pode ver que o conteúdo do arquivo criado originalmente como f1 sobreviver à sua exclusão porque f2 ainda está referenciando isso.

No entanto, porque f3 está referenciando o f1 Nome Em vez de inode, você recebe um erro tentando usá -lo.


Além: você deve adorar quando o Unix Toys com você assim:

$ ls f*
    f2  f3
$ cat f3 # What the ...?
    cat: f3: No such file or directory

Quase tão divertido quanto criar um arquivo chamado espaçobackspacex E então vendo alguém tentar excluí-lo :-)

Outras dicas

Nenhum dos nenhum deles cria um arquivo.

Um arquivo no disco é identificado por um "inode". Os diretórios mapeiam nomes de arquivos para inodes. Um link rígido significa "Crie um novo nome de arquivo neste diretório que aponte para o mesmo inode do arquivo que eu nomei".

Um link simbólico significa "Crie um novo nome de arquivo neste diretório que aponte para qualquer que seja o que esses outros arquivos apontarem".

Como Mangoman aponta em um comentário, um link simbólico cria um arquivo com o nome do alvo do link, mas você não deve prestar atenção. É um arquivo especial que não é da sua conta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top