Мы можем заменить в горячем режиме от одной установки Linux другому?

Vim нужен его стандартный вход, чтобы быть терминалом, где Вы введете команды, но это добирается также /dev/null или канал от grep в зависимости от Вашего xargs реализация.

Можно восстановить стандартный вход через промежуточную оболочку.

grep -rl test . | xargs sh -c 'vim -- "$@" <$0' /dev/tty

Если имена файлов не содержат пробельного символа или какого-либо из \[?*, можно использовать замену команды вместо этого:

vim $(grep -rl test .)

Один способ справиться со специальными символами (кроме новой строки) состоит в том, чтобы ограничить разделение слова новыми строками и выключить globbing.

(IFS='
'; set -f; exec vim $(grep -rl test .))
5
06.10.2014, 19:10
3 ответа

Если вы хотите экспериментировать с разными ядрами, вам придется либо перезагрузить или запустить их на виртуальной машине. Виртуальные машины удобнее, но затем вы не можете проверить ядро ​​на своем реальном оборудовании.

Если вы хотите иметь разные настройки с различными наборами установленных программ, вы также можете использовать виртуальную машину. Если вы хотите избежать накладных расходов виртуальной машины, вы можете установить распределение в Chroot . Я часто делаю это, чтобы иметь легкий доступ к 32-разрядным программам на 64-разрядной установке или иметь новейшие вещи (например, Debian нестабильный) в дополнение к стабильной решате (например, устойчивое). Я написал руководство для настройки Chroot для альтернативных выпусков Debian / Ubuntu . Смотрите также Легкие изолированные изолированные среда Linux

1
27.01.2020, 20:36

Я не думаю, что это возможно.

Теоретически Вы захотите сделать следующее:

  1. Перевести систему на уровень "одиночного" прогона, используя init 1, где теоретически у Вас есть только init и bash прогон.
  2. Снимите все разделы за исключением / . на этом этапе ваша система может перестать работать, в зависимости от того, находится ли /usr на корневом разделе.
  3. Размонтируйте где-нибудь корень остальных os.
  4. pivot_root для изменения корня на новый раздел.
  5. Скажите init, чтобы он запустил новую систему, запустив init 5 (или 2 или любой другой подходящий раздел).

Проблема в том, что swot_root изменяет только корневой раздел для текущего процесса, что означает, что это не повлияет на init, и когда вы скажете init запустить систему, он запустит ваш старый раздел. Вам понадобится какой-нибудь способ указать init'у, чтобы он выполнил команду pivot_root, что я не думаю, что это возможно.

О, и давайте не будем вдаваться в то, что происходит, когда другая ваша операционная система использует другой init сервис (например, Fedora использует systemd, в то время как Ubuntu имеет upstart). Вам нужно будет заменить init-процесс (pid 1) под ядром, а это на самом деле никуда не годится.

6
27.01.2020, 20:36

Если вы не хотите / нужно менять ядра, но просто хочу использовать другие файловые системы, как вы, кажется, указываете здесь:

Очевидно, ядро ​​не изменится, но это нормально, я надеюсь просто изменить рабочие разделы.

Тогда, возможно, вам просто понадобится (смонтировать и) chroot, что, если использовать ваши слова,

Вы можете думать об этом как о простой смене корневого раздела на лету

Я все время использую chroot из систем восстановления (например, clonezilla) для взаимодействия с файловой системой, которая обычно используется в другом ядре. Я не ожидаю, что у меня появится возможность загружать новые модули ядра, но это нормально для чтения и записи файлов (исправление fstab, настройка grub.conf и т. Д.).

Вы можете использовать привязку монтирования, чтобы сделать среду chroot более полезной. Я постоянно использую это для репликации смонтированных файловых систем внутри целевого объекта chroot:

mount /dev/sda1 /mnt
for d in dev sys proc; do mount -obind /$d /mnt/$d; done
chroot /mnt
1
27.01.2020, 20:36

Теги

Похожие вопросы