Co „rozmiar” dowiązania symbolicznego reprezentuje w wyjściu ls?

11

Zacznę od przykładu:

$ 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 jest dowiązaniem symbolicznym pliku file

Znam 1650też rozmiar pliku file, ale jaka jest liczba 7pod kolumną rozmiaru?

EDYCJA: Uruchamianie du:

$ du -sh symfile
0   symfile

Jak więc udowodnić, że 7 to rozmiar dowiązania symbolicznego ?!


AKTUALIZACJA:

Spróbuj tego

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

zwróć uwagę, że rozmiar jest również tutaj 0.

Teraz:

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

Więc przypuszczam, że to nie tylko rozmiar

Maythux
źródło
2
7Zależy od systemu plików (i ewentualnie innych parametrów). Jest 7 na ext4, ale może być 13 na btrfs i 3 na tmpfs.
muru
1
Jest to rozmiar, ale rozmiar zależy od systemu plików (btrfs prawdopodobnie przechowuje więcej metadanych niż ext4, a ext4 więcej niż tmpfs). Możesz wypełnić dysk linkami. Mówię tylko, nie zdziw się, jeśli zobaczysz inną liczbę w innym systemie plików.
muru
1
Wpis do katalogu ma minimalny rozmiar, większy niż potrzebuje. Wprowadź wystarczającą liczbę wpisów, a wielkość katalogu wzrośnie. Skontaktować się z: mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
muru

Odpowiedzi:

13

Łącza symboliczne zajmują miejsce do przechowywania nazwy i celu oraz kilku bajtów dla innych metadanych.

Jest to więc rozmiar dowiązania symbolicznego.

Jeśli chodzi o rozmiar z du -sh: du patrzy tylko ile bloków jest przydzielonych, a więc może pokazywać 0. stati ls -llepiej pod tym względem pokazuje rozmiar.

Rinzwind
źródło
to dlaczego du -sh symfiledaje 0? -
Maythux,
du tylko sprawdza, ile bloków jest przydzielonych, a zatem może pokazywać 0. stat i ls -l są mądrzejsze.
Rinzwind
Przeczytaj aktualizację
Maythux
Zobacz moją odpowiedź: to nazwa, cel i niektóre metadane. W sumie stanowi to 7 bajtów. Inne systemy operacyjne przechowują inne metadane, więc będą miały inny rozmiar.
Rinzwind
Pytanie brzmiało: „Jak to udowodnić?”
Pilot6
5

Jest to rozmiar dowiązania symbolicznego w bajtach.

Niektóre systemy plików mają niewielki obszar we wpisie katalogu, który jest używany na początku pliku, co znacznie przyspiesza przetwarzanie dowiązań symbolicznych i małych odczytów (pomyśl file) kosztem większych wpisów w katalogu.

Jeśli cała zawartość dowiązania symbolicznego mieści się we wpisie katalogu, wówczas bloki danych nie są przydzielane, a durozmiar jest wyświetlany jako zero. Jeśli dowiązanie symboliczne nie pasuje, miejsce jest alokowane normalnie (więc kończy się to alokacją pojedynczego bloku), co może być zoptymalizowane przez system plików za pomocą scalania ogona (ale nie ma API, duaby wiedzieć o tym).

System ext4plików wykonuje tę optymalizację tylko dla dowiązań symbolicznych, kryteria znajdują się w funkcji ext4_inode_is_fast_symlink .

Simon Richter
źródło
Niektóre systemy plików ... ” - Twoja odpowiedź byłaby lepsza, gdybyś wymienił popularne systemy plików z tą funkcją (i te wszystkie bez nich).
RM
1

Jest to rozmiar pliku dowiązania symbolicznego w bajtach.

Plik dowiązania symbolicznego to normalny plik, który przechowuje dane dotyczące tego, gdzie jest plik, na który wskazuje. W ext 4 jest to 7 bajtów.

Pilot 6
źródło
rozmiar w jakim? czy to bajty czy bity czy co?
Maythux,
Rozmiar w bajtach ..
Pilot6
1
to dlaczego du -sh symfiledaje 0?
Maythux,
du nie jest dostępny w przypadku bardzo małych plików. Spróbuj użyć du w pliku o wielkości 99 bajtów. Pokaże 4,0 tys.
Pilot6
to jest mój pioint, wtedy powinien pokazywać przynajmniej 4k dla dowiązania symbolicznego, ponieważ w koncepcji systemu operacyjnego rejestruje klaster dla tego pliku
Maythux