O que o "tamanho" de um link simbólico representa na saída ls?

11

Vou começar pelo exemplo:

$ ls -l dir1
total 4
-rw-r--r-- 4 maythux maythux 1650 2008-01-10 16:33 file
lrwxrwxrwx 1 maythux maythux  7 2008-01-15 15:17 symfile -> file

symfile é um link simbólico do arquivo file

Também como eu sei 1650seria o tamanho do arquivo file, mas qual é o número 7que é colocado sob a coluna de tamanho?

Edição: Em execução du:

$ du -sh symfile
0   symfile

Então, como você pode provar que 7 é o tamanho do link simbólico ?!


ATUALIZAR:

tente isso

$ touch file
$ du -sh file
0 file
$ ls -l file
-rw-rw-r-- 1 maythux maythux 0 Jun  1 19:42 file

observe que o tamanho também está aqui 0.

Agora:

$ ln -s file sym
$ du -sh sym
0 sym
$ ls -l sym
lrwxrwxrwx 1 maythux maythux 4 Jun  1 19:44 sym -> file

Então, suponho que não seja apenas um tamanho

Maythux
fonte
2
O 7depende do sistema de arquivos (e possivelmente outros parâmetros). É 7 no ext4, mas pode ser 13 no btrfs e 3 no tmpfs.
Muru
1
É um tamanho, mas o tamanho depende do sistema de arquivos (o btrfs presumivelmente armazena mais metadados que o ext4 e ext4 mais que o tmpfs). Você pode preencher seu disco com links. Só estou dizendo, não se surpreenda se você vir um número diferente em um sistema de arquivos diferente.
Muru
1
Sua entrada de diretório tem um tamanho mínimo, maior que o necessário. Faça entradas suficientes e o tamanho do diretório aumentará. Verifique com: mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
Muru

Respostas:

13

Links simbólicos ocupam o espaço necessário para armazenar o nome e o destino, além de alguns bytes para outros metadados.

Portanto, é o tamanho do link simbólico.

Em relação ao tamanho de du -sh: du apenas analisa quantos blocos estão alocados e, portanto, podem mostrar 0. state ls -lsão melhores para mostrar o tamanho nesse sentido.

Rinzwind
fonte
então por que du -sh symfiledá 0? -
Maythux
du olha apenas quantos blocos estão alocados e, portanto, pode mostrar 0. stat e ls -l são mais inteligentes.
Rinzwind
Por favor, leia a atualização
Maythux
Veja minha resposta: é o nome, o destino e alguns metadados. No total, compensa 7 bytes. Outro sistema operacional armazena outros metadados e, portanto, terá um tamanho diferente.
Rinzwind
A pergunta era "Como você pode provar isso?"
Pilot6
5

É o tamanho do link simbólico em bytes.

Alguns sistemas de arquivos têm uma pequena área dentro da entrada do diretório usada para o início do arquivo, que acelera significativamente o processamento de links simbólicos e pequenas leituras (pense file) às custas de entradas maiores no diretório.

Se todo o conteúdo do link simbólico couber na entrada do diretório, nenhum bloco de dados é alocado e o dutamanho é mostrado como zero. Se o link simbólico não couber, o espaço é alocado normalmente (para que você acabe com uma alocação de bloco único), que pode ser otimizada pelo sistema de arquivos usando a mesclagem final (mas não há API para dusaber sobre isso).

O ext4sistema de arquivos executa essa otimização apenas para links simbólicos, os critérios são encontrados na função ext4_inode_is_fast_symlink .

Simon Richter
fonte
" Alguns sistemas de arquivos ... " - sua resposta seria melhorada se você listasse os sistemas de arquivos comuns com esse recurso (e quaisquer sistemas comuns sem).
RM
1

Esse é o tamanho do arquivo do link simbólico em bytes.

O arquivo Symlink é um arquivo normal que armazena dados sobre onde está o arquivo para o qual está apontando. No ext 4, são 7 bytes.

Pilot6
fonte
tamanho em que? é bytes ou bits ou o quê?
Maythux
Tamanho em bytes ..
Pilot6 01/06
1
então por que du -sh symfiledá 0?
Maythux
du não é presize com arquivos muito pequenos. Tente usar du em algum arquivo de 99 bytes. Ele mostrará 4,0K.
Pilot6
que meu pioint também, então ele deve pelo menos mostrar 4k para o link simbólico já que em conceito OS é registring um cluster para este arquivo
Maythux