В чем разница между размером файла в ls -l и du-sh?

У меня самые запутанные квесты, которые беспокоили меня годами. В чем разница между размером файла, заданным ls -l и du -sh *.

GRILL:/user/MAIL/DATA>ll total 270 drwxr-xr-x 11 user users 1024 Mar 21 2013 . drwxr-xr-x 6 user users 96 May 28 2008 .. drwxr-xr-x 10 user users 1024 Jun 14 09:40 Rod drwxr-xr-x 3 user users 96 Sep 17 2010 Atlas drwxr-xr-x 2339 user users 132096 Jun 14 15:00 Admin drwxr-xr-x 3 user users 96 Jul 11 2014 DE drwxr-xr-x 5 user users 96 Jun 14 08:30 Express drwxr-xr-x 3 user users 96 Sep 17 2010 Deferred drwxr-xr-x 2 user users 96 Feb 10 2009 Imagi drwxr-xr-x 6 user users 1024 Jul 11 2014 NO drwxr-xr-x 3 user users 2048 Mar 21 2013 SE -rw-r--r-- 1 user users 55 Mar 21 2013 cmd GRILL:/user/MAIL/DATA>du -sk * 6723 Rod 0 Atlas 435494 Admin 2 DE 111273 Express 2 Deferred 0 Imagi 541 NO 12 SE 1 cmd 

Размер Admin в ls -l равен 132096 , я попытался удалить 400000+ файлов из каталога Admin, и я не нашел, что пространство немного сократилось.

В то время как du -sk дает размер 435494 . Какой из них является оригинальным размером файла и в чем разница между ними? Может ли кто-нибудь доработать?

2 Solutions collect form web for “В чем разница между размером файла в ls -l и du-sh?”

Для файлов файл ls -l file показывает (помимо всего прочего) размер file в байтах, а du -k file показывает пространство, занимаемое file на диске (в единицах 1 kB = 1204 байта). Поскольку дисковое пространство выделяется в блоках, размер, обозначенный du -k , всегда немного больше пространства, обозначенного ls -kl (что то же самое, что и ls -l , но в единицах 1 kB).

Для каталогов ls -ld dir показывает (среди прочего) размер списка имен файлов (вместе с несколькими атрибутами) файлов и подкаталогов в каталоге. Это всего лишь список имен файлов, а не содержимого файлов или подкаталогов. Таким образом, этот размер увеличивается, когда вы добавляете файлы в dir (даже если файлы пусты), но он остается неизменным, когда один из файлов в каталоге растет.

Однако, когда вы удаляете файлы из каталога, пространство из списка не восстанавливается немедленно, а записи для удаленных файлов помечены как неиспользуемые и позже перерабатываются (это зависит от реализации, но то, что я описал, универсальное поведение в эти дни). Вот почему вы можете не видеть никаких изменений в ls -ld выходе, когда вы удаляете файлы ls -ld , если когда-либо.

Наконец, du -ks dir показывает (оценку) пространство, занимаемое на диске всеми файлами в каталоге, вместе со всеми файлами во всех подкаталогах dir , в единицах 1 kB = 1024 байта. Принимая во внимание приведенное выше описание, это не имеет никакого отношения к выходу ls -kld dir .

ls -l показывает только размеры файлов на уровне 1.

du отобразит размеры папок рекурсивно (сумма размеров файлов в папке).

  • Почему ls отображает несуществующий файл?
  • Почему ls и hexdump не согласны с моим размером файла?
  • Преобразовать формат вывода ls -l в формат chmod
  • ls -a не показывает папку «system», но echo * показывает ее
  • = sign в конце .sock-файлов в выводе ls
  • GNU ls длинный список без разрешения / бит режима
  • Понимание команды «grep» показывает разные результаты, чем ожидалось
  • проблема с подключением wdfs
  • pipe ls to grep (строки против «элементов»)
  • Список только файлов в каталоге и показать номер inode
  • Найти использование дискового пространства в каталоге и всех его файлов
  • Interesting Posts

    Отправка команд для отображения на экране

    Как перенаправление файлов bash на стандарт отличается от shell (`sh`) в Linux?

    Разделение буфера обмена на корица

    Как узнать, когда учетная запись пользователя была заблокирована

    ограничивать контекст grep частью строки результата

    OS X / Linux one-liner / script, чтобы найти самую большую повторяющуюся группу строк в текстовом файле?

    Есть ли достойное программное обеспечение для распознавания речи для Linux?

    Компиляция источников с компилятором, отличным от стандартного

    Различные выходные данные монтирования с и без initramfs

    Команда: должна запускаться с терминала

    bash не читает $ TERMINFO при входе в систему (через SSH)

    Как отправить вывод с одного терминала на другой без каких-либо новых труб или файлов

    Пусть root читает все файлы в каталоге NFS, хотя сервер имеет root_squash включен

    можно заморозить процесс в Linux и перезагрузить или выключить компьютер. Затем продолжайте процесс, который был заморожен?

    Как я могу добавить записи man-страницы для своих собственных электроинструментов?

    Linux и Unix - лучшая ОС в мире.