Wie kann ich eine saubere Shell-Umgebung für die vorübergehende Verwendung erstellen?

15

Ich beantworte häufig Fragen und Antworten zu Unix und gebe in vielen meiner Antworten Beispiele für die Verwendung der bashShell. Jedes Mal muss ich jedoch manuell eine saubere Umgebung erstellen, um sicherzustellen, dass jeder Schritt berücksichtigt und dokumentiert wird. Wie kann ich diesen Prozess einfacher gestalten? Ich versuche im Idealfall, einen einzelnen Befehl einzugeben, eine saubere Umgebung zu erhalten und alle Spuren dieser temporären Umgebung zu entfernen, nachdem ich fertig bin.

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

10

Ich persönlich benutze dazu folgende bashFunktion:

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

Hier ist, was es tut, um:

  • Erstellen Sie ein temporäres Verzeichnis (zur Verwendung als Arbeitsverzeichnis in der sauberen Umgebung).
  • Erstellen Sie eine temporäre Datei (als unsere bashRC-Datei zu verwenden);
  • Fügen Sie in der rc-Datei Zeilen hinzu, die:
    • Setzen Sie die PS1Eingabeaufforderung auf den Prompt-Terminator, gefolgt von einem Leerzeichen, das für den Fall relevant bleibt, dass wir eine Kopie unserer Ausgabe auf der Q & A-Site haben möchten.
    • Wechseln Sie in das von uns erstellte temporäre Verzeichnis.
  • Rufen Sie eine neue Instanz von auf bash, von der:
    • Hat anfangs eine leere Umgebung mit Ausnahme von $HOMEund $TERM( env - ...);
    • Liest die rc-Datei aus der zuvor erstellten temporären Datei ( --rcfile).
  • Entfernen Sie nach dem Beenden von bash die von uns erstellten temporären Dateien.

Offensichtlich ist dies nicht absolut narrensicher, dh Sie können weiterhin auf andere Teile Ihres Systems zugreifen. Dies stellt jedoch eine saubere temporäre Umgebung bereit, die Sie zum Testen verwenden können.

Chris Down
quelle
Hast du es versucht script?
h3rrmiller
@ h3rrmiller - Ja, obwohl ich es eher nicht aus Vorliebe benutze.
Chris Down
2

chrootist eine Möglichkeit, eine VM ist eine andere. Sie können die Chroot-Umgebung auf einem LV aufbauen, einen Snapshot erstellen, alles Mögliche tun und dann zum Snapshot-Status zurückkehren.

Oder - machen Sie dasselbe mit der VM (Disk-Snapshot) und machen Sie danach alle Änderungen rückgängig.

Normalerweise mache ich das mit einer frisch installierten VM (mit VirtualBox und Kickstart oder Autoyast mit PXE-Boot).

Nils
quelle