`sudo less ...` 应该改变`~/.lesshst` 的所有权吗?

cue*_*dee 10 less sudo

执行了一个

sudo less ...
Run Code Online (Sandbox Code Playgroud)

...为了查看受限制的日志文件并对其进行一些搜索,我发现我的~/.lesshst文件的所有权和组更改为root:root(其中~指的是调用sudo命令的用户的主目录,而不是主目录root,明显地)。

这发生在全新的 Ubuntu 18.04 安装上less --version

less 487 (GNU regular expressions)
Copyright (C) 1984-2016  Mark Nudelman
Run Code Online (Sandbox Code Playgroud)

我找不到(谷歌)任何人观察的参考,更不用说在任何地方解释这种行为了;所以我在这里寻找它的基本原理确认它只是一个错误的迹象。

Ste*_*itt 16

这是正常的。

sudo less ...
Run Code Online (Sandbox Code Playgroud)

less以 root 身份运行,但不更改主目录。运行搜索会导致在 中更新搜索历史~/.lesshst,这将文件的所有权更改为当前用户 root(为确保更新可以安全完成,less将历史写入新的临时文件,然后重命名;这会导致原始文件的所有权丢失)。

如果你想避免这种情况,你可以告诉less使用 root 的历史记录,通过告诉sudoHOME变量设置为指向 root 的主目录:

sudo -H less ...
Run Code Online (Sandbox Code Playgroud)

另一种选择是暂时禁用搜索历史:

sudo LESSHISTFILE=- less ...
Run Code Online (Sandbox Code Playgroud)

但是,这确实意味着您将无法使用存储的搜索历史记录(/后跟?,甚至n不指定搜索字符串)。

  • 这也是“猫的无用之用”可能有用的地方。即`sudo cat ... | less 以当前用户身份运行较少,在用户的 .lesshst 文件中保留任何历史记录,并且不会破坏其权限。 (8认同)
  • 是的,这也可以,但在你习惯之前会带来一些其他的惊喜——当与 `sudo` 一起使用时,其他工具也会停止从你的主目录读取它们的设置。 (5认同)
  • 现在已经了解了底层机制,我想另一种解决这个问题的方法是在 `etc/sudoers` 中将 `visudo` 一个 `Defaults always_set_home` 行添加到 `etc/sudoers` 中从 [this](https://askubuntu.com/questions/673022/which-are-the-advantages-of-sudo-defaulting-to-keep-home) 和 [these](https://unix.stackexchange .com/questions/91384/how-is-sudo-set-to-not-change-home-in-ubuntu-and-how-to-disable-this-behavior)答案 (3认同)
  • @pizzapants184,当`less` 被间接调用时,这不会很容易起作用,例如从`sudo git log` 中......但直接,是的! (3认同)