O que está acontecendo nos bastidores para esses comandos básicos do Unix?

0

Eu estava apenas jogando com alguns comandos básicos do Unix com as seguintes operações

  1. crie um arquivo "um"
  2. crie um link "dois" para "um" ( ln one two )
  3. Edite o arquivo "um" e coloque palavras - um, dois, três, quatro em linhas separadas.
  4. Conteúdo verificado de 'dois' - tem o mesmo conteúdo, até aqui tudo bem.
  5. Crie um link temporário "três" para um. três também tem o mesmo conteúdo
  6. Verificamos o número de links usando ls -l .
  7. Editou o arquivo "one" e adicionou a palavra "five" em uma linha separada.
  8. Verificou que os arquivos 'two' e 'three' têm o mesmo conteúdo - até o momento
  9. Editado soft link três ( vim three ) e acrescentou a palavra 'seis' no final.
  10. Verificados todos os três arquivos agora têm de um a seis em palavras.

Pergunta - Eu entendo se o arquivo 'one' recebe o conteúdo do arquivo 'three'. Mas por que o arquivo 'dois' também os obtém?

Se eu fizer ls -l , vejo que os arquivos um e dois têm 28 bytes, enquanto o arquivo três tem apenas 3 bytes (talvez para seis). Qual é o motivo disso?

Agora, se eu remover o arquivo 'one', vejo que três ainda estão vinculados a um, mas não consigo cat three e recebo o erro de que o arquivo não existe. Mas por que isso é mostrado no comando ls ?

    
por Sumod 16.12.2015 / 05:39

1 resposta

3

why does file 'two' also get them?

causa ln(1) criar links físicos por padrão, e 'dois' é um link de 'um', de acordo com a página man:

A hard link to a file is indistinguishable from the original directory entry; any changes to a file are effectively independent of the name used to reference the file.

If I do ls -l, I see that files one and two have 28 bytes, whereas file three has only 3 bytes (maybe for six). What is the reason for this?

porque o conteúdo do arquivo tem 28 bytes, assim:

$ wc -c <<<'one two three four five six'
      28

exceto nova linha char substituída por espaço.

para o arquivo 'three', é um link de símbolo. um link de símbolo contém o nome do arquivo ao qual ele está vinculado. so 'three' teria tamanho do nome do arquivo 'one', e são 3 bytes.

Now if I remove file 'one', I see that three is still shown to be linked to one, but I cannot cat three and get error that file does not exist. But then why it is shown in the ls command?

Se você remover o arquivo 'one', 'three' se tornará um link de símbolo quebrado. Os links de símbolo são um tipo de arquivo específico, a menos que você o remova explicitamente, ele não desaparecerá quando o arquivo ao qual ele é vinculado for removido.

    
por 16.12.2015 / 06:00

Tags