Linuxでは、一般的に多くのコマンドを使用しており、それらすべてを覚えることは困難です。
history
commandは、以前に使用したコマンドのリストを提供しますが、その制限はより少なくなっています。新しいコマンドは古いコマンドで上書きされ、古いコマンドが失われます。コマンドのログがシステムのどこかに保存されていると思います。
そのログは開いて読むことができますか?可能であれば、処理できるログの最大サイズを変更できますか?
history
コマンドの出力はログインユーザーに依存していますか?
ファイル ~/.bash_history
は、実行されたコマンドのリストを保存します。少なくともCentOSにはこのファイルが存在しますが、他のディストリビューションに存在するかどうかはわかりません。
単純な解決策は、history
によって保存および返されるコマンドの数を増やすことです。 bashを使用する場合は、次の行を~/.profile
に追加します。
export HISTSIZE=100000
export HISTFILESIZE=999999
man bash
から:
HISTFILESIZE
The maximum number of lines contained in the history file. When
this variable is assigned a value, the history file is trun‐
cated, if necessary, to contain no more than that number of
lines by removing the oldest entries. The history file is also
truncated to this size after writing it when a Shell exits. If
the value is 0, the history file is truncated to zero size.
Non-numeric values and numeric values less than zero inhibit
truncation. The Shell sets the default value to the value of
HISTSIZE after reading any startup files.
HISTSIZE
The number of commands to remember in the command history (see
HISTORY below). If the value is 0, commands are not saved in
the history list. Numeric values less than zero result in every
command being saved on the history list (there is no limit).
The Shell sets the default value to 500 after reading any
startup files.
少なくともデフォルトでは、そのようなログはありません。
システムで実行されたすべてのプログラムを追跡できるacct
(「プロセスおよびログインアカウンティング用のGNUアカウンティングユーティリティ」)などのインストールできるツールがあります。
acct
は、ほとんどの(おそらくtiny-distros以外のすべての)Linuxディストリビューション用にパッケージ化されています。ホームページは http://www.gnu.org/software/acct/ にあります。
acct
は次のコマンドを提供します。lastcomm
はおそらくあなたが望んでいることを行います:
acは、ユーザーの接続時間に関する統計を出力します。 acは、特定のユーザーまたはユーザーのグループがシステムに接続されていた時間を示し、日別またはwtmpファイルのすべてのエントリの合計を出力します。
acctonはアカウンティングをオンまたはオフにします。
lastcommは、システムで実行されたコマンドを最新のものから順にリストし、各コマンドの実行状態を示します。最後に、特定のユーザー、端末、またはコマンドのacctファイルを検索できます。
saは、acctファイルの情報をsavacctおよびusracctファイルに要約します。また、コマンドに関するレポートを生成し、呼び出しの数、使用されたCPU時間、平均コア使用率などを提供します。
dump-acct dump-utmpは、人間が読める形式でacctファイルとutmpファイルを表示します。
私はあなたの質問に答えるために別のアプローチをとります。 ~/.bash_history
ログは、コマンド、スクリプト、ワンライナーなどをログに記録しますが、履歴についてユーザーは完全に制御できます。
SAの観点からは、おそらくこれは望まないでしょう。代わりに、システムで何が実行されるかauditしたいでしょうか?
これを行う方法はauditd
を使用することです。 /etc/auditd/auditd.rules
のルールの例を以下に示します:-w /sbin/mkfs -p x -k sbin_mkfs -w /sbin/mke2fs -p x -k sbin_mke2fs -w /sbin/mkswap -p x -k sbin_mkswap -w /sbin/mkinitrd -p x -k sbin_mkinitrd -w /sbin/modinfo -p x -k sbin_modinfo -w /sbin/modprobe -p x -k sbin_modprobe
auditd
は、上記のコマンドのいずれかが実行されると/var/log/audit/
にログを記録し(-p x
)、システムで実行されたすべてのコマンドとその実行者を表示できます。サイズを指定するbufferがあり、auditd
を設定して古いログなどを上書きできます。
これはあなたが望んでいるようです?
bash
を使用しない場合、[しない]は~/.bash_history
に含まれますが、~/.<Shell name>_history
は含まれます。たとえば、私はzsh
を使用し、私のログは~/.zsh_history
にあります。