Bas geçmişinde “history -d” yi gizle


14

Yanlışlıkla şifremi veya bash'ta hassas olan başka bir şeyi yazarsam, bu satırı kolayca kaldırabilirim history -d ROW#, ancak her zaman history -d ROW#tarihte herkese birisinin bir hatayı düzelttiğini gösteren komutla kaldım .

Bas geçmişinde görünmesini önlemek için bir komuta bir şey ekleyebilir miyim?

Yanıtlar:


27

Geçmişinizde tek bir komut kaydetmemek için komuttan önce bir boşluk ( burada işaretli olan ) ile devam edin:

$ echo test
test
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2
$ echo test2
test2
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2

Bu davranış, ~/.bashrcdosyanızda, yani şu satırda ayarlanır :

HISTCONTROL=ignoreboth

man bash diyor:

HISTCONTROL
Komutların geçmiş listesine nasıl kaydedileceğini kontrol eden iki nokta üst üste işaretli değerler listesi. Değerler listesi yoksayma içeriyorsa , boşluk karakteriyle başlayan satırlar geçmiş listesine kaydedilmez . Yoksayılanların değeri , önceki geçmiş girdisiyle eşleşen satırların kaydedilmemesine neden olur. Değeri ignoreboth'un için kısaltmadır ignorespace ve ignoredups .

ignoredupsbu arada history | tail -n2yukarıdaki testte tarihte sadece bir kez görünmesinin nedeni .


Bir terminalin geçmişi RAM'e kaydedilir ~/.bash_historyve terminal kapatılır kapatılmaz temizlenir . Belirli bir girişi sizden silmek ~/.bash_historyistiyorsanız, bunu aşağıdakilerle yapabilirsiniz sed:

                                   # print every line…
sed '/^exit$/!d' .bash_history     # … which is just “exit”
sed '/^history/!d' .bash_history   # … beginning with “history”
sed '/>>log$/!d' .bash_history     # … ending with “>>log”
sed '\_/path/_!d' .bash_history    # … containing “/path/” anywhere

Sonuncusu ise varsayılan sınırlayıcı değişti /için _aslında bu eşittir, bu arama terimi içine kullanılan gibi sed -i '/\/path\//d' .bash_history. Komut çıkışları Eklemek silmek istediğiniz tek satır halinde -iseçeneği ve değişimi !diçin dsilme işlemini gerçekleştirmek için:

                                   # delete every line…
sed -i '/^exit$/d' .bash_history   # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history   # … ending with “>>log”
sed -i '\_/path/_d' .bash_history  # … containing “/path/” anywhere

12

Bunun bir yolu, HISTIGNOREortam değişkenini ayarlamak olabilir . itibarenman bash

HISTIGNORE
      A colon-separated list of patterns used to decide which  command
      lines  should  be  saved  on  the history list.  Each pattern is
      anchored at the beginning of the line and must  match  the  com‐
      plete  line  (no  implicit  `*'  is  appended).  Each pattern is
      tested against the line after the checks specified  by  HISTCON‐
      TROL  are  applied. 

[FWIW, HISTCONTROLönde boşluk tipi geçici çözüm sağlayan varsayılan değerdir ].

Yani mesela

HISTIGNORE='history -d*'

Kalıcı olmasını istiyorsanız, cihazınızdan dışa aktarın. ~/.bashrc

export HISTIGNORE='history -d*'

6

Yapabilirsin

  • Terminal pencerelerini kapatın . Bu, son pencereyi kapattığınız (diğer pencereler kapatıldıktan sonra) terminal penceresinde en güncel geçmişi temizler./home/$USER/.bash_history

  • Dosyayı dahil/home/$USER/.bash_history etmeden bashdüzenleyin, örneğin favori düzenleyicinizi Alt+F2

    Bu şekilde tüm geçmişi inceleyebilir ve artık orada olmak istemediğiniz komutları kaldırabilirsiniz.

    resim açıklamasını buraya girin

    resim açıklamasını buraya girin


1

Genellikle kullanıyorum:

history -w; history -c; $EDITOR $HISTFILE; history -r

Geçmiş dosyası diske yazılır, bellekte temizlenir, istediğiniz şeyi yapmak için düzenlersiniz ve daha sonra düzenlediğiniz geçmiş dosyası tekrar okunur.

Editör yedekleme dosyalarını kaydederse, yaramaz kelimenin hala diskte görünebileceğini unutmayın.

Kullanmanın başka bir seçeneği de -dtahmini geçmiş sayılarını kullanmaktır:

startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239  # bad thing
17240  history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239  # good thing
17240  # other thing
17241  history | tail  -n 3

Bu örnekte, kötü olanı silerim, geçmiş numarasını almak için komutu silerim ve sonra geçmişi silmek için kullandığım komutu silerim. O zaman her şey sterilize edilir.


0

Bir komutu geçmişe kaydetmeden çalıştırmak isterseniz, fazladan bir boşluk bırakın

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

Bunun işe yaraması için HISTCONTROL'de yoksay veya boşluk yok saymanız gerekir. Örneğin,

HISTCONTROL = ignorespace Bu ayarı kalıcı yapmak için .bashrc'nize koyun.

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.