sudo如何在Ubuntu上使用Emacs编辑本地文件?

时间:2015-10-22 07:46:35

标签: linux ubuntu emacs

阅读Open file via SSH and Sudo with Emacs后,我可以通过sudo编辑远程文件 /ssh:username@hostname|sudo:username@hostname:/the-file 但是我不能sudo编辑本地文件,Emacs的tramp会提示密码root@hostname,因为在Ubuntu上没有root密码(参见RootSudo)。

所以有一种方法可以在Ubuntu上编辑本地文件吗?

要点: 如果你想用Emacs编辑远程/本地文件,@ phils有一个很好的答案 Open file via SSH and Sudo with Emacs; 如果您使用了projectile(版本< = 0.12.0)并且无法编辑本地文件(例如Tamp: sending password或挂起),您可以尝试使用以下代码修复我的问题:


  (when (package-installed-p 'projectile)
  (defun projectile-project-root ()
    "Retrieves the root directory of a project if available.
    The current directory is assumed to be the project's root otherwise."
    (let ((dir default-directory))
      (or (--reduce-from
           (or acc
               (let* ((cache-key (format "%s-%s" it dir))
                      (cache-value (gethash cache-key projectile-project-root-cache)))
                 (if cache-value
                     (if (eq cache-value 'no-project-root)
                         nil
                       cache-value)
                   (let ((value (funcall it (file-truename dir))))
                     (puthash cache-key (or value 'no-project-root) projectile-project-root-cache)
                     value))))
           nil
           projectile-project-root-files-functions)
          (if projectile-require-project-root
              (error "You're not in a project")
            default-directory))))
  (projectile-global-mode))

要查看Simple tramp with sudo hangs on 'Sending password'projectile-global-mode prevents new processes from working over TRAMP #523以获取更多信息。

5 个答案:

答案 0 :(得分:4)

完全跳过user@system部分:

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

答案 1 :(得分:1)

如果您在Ubuntu下运行sudo命令,则必须使用自己的密码而不是(不存在的)root密码。

答案 2 :(得分:0)

我认为你要做的是:

ssh username@hostname
sudo emacs /the-file

我无法想到在一条线上做到这一点的方法。您首先需要通过ssh,常规密码连接远程主机,然后sudo编辑该文件。根据来宾操作系统,它会提示您输入sudo的相应密码。

答案 3 :(得分:0)

我打开要编辑的文件(作为普通文件),然后使用此博客文章中的代码(选项A)进行M-x sudo-edit:

http://emacsredux.com/blog/2013/04/21/edit-files-as-root/

将代码粘贴到此处,以防邮件将来消失。

 (defun sudo-edit (&optional arg)
  "Edit currently visited file as root.

With a prefix ARG prompt for a file to visit.
Will also prompt for a file to visit if current
buffer is not visiting a file."
  (interactive "P")
  (if (or arg (not buffer-file-name))
      (find-file (concat "/sudo:root@localhost:"
                         (ido-read-file-name "Find file(as root): ")))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))

答案 4 :(得分:-3)

使用emacs以root用户身份编辑某些本地(在您自己的计算机上)文件/some/path/local.txt只需运行

  sudo emacs /some/path/local.txt

emacs启动后,您无法写入具有root所有权的文件(除非它是组或世界可写的,这通常是一件坏事)。

如果您正确配置了sshd守护程序,可以ssh root@localhost(可能通过Emacs Tramp ...)并使用emacs Tramp等...我不推荐那。在Ubuntu上,您需要创建root用户(或使用uid 0创建myroot用户并使用myroot@localhost)。

您也可以编辑(作为普通用户)/tmp/中的某个文件,例如/tmp/foobar,然后将其复制为root sudo cp -v /tmp/foobar /some/path/for/root/foobar

Emacs Tramp有一些sudosu specific syntax;也许你想要那个......