ある種の「シークレット」モードに入るように、bashで履歴の追跡を一時的に停止する方法はありますか?記録された機密の財務情報を必要としないものを端末に入力しています。
これはあなたが探しているものでなければなりません:
unset HISTFILE
man bash
からHISTFILEが設定されていない場合、または履歴ファイルが書き込み不可の場合、履歴は保存されません。
あるいは、オフに切り替えてから再びオンにしたい場合は、 set
を使用する方が簡単な場合があります。
set +o history
set -o history
Bashを使用して、HISTCONTROL="ignorespace"
と、履歴に記録したくないコマンドの前にスペースを付けます。対策を忘れてしまった場合のために、history -d <number>
特定のエントリを削除する場合、またはhistory -c
コマンド履歴全体をクリアします。
HISTCONTROL
にignorespace
が含まれていることを確認してください。おそらくHISTCONTROL=ignorespace
(またはHISTCONTROL=ignoredups:ignorespace
または何か)をあなたの~/.bashrc
。その後、スペースで始まるコマンドラインは履歴から削除されます。
別の可能性は、履歴を保存しない新しいbashセッションを開始することです。
$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent Shell
複数のコマンドを保存する必要がなく、上矢印を使用して前のコマンドにアクセスする場合は、次のコマンドを使用します。
$ bash # open a new session.
$ unset HISTFILE # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$
コマンドの格納方法を制御するには、4つの方法(レベル)があります。
最初の最も簡単な方法は、ignorespace
(またはignoreboth)を使用することです。
$ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"
これにより、history
のメモリリストに記録されないようにするコマンドの前にスペースを使用できます。また、結果として、ファイルに送信できるコマンドがメモリに記録されていないため、_oneコマンドが$HISFILE
にリストされているファイルに送信されることも回避されます。
コマンドを$HISTFILE
のファイルに記録しないでください:
$ unset HISTFILE
設定しない場合、シェルの終了時にコマンド履歴は保存されません。
Null HISTFILE=''
および/またはHISTFILE=/dev/null
に設定すると、同じ効果が得られます。コマンドがまだメモリリストに記録されていることを理解し、history
コマンドまたは上矢印を試してください。
警告:シェルが存在する前にHISTFILEがリセットされると、メモリに記録されているすべてのものがファイルに書き込まれる可能性があります。
newコマンドをメモリの履歴リストに記録しないでください。また、メモリにないため、ファイルに記録できません。
$ shopt -ou history # or set +o history
shopt -os history
(またはset -o history
)で再度有効にする
メモリ内の履歴リストからすべてのコマンドを削除します。
$ HISTSIZE=0
すべてのコマンドは(メモリから)消去されるため、変数が有効な数値に再度設定されるまで、ファイルには何も保存できません。
履歴をオフにする簡単な方法が1つあるため、コマンドは.bash_history
ファイルに保存されません。
コマンドが履歴に保存されないように、コマンドの前に空白またはタブスペースを配置する必要があります。例えば:
$ ls
print the list of file
$ history
ls
history
$ pwd
print the current working directory
$ history
ls
history
pwd
コマンドは前に空白があるため、履歴に保存されません。
export HISTFILE=/dev/null
それが私の後藤のやり方です。未設定のHISTORY/HISTFILE/HISTCONTROLなどが機能しない場合に備えて、/ dev/nullへのエクスポートは常に機能していました。
SiegeXの回答をもう少し進めて、これをシークレットモードにするには...
免責事項:タイトル関連のものはおそらくgnome-terminalで動作するでしょう。 Linux Mint 19.3/Gnome Terminal 3.28.1でのみテストされました。私は怠惰だからです。
以下を~/.bash_functions
に追加します(これは.bashrc
/.profile
などを介してインポートすることを前提としています):
function setGnomeTerminalTitle() {
local NEW_TITLE="$1";
PS1="\[\e]0;${NEW_TITLE}\a\]\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]";
}
次に、以下を~/.bash_aliases
に追加します(これも、.bashrc
/.profile
などを介してインポートすることを前提としています)。
alias title="setGnomeTerminalTitle";
alias hist='history'
alias histoff="setGnomeTerminalTitle 'Incognito Window' && set +o history"
alias histon="setGnomeTerminalTitle \"$USER@$HOSTNAME:\${PWD//\${HOME//\\//\\\\\\/}/\\~}\" && set -o history"
編集:ヒストンのタイトルに関する説明-通常、gnome-terminalのウィンドウタイトルは「$ USER @ $ HOSTNAME:$ {PWD}」ですが、ホームフォルダー/ home/fooにいる場合は、~
として表示されます。 ;少なくともそれは私のコンピュータ上にあります。このコマンドは、bash文字列置換を使用して$HOME
のスラッシュをエスケープするため、\/home\/foo
を取得し、次にそれを正規表現として使用して、$PWD
のパターンをリテラル~
...に置き換え、次にエスケープの束を上に追加します二重引用符で囲まれた文字列のエイリアスとして機能させる。
これで、histoff
と入力すると、シークレットモードのタイトルが変更され、そのウィンドウでのセッションの履歴が停止します(Wordのhistoff
は引き続きログに記録されますが、その後は何も記録されません)。次にhiston
と入力すると、タイトルが元に戻され、histoff
からhiston
までのすべての行が記録されますが、histon
以降のすべての行が記録されます。
例:
## this is still logged
histoff
## this is NOT logged
echo "my password is: password";
fake_ua='If firefox and curl had a child, would it be named furl?';
curl -A "$fake_ua" https://www.itsnotap0rnsiteipromise.com/curvy-girlz/;
vi ~/Documents/maths/super-secret-squirrel/gift-ideas.txt
## this is still NOT logged
histon
## this is logged again
Sudo apt install -y kmag;