我们的系统管理员使用具有 sudo 权限的非特权帐户登录到计算机。出于习惯,我经常在vim
而不是中打开文件sudoedit
。我不想养成使用 的习惯sudoedit
。我的同事建议vim
在指向 的路径中创建一个符号链接sudoedit
。这对我来说似乎是一个糟糕的主意。
我通常只是:w /tmp/service.conf
然后mv -i /tmp/service.conf /etc/
sudoedit
这看起来很笨重,但我几乎倾向于说,与养成使用或的习惯相比,我更信任这个过程sudo vim
。
有什么看法?
边注:我们通常可以轻松访问这些文件的备份,因此这不是一个问题。
答案1
我将继续使用 VIM,让它为您完成工作。当您打开没有写入权限的文件时,您仍然可以通过在 VIM 中发出以下命令来保存它:
<ESC>:w !sudo tee %
这将允许您执行 sudo,并将您的编辑内容发送到您当前正在编辑的文件中。执行此操作后,该文件实际上是在 VIM 之外编辑的,因此它会要求您加载新内容。
答案2
和vim 命令,您可以执行vim sudo:path-to-file
。如果您已经在没有 的情况下打开了一个文件sudo:
,您可以执行:f sudo:%
切换到使用sudo
进行读/写。(您可能:set noro
也想这样做,以避免在您尝试编辑/写入 Vim 在第一次打开时认为是只读的文件时出现警告。)
请注意,Alex 的:w !sudo tee %
解决方案和 sudo.vim 都存在 shell 转义问题。除非您知道文件名是安全的,否则请不要使用。
答案3
如果您拥有 sudo 权限,可以以 root 身份运行任何命令,这sudoedit
实际上并没有什么好处。它的存在是为了使原本没有特权的用户能够安全地编辑某些文件,而不必让他们以某种受限模式(很难做到)以 root 身份运行整个编辑器。
因此,您的方法似乎不错,尽管我认为记住输入sudo vim
并不是那么糟糕,因为您需要输入sudo whatever
才能以 root 身份执行其他命令。
附注:我认为我更担心意外覆盖另一个文件(-i
尽管如此 — — 你希望对这个问题回答“是”,所以很容易养成这样做的习惯),而不是弄乱你打算编辑的文件。因此,请确保你也备份了所有其他文件。
答案4
sudo su -
如果做不到这一点,请编写一个 shell 脚本,如下所示。请注意,如果您想将参数传递到 vim,它将中断(您可以扩展它以使其工作,但它更像是一个 PoC)
#!/bin/sh
# Pretend to be vim, write to /tmp then sudo copy to original file
$TMPFILE = $(mktemp)
cp $1 $TMPFILE
vim $TMPFILE
sudo mv -i $TMPFILE $1
这可能就是你想要的?你也可以轻松地将其设置为创建文件的两个副本,并在移动之前警告你它们是否仍然不相同(这意味着有人已经更改了原始文件)