Terminal 'mode penyamaran'?

230

Saya sering menggunakan Terminal, dan kadang-kadang saya menjalankan perintah, yang bukan hal-hal yang saya tidak ingin orang lain lihat, tetapi lebih banyak perintah yang jika saya secara tidak sengaja diarahkan dan dieksekusi secara tidak sengaja akan menyebabkan banyak masalah.

Jadi saya bertanya-tanya apakah ada, atau saya bisa membuat, semacam 'mode penyamaran' Terminal yang akan memungkinkan saya, setelah menjalankan perintah tertentu, berhenti merekam riwayat saya, dan kemudian hanya mulai merekam setelah saya menjalankan mulai merekam sejarah lagi perintah dan keluar dari 'mode penyamaran', atau saya cukup me-restart Terminal?

Karena saya menemukan diri saya kemudian pergi dan menghapus barang-barang dari saya .bash_history, ketika itu akan jauh lebih mudah jika saya bisa menghentikannya merekam di sana di tempat pertama, atau setidaknya mendapatkannya untuk mencoba merekamnya di suatu tempat di mana itu tidak akan terjadi. diizinkan, dan akhirnya tidak merekamnya.


sumber
6
Nah, mungkin Anda paranoid bahwa riwayat Anda akan dibaca oleh orang lain?
Sparhawk
6
@Sparhawk: Ya, sebagian karena itu, dan pihak saya tidak ingin secara tidak sengaja mengeksekusi perintah perawatan yang mungkin mematikan ketika saya baru saja beralih ke masa depan! : D
19
Hanya untuk menambahkan, Anda tidak perlu membenarkan diri sendiri: "yang bukan hal yang saya tidak ingin orang lain lihat" . Itu juga akan menjadi alasan yang sah bagi saya. (Terutama di zaman dan zaman ini di mana setiap orang mencoba membuat Anda terlihat bersalah karena memiliki "hal-hal yang disembunyikan")
ereOn
2
Jika Anda membuka dua tab, lakukan hal-hal di tab yang pertama, lakukan hal-hal di tab yang kedua, lalu tutup tab yang kedua SEBELUM yang pertama, hanya sejarah yang pertama yang ditulis .bash_history. (Ubuntu 15.04 merusak Terminal, beruntung ini adalah USB langsung.)
Hitechcomputergeek
1
Lihat pertanyaan ini di serverfault
Luc M

Jawaban:

265

Jalankan perintah tanpa memasukkannya ke dalam sejarah:

Cukup beri spasi sebelum perintah. Bash akan mengabaikan perintah dengan ruang yang diawali:

Contoh: Spaceecho "Some secret text"

Catatan: Ini hanya berfungsi jika HISTCONTROLvariabel diatur ke ignorespaceatau ignoreboth.


Nonaktifkan riwayat sementara:

  • Jalankan Spaceset +o historyatau Spaceshopt -uo historyuntuk menonaktifkan riwayat.
  • Jalankan set -o historyatau shopt -so historyuntuk mengaktifkannya kembali.

Nonaktifkan histori untuk sesi saat ini (tidak akan mengingat perintah apa pun dari sesi):

unset HISTFILE

Catatan: Anda akan dapat melihat perintah menekan Upsampai Anda menutup terminal.


Hapus perintah dari riwayat:

Lari Spacehistory | grep "part of your secret command"

Ini akan menampilkan daftar perintah yang sebelumnya dijalankan, dalam format ini:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

Pilih nomor entri di sebelah kiri perintah. Anda dapat menyalinnya dengan Ctrl+ Shift+C

Jalankan di Spacehistory -d <number>mana <number>nomor entri untuk menghapus entri.
Anda dapat menempelkan nomor itu dengan Ctrl+ Shift+V


Jawaban menarik lainnya:

Helio
sumber
7
Jika Anda menggunakan history -duntuk menghapus sebuah baris, ini akan menghapus konten dari baris tersebut, tetapi Anda tidak pernah dapat menghapus fakta bahwa Anda berlari history -d(kecuali jika Anda terlebih dahulu menggunakan set +o historysebelum menjalankan history -d)
AJFaraday
1
Itu hanya mengingatkan saya pada logika super-perintah, itu saja;)
AJFaraday
4
(OT) Injeksi adalah dokumen hukum yang membuat orang tidak mempublikasikan sesuatu. Perintah super juga membuat mereka tidak mempublikasikan fakta bahwa mereka ditolak untuk mempublikasikan. Beberapa argumen logis bertanya apakah mereka dapat mempublikasikan bahwa mereka tidak memiliki kemampuan untuk mempublikasikan beberapa informasi. Maka itu menjadi argumen siklus.
AJFaraday
1
@ Halo, saya pikir lebih baik bagi pengguna untuk mengetahui cara menyalin yang "tepat" - terutama jika mereka secara tidak sengaja pergi dan memilih beberapa teks. Saya tidak yakin bagaimana melakukan spasi, mungkin lebih memperjelas ruang yang ada? [Ruang] terlihat agak canggung bagi saya ...
Tim
2
The unset HISTFILEPendekatan juga bekerja surut untuk semua perintah yang belum ditulis untuk .bash_historybelum.
kasperd
40

Anda cukup menghapus riwayat satu sesi terminal tertentu dengan menambahkan perintah history -cwsetelah bekerja.

Jangan tutup terminal sebelum memberikan perintah ini.

