Jeśli uruchomisz ls -l na pliku, który zawiera jedną literę, będzie miał rozmiar 2B. Jeśli twój system plików ma 4k bloków, pomyślałem, że zaokrąglił pliki do rozmiaru bloku? Czy to dlatego, że ls -l faktycznie odczytuje liczbę bajtów z i-węzła? W jakich okolicznościach zaokrąglasz się w górę, aby blokować odpowiedzi w porównaniu z odpowiedziami na rzeczywistą liczbę bajtów w narzędziach GNU jądra Linux 2.6?
linux
filesystems
ls
ext3
Gregg Leventhal
źródło
źródło
Odpowiedzi:
Sądzę, że umieściłeś tę jedną literę w pliku za pomocą
echo a > file
lubvim file
, co oznacza, że będziesz miał tę literę i dodatkową nową linię (dwa znaki, a więc dwa bajty).ls -l
pokazuje rozmiar pliku w bajtach, a nie blokach (a dokładniej: długość pliku ):(uwaga, która
cat -A
wyświetla$
znaki nowej linii jako znak)W przeciwieństwie do
ls -l
,du
pokaże rzeczywisty rozmiar zajmowany na dysku:(faktycznie
du
pokazuje rozmiar w jednostkach 1kiB, więc tutaj rozmiar to 4 × 1024 bajty = 4096 bajtów = 4 kiB, co jest rozmiarem bloku w tym systemie plików)Aby to
ls
pokazać, musisz użyć-s
opcji zamiast / oprócz-l
:Pierwsza kolumna to przydzielony rozmiar, ponownie w jednostkach 1kiB. Ostatni można zmienić, określając
--block-size
npźródło
Myślę, że głęboka odpowiedź jest następująca:
Jak pokazują inne odpowiedzi, w zasadzie plik utworzony z dwóch bajtów ma długość dwóch bajtów (pokaż wg
ls -l
) i zajmuje 4 KiB (pokaż przezdu
lubls -ls
).Widzieć:
Dobrze,
test
ma długość 1 i rozmiar (na dysku) 4 KiB. Ale:(pierwsze polecenie dodaje 8191 bajtów zerowych
test
), teraz test ma długość 8192, ale nadal zajmuje 4 KiB na dysku (ma w nim „dziurę”) (1).Niektóre systemy plików mogą także kompaktować krótkie pliki, aby zajmowały mniej miejsca, dzieląc bloki (patrz na przykład pakowanie ogona ), a inne, takie jak btrfs, kopiują podczas zapisu , więc związek między plikiem, jego logiczną długością i ilością miejsca zajmuje dysk jest skomplikowany.
Przypisy:
(1) To nie jest tak naprawdę dziura , jest na końcu ... ale nadal działa do końca przykładu.
źródło
ls -l
to tylko długi format.ls -ls
służy do wyświetlenia rozmiaru bloku.Testowanie
Jak widzimy, rozmiar pliku jest wymieniony jako 2B. Jeśli jednak chcesz sprawdzić rozmiar bloku, musisz uruchomić poniższe polecenie.
4 powyżej pokazuje użyty rozmiar bloku. Możemy to również zweryfikować za pomocą
stat
polecenia.Teraz pojawia się pytanie, dlaczego
ls -ls
wyświetla rozmiar bloku jako 4, astat
wyświetla rozmiar bloku jako 8. Powód tego zachowania jest wyjaśniony w odpowiedzi tutaj .źródło