在我的几个 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 观点。确实如此,但这并不重要。rootbash
或dash
shell 都不是运行该命令的 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
根历史记录确实出现在根主文件夹中的此文件中