在Emacs中使用su/sudo打开一个文件

Chr*_*way 171 emacs sudo file-permissions

假设我想使用su或在现有的Emacs会话中打开一个文件sudo,而不是直接转到shell并执行sudoeditsudo emacs.一种方法是

C-x C-f /sudo::/path/to/file
Run Code Online (Sandbox Code Playgroud)

但这需要通过SSH进行昂贵的往返.有更直接的方式吗?

[编辑] @JBB是对的.我希望能够调用su/ sudo保存以及打开.在保存时重新授权是可以的(但不是理想的).我正在寻找的是变化find-file,并save-buffer认为可能是"管道"通过su/ sudo.

EfF*_*ort 62

Tramp的优点在于,当您打开第一个文件时,您只需为SSH的往返付费.然后Sudo缓存您的凭据,Emacs保存一个句柄,以便后续的sudo打开的文件花费更少的时间.

我还没有找到节省负担所需的额外时间.它足够快,IMO.

  • Tramp不会**通过SSH往返,它使用*subshel​​l*. (20认同)
  • 等一下......缓存有多久会过期? (3认同)

Ted*_*ddy 62

流浪汉确实不是往返须藤通过SSH,它使用一个子shell.请参阅手册:https://www.gnu.org/software/tramp/#Inline-methods

因此,我建议您坚持使用TRAMP.


Qud*_*dit 17

如果使用helm,helm-find-files支持以root身份打开文件C-c r.


Bur*_*rad 15

这不是原始问题的答案,但是这里有一个辅助函数可以使tramp/sudo路径更容易:

(defun sudo-find-file (file-name)
  "Like find file, but opens the file as root."
  (interactive "FSudo Find File: ")
  (let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
    (find-file tramp-file-name)))


jfm*_*fm3 5

您的示例根本不会启动 ssh,至少在我的 TRAMP 版本(“2.1.13-pre”)中不会启动。查找文件和保存缓冲区都工作得很好。


hui*_*ker 5

至少为了节省,一个sudo-save包就是针对那种问题编写的.