Moithil Biswas
sumber
Ini tidak akan menghapus semua riwayat?
Helio
6
Ini hanya akan menghapus riwayat sesi terminal tertentu.
Moithil Biswas
28

shopt -uo history harus melakukan yang terbaik.

Nuking variabel HISTFILE(et al) tidak akan menghentikan Upriwayat Anda yang sedang dicatat, itu hanya tidak akan mendorongnya ke disk. Ini mungkin atau mungkin bukan hal yang positif bagi Anda, tetapi mengingat Anda menyebutkannya, saya kira Anda menginginkan sesuatu yang lebih baik. Mengubah shoptpengaturan histori akan menghentikan seluruh mekanisme histori dari pemicuan.

Anda dapat mengaktifkan log kembali dengan shopt -so history(yang -sdan -uditetapkan dan diset masing-masing).

Perhatikan bahwa perintah itu sendiri mungkin akan dicatat, jadi tambahkan dulu dengan spasi untuk menghentikannya ditambahkan ke riwayat sebelum Anda menghapus variabel.

Oli
sumber
17

Cara lain untuk membunuh shell saat ini tanpa masuk ke file histori adalah dengan melakukannya:

kill -9 $$

Ini menyebabkan bash (dan mungkin cangkang lain juga) untuk mengirim sinyal SIGKILL ke dirinya sendiri, membunuhnya di tempat dan mencegahnya menulis apa pun ke disk.

orang tolol
sumber
7
alias 'Tembak dirimu di kepala' :). Ini memiliki keuntungan yang tidak perlu Anda ingat untuk melakukan apa pun sebelum menulis perintah.
Guido
3
Saya menggunakan zsh dengan penulisan sejarah tambahan, jadi saya ragu ini akan berhasil dalam kasus saya
Wayne Werner
13

Untuk menonaktifkan sementara sejarah perintah untuk sesi saat ini, Anda dapat sementara menghapus variabel lingkungan HISTFILE.

unset HISTFILE

saat sesi aktif, Anda dapat mengakses riwayat seperti biasa, tetapi tidak akan disimpan ke disk.

Untuk membalik di sesi yang sama (semua perubahan akan direkam)

HISTFILE=$HOME/.bash_history
Bruni
sumber
1
Dan apakah ada cara mudah dalam sesi saat ini untuk membalikkan ini, dan membuatnya melanjutkan?
@ParanoidPanda Saya menambahkan perintah untuk kembali di sesi saat ini.
Bruni
1
@ParanoidPanda: Mengapa Anda perlu perintah untuk mengatur HISTFILElagi pada sesi saat ini? Jika Anda membatalkan perubahan (bahkan setelah menjalankan perintah rahasia) mereka akan disimpan ke dalam sejarah ketika Anda keluar.
Helio
@ Halo: Oh, tidak, maksudku sebuah perintah yang kemudian akan mulai merekam lagi, tetapi tidak menyimpan perintah yang tidak ingin aku simpan.
1
@ParanoidPanda, Helio tampaknya benar karena riwayat ini disimpan saat keluar. Saya tidak mempertimbangkan yang itu.
Bruni
10

Anda dapat mengubah garis riwayat dalam sesi shell saat ini. Jika Anda menelusuri sejarah (mis. Dengan Upatau Ctrl+ P) dan mengubah baris tanpa menjalankannya , hanya versi modifikasi dari baris yang akan disimpan. Anda dapat memodifikasinya dengan cara apa pun yang Anda suka; pilihan yang baik akan termasuk menggunakan Ctrl+ Uuntuk benar-benar mengosongkan garis atau menggunakan Esc#untuk meletakkan #karakter komentar di awal.

Untuk meninggalkan garis tanpa menjalankannya, ingatlah untuk tidak menekan Return( Enter). Apa yang saya lakukan adalah kembali ke baris terbaru dalam sejarah via Esc>.

(Alih-alih Escdiikuti oleh >, di sebagian besar terminal Anda dapat menahan Altdan menekan >; hal yang sama berlaku untuk Esc#saran di atas.)

Catatan: Anda tidak dapat mengubah entri dari sesi sebelumnya secara permanen dengan cara ini. Perubahan itu tidak akan diterapkan HISTFILEpada akhir sesi.

echristopherson
sumber
6

Anda juga dapat membuat .bash_history hanya baca. Saya akan mengosongkan file terlebih dahulu dan kemudian lakukan:

 chattr +i .bash_history
Webtm
sumber
5

Anda bisa menjalankan perintah sensitif dalam sesi layar, lalu menghancurkan sesi ketika Anda selesai.

Bergantian, Anda bisa menjaga sesi layar tetap hidup tetapi terpisah, dan hanya mengaksesnya ketika Anda benar-benar ingin dapat naik panah ke perintah yang berbahaya.

keag
sumber
1

Secara pribadi saya gunakan mksh, dan shell ini secara default tidak memiliki file histori. Itu berarti Anda bisa meluncurkan shell alternatif seperti mkshatau dash(yang datang secara default dengan cara) untuk menjalankan perintah yang Anda tidak ingin dilihat pengguna, dan keluar setelah selesai. bashhistory hanya akan mencatat bahwa Anda meluncurkan shell alternatif dan hanya itu.

Sergiy Kolodyazhnyy
sumber
1

Anda juga dapat menggunakan multiplexer terminal seperti tmux, screen. Jadi di bawah tmuxatau screensejarah tidak akan disimpan.

Vusan
sumber