私が管理しているシステムのすべてのユーザーの履歴設定を変更したいと思います。接続端末の情報を含めたいです。who
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
現在、次の方法で自分の履歴を修正します。私はこれらの設定の多くがここで何度も取り上げられていることを知っています。しかし、私は」Juliet KempのLinuxシステム管理クックブック「かなりずっと前に。
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
複数の端末を開いたときに情報が失われる問題を修正しました。
PROMPT_COMMAND='history -n;history -a'
複数の端末にわたってリアルタイムで履歴を追加する拡張機能です。
HISTSIZE=100000
HISTFILESIZE=100000
history
保存期間の延長
HISTTIMEFORMAT="%m/%d/%y %T
「記録の各行にタイムスタンプを撮ります。
あなたが通常得るもの history
835 ls
836 cd ..
私の修正された現在のhistory
結果
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
history
お返しで見たいことから
5853 03/26/12 07:16:49 sysadmin.doofus.local ls
5854 03/26/12 07:16:50 sysadmin.doofus.local ll
001 03/26/12 05:11:29 demo_user.doofus.local cd
002 03/26/12 05:11:30 demo_user.doofus.local ll
名前だけ見てDNS
「結婚」したのではありませんでした。who
どのようなクエリやクエリも実行せずに他の場所からインポートしたいです。 IPアドレスに満足しています。
002 03/26/12 05:11:30 192.168.0.2 ll
なぜ?同じグループ内の複数のユーザーがユーザーIDを共有して日常的なタスクを実行する複数のシステムを管理します。これにより、組織内の実際の場所と実際のユーザーを歴史的に実行したタスクに関連付けることができます。
私はこれが最適ではないことを知ってそれを変えたいのですが、クルーズ船の大きさの船にいるときは急回転しようとしません。 (注:これにより、乗客はあなたを船から投げます。)
とにかく、より良いソリューションに移行できるようになるまで、この追跡機能を持ちたいと思います。
また、history
私が現在修正するために使用していることに関する提案があれば聞きたいと思います。
ありがとう、
編集:1
私は他のプログラムを実行したくないし、「理由に応じて」追加の設定をしたくありません。
オーバーヘッドを追加したいです0
。追加する必要がある場合は、サイズを小さくする必要があります。
私は私のユーザーを信頼し、(何が起こるか)10人のユーザーのうち同じユーザー名:パスワードでシステムにログインしたユーザーが誰であるかを確認したいと思います。あるいは、ユーザでなくても、cron
特定のタスクを実行するために接続を実行するユーザとしてシステムで忘れられてもよい。あるいは、たとえばアプリケーションを使用すると、ジョブをリンクしてBMC Control-M
実行ssh
できます。 「悪いユーザー」を見つけるのではなく、最小限の労力で追跡できることが重要です。
編集2:
システムはSLESとRHELを実行します。
答え1
Lluaの提案に基づいて、歴史についてもっと勉強することができます。システム全体のBASH RCファイル(/etc/bash.bashrcなど)に1行を追加します。
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
システムロガーで「local6」のロギングを設定します。たぶん、次のようなものがあります。
local6.* /var/log/commands.log
システムロガーを再起動します。ログファイルの回転を設定することもできます。ログアウトログインすると、履歴は次の形式で/var/log/commands.logに記録されます。
日付/時刻ホスト名ロガー:ユーザー名[audit_pid]:コマンド[return_val]
これは好みに応じてさらに調整することができます。
答え2
次の段落は一般的にアイデアを説明し、いくつかの点で古いですが、最新バージョンを使用できます。これページ。大容量ファイル~/.bash_history.archive(HISTFILE=~/.bash_historyとは別)を使用します。次に、各bashセッションが終了したときに新しい履歴行を追加します。
このアプローチの最初の問題は、終了するたびにbashにこのスクリプトを呼び出すようにするにはどうすればよいですか?もちろん、「exit」と入力して終了すると、「exit」機能のエイリアスを指定できますが、ショートカットCtrl-Dを使用してこれを実行し、それを別の項目に再割り当てする方法を見つけることはできません。 - 機能を終了しています。
したがって、最初の試みは次のようになります。 Ctrl-Dを無効にします。
export IGNOREEOF=10
そして、シャットダウン機能を呼び出すには、ダブルCtrl-Xの組み合わせを定義します。
しかし、正しい方法はbashの終了トラップを使用することです。これはbashを終了する方法に関係なく呼び出されるので、完璧な解決策です。 Ctrl-D、終了、xtermウィンドウを閉じます。
trap 'archive_history' EXIT
次のステップは、bash_historyで開始行を定義して新しい行のみを保存し、その行を履歴ファイルに追加することです。
export CURBASHSTART=`grep -v "^[ \t]*$" $HISTFILE | wc -l | awk '{print $1}'` CURBASHDATE=`date`
shopt -s cmdhist histappend
これがbashの起動時に必要なものです。これで、現在の(新しい)履歴がどのレコード行から始まるかがわかります。履歴を保存するには、~/.bashrcに次のセクションを追加してください。
archive_history()
{
HISTORYOLD=${HISTFILE}.archive
CURTIME=`date`
CURTTY=`tty`
if [ x$HISTDUMPPED = x ]; then
echo "#-${HOSTNAME}-- ${CURBASHDATE} - ${CURTIME} ($CURTTY) ----" >> $HISTORYOLD
history $(($HISTCMD-${CURBASHSTART-0})) | sed -e 's/^[ ]*[0-9][0-9]* [ ]*//g' >> $HISTORYOLD
export HISTDUMPPED=1
fi
}
exit ()
{
archive_history
builtin exit
}
~/.inputrc ファイルには、Ctrl-x x 終了ショートカットをオーバーライドする次の行を含める必要があります。初めて試してみると、この方法が悪いショートカットだと思うかもしれませんが、後で慣れるでしょう。私を信じてください。
$if Bash
# to exit through calling exit function which will archive the history
"\C-x\C-x": "exit\n"
# to dump history we have so far
"\C-x\C-w": "archive_history\n"
$endif
また、bashセッションがログインセッションでlogout
「」を呼び出して終了すると、~/.bash_logout
archive_history
~/.bash_history.archive
上記のすべての操作を完了したら、次のセクションを含むファイルを見つけることができます。
#-belka-- Sun Oct 12 21:52:13 EDT 2003 - Sun Oct 12 21:53:25 EDT 2003 (/dev/pts/13) ----
exit
aptitude
exit
#-washoe-- Sun Oct 12 18:03:16 EDT 2003 - Sun Oct 12 23:06:48 EDT 2003 (/dev/pts/3) ----
exit
cd progr/letters/resume/
e resume.tex
必要に応じて、通常は通常の履歴ファイルのように読み取ることができます。