sudo 用户不显示历史记录

sudo 用户不显示历史记录

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

$ sudo su
# history
1  history 

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

答案1

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

当您运行 时sudo something,这发生在您的会话中,而不是 root 的会话中。此外,当使用 sudo 运行某些操作时,它不会生成单独的 bash 会话然后运行命令。它只是以正确的权限执行(我稍微简化了事实)。

这稍微削弱了 Lekensteyn 的不同 shell 观点。确实如此,但这并不重要。rootbashdashshell 都不是运行该命令的 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

答案2

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

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

答案3

参加聚会有点晚了,但我想如果我这样做:

$ sudo su
$ cd ~
$ vi .bash_history

根历史记录确实出现在根主文件夹中的此文件中

相关内容