Bagaimana saya bisa membuat lingkungan shell yang bersih untuk penggunaan sementara?

15

Saya sering menjadi penjawab pada situs tanya jawab populer yang berfokus pada Unix, dan dalam banyak jawaban saya, saya memberikan contoh menggunakan bashshell. Namun, setiap kali saya melakukan ini, saya harus secara manual melalui proses menciptakan lingkungan yang bersih untuk memastikan bahwa setiap langkah diperhitungkan dan didokumentasikan. Bagaimana saya bisa membuat proses ini lebih mudah? Saya idealnya mencari untuk mengetik satu perintah dan mendapatkan lingkungan yang bersih, dan semua jejak lingkungan sementara itu dihapus setelah saya selesai.

Gilles 'SO- berhenti menjadi jahat'
sumber

Jawaban:

10

Saya pribadi menggunakan bashfungsi berikut untuk melakukan ini:

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

Inilah yang dilakukannya, secara berurutan:

  • Buat direktori sementara (untuk digunakan sebagai direktori kerja kami di lingkungan bersih);
  • Buat file sementara (untuk digunakan sebagai bashfile rc kami );
  • Dalam file rc, tambahkan baris yang:
    • Atur PS1prompt ke terminator prompt diikuti oleh spasi, yang membuatnya relevan jika kita ingin memiliki salinan output kami di situs Q&A;
    • Ubah ke direktori sementara yang kami buat.
  • Meminta instance baru bash, yang:
    • Awalnya memiliki lingkungan kosong kecuali untuk $HOMEdan $TERM( env - ...);
    • Membaca file rc-nya dari file sementara yang kami buat sebelumnya ( --rcfile).
  • Setelah bash keluar, hapus file sementara yang kami buat.

Jelas ini tidak sepenuhnya aman, yaitu, Anda masih dapat mengakses bagian lain dari sistem Anda. Namun, ini memberikan lingkungan sementara yang bersih yang dapat Anda gunakan untuk pengujian.

Chris Down
sumber
telah Anda mencoba menggunakan script?
h3rrmiller
@ h3rrmiller - Ya, meskipun saya cenderung tidak menggunakannya karena preferensi.
Chris Down
2

chrootadalah satu cara, menggunakan VM adalah cara lain. Anda dapat membangun lingkungan chroot pada LV, memotretnya, melakukan apa pun lalu kembali ke keadaan snapshotted.

Atau - lakukan hal yang sama dengan VM (disk-snapshot) dan kembalikan semua perubahan sesudahnya.

Saya biasanya melakukan ini dengan VM yang baru diinstal (menggunakan VirtualBox dan kickstart atau autoyast dengan PXE-boot).

Nils
sumber