仅使用sudo权限编辑根写入文件

我们的系统pipe理员使用sudo权限的非特权帐户login到机器。 我经常出于习惯,在vim打开文件而不是sudoedit 。 我不想养成使用sudoedit的习惯。 我的同事build议在指向sudoedit的path中创build一个vim符号链接。 这对我来说似乎是一个可怕的主意。

我通常只是:w /tmp/service.conf然后mv -i /tmp/service.conf /etc/

这似乎笨重,但我几乎倾向于说,我相信这个过程比养成使用sudoeditsudo vim的习惯更多。

意见?

附注:我们通常可以轻松访问这些文件的备份,所以这不是一个问题。

我会继续使用VIM,并为您做好工作。 当你打开一个你没有写权限的文件时,你仍然可以通过在VIM中发布以下内容来保存它: <ESC>:w !sudo tee %

这将允许您执行sudo,并将您的编辑添加到您正在编辑的文件中。 这样做之后,文件在VIM之外被有效地编辑,所以它会要求你加载新的内容。

用sudo.vim ,你可以做vim sudo:path-to-file 。 如果你已经打开一个没有sudo:的文件,你可以这样做:f sudo:%切换到使用sudo来读/写。 (您可能想要:set noro ,以避免当您尝试编辑/写入Vim在第一次打开时认为是只读的文件时出现警告。)

被警告,Alex的解决scheme和sudo.vim都会遭遇shell转义问题。 除非知道文件名是安全的,否则不要使用。

如果您拥有sudo权限,以便您可以以root用户身份运行任何命令, sudoedit实际上并没有带来任何好处。 它的存在使得非特权用户可以安全地被授予编辑某些文件的能力,而不让他们以某种限制模式(这很难得到正确的)作为root来运行整个编辑器。

所以,你的方法看起来不错,尽pipe我想记得键入sudo vim并不是那么糟糕,因为你需要键入sudo whatever以root身份执行其他命令。

注意一下:我想我会担心意外地覆盖另一个文件,因为不小心 – 你不希望对这个问题说“是”,所以很容易陷入这个习惯这样做)比我想要消除你想要编辑的文件。 所以请确保你有一切的备份,以及。

 sudo su - 

如果没有,写一个shell脚本,就像这样。 请注意,如果您想将parameter passing给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 

这可能会做你以后的事情? 您也可以轻松地设置它以创build两个文件副本,并在做出移动之前,警告您是否仍然不相同(意味着有人已经改变了原始文件)