我一直在使用emacs tramp进行一些远程开发,发现它很慢。每次保存文件时,大约需要10秒钟才能完成保存。所以,现在我正在使用rsync远程传输文件,而且工作速度更快,这需要大约一秒的时间,而且emacs的本地保存是即时的。在tramp中是否有任何配置选项使其运行速度与rsync在命令行上的速度一样快?即使我看到如此糟糕的表现,使用tramp而不是rsync有没有好处?使用emacs tramp与rsync进行远程开发
回答
如果您使用的是SSH/SCP功能流浪汉,你会发现开启了一个永久的SSH连接将流浪汉行动快很多:他们会重新使用现有的连接,而不是创建一个新的每次切割在不影响安全性的情况下减少大量的加密开销。请参阅关于SSH ControlMaster功能的文章。
你知道在gnu.org流浪汉文档中的一节提到使用rsync的?它说,在部分:
5.3外部转移方法
外部转移方法通过多种渠道操作,使用于许多操作的 远程外壳连接,同时委托文件 传输到外部传输工具。
这节省了编码和解码的多路复用通过所述一个连接 传送具有与内联方法的开销。
...
rsync的 - SSH和rsync 使用ssh命令安全地连接到远程计算机和 rsync命令来传输文件是几乎相同的SCP方法。
While rsync performs much better than scp when transferring files that exist on both hosts, this advantage is lost if the file exists only on one side of the connection. The rsync based method may be considerably faster than the rcp based methods when writing to the remote system. Reading files to the local machine is no faster than with a direct copy. This method supports the ‘-p’ hack.
虽然流浪汉可以配置为使用大量的运输方法,我想你使用ssh连接到远程服务器。
相信大多数需要完成操作的时间来自建立连接和认证。如果您使用的是足够新的OpenSSH版本,可以通过使用连接共享功能来获得帮助,请参阅ssh_config(5)中的ControlMaster。
我建议你尝试
ControlMaster auto
,看看是否能改善这种情况。
既然你刚才说,你有一个特定的服务器上的问题,检查问题的机器上sshd的配置文件。它可能类似于/ etc/ssh/sshd_config。
查找名为“UseDNS”的配置选项。将其设置为“否”
看看这是否会加快你的速度。如果是这样,那么ssh可能会超时等待反向dns查找,你可能不关心。
最近,我来拥抱SSHFS让远程文件是在本地编辑。适用于Linux,Mac和Unix系统,并将ssh部分放在一个命令中,而不是每次访问。并完全存在于用户空间中。
对我来说加速是显着的!现在使用流浪汉真的很愉快。我也比sshfs更喜欢它,因为我也从emacs中编译,tramp为我编译远程编译并解释编译器的错误消息:)
如果您使用ssh方法,则可以尝试sftp方法,(我相信)打开一个持久的sftp连接到远程ssh服务器。另外,如果您使用GNOME,则可以将sftp
添加到tramp-gvfs-methods
以使TRAMP使用GNOME的GVFS连接到sftp服务器,这可能会也可能不会更快/更方便。
几个答案都提到使ControlMaster保持持续 ssh连接开放(避免了昂贵的连接建立/手发抖,否则需要通过ssh每个流浪汉操作),但你不不需要在Emacs之外配置任何东西来使用它 - 如果你看一下tramp-methods
变量,你会看到现有的方法可以启用ControlMaster。
具体来说,就是rsyncc
和scpc
的方法。
连接的两端都需要支持ControlMaster,当然(例如Cygwin不能这样做,这对于Windows用户*来说是一种耻辱),但是我建议将其中的一个设置为您的tramp-default-method
。
没有持久连接会导致扩展Tramp的使用非常痛苦,但是使用它非常有用,(在给定相当快的连接的情况下,几乎可以忘记它正在发生)。
在回答你的问题的最后部分,是的,有很好的理由使用Tramp而不是手动rsyncing文件。主要的一点是shell命令可以直接在远程服务器上执行,并且您甚至不必考虑它,因为Emacs负责处理细节。
例如,从远程文件缓冲器,的Mxshell
RET打开远程服务器上的外壳,并命令等的Mxrgrep
RET和的Mxfind-grep-dired
RET将运行在远程服务器上查找+ grep。我相信这通常适用于调用shell命令的函数。
对我来说,这是绰绰有余的理由来使用Tramp(除非在远程服务器上安装Emacs并使用本地显示器是一种选择,在这种情况下,对于长期使用,我会考虑这样做)。
(*)当使用Windows我曾经在本地建立一个Linux虚拟机并运行里面那个Emacs的(使用Cygwin提供的X显示)为唯一原因使用ControlMaster为流氓(https://stackoverflow.com/a/3049375/324105)的。
- 1. emacs,tramp,rsync,MS Windows
- 2. 通过网关使用Emacs和Tramp访问远程主机
- 3. 使用Xcode进行远程开发?
- 4. Drupal:使用Eclipse进行远程开发
- 5. Emacs + tramp + plink
- 6. rsync与ssh远程备份
- 7. Emacs Tramp - 如何使用Tramp作为另一个用户在远程主机中编辑文件?
- 8. rsync远程站点与bash
- 9. TRAMP忽略流浪汉远程路径
- 10. 使用Tomcat和Eclipse进行远程开发工作流程
- 11. 通过远程桌面进行开发
- 12. 带有Tramp模式的Emacs
- 13. 使用rsync远程的Mac机
- 14. 使用Emacs代替Eclipse进行Android开发有什么好处?
- 15. 是否值得学习使用Emacs进行Web开发
- 16. 使用Emacs进行Web开发? (Php/mysql/javascript/css/html
- 17. 使用emacs进行java编程
- 18. 使用Mac进行开发
- 19. Emacs远程shell
- 20. 使用gsutil进行rsync时公开文件
- 21. 使用Python远程运行进程
- 22. 用Eclipse远程开发
- 23. Emacs桌面不记得TRAMP连接?
- 24. Emacs tramp模式编辑中的密码
- 25. XP上的Emacs,tramp,plink问题
- 26. Windows上的Emacs Tramp w/pscp/plink
- 27. 在Windows上使用plink时,如何更改TRAMP在Emacs中发送的命令?
- 28. 对位于远程机器上的文件进行Java开发
- 29. 如何使用Emacs通过HTTP打开远程文件?
- 30. 在Emacs中可以使用带TRAMP的Ropemacs吗?
它仍然需要大约10秒,但我能够立即连接到其他服务器。我想知道这是否会成为服务器问题。 – 2008-09-30 04:30:12
如果它仍然需要10秒钟,它可能是远程计算机上的.bashrc/.bash_profile导致延迟。 – 2013-02-20 22:31:38