在我的一些 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 用户身份运行的命令的历史记录的权限?
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)
不保留 shell 历史记录的一些可能原因:
/bin/bashbut /bin/sh(符号链接到/bin/dash)。使用命令更改此设置chsh。/root以只读方式挂载,因此历史文件无法写入。HISTFILE被设置为 以外的值/root/.bash_history。空文件会禁用历史记录,其他值用作写入历史记录的位置。