Использование Ubuntu Trusty 14.04
, ядро: 4.2.0-36-generic # 42 ~ 14.04.1-Ubuntu
, lxc: 1.0.8-0ubuntu0.3
Мне удалось запустить 32-битный контейнер на 64-битном хосте.
Выполнение следующей команды: lxc-create -n test -t / usr / share / lxc / templates / lxc-download
Получение этих ответов:
Distribution: ubuntu
Release: trusty
Architecture: i386
Различия в конфигурации очень минимальны: lxc.arch = x86
vs lxc.arch = x86_64
Затем просто запускаем его как обычно: lxc-start -n test
Подтверждено, что ОС считает, что архитектура 32-битная
root@host:~# uname -a
Linux host 4.2.0-36-generic #42~14.04.1-Ubuntu SMP Fri May 13 17:27:22 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@host:~# lxc-attach -n test
groups: cannot find name for group ID 111
root@container:~# uname -a
Linux magnum 4.2.0-36-generic #42~14.04.1-Ubuntu SMP Fri May 13 17:27:22 UTC 2016 i686 GNU/Linux
Я думаю, что групповое предупреждение - это что-то в моей настройке, в любом случае это работает!
В Wiki есть примечание об использовании linux32 для эмуляции 32-битной версии. Я не думаю, что это нужно.
linux32 lxc-create -n myvm -t debian-wheezy
В системе GNU:
find . -name '?*.*' -type f -printf '%b.%f\0' |
awk -F . -v RS='\0' '
{s[$NF] += $1; n[$NF]++}
END {for (e in s) printf "%15d %4d %s\n", s[e]*512, n[e], e}' |
sort -n
Или то же самое с perl
, избегая расширения -printf
GNU find
(все еще используя расширение GNU, -print0
, но этот более широко поддерживается в настоящее время):
find . -name '?*.*' -type f -print0 |
perl -0ne '
if (@s = stat$_){
($ext = $_) =~ s/.*\.//s;
$s{$ext} += $s[12];
$n{$ext}++;
}
END {
for (sort{$s{$a} <=> $s{$b}} keys %s) {
printf "%15d %4d %s\n", $s{$_}<<9, $n{$_}, $_;
}
}'
Он дает следующий результат:
12288 1 pnm
16384 4 gif
204800 2 ico
1040384 17 jpg
2752512 83 png
Если вы хотите KiB
, MiB
. .. суффиксы, вертикальная черта к numfmt --to = iec-i --suffix = B
.
% b * 512
показывает использование диска, но учтите, что если файлы жестко связаны несколько раз, они будут подсчитаны несколько раз, поэтому вы можете увидеть несоответствие с тем, что сообщает du
.
Не так хорошо, как решение Стефана, но вы можете попробовать
find . -type f -name "*.png" -print0 | xargs -0r du -ch | tail -n1
, где вам нужно запустить это для каждого типа файлов.
Вот другое решение:
find. -type f | egrep -o "\.[a-zA-Z0-9]+$" | sort -u | xargs -I '%' find. -type f -name "*%" -exec du -ch {} + -exec echo % \; | egrep "^\.[a-zA-Z0-9]+$|total$" | uniq | paste - -
Часть, которая получает расширения,:
find. -type f | egrep -o "\.[a-zA-Z0-9]+$" | sort -u
Затем найдите файлы с расширением и также распечатайте их на экране:
xargs -I '%' find. -type f -name "*%" -exec du -ch {} + -exec echo % \;
Далее мы хотим сохранить расширение и общую сумму:
egrep "^\.[a-zA-Z0-9]+$|total$" | uniq
и оставить на той же строке:
paste - -
Поскольку у меня еще недостаточно очков репутации, чтобы писать комментарии, я добавлю сюда ответ Стефана Шазеласа. Чтобы включить в список файлы без расширения, например исполняемые файлы, можно использовать эту командную строку:
find. -name '*' -type f -printf '%b.%f\0' | awk -F. -v RS='\0' '{if (NF==2) $(NF+1)=" "; s[$NF] += $1; n[$NF]++} END {for (e in s) printf "%15d %6d %s\n", s[e]*512, n[e], e}' | sort -rn | numfmt --to=iec-i --suffix=B