Почему «find -mmin -1 -exec du -cb {} + | grep total | head -1» и «find -mmin -1 -exec du -ch {} + | grep total | head -1» отличаются - PullRequest
0 голосов
/ 29 октября 2018

Когда я запускаю команду:

find / 2>/dev/null -user root -type f -mmin -1 -exec du -cb {} + | grep total | head -1

Я получаю довольно большое число в байтах, которое ожидается.

Однако, когда я запускаю ту же команду, но с байтами, удобочитаемыми человеком, как в:

find / 2>/dev/null -user root -type f -mmin -1 -exec du -ch {} + | grep total | head -1

Я получаю 0. Я также пытался удалить головку -1, думая, что я получаю неправильные данные, но каждая распечатка равна 0. Почему это? Существует ли альтернативный метод получения общего размера всех найденных файлов с использованием команды find для байтов и для удобочитаемых распечаток?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Когда я запускал ваш сценарий, у меня были те же результаты, потому что опция -b добавляет размер /proc/kcore

procfs - немного темной магии; в нем нет файлов настоящих. Он выглядит как файловая система, действует как файловая система и является файловой системой. Но не тот, который хранится на диске (или в другом месте).

/ proc / kcore, в частности, это файл, который отображается непосредственно на каждый доступный байт в вашей виртуальной памяти ... Я не совсем уверен в деталях; 128 ТБ поступает из Linux, выделяя 47 бит из 64 бит, доступных для виртуальной памяти.

Когда я использую аргумент -ch для du, он показывает / proc / kcore как 0:

0 / proc / kcore

Но когда я использую -cb, он показывает мой / proc / kcore как:

140737486266368 / proc / kcore

это потому, что опция -b:

-b, --bytes
equivalent to '--apparent-size --block-size=1'

и --apparent-size:

--apparent-size
print apparent sizes, rather than disk usage; although the apparent size is 
usually smaller, it may be larger due to holes in ('sparse') files, internal 
fragmentation, indirect blocks, and the like

Ссылка:

/ proc kcore файл огромен

https://linux.die.net/man/1/du

0 голосов
/ 29 октября 2018

Используйте параметр -xdev для команды find, чтобы исключить другие файловые системы.

У меня пока нет объяснения, почему, но я думаю, что это связано с tmpfs и devtmpfs файловыми системами, такими как /proc.

...