it-swarm-ja.com

「履歴」コマンドはどのように機能しますか?

Bash_historyの機能を理解しようとしています:

/home/user# ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  pylabs  .viminfo  .Xauthority

.bash_historyフォルダーに/home/userファイルがあります。しかし、なぜそれは実行されたコマンドの全履歴を持っていないのですか?以下に出力されますか?

/home/user# cat .bash_history

su
/home/user#

ただし、同じ履歴が.bash_historyフォルダーの/rootファイルで利用できます。

 # ls -a
 .  ..  .bash_history  .bashrc  .cache  .profile  .ssh  .viminfo

/home/user# cd /root/
# cat .bash_history

bash script.sh
ls
cd pylabs/
ls
...
...
ls -a
cat .bash_history
cd /root/
#

質問2:.bash_historyは特定のフォルダでのみ使用できますか?また、実行されたすべてのコマンドを異なるディレクトリに保存するにはどうすればよいですか?

/home/user/pylabs# ls -a
.  ..  backup  bkupscript.py  mybackup.py  __pycache__  solution.py
1
Here_2_learn

履歴はユーザーごとであり、グローバルではありません。各ユーザーには独自の履歴ファイルがあり、各ユーザーのコマンドは独自のファイルに保存されます。 bashの履歴ファイルのデフォルトの場所は$HOME/.bash_historyであるため、これはユーザー「user」の場合は/home/user/.bash_history、「root」ユーザーの場合は/root/.bash_historyになります。 HISTFILE環境変数を別の変数に設定することで、履歴ファイルの名前/場所を変更できます。

さて、あなたが示す例では、あなたは以下をしました:

  1. 「user」としてログインし、すぐにsuでrootに切り替えました。これは、「user」として1つのコマンドを実行したことを意味します。そのため、「user」の履歴ファイルにはsuという1つのエントリしかありません。

  2. Rootとして、さまざまなコマンドを実行しました。これらはrootによって実行されたため、すべてrootの履歴ファイルに保存されます。ルートの履歴ファイルにはsuコマンドが含まれていないことに注意してください。これは、ルートではなく「ユーザー」によって実行されたためです。

したがって、$HOME/.bash_historyファイルには、実行されたディレクトリに関係なく、ユーザーが実行するallコマンドが格納されます。ただし、各ユーザーは独自のファイルを持っているため、rootが実行するコマンドはそうではありません。 「ユーザー」が実行するファイルと同じファイルに保存されます。

2
terdon

Bashには、見つけたファイルに保存された履歴がありますが、実行中のシェルには、まだ保存されていない履歴もメモリにあります。使用する history -w現在の履歴をファイルに書き込みます。

2
Zoredache

別のメモとして、私のお気に入りの履歴コマンドハックの1つは、有効にすることです。

export HISTTIMEFORMAT=' %F %T '

ここで履歴コマンドを実行すると、表示されている各履歴エントリに関連付けられたタイムスタンプが表示されます

history 

1525   2020-04-04 08:26:03 strace ls
1526   2020-04-04 08:26:08 strace history
1527   2020-04-04 08:27:55 strace ls 

どこ

 %F     Equivalent to %Y-%m-%d (the ISO 8601 date format)
 %T     The time in 24-hour notation (%H:%M:%S)
0