端末で入力されたすべてのコマンドのログを取得したいと思います。
私は「スクリプト」をチェックしましたが、これはコマンドと一緒に応答するファイルを生成します。コマンドのみを使用する方法はありますか?
Defaulltシェルを使用している場合、すべてのコマンドはすでに$ HOME/.bash_historyに記録されています。履歴の保持に影響を与えるいくつかの環境変数がありますが、それらについては以下を参照してください。
info bash
Type: / HIST
設定をすべてのユーザーに適用する場合は、/ etc/profileを編集します。
例:
export HISTFILESIZE=5000
ユーザーが手動で端末に入力するものはすべて~/.bash_history
に保存されます。~
は、現在ログインしているユーザーのホームディレクトリの略記です。また、.
で始まるファイルは非表示になることに注意してください。ノーチラスでは、ヒットすることでそれらを表示することができます Ctrl+H。
入力して見てみましょう
cat .bash_history
連続番号で注釈された履歴を表示するには、次を入力します
history
たとえば、!2129
と入力すると、そこに表示されるコマンドを再度実行できます。これは、history
コマンドで示されるように、コマンド番号2129を実行します。
history
コマンドを使用すると、2番目のログまで表示されることに注意してください。.bash_history
は端末からログオフした後にのみ保存されます。
興味深い情報の小さな断片:
.bash_history
に保存されません。 rm -R mydir/
のようなコマンドを実行する場合、上矢印を押して誤って再度実行するのを防ぐために、スペースを先頭に付けることができます。Joāoが言うように、保存された履歴のサイズはexport HISTFILESIZE=5000
で制御できます。
対話型シェルで実行したすべてのコマンドのログが必要な場合は、 BashFAQ 88-履歴行が失われないようにするにはどうすればよいですか?
使用することもできます CTRL+R ターミナルで履歴を検索します。
このための関数を書きました:
function begin_install_log() {
if [ $# -eq 0 ]
then
echo "No arguments supplied"
HIST_NUM=""
else
HIST_NUM=$(history|tail -n 1|awk '{ print $1 }')
HIST_NUM=$((HIST_NUM + 2))
OUTPUT_FILE=$HOME/environment/ansible/.install_cache/${1}
fi
}
function capture_install_log() {
if [ ! $HIST_NUM ]
then
echo "run 'begin_install_log' first"
else
history|grep -A999 $HIST_NUM|awk '{$1=""; print $0}' >> $OUTPUT_FILE
HIST_NUM=""
fi
使用法:
$ begin_install_log some_file_name
$ blah
$ blah
$ blah
$ capture_install_log
もちろん、必要に応じてOUTPUT_FILE変数を変更する必要があります。
乾杯!