阅读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以获取更多信息。
答案 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有一些sudo
和su
specific syntax;也许你想要那个......