Czytałem na wielu stronach internetowych, że w Linuksie dowiązania symboliczne (dowiązania miękkie, dowiązania symboliczne) są jak wskaźniki odnoszące się do innego pliku, który może znajdować się w dowolnym miejscu (np. Skróty Windows). Jednak gdy sprawdzam użycie dysku przez folder, w którym znajdują się dowiązania symboliczne, istnieje rozbieżność między tym, co mówi mój menedżer plików, a tym, co du
zgłasza. Jednak jeśli piszę du -L
( -L, --dereference; dereference all symbolic links
ze strony podręcznika), dane wyjściowe du -L
i rozmiar raportowane przez mojego menedżera plików są takie same .
Moje pytanie brzmi : jeśli mam łącze do dużego pliku, na przykład na mojej osobnejhome
partycji, czy będę miał jakieś problemy?
Przykład :
Mój /var/tmp
folder jest teraz pusty. Utwórzmy plik:
$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total
I mój menedżer plików (w tym przypadku Thunar) zgłasza się
Rozmiar: 1 sztuka o łącznej wartości 163,0 kB
W porządku. Teraz stwórzmy naprawdę duży plik /tmp
i link do niego:
$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0 ./heavy.txt
168 .
168 total
Na razie wszystko jest w porządku. Ale jeśli otworzę mój menedżer plików:
Rozmiar: 2 elementy o łącznej wartości 570,3 kB
I w końcu:
$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total
Jeśli partycja, na której /var/tmp
się znajduje, ma wielkość 1 GiB i utworzę w niej link do pliku 1 GiB, to czy mój dysk twardy zginie? Wiem, że to du
da wynik 168 i Thunar 1 GiB, ale nie wiem, co jest właściwe.
źródło
Odpowiedzi:
Dowiązania symboliczne oczywiście zajmują miejsce, ale tylko tyle miejsca, ile potrzeba do przechowywania nazwy i celu oraz kilku bajtów dla innych metadanych. Miejsce zajmowane przez dowiązanie symboliczne nie zależy od miejsca zajmowanego przez cel (w końcu cel nie musi nawet istnieć).
Zwykły
du
zgłasza miejsce zajęte przez drzewo katalogów na dysku.du -L
zgłasza miejsce, które zajęłoby drzewo katalogów, gdyby wszystkie dowiązania symboliczne zostały zastąpione przez cel. Ta pierwsza jest zwykle przydatną informacją; na przykład jest to miejsce, które można odzyskać po usunięciu drzewa, i (w przybliżeniu) miejsce potrzebne do utworzenia kopii zapasowej drzewa.du
w drzewie katalogów pokazuje (zwykle) nieco więcej niż sumę rozmiarów plików. Wynika to z dwóch rzeczy. Po pierwsze,du
liczy się także katalogi, które zajmują trochę miejsca do przechowywania nazw plików i metadanych. Po drugie,du
zlicza miejsce na dysku zajmowane przez plik, który może różnić się od rozmiaru pliku: najczęstszym efektem jest to, że pliki zajmują całkowitą liczbę bloków (4kB w typowej instalacji Linuksa), więc plik 1-bajtowy może pokaż jako 4kB na wyjściu; ale kompresja (taka jak prymitywna forma zapewniana przez rzadkie pliki w prawie każdym systemie plików UNIX) może spowodować, że rozmiar pliku będzie większy niż użycie dysku.Z podanych liczb wynika, że Thunar zgłasza sumę rozmiarów plików w drzewie katalogów, podążając za symbolicznymi linkami . Mówi to w subtelny sposób - twierdzi, że całkowity rozmiar to 570,3 kB, a nie, że użycie dysku wynosi 570,3 kB. Z interfejsu użytkownika ani dokumentacji nie wynika wcale, że Thunar podczas obliczania wielkości korzysta z dowiązań symbolicznych.
Który z nich jest „właściwy”, jest kwestią subiektywną.
du
zgłasza użycie dysku. Thunar zgłasza całkowity rozmiar po symbolicznych linkach. Utworzenie dowiązania symbolicznego ma znikomy wpływ na użycie dysku, ale z definicji zmienia łącza symboliczne podążające za rozmiarami całkowitymi, które raportuje Thunar.źródło
du
pokazuje użycie dysku, podczas gdy Thunar pokazuje coś innego.Myślę, że domyślnie twój menedżer plików próbuje uzyskać rozmiar plików, na które wskazują linki miękkie, podczas gdy
du
daje ci rozmiar katalogu i samych linków, ale nie plików, na które wskazują.Wyjaśnić,
Nie jestem pewien, czy o to pytasz, ale jeśli tak, to uważam, że może to być odpowiedź na twoje pytanie.
źródło