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

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

Open a file with su/sudo inside Emacs

假设我想使用susudo在现有的Emacs会话中打开文件,而无需下拉至shell并执行sudoeditsudo emacs。 一种方法是

1
C-x C-f /sudo::/path/to/file

但这需要通过SSH进行昂贵的往返。 有没有更直接的方法?

[编辑] @JBB是正确的。 我希望能够调用su / sudo保存并打开。 保存时重新授权是可以的(但不理想)。 我正在寻找的是find-filesave-buffer的变体,可以通过su / sudo进行"管道传输"。


Tramp的好处是,您打开第一个文件时只需为往返SSH付费。然后,Sudo会缓存您的凭据,而Emacs将保存一个句柄,以便随后的sudo打开的文件花费的时间要少得多。

我也没有发现节省负担的额外时间。 IMO,速度足够快。


Tramp不会通过SSH来回传递sudo,它使用了一个subshel??l。请参阅手册:https://www.gnu.org/software/tramp/#Inline-methods

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


如果使用helm,则helm-find-files支持使用C-c r作为根文件打开文件。


这并不是对原始问题的真正答案,但是这里有一个帮助函数,可以使流浪汉/苏多路线的工作变得更加轻松:

1
2
3
4
5
(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)))

至少为了节省,为这种问题编写了一个sudo-save软件包。


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


我建议您使用建议命令。将此功能放在?/ .emacs中

1
2
3
4
5
(defadvice ido-find-file (after find-file-sudo activate)
 "Find file as root if necessary."
  (unless (and buffer-file-name
               (file-writable-p buffer-file-name))
    (find-alternate-file (concat"/sudo:root@localhost:" buffer-file-name))))

(仅在本地工作。需要更新以通过流浪汉正确工作)

伯顿的回答有点扩展:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(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)))


(add-hook 'dired-mode-hook
    (lambda ()
      ;; open current file as sudo
      (local-set-key (kbd"C-x <M-S-return>") (lambda()
        (interactive)
        (message"!!! SUDO opening %s" (dired-file-name-at-point))
        (sudo-find-file (dired-file-name-at-point))
      ))
    )
)

啊。也许您可以在Emacs和exec sudo emacs中打开一个shell。

问题是您大概不只是想要打开文件。您希望以后可以保存它。因此,您需要您的root privs持久存在,而不仅仅是存在于打开文件的过程中。

听起来您想让Emacs成为您的窗口管理器。没有它,它已经肿了。 :)


推荐阅读

    linux执行多次命令?

    linux执行多次命令?,系统,信息,标准,工作,情况,命令,周期性,服务,代码,时间,l

    linux并行化执行命令?

    linux并行化执行命令?,系统,工具,信息,命令,名称,网络,管理,首页,服务,暂停,L

    如何执行linux命令?

    如何执行linux命令?,单位,系统,网络,信息,权威,命令,文件,音乐,目录,选项,mv

    linux打断执行的命令?

    linux打断执行的命令?,系统,状态,网站,标准,通用,客服,人员,名字,网络,暂停,L

    linux命令没执行完?

    linux命令没执行完?,系统,设备,工具,情况,密码,状态,电脑,管理,材料,服务,Lin

    shell中执行linux命令?

    shell中执行linux命令?,系统,名称,环境,管理,工作,代码,技术,软件,经理,基础

    linux打印命令执行?

    linux打印命令执行?,信息,系统,工具,服务,命令,发行,基础,位置,设备,时间,怎

    linux执行两次命令?

    linux执行两次命令?,系统,信息,连续,名称,命令,初级,首页,工具,管理,终端,lin

    linux命令执行安装?

    linux命令执行安装?,软件,系统,管理,网站,官网,市场,中心,最新,灵活,工作,如

    linux执行一条新命令?

    linux执行一条新命令?,系统,工作,命令,管理,网络,服务,信息,目录,路径,脚本,L

    监控linux执行命令?

    监控linux执行命令?,系统,情况,数据,实时,网络,信息,状态,时间,设备,命令,如

    linux命令卡死不执行?

    linux命令卡死不执行?,系统,设备,数据,密码,工具,情况,软件,环境,分析,命令,l

    linux执行c程序命令?

    linux执行c程序命令?,系统,工作,工具,信息,代码,命令,文件,保险,管理,环境,li

    linux命令执行中断?

    linux命令执行中断?,设备,系统,网络,工具,工作,通用,状态,名字,流程,进程,lin

    执行linux脚本命令行?

    执行linux脚本命令行?,工具,位置,地方,环境,数据,状态,暂停,增长,系统,基础,

    linux远端执行命令?

    linux远端执行命令?,系统,状态,软件,名称,密码,暂停,网络,环境,认证,在线,如

    linux命令行执行成功?

    linux命令行执行成功?,系统,信息,状态,服务,管理,百度,设计,灵活,代码,命令,L

    安卓执行linux命令行?

    安卓执行linux命令行?,系统,设备,基础,发展,标准,情况,信息,电话,号码,工具,

    c执行在linux命令?

    c执行在linux命令?,系统,环境,保险,工具,代码,命令,程序,文件,终端,语言,如何

    linux打开文件夹命令?

    linux打开文件夹命令?,工作,系统,信息,命令,图片,文件,管理,发行,名字,名称,