Прямолинейный -ish in bash:
declare -A wordcount
while read -ra words; do
# unique words on this line
declare -A uniq
for word in "${words[@]}"; do
uniq[$word]=1
done
# accumulate the words
for word in "${!uniq[@]}"; do
((wordcount[$word]++))
done
unset uniq
done < file
Просмотр данных:
$ declare -p wordcount
declare -A wordcount='([possible]="1" [one]="1" [different]="1" [this]="1" [a]="1" [hello]="1" [world]="2" [man]="2" [0]="1" [1]="1" [2]="1" [is]="3" [the]="3" )'
и форматирование по вашему желанию:
$ printf "%s\n" "${!wordcount[@]}" | sort | while read key; do echo "$key:${wordcount[$key]}"; done
0:1
1:1
2:1
a:1
different:1
hello:1
is:3
man:2
one:1
possible:1
the:3
this:1
world:2
chroot
не обязательно для всего. Если вы просто хотите отредактировать файл, вы обычно можете сделать это без него.
Некоторые системные инструменты предполагают, что система будет организована определенным образом. Такие вещи, как менеджеры пакетов (rpm, yum, dpkg, apt, apk... ). Невозможно сообщить этим командам, что ваша система организована по-другому.
Итак, давайте возьмем реальный пример, такой как Debian dpkg
. Он отслеживает установленные пакеты в /var/lib/dpkg
. Когда вы загружаетесь с Live USB и монтируете сломанную систему в /mnt
, библиотека dpkg теперь будет не в том месте... она будет в /mnt/var/lib/dpkg
. Вы не можете указать dpkg использовать это, поэтому вы не можете использовать dpkg для исправления вашей сломанной системы, если только...
Если вы chroot /mnt
переместитесь туда, где все есть. Таким образом, /mnt/var/lib/dpkg
возвращается к /var/lib/dpkg
, где он должен быть, и поэтому dpkg снова будет работать правильно.
Нет, обычно вам не нужно добавлять своп. Непрофессиональное описание свопа заключается в том, что он использует некоторое пространство на жестком диске для расширения вашей оперативной памяти. Для этого вида деятельности вам обычно требуется только часть оперативной памяти, которая у вас есть. Если у вас закончилась оперативная память, вы можете добавить ее в любое время... Так что, если SWAP монтируется из файла /var/swap
, вы можете либо
swapon /mnt/var/swap
Перед вами chroot
или
swapon /var/swap
После chroot.
Меняя корень, вы фактически переходите на мертвую систему. Что-то вроде прыжка -, запускающего сломанную -заглушенную машину на работающей.
Теперь, когда /
относится к мёртвой системе, каждая команда хорошо играет. Мне нравится, что моя история оболочки теперь содержит содержимое того, что я сделал с мертвой системой, а не с живой системой, которую я загрузил. Кроме того, я могу использовать apt
и многие другие инструменты, которые неявно полагаются на /
как на систему для работы, а не на /mnt
. Многие инструменты (, например. journalctl
,grub-install
)имеют свои собственные варианты переключения корня, но вводить их становится довольно утомительно и подвержено ошибкам -.