serzh-z писал: ↑18.12.2019 17:08
Я так понимаю, что речь идёт про какой-то очередной бородатый man из тех, что есть на OpenNet, про которые уже столько написано...
Он с дистрибутивом
debian идёт. Про ошибки ничего не сказано.
++++++++++++++++++++++++++++++++++++++++++++++++++++++
Чуть-чуть разобрался. Для себя пишу.
Как работает
1) (по опции
-b разговор ниже, пока предполагаем, что просто количество байт)
Shell
user@debian:~$ du -b
4096 ./bar/bar_0/bar_5
8192 ./bar/bar_0
4181 ./bar/bar_1/bar_2/bar_3/bar_4
8277 ./bar/bar_1/bar_2/bar_3
12373 ./bar/bar_1/bar_2
16469 ./bar/bar_1
28757 ./bar
1279137 .
user@debian:~$
Как получается величина
1279137? Правильно говорить величина
1279137 для директории такой-то (в данном случае текущей). Так вот, эта величина есть сумма (подобных величин для поддиректорий первого уровня, размеров файлов первого уровня и
4096)
В данном случае подобные величины для поддиректорий первого уровня есть
28757 (для дирекории
./bar первого уровня)
Сумму всех файлов первого уровня можно посмотреть так:
Shell
user@debian:~$ ls -l
итого 1260
drwxr-xr-x 4 user user 4096 Дек 17 2019 bar
-rw-r--r-- 1 user user 611038 Дек 17 2019 dubg.txt
-rw-r--r-- 1 user user 21 Дек 17 19:18 dubr_.txt
-rw-r--r-- 1 user user 175 Дек 17 2019 dubr.txt
-rw-r--r-- 1 user user 626762 Дек 17 18:25 dub.txt
-rwxr-xr-x 1 user user 165 Дек 17 2019 f_0.sh
-rw-r--r-- 1 user user 0 Дек 17 13:46 foo
-rwxr-xr-x 1 user user 73 Дек 17 19:22 f.sh
-rw-r--r-- 1 root root 559 Дек 17 02:44 gr.txt
lrwxrwxrwx 1 user user 4 Дек 18 2019 io -> f.sh
-rw-r--r-- 1 user user 11 Дек 17 19:02 rb.txt
-rw-r--r-- 1 user user 27 Дек 17 2019 rm
-rw-r--r-- 1 root root 838 Дек 17 02:42 sources.list
-rw-r--r-- 1 user user 6611 Дек 18 2019 tx.txt
user@debian:~$
(обращаю внимание, размер
io суть
4 байта)
4096 это, я так понимаю, отводится для служебной информации самой текущей папки. Итого и получаем
1279137
Можно вот так посмотреть ВСЁ, и размеры файлов тоже. Тут главное, не запутаться.
Shell
user@debian:~$ du -b -a | sort --k=2
1279137 .
28757 ./bar
8192 ./bar/bar_0
4096 ./bar/bar_0/bar_5
16469 ./bar/bar_1
12373 ./bar/bar_1/bar_2
8277 ./bar/bar_1/bar_2/bar_3
4181 ./bar/bar_1/bar_2/bar_3/bar_4
85 ./bar/bar_1/bar_2/bar_3/bar_4/fff
611038 ./dubg.txt
21 ./dubr_.txt
175 ./dubr.txt
626762 ./dub.txt
165 ./f_0.sh
0 ./foo
73 ./f.sh
559 ./gr.txt
4 ./io
11 ./rb.txt
27 ./rm
838 ./sources.list
6611 ./tx.txt
user@debian:~$
2) Чтобы исключить какой-либо путь, нужно написать
Shell
user@debian:~$ du -b --exclude=./bar/bar_1/bar_2
4096 ./bar/bar_0/bar_5
8192 ./bar/bar_0
4096 ./bar/bar_1
16384 ./bar
1266764 .
user@debian:~$
Что даёт и как работает: изначально папка
bar_2 входит в папку
bar_1.
Shell
user@debian:~$ du -b
4096 ./bar/bar_0/bar_5
8192 ./bar/bar_0
4181 ./bar/bar_1/bar_2/bar_3/bar_4
8277 ./bar/bar_1/bar_2/bar_3
12373 ./bar/bar_1/bar_2
16469 ./bar/bar_1
28757 ./bar
1279137 .
user@debian:~$
Делаем два шага: из
du -s -b bar_1 просто-напросто исключаем
du -s -b bar_2, то есть: новая величина
du -s -b bar_1 равна
16469−12373=4096
Второй шаг- визуально исключаем строки с
./bar/bar_1/bar_2
3) По опции
-b
Я так понимаю, в данном контексте (относительно опции
-b) существуют два размера и у файла и у папки. Видимый и фактический (второй не знаю, вычисляется динамически или хранится статически).
Сказано, что
-b равна совокупности опций
--apparent-size --block-size=1
Переводится так: берётся видимый размер делится на размер блока и выводится количество блоков (по факту байтов, иначе округление ВСЕГДА идёт в большую сторону.
Offtopic
Если специально себя не запутывать, то в мане вполне бы сошло ненавистное
Shell
-b, --bytes
Выдавать размеры в байтах вместо килобайтов.
Но даже если себя специально запутывать, всё рано такое пояснение тоже имело право на существование, опционально хотя бы. Но уж если совсем-совсем себя запутывать, тогда да, только
--apparent-size --block-size=1, по-другому-то не объяснить ведь.
)
Shell
user@debian:~$ du -b dubg.txt
611038 dubg.txt
user@debian:~$
user@debian:~$ du --apparent-size --block-size=1 dubg.txt
611038 dubg.txt
user@debian:~$
user@debian:~$ du --apparent-size --block-size=2 dubg.txt
305519 dubg.txt
user@debian:~$
user@debian:~$ du --apparent-size --block-size=1K dubg.txt
597 dubg.txt
user@debian:~$
user@debian:~$ du --apparent-size --block-size=1KB dubg.txt
612 dubg.txt
user@debian:~$
То же, но с папкой
foo.
Shell
user@debian:~$ ls -l foo
итого 600
-rw-r--r-- 1 user user 611038 Дек 17 22:25 dubg.txt
user@debian:~$
Вспоминаем, откуда берётся
du -b foo (см. пункт
1) и проверяем:
Shell
user@debian:~$ du -b foo
615134 foo
user@debian:~$
user@debian:~$ du --apparent-size --block-size=1 foo
615134 foo
user@debian:~$
user@debian:~$ du --apparent-size --block-size=2 foo
307567 foo
user@debian:~$
user@debian:~$ du --apparent-size --block-size=1K foo
601 foo
user@debian:~$
user@debian:~$ du --apparent-size --block-size=1KB foo
616 foo
user@debian:~$
Если не использовать
-b, то на размер блока будет делиться будет фактический размер (далее аргумент
--block-size=1K по умолчанию)
Shell
user@debian:~$
user@debian:~$ du --block-size=1 dubg.txt
614400 dubg.txt
user@debian:~$
user@debian:~$ du --block-size=2 dubg.txt
307200 dubg.txt
user@debian:~$
user@debian:~$ du --block-size=1K dubg.txt
600 dubg.txt
user@debian:~$
user@debian:~$ du --block-size=1KB dubg.txt
615 dubg.txt
user@debian:~$
Тот же эксперимент, но с папкой. Похоже, фактический размер папки определяется так: берётся видимый размер папки (в нашем случае
615134) и увеличивается вверх до величины, кратной
4096. Дальнейшие пляски от него.
Shell
user@debian:~$
user@debian:~$ du -b foo
615134 foo
user@debian:~$
user@debian:~$ du --block-size=1 foo
618496 foo
user@debian:~$
user@debian:~$ du --block-size=2 foo
309248 foo
user@debian:~$
user@debian:~$ du --block-size=1K foo
604 foo
user@debian:~$
user@debian:~$ du --block-size=1KB foo
619 foo
user@debian:~$
4) Почему при использовании
-b выводимые цифры меньше, понятно. Но иногда они могут быть больше. И сильно больше.
Shell
user@debian:~$
user@debian:~$ sudo du -s -b / 2>/dev/null
5439159451 /
user@debian:~$
user@debian:~$ sudo du -s --block-size=1 / 2>/dev/null
3751288832 /
user@debian:~$
Разберём, почему.
Shell
user@debian:~$ sudo du -s -b /proc 2>/dev/null
1067972632 /proc
user@debian:~$
user@debian:~$ sudo du -s /proc 2>/dev/null
0 /proc
user@debian:~$
Это как пример. В общем, не совсем понятно, почему размеры содержимого папки
/proc они вдруг отнесли к категории видимых размеров. Видать, от противного. Размеры точно не фактические, а раз третьей категории не представлено, пусть будут видимыми. Ну, пускай их.
5)
--si и
-h ответственны просто за добавление буквы. За вычисление ответственна неявно добавляемая опция
--block-size (как на самом деле, не совсем ясно, но оно и неважно по большому счёту, если уж совсем-совсем-пресовсем не вникать.)
Shell
user@debian:~$
user@debian:~$ du --block-size=1K dubg.txt
600 dubg.txt
user@debian:~$
user@debian:~$ du -h dubg.txt
600K dubg.txt
user@debian:~$
user@debian:~$ du --block-size=1KB dubg.txt
615 dubg.txt
user@debian:~$
user@debian:~$ du --si dubg.txt
615k dubg.txt
user@debian:~$
Как-то так. Всем спасибо. Если что, тут спрошу.
Я просто читаю маны.