web-dev-qa-db-ja.com

ターミナルに入力されたすべてのコマンドのログを作成したい

端末で入力されたすべてのコマンドのログを取得したいと思います。

私は「スクリプト」をチェックしましたが、これはコマンドと一緒に応答するファイルを生成します。コマンドのみを使用する方法はありますか?

5
Siedrix

Defaulltシェルを使用している場合、すべてのコマンドはすでに$ HOME/.bash_historyに記録されています。履歴の保持に影響を与えるいくつかの環境変数がありますが、それらについては以下を参照してください。

info bash
Type: / HIST

設定をすべてのユーザーに適用する場合は、/ etc/profileを編集します。

例:

export HISTFILESIZE=5000
6
João Pinto

ユーザーが手動で端末に入力するものはすべて~/.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で制御できます。

6
Stefano Palazzo

対話型シェルで実行したすべてのコマンドのログが必要な場合は、 BashFAQ 88-履歴行が失われないようにするにはどうすればよいですか?

0
geirha

使用することもできます CTRL+R ターミナルで履歴を検索します。

  1. CTRL+R
  2. 検索語を入力します(例:「Sudo apt-get」と入力)
  3. 押す CTRL+R 各試合を循環する
0
user244368

このための関数を書きました:

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変数を変更する必要があります。

乾杯!

0
nargetdev