Различие в вычислении размера каталога

vi и Caps Lock по сравнению с. /etc/passwd

  1. Соединитесь со старым полем Solaris с помощью старого последовательного терминала, который не обновляет экран правильно.
  2. su -
  3. vi /etc/passwd. Существует нет vipw, и "мы просто делаем незначительные редактирования" так или иначе.
  4. Поразите клавишу Caps Lock и не замечайте.
  5. Хит j пару раз для прокручивания вниз. Проигнорируйте то, что Вы на самом деле просто ввели J ("Соединение"), которое комбинирует эту строку со следующей строкой. Экран последовательного терминала не обновлялся правильно, таким образом, Вы не видели, что просто объединили первые 5 строк в одну строку Loooooong, таким образом, повредив первые 5 пользователей ('корень', 'демон', и т.д.).
  6. Закончите Ваша OTHER предназначила редактирования в файл, путь вниз внизу.
  7. Сохраните файл.
  8. Выйти из системы.

Я сделал это однажды. Удивительно, система оставалась функциональной в течение многих месяцев. Cronjobs хорошо работал, никакие ошибки не выделились в файлах журнала.

Мы не заметили эту проблему, пока мы не перезагрузили систему несколько месяцев спустя и не могли войти в систему в консоли. ps показал набор заданий, принадлежавших UID '0' не пользователем 'корень'.

Вы не могли войти в систему как корень, ни работать su или su -, и был нет sudo на этом поле. Не было никакого дисковода для гибких дисков, CD-ROM был арестован и никакие USB-порты (так никакой внешний CD-ROM). Однопользовательский режим не работал, потому что необходимо ввести в пароле для корня, и это прибывает из /etc/passwd.

9
02.09.2011, 01:49
4 ответа

Обычно, du информация о шоу об использовании диска (который является, куда его название происходит от). Следует иметь в виду это

disk usage != sum of file sizes

Поскольку каждый файл поднимает много блоков в файловой системе (см. man mkfs.ext2 например). Это означает, что только в очень редкой ситуации использование диска файла равняется своему фактическому размеру - для этого, размер должен быть точно несколькими из размера блока.

Думайте о блоках файловой системы как о полях, которые содержат части файлов - каждый может содержать часть только одного файла.

Для версии GNU du, проверьте --apparent-size опция.


Еще более интересная ситуация может произойти, когда существуют некоторые редкие файлы в файловой системе!

11
27.01.2020, 20:06
  • 1
    , Там не такая опция (я нахожусь на OS X, не Linux). Вероятно, должен был упомянуть, что в вопросе, так как тег недостаточно.) А-ч –  Eimantas 01.09.2011, 09:50
  • 2
    , право... Затем взгляните на страницу справочника и попытайтесь найти ссылки на actual или apparent. (Также посмотрите мое обновленное объяснение). –  rozcietrzewiacz 01.09.2011, 10:03
  • 3
    Корректный за исключением неравенства. Размеры файла могли бы иногда быть больше, чем пространство фактической дисковой емкости должно было сохранить их. (unix.stackexchange.com/q/33801/9426) –  Stéphane Gimenez 16.03.2012, 15:55
  • 4
    @StéphaneGimenez, Ничего себе... благодарит говорить мне! –  rozcietrzewiacz 16.03.2012, 16:00

В моей системе Ubuntu, с помощью ext4, du -b file дает размер в байтах фактического файла, и du -b dir дает размер в байтах файла (файлов) + каталог наверху, издержки, в моем случае, кратных числах 4 096 байтов..

Этот служебные увеличения как количество увеличений файлов.
Примечание: даже если файлы удалены, каталог наверху остается в более высоком уровне, которым это было в том, прежде чем мухи были удалены..

Я не попытался перезагрузить, видеть, возвращается ли это, но в любом случае, это означает, что размер каталога варьируется в зависимости от исторических обстоятельств.

Соответствие каждому размеру файлов может быть наилучшим вариантом для точного значения общих размеров файла.

Следующие общие количества сценария все размеры файла (в байтах)..

