Terminal 'gizli mod'?


230

Terminal'i çok kullanıyorum ve bazen başkalarının görmesini istemediğim şeyler olmayan komutlar kullanıyorum, ancak daha fazla komut okuduğumda okur ve yanlışlıkla çalıştırmam çok fazla soruna yol açar.

Bu yüzden, belirli bir komutun yürütülmesi üzerine geçmişimi kaydetmeyi bırakıp ardından yalnızca birisini yürüttükten sonra kaydetmeye başlamamı sağlayacak bir çeşit Terminal 'gizli mod' olup olmadığını merak ediyorum. kayıt geçmişine tekrar başla komutunu verin ve 'gizli moddan' çıkın, yoksa sadece Terminali yeniden mi başlatırım?

Çünkü kendimi daha sonra gidip eşyalarımdan çıkarırken buluyorum .bash_history, ne zaman daha kolay olacağını, eğer ilk etapta oraya kaydetmeyi durdurabilseydim, ya da en azından olamayacağı bir yere kaydetmeyi denemeyi başardım. izin verdi ve sadece kayıt yapmamaya başlayacaktı.


6
Muhtemelen tarihinin başkaları tarafından okunacağı konusunda paranoyak mısın?
Sparhawk

6
@Sparhawk: Tamam, bu kısmen, ve parti sadece gelecekte okulu atarken yanlışlıkla ölümcül bir bakım komutunu uygulamak istemiyorum! : D

19
Sadece eklemek için, kendinizi haklı çıkarmak zorunda değilsiniz: "başkalarının görmesini istemediğim şeyler değil" . Bu benim için de geçerli bir sebep olurdu. (Özellikle, herkesin seni "saklayacak şeylerin" olduğu için suçlu göstermeye çalıştığı bu zaman ve yaşta)
ereOn

2
İki sekme açarsanız, ilkinde bir şeyler yapın, ikincisinde bir şeyler yapın, sonra birinciden ÖNCE ikinciyi kapatın, yalnızca birincinin tarihçesinin yazılı olduğu görülür .bash_history. (Ubuntu 15.04, Terminal'i mahvetti, bu canlı bir USB olduğu için şanslıydı.)
Hitechcomputergeek

1
Bu soruyu serverfault'da
Luc M

Yanıtlar:


265

Geçmişi koymadan bir komut çalıştır:

Komuttan önce bir boşluk koyun. Bash önceden belirlenmiş bir alana sahip komutları yok sayar:

Örnek: Spaceecho "Some secret text"

Not: Bu yalnızca HISTCONTROLdeğişken ignorespaceveya olarak ayarlanmışsa çalışır ignoreboth.


Geçmişi geçici olarak devre dışı bırak:

  • Geçmişi devre dışı bırakmak için Spaceset +o historyveya çalıştırın Spaceshopt -uo history.
  • Tekrar etkinleştirmek için set -o historyveya tuşunu shopt -so historykullanın.

Geçerli oturum için geçmişi devre dışı bırak (oturumdan hiçbir komut hatırlamaz):

unset HISTFILE

Not: UpTerminali kapatana kadar basılan komutları görebileceksiniz .


Bir komutu tarihçeden kaldırın:

Çalıştırmak Spacehistory | grep "part of your secret command"

Bu biçimde önceden çalıştırılan komutların bir listesini gösterecektir:

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

Komutun solundaki giriş numarasını seçin. Ctrl+ Shift+ İle kopyalayabilirsinizC

Girişi kaldırmak için giriş numarasının Spacehistory -d <number>olduğu <number>yeri çalıştırın .
Bu numarayı Ctrl+ Shift+ ile yapıştırabilirsiniz.V


Diğer ilginç cevaplar:


7
history -dBir çizgiyi kaldırmak için kullanırsanız , bu çizginin içeriğini kaldırır, ancak koştuğunuz gerçeğini asla kaldıramazsınız history -d(ilk set +o historyçalıştırmadan önce kullanmazsanız history -d)
AJFaraday

1
Bana sadece süper-bağlanma mantığını hatırlattı, hepsi bu;)
AJFaraday

4
(OT) Enjeksiyonlar, insanların bir şeyler yayınlamasını engelleyen yasal bir belgedir. Süper bir aldatmaca, yayınlama kabiliyetinin reddedildiği gerçeğini yayınlamalarını da önlüyor. Bazı mantıksal argümanlar, bazı bilgileri yayınlama yeteneğinin reddedildiğini yayınlayabileceklerini soruyor. Sonra döngüsel bir argüman haline gelir.
AJFaraday

1
@Helio Kullanıcıların kopyalamanın "uygun" yolunu bilmesinin daha iyi olacağını düşünüyorum - özellikle yanlışlıkla bir metin seçtiyseniz. Boşluğu nasıl yapacağımdan emin değilim, belki boşluğun orada olduğunu açıklığa kavuşturur? [Uzay] bana biraz sakar görünüyor ...
Tim

2
unset HISTFILEYaklaşım aynı zamanda yazılı olan bütün komutlar için geriye dönük çalışır .bash_historyhenüz.
kasperd

40

Çalıştırdıktan sonra komut ekleyerek belirli bir terminal oturumunun geçmişini silebilirsiniz history -cw.

