历史记录不显示为 sudo 用户

Joh*_*ino 5 command-line sudo

在我的一些 ubuntu 安装中,当我运行sudo su并成为 sudo 用户时,我可以输入历史记录并查看以 sudo 用户身份运行的命令列表。但是,在我的一个 ubuntu 安装中,出于某种原因,当我运行sudo su并键入 时history,我得到了这个:

$ sudo su
# history
1  history 
Run Code Online (Sandbox Code Playgroud)

但是我确信很多命令都是以 sudo 用户身份运行的,但是当我 ssh 退出并 ssh 回到我的 ubuntu 服务器时,它们不会显示,就像它们在其他服务器上的显示方式一样。我是否在这台服务器上禁用了某些开关或某些功能?如何重新获得查看以 sudo 用户身份运行的命令的历史记录的权限?

Oli*_*Oli 9

history就是所谓的内置。它本质上是一个在您的会话中运行的 bash 函数(就像提供的其他日志记录一样~/.bash_history)。

当你运行时sudo something,这发生在你的会话中,而不是 root 的。此外,当使用 sudo 运行某些内容时,它不会生成单独的 bash 会话,然后运行该命令。它只是以正确的权限执行(我在某种程度上简化了事实)。

这温和地削弱了 Lekensteyn 的不同壳点。这是真的,只是没关系。既不是 rootbash也不dash是运行命令的 shell。您可以通过运行类似的程序sudo -u $USER whoami然后查看~/.bash_history. 只有一个命令。如果这是另一个 shell,我希望看到sudo -u $USER whoami后跟whoami.

sudo su -c 'echo $0'输出父 shell(bash在我的情况下),但我不确定这是否同样重要。


无论如何,当您运行sudo something它时,它只会进入您自己的~/.bash_history. 如果要查看已运行的命令,请sudo运行:

grep -E '^sudo' ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

  • 确切地!以_sudo_ 身份运行的命令记录在用户的.bash_history 中,即/home/userName/.bash_history 文件中,而不是/root/.bash_history 中。当然,如果在 sudo su 或 sudo -i 之后执行了任何命令,这些命令都会记录在 /root/.bash_history 中 (2认同)

Lek*_*eyn 2

不保留 shell 历史记录的一些可能原因:

  • 您的 root shell 不是/bin/bashbut /bin/sh(符号链接到/bin/dash)。使用命令更改此设置chsh
  • 所在的文件系统/root以只读方式挂载,因此历史文件无法写入。
  • 该变量HISTFILE被设置为 以外的值/root/.bash_history。空文件会禁用历史记录,其他值用作写入历史记录的位置。