登录到vi,进行了更改,先忘记了sudo-现在做什么


11

我使用vi编辑器对Ubuntu Linux计算机上的配置文件进行了长时间的更改。不幸的是,我首先忘记了sudo,所以现在我在编辑器中,但是由于缺少权限而无法保存更改。我可以在该终端上追溯用户sudo,还是采取最佳措施?


Answers:


11

在这种情况下,我用编写文件:w /tmp/tmpfile。然后我出去并/tmp/tmpfile使用sudo权限移到我的旧文件。


这就是我最终要做的,但是我喜欢wfaulk的回答 ..如果我下次只能记住它的话!:)
嘎嘎吉x德

我希望您复制文件而不是移动它。移动将替换为vi默认的文件模式(权限)(可能为666,并与“ umask”的倒数进行“与”运算),并用您的UID替换文件的所有者(它是“ root”,不是吗?),并断开硬链接。
斯科特(Scott)

有两个问题:(1)如果文件应该是机密的,并且您的“ umask”为22(而不是66),则此过程会将文件的内容公开给可能正在监视/tmp目录的其他用户。(2)如果您的系统上确实有邪恶的用户,那么/tmp/tmpfile在您编写(从中vi)和通过正在编辑的系统配置文件复制它之间,他们可以替换您。将临时文件放到只有您可以访问的目录中比较安全。
斯科特

40

SO

:w !sudo tee %

我实际上发现自己现在使用这种方式更频繁地执行此操作:

:%!sudo tee %

我认为这样做更直观,因为我知道该怎么:%!做,而我对此没有内在的了解:w !。另外,很容易错过w和之间的重要位置!


3
如果对您的直觉有帮助,请记住vi命令可以是多个字母,因此理论上可以有一个“ wfoo”命令,因此,如果要写入名为“ foo” 的文件,则必须说“ :w foo”。即,您需要在“ :w” 之后加一个空格。就“ :w !”而言,您知道“ :!”是吗?“ :!date”运行“ date”命令。因此,“ :w !xyz”将缓冲区写入命令,而不是写入文件。
斯科特

应该将其作为可接受的答案,因为当前现有的答案是一个相当长的解决方法,而这是一个立即的解决方案。OP?
bschlueter

@Scott感谢您的解释!什么是发球台%
CodyBugstein

@CodyBugstein:您好。(1)由于人们有时会离开而再也不会回来,因此对六岁评论的作者进行平信常常无济于事。但是我被拴在电脑上了。我可能会永远在这里。(或者也许不是。)(2)您是否尝试过进行研究?在“ tee”上查找信息应该很容易。(% 可能会更难。)(3)好,我会帮你的忙。  tee是一个程序,可让您将信息写入多个位置。例如,date | tee cody将当前日期和时间写入名为cody …(续)的文件
斯科特

(续)…以及终端屏幕。  date | tee cody > bugstein会将当前日期和时间写入名为的文件cody以及名为的文件bugstein。—你明白sudo吗?它使您可以使用其他用户(通常是root)的特权运行命令。例如,ls /root通常会失败,因为您无权访问  /root。但是sudo ls /root会起作用。— Unix的工作方式的不幸副作用是,该sudo ls /root > /root/cody失败将失败,因为您无权访问  /root,因此无法写入/root/cody。…(续)
斯科特

-2

您不能打开另一个终端并临时更改文件的访问权限吗?


1
这是一个坏主意。大概不会永远是一个很大的安全问题,但它可能是,有更好和更简单的解决方案(如写入到一个临时文件,或者更好的:w !sudo tee % solutionwfaulk贴
DBR
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.