Bu komutu vermeden önce terminali kapatmayın.


Bu tüm geçmişi silmeyecek mi?
Helio

6
Bu sadece bu belirli terminal oturumunun geçmişini kaldıracak.
Moithil Bis

28

shopt -uo history en iyisini yapmalı.

HISTFILE(Ve ark.) Değişkenlerini silmek, tarihçenizin Upkaydedilmesini durdurmaz , sadece diske göndermez. Bu sizin için olumlu bir şey olabilir veya olmayabilir, ancak bahsettiğinizde, daha iyi bir şey istediğiniz sanırım. shoptGeçmiş ayarını değiştirmek, tüm tarih mekanizmasının tetiklenmesini önler.

Sen geri oturum açabilirsiniz shopt -so history( -sve -usırasıyla kümesi ve unset edilir).

Komutun kendisinin muhtemelen günlüğe kaydedileceğini unutmayın; bu nedenle değişkeni silmeden önce geçmişe eklenmesini durduracak bir boşluk hazırlayın.


17

Geçmiş dosyaya giriş yapmadan mevcut kabuğunu öldürmenin başka bir yolu da yapmaktır:

kill -9 $$

Bu, bash'in (ve muhtemelen diğer kabukların da) SIGKILL sinyalini kendisine göndermesine, yerinde öldürmesine ve diske herhangi bir şey yazmasına engel olmasına neden olur.


7
aka 'Kafanda kendini vur' :). Bu, komutları yazmadan önce hiçbir şey yapmayı hatırlamanıza gerek kalmaması avantajına sahiptir.
Guido

3
Ben artan tarih yazma ile zsh kullanmak, bu yüzden bu benim durumumda çalışacak şüphe
Wayne Werner

13

Geçerli oturum için komut geçmişini geçici olarak devre dışı bırakmak için, HISTFILE ortam değişkenini geçici olarak kaldırabilirsiniz.

unset HISTFILE

Oturum etkinken, geçmişe her zamanki gibi erişebilirsiniz, ancak diske kaydedilmez.

Aynı oturumda geri gitmek için (tüm değişiklikler kaydedilecektir)

HISTFILE=$HOME/.bash_history

1
Ve şimdiki seansta bunu tersine çevirmek ve devam ettirmek için kolay bir yol var mı?

@ParanoidPanda Geçerli oturumda geri dönmek için bir komut ekledim.
Bruni

1
@ParanoidPanda: Neden HISTFILEşimdiki oturuma yeniden ayarlamak için bir komuta ihtiyacınız var ? Değişikliği geri alırsanız (gizli komutları çalıştırdıktan sonra bile), çıktığınızda tarihe kaydedilir.
Helio

@Helio: Oh, hayır, daha sonra tekrar kaydetmeye başlayacak, fakat kaydetmesini istemediğim komutları kaydetmeyecek bir komut demek istedim.

1
@ ParanoidPanda, tarih çıkışta kaydedildiği için Helio bu konuda haklı görünüyor. Bunu düşünmemiştim.
Bruni

10

Geçerli kabuk oturumunda geçmiş satırlarını değiştirebilirsiniz. Geçmişe geri döndüğünüzde (örn. UpVeya Ctrl+ ile P) ve bir satırı yürütmeden değiştirirseniz, yalnızca satırın değiştirilmiş sürümü kaydedilir. İstediğiniz şekilde değiştirebilirsiniz; iyi seçimler , çizgiyi tamamen boşaltmak için Ctrl+ ' Uyı veya başında Esc#bir #yorum karakteri koymak için kullanmayı içerir .

Bunu yapmadan bir çizgiyi geride bırakmak için, Return( Enter) tuşuna basmadığınızı unutmayın . Yaptığım, tarihteki en yeni çizgiye dönmek Esc>.

(Yerine Escardından >sen tutabilir çoğu terminallerde, Altbasın >, aynı gider Esc#yukarıdaki öneri.)

Not: Önceki oturumlardan gelen girişleri bu şekilde kalıcı olarak değiştiremezsiniz. Bu değişiklikler HISTFILEoturumun sonunda uygulanmayacak .


6

Ayrıca .ash_history salt okunur yapabilirsiniz. Önce dosyayı boşaltır ve sonra yapardım:

 chattr +i .bash_history

5

Bir ekran oturumunda hassas komutları çalıştırabilir, daha sonra tamamladığınızda oturumu yok edebilirsiniz.

Alternatif olarak, bu ekran oturumunu canlı ancak ayrılmış olarak tutabilir ve yalnızca gerçekten tehlikeli komutlara ok atmak istediğinizde erişebilirsiniz.


1

Şahsen kullanıyorum mkshve bu kabuğun varsayılan olarak bir geçmiş dosyası yok. Bu, kullanıcıların görmesini istemediğiniz komutları çalıştırmak ve bitince bir kez çıkmak için mkshya da dash(bu arada varsayılan olarak gelen) alternatif kabuğu başlatabileceğiniz anlamına gelir. bashtarihçe, yalnızca alternatif kabuğu başlattığınızı kaydeder ve hepsi bu.


1

Ayrıca tmux, gibi terminal çoklayıcıyı da kullanabilirsiniz screen. Yani altında tmuxveya screentarih kaydedilmeyecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.