Як я можу створити чисту оболонку для тимчасового використання?


15

Я часто відповідаю на популярний веб-сайт Q&A, орієнтований на 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підказку на термінатор підказок, а потім пробіл, який залишає його актуальним у випадку, якщо ми хочемо мати копію нашого виводу на веб-сайті Q&A;
    • Перейдіть до створеного нами тимчасового каталогу.
  • Викликати новий екземпляр bash, який:
    • Спочатку має порожнє середовище, крім $HOMEі $TERM( env - ...);
    • Зачитує його rc-файл із тимчасового файлу, який ми створили раніше ( --rcfile).
  • Як тільки bash вийшов, видаліть створені нами тимчасові файли.

Очевидно, що це не зовсім безглуздо, тобто ви все одно можете отримати доступ до інших частин вашої системи. Однак це забезпечує чисту тимчасову середу, яку ви можете використовувати для тестування.


Ви намагалися використовувати script?
h3rrmiller

@ h3rrmiller - Так, хоча я, як правило, не використовую його з переваг.
Кріс Даун

2

chrootє одним із способів, використовуючи VM - іншим. Ви можете створити середовище chroot на НН, зробити знімок, зробити все, що завгодно, а потім повернутися до стану знімка.

Або - зробіть те саме з VM (знімок диска) і відновіть всі зміни після цього.

Зазвичай я це роблю із щойно встановленим VM (використовуючи VirtualBox, kickstart або autoyast з PXE-boot).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.