
Я пытался узнать общий размер всех файлов, принадлежащих конкретному пользователю.
Пытаясь сделать это, я получаю разные размеры при выполнении разных команд.
Какая команда верна для определения общего размера всех файлов, принадлежащих конкретному пользователю?
$ find . -type f -user silviya|ls -lh|head -1
total 68K
$ find . -type f -user agalya|wc -c
284
$ find . -type f -user agalya|du -sk
120 .
В чем причина такого различия?
решение1
В:
find . -type f -user silviya|ls -lh|head -1
вы передаете вывод в find
, ls
но ls
не читаете его ввод. Он принимает список файлов для перечисления в качестве аргументов. При отсутствии аргументов, как здесь, он перечисляет не скрытые файлы в текущем каталоге. Так что здесь вы получаете использование диска всеми не скрытыми файлами (любого типа) в текущем каталоге (с размером данного файла, подсчитанным для каждой из его жестких ссылок).
В:
find . -type f -user agalya|wc -c
Вы подсчитываете количество байтов в выходных данных find
, поэтому это размер путей к файлам (и разделителей новой строки), а не их использование на диске или размер файла.
В:
find . -type f -user agalya|du -sk
Как и ls
, du
принимает список файлов в качестве аргументов, а не из входных данных. Так что здесь вы получаете использование диска всеми файлами и каталогами в текущем каталоге (рекурсивно).
Чтобы получить данные об использовании диска всеми обычными файлами, принадлежащими agalya
, с помощью утилит GNU, вам нужно сделать следующее:
find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1
--files0-from
сообщает du
(только GNU du
) о необходимости взять список файлов из стандартного ввода (представленного -
здесь). -c
выдает совокупный размер (обратите внимание, что жесткие ссылки одного и того же файла учитываются только один раз).
Чтобы получить файлочевидныйразмер в отличие от использования диска, добавьте --apparent-size
опцию du
(опять же, специфичную для GNU). Добавьте -l
опцию (также специфичную для GNU) для подсчета жестких ссылок несколько раз.
решение2
Команда №1 выдает общий размер «полезных» байтов файлов, их содержимого.
Команда №3 выдает используемое дисковое пространство для хранения файлов. Диски делятся на блоки (часто длиной 4 КБ), которые не могут совместно использоваться несколькими файлами. Таким образом, файл любого размера от 1 до 4096 Б будет использовать 4 КБ дискового пространства, например [Это упрощенно. В некоторых типах файловых систем, таких как ext, очень маленькие файлы могут храниться в самой таблице файлов, не используя вообще никаких блоков данных.]
Команда №2 просто подсчитывает количество символовимена файлов. (Размер вывода команды find
.)