Rootのbash履歴を表示したいのに、Sudo history
を実行できないのはなぜですか?コマンド履歴が見つかりませんと表示されますが、Sudoなしで実行すると正常に実行されます。
編集:それは重複した答えですが、リンクされたものと重複した質問ではありません。どちらかの質問をしている人は、それがバイナリではなくシェルの組み込みコマンドであることを知りません。
history
はbashShell組み込みコマンドであり、Sudo
はShell組み込みコマンドでは機能しません。
コマンドwhich
を使用しました。 "はファイル(またはリンク)のパス名を返します。環境内で実行されました」history
が外部(bashへの)コマンドではないことを確認します。
たとえば、実行中
$ which history
$
何も返さず、終了コードは1です(1つ以上の指定されたコマンドが存在しないか実行可能ではありません)[FYI実行中にecho $?
で終了コードが表示されます]
$ which ls
/bin/ls
$
および終了コード0(指定されたすべてのコマンドが検出されて実行可能)。
また、bashでは、help
(またはman bash
ページの検索)を使用して組み込みコマンドのヘルプを検索できます。たとえば、次のように入力します
$ help history
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps
arg [arg...]
Display or manipulate the history list.
...
bashのヘルプ情報を表示します。 help non-bash-command
を実行すると、次のようなものが返されます。
$ help ls
bash: help: no help topics match `ls'. Try `help help' or `man -k ls' or
`info ls'.
および終了コード1
grep '^Sudo' .bash_history
またはhistory|less
などを使用して、ユーザーが実行した(履歴への保存をスキップしない)Sudo
コマンドの履歴を検索できます。
または、Ubuntuでは、ファイル/var/log/auth.log
がすべてのユーザーに対してSudo
が行ったことの記録を保持し、そこで「Sudo」を検索します(他のディストリビューションではファイル/var/log/secure
を使用できます)。使用できます
Sudo grep Sudo /var/log/auth.log
または、systemdを使用している場合は、Sudo journalctl _COMM=Sudo
を実行します。
詳細については、質問 「すべてのユーザーが実行するSudoコマンドの詳細」(UnixおよびLinux) を参照してください。
history
はbashに組み込まれており、通常のコマンドではありません。 Sudo
は、指定したコマンドを実行するためにシェルを起動しません。シェルを直接(通常のコマンドとして)実行しようとするだけなので、使用できません。
Sudo bash
を使用してルートシェルコマンドを開いてからhistory
を実行できますが、ワンライナーが必要な場合は少し複雑です。 bashは、インタラクティブモードで実行されている場合にのみ履歴メカニズムを有効にし、Sudo bash -c history
(-c
はbashに「実行してほしいコマンドは次のとおりです:」)のようなことを行うと、次のように扱います。非対話型モードであり、実際には履歴を表示しません。 -i
(インタラクティブモードの場合)を追加しても、テストしたときに機能しませんでした。しかし、これはしました:
Sudo bash -i <<<history
<<<
はbashのみの機能であることに注意してください。他のシェルでは、代わりにecho history | Sudo bash -i
を使用する必要がある場合があります。