Není zde žádný problém s nepřesností nebo spolehlivostí, pouze porovnáváte dvě různá čísla:logickou velikost vs. fyzickou velikost.
Zde je ilustrace Wikipedie pro řídké soubory:
 
 ls zobrazuje šedé + zelené oblasti, logickou délku souboru. du (bez --apparent-size ) zobrazuje pouze zelené plochy, protože právě ty zabírají místo.
 Pomocí dd count=0 bs=1M seek=100 of=myfile můžete vytvořit řídký soubor .
 ls ukazuje 100 MiB, protože tolik je soubor dlouhý:
$ ls -lh myfile
-rw-r----- 1 me me 100M Jul 15 10:57 myfile
 
 du ukazuje 0, protože je přiděleno tolik dat:
$ du myfile
0 myfile
 ls -l --block-size=M
 
 vám poskytne dlouhý výpis formátu (potřebný ke skutečnému zobrazení velikosti souboru) a zaokrouhlí velikosti souborů až na nejbližší MiB .
 Pokud chcete MB (10^6 bajtů) místo MiB (2^20 bajtů) jednotek, použijte --block-size=MB místo toho.
 Pokud nechcete M příponu připojenou k velikosti souboru, můžete použít něco jako --block-size=1M . Děkuji Stéphane Chazelas za to, že to navrhl.
 Toto je popsáno v manuálové stránce ls; man ls a vyhledejte SIZE . Umožňuje použití jiných jednotek než MB/MiB také a podle vzhledu (to jsem nezkoušel) také libovolné velikosti bloků (takže můžete vidět velikost souboru jako počet 412bajtových bloků, pokud chcete).
 Všimněte si, že --block-size parametr je rozšíření GNU nad ls otevřené skupiny , takže to nemusí fungovat, pokud nemáte uživatelskou zemi GNU (což má většina instalací Linuxu). ls z GNU coreutils 8.5 podporuje --block-size jak je popsáno výše.
Existuje několik pojmů o velikosti souboru, jak je vysvětleno v odpovědi druhého muže a na obrázku wikipage o řídkých souborech.
Možná však budete chtít použít oba příkazy ls(1) a stat(1).
Pokud kódujete v C, zvažte použití systémových volání stat(2) &lseek(2).
Viz také odkazy v této odpovědi.