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 1650
też rozmiar pliku file
, ale jaka jest liczba 7
pod 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
symbolic-link
ls
Maythux
źródło
źródło
7
Zależ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.mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo
.Odpowiedzi:
Łą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.stat
ils -l
lepiej pod tym względem pokazuje rozmiar.źródło
du -sh symfile
daje 0? -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
du
rozmiar 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,du
aby wiedzieć o tym).System
ext4
plików wykonuje tę optymalizację tylko dla dowiązań symbolicznych, kryteria znajdują się w funkcji ext4_inode_is_fast_symlink .źródło
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.
źródło
du -sh symfile
daje 0?