Как я могу создать чистую оболочку для временного использования?

15

Я часто отвечаю на популярных сайтах вопросов и ответов, посвященных Unix, и во многих своих ответах я привожу примеры использования bashоболочки. Однако каждый раз, когда я делаю это, мне приходится вручную проходить процесс создания чистой среды, чтобы убедиться, что каждый шаг учтен и задокументирован. Как я могу сделать этот процесс более простым? В идеале я хочу набрать одну команду и получить чистую среду, и после этого все следы этой временной среды будут удалены.

Жиль "ТАК - прекрати быть злым"
источник

Ответы:

10

Я лично использую следующую bashфункцию для этого:

so() {
    local tmpdir="$(mktemp -d)"
    local tmprc="$(mktemp)"
    cat > "$tmprc" << EOF
PS1='\\$ '
cd "$tmpdir"
EOF
    env - HOME="$HOME" TERM="$TERM" bash --rcfile "$tmprc"
    rm -rf "$tmpdir" "$tmprc"
}

Вот что он делает по порядку:

  • Создать временный каталог (использовать в качестве нашего рабочего каталога в чистой среде);
  • Создайте временный файл (для использования в качестве нашего bashrc-файла);
  • В файле rc добавьте строки, которые:
    • Установите PS1для подсказки терминатор подсказки, за которым следует пробел, который сохраняет его актуальность на тот случай, если мы захотим получить копию нашего вывода на сайте вопросов и ответов;
    • Перейдите во временный каталог, который мы создали.
  • Вызвать новый экземпляр bash, который:
    • Изначально имеет пустое окружение, кроме $HOMEand $TERM( env - ...);
    • Читает его rc-файл из временного файла, который мы создали ранее ( --rcfile).
  • После выхода из bash удалите созданные нами временные файлы.

Очевидно, что это не совсем надежно, то есть вы можете получить доступ к другим частям вашей системы. Это, однако, обеспечивает чистую временную среду, которую вы можете использовать для тестирования.

Крис Даун
источник
ты пробовал использовать script?
h3rrmiller
@ h3rrmiller - Да, хотя я не использую его по своему усмотрению.
Крис Даун
2

chrootэто один способ, с помощью ВМ это другой. Вы можете создать chroot-среду на LV, сделать снимок, сделать что угодно и затем вернуться в состояние моментального снимка.

Или - сделать то же самое с виртуальной машиной (диск-снимок) и впоследствии отменить все изменения.

Я обычно делаю это с только что установленной виртуальной машиной (используя VirtualBox и кикстарт или автояст с PXE-boot).

Nils
источник