Для OS X, если Вы не имеете -b опция для 'du', можно использовать stat вместо этого. (если у Вас есть он :)... Прокомментированная строка показывает Ubuntu stat альтернатива du -b;

unset total
while IFS= read -r -d $'\0' rf; do
  # (( total += $(stat  "$rf" | sed -nre 's/^  Size: ([0-9]+).*/\1/p') ))
    (( total += $(du -b "$rf" | cut -f 1) ))
done < <(find  . -type f  -name '*' -print0)
echo $total
1
27.01.2020, 20:06
  • 1
    и другое stat. Ваш сценарий не является портативным вне Linux так или иначе. –  Gilles 'SO- stop being evil' 02.09.2011, 01:49
  • 2
    С MacPorts на OS X можно установить coreutils получить версию GNU du как gdu. Так не точно портативный, но может быть полезно для людей на OS X для получения, версии GNU некоторых удаляют сердцевину utils. –  drfrogsplat 19.11.2012, 03:29

О Mac OS X и Средстве поиска (в Snow Leopard, версии 10.6.8) я заметил следующее.

  • Я получаю счета байта для 'определенных количественно' чисел Средства поиска пути (файл или папка) с кодом (в bash(1)) ниже.
  • Окна "Info" Средства поиска и область показывают 'определенный количественно' (например, килограмм в КБ) числа в десятичном числе (базируйтесь 10, 1000), байты в противоположность двоичному файлу (базируются 2, 1024) байты таким образом я 'определяю количество' путем деления на 1 000 и увеличения единицы (байт) префикс 'квантор' (величина) и делаю некоторых нечетных "от ключевого" округления. (Мой полный код полон прокомментированного кода разработки и разделенный на несколько файлов (и языки), таким образом, трудно совместно использовать.)
    Поскольку далеко я видел, что мои 'определенные количественно' фигуры совпадают с 'определенными количественно' числами в Средстве поиска.
  • Кроме того, наряду с кодом я хочу сказать, что я имею не (и никогда не имели никого), переменная среды BLOCKSIZE набор в моей оболочке, но я протестировал (теперь, немного) обе версии и значения по умолчанию для $BLOCKSIZE дает те же значения.

#!/usr/bin/env bash
#tab-width:4
                                 du -s                      "${@:-.}"   |awk '{u+=$1}END{   print  u*'${BLOCKSIZE:-0512}'   }'||exit $?         #macosx  (xnu)
#                               gdu -sB${BLOCKSIZE:-4096}   "${@:-.}"   |awk '{u+=$1}END{   print  u*'${BLOCKSIZE:-4096}'   }'||exit $?         #macports gnu

  • Неопределенное количественно число мне не удалось соответствовать.
    Единственная вещь, которую я могу сказать, состоит в том, что я становлюсь ближе, только считая файлы (таким образом, исключая каталог ~ 'файловая система meta индекс/заголовок' ~data) и что самое близкое, которое я получаю, со следующим.

#!/usr/bin/env bash
#tab-width:4
    for a;do find "$a" -type f -print0|xargs -0      stat -f %z         |awk '{u+=$1}END{   print  u                        }'||exit $?;done    #macosx  (xnu)
#   for a;do find "$a" -type f -print0|xargs -0     gstat -c %s         |awk '{u+=$1}END{   print  u                        }'||exit $?;done    #macports gnu
  • Ни один (xnu) du(1) ни (гну) gdu(1) кажется, считает расширенные атрибуты (xattr)

И затем я должен просто каламбурить 'Выполненный путь и сделать математику'
Мир и доброй ночи fo'real на этот раз.

2
27.01.2020, 20:06

Суммируйте все файлы в каталоге:

OSX: найдите dir ! -тип d -print0 | xargs -0 статистика -f '%z' | awk '{сумма += $1} END{print sum}'

Linux: найди Дир! -тип d -printf "%s\n" | awk '{sum += $1} END{print sum}'

1
27.01.2020, 20:06

Теги

Похожие вопросы