我在 Mac OSX 上运行 zsh,有时想在终端中切换到 root 用户。
我想保留我的普通用户的所有点文件、环境路径配置和脚本,并以 root 身份执行很多操作。
我一直在运行sudo bash
orsudo zsh
作为切换到 root 的简单方法,但这有一个缺点,就是不能运行我的普通用户的所有 zsh 配置。
“成为 root ”来运行一系列命令并保留普通用户的所有配置/环境设置的最佳方法是什么?”
例如,我为普通用户定制了以下内容,并希望 root 用户也可以使用它们:
- .zshrc
- 〜/ bin
- .别名
- vim模式输入
编辑:请注意,我知道我不应该经常“以 root 身份运行”。但我不这么认为。但有时我确实必须以 root 身份不断运行一些简单的命令,并且我只是为了这种用途而打开 tmux 拆分,而不是其他用途。
答案1
要获取常用的点文件,请确保sudo
不会更改HOME
环境变量。是否发生这种情况取决于 sudo 的编译时和运行时配置。要保留HOME
,请编辑该sudoers
文件(运行visudo
,切勿直接编辑此文件!)并确保它包含
Defaults !always_set_home, !set_home
Defaults env_keep+=HOME
(根据编译选项,其中一些可能是不必要的。)当然不要运行sudo -i
.
不过,请避免以 root 身份做太多事情。例如,不要以 root 身份运行编辑器,而是使用sudoedit
.
答案2
您几乎肯定不想这样做。
如果您的根用户指向普通用户的点文件,那么这些点文件的权限可能会发生变化,从而使普通用户的事情变得复杂。
您可以做的是在每次登录时将文件复制到根用户主目录。
在 ~/.zshenv(对于 root 用户)的某个位置复制这些文件并调整它们的权限。这样您就可以保持环境的正常运行,并开始使用您的自定义设置。
就个人而言,如果我想运行多个 root 命令,sudo su -
但您可以尝试sudo -E su -p
保留用户的环境。
强制警告!
跑步从来都没有充分的理由sudo su
。很远更好的sudo
在每个命令之前运行。也就是说,我sudo su
有时会这样做。但一般规则是不要sudo su
。