Jak mogę stworzyć czyste środowisko powłoki do użytku tymczasowego?

15

Często udzielam odpowiedzi na popularnej stronie z pytaniami i odpowiedziami dotyczącymi Uniksa i w wielu moich odpowiedziach podaję przykłady przy użyciu bashpowłoki. Jednak za każdym razem, gdy to robię, muszę ręcznie przejść proces tworzenia czystego środowiska, aby upewnić się, że każdy krok jest rozliczany i dokumentowany. Jak mogę uprościć ten proces? Idealnie staram się wpisać jedno polecenie i uzyskać czyste środowisko, a po zakończeniu usunąć wszystkie ślady tego tymczasowego środowiska.

Gilles „SO- przestań być zły”
źródło

Odpowiedzi:

10

Osobiście używam do tego następującej bashfunkcji:

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"
}

Oto, co robi, w celu:

  • Utwórz katalog tymczasowy (do użycia jako nasz katalog roboczy w czystym środowisku);
  • Utwórz plik tymczasowy (do użycia jako nasz bashplik rc);
  • W pliku rc dodaj linie, które:
    • Ustaw PS1monit w terminatorze, a następnie spację, która pozostanie istotna na wypadek, gdybyśmy chcieli mieć kopię naszych wyników na stronie pytań i odpowiedzi;
    • Przejdź do utworzonego przez nas katalogu tymczasowego.
  • Wywołaj nową instancję bash, która:
    • Początkowo ma puste środowisko z wyjątkiem $HOMEi $TERM( env - ...);
    • Odczytuje plik rc z pliku tymczasowego, który wcześniej utworzyliśmy ( --rcfile).
  • Po zakończeniu bash usuń utworzone przez nas pliki tymczasowe.

Oczywiście nie jest to całkowicie niezawodne, tzn. Nadal można uzyskać dostęp do innych części systemu. Zapewnia to jednak czyste tymczasowe środowisko, którego można użyć do testowania.

Chris Down
źródło
próbowałeś użyć script?
h3rrmiller
@ h3rrmiller - Tak, chociaż zwykle nie używam go z preferencji.
Chris Down
2

chrootjest jeden sposób, za pomocą maszyny wirtualnej jest inny. Możesz zbudować środowisko chroot na LV, zrobić migawkę, zrobić cokolwiek, a następnie powrócić do stanu migawki.

Lub - zrób to samo z maszyną wirtualną (migawką dysku) i później przywróć wszystkie zmiany.

Zwykle robię to ze świeżo zainstalowaną maszyną wirtualną (używając VirtualBox i kickstart lub autoyast z PXE-boot).

Nils
źródło