Wednesday, August 10, 2011

LINUX:使用 screen 创建并管理多个Shell窗口

大家平常在linux上开发(通常是开发机或者是测试机)的时候,有没有觉得需要开N多个窗口?a窗口看文件列表,b窗口做代码编辑,c窗口写makefile,d...。每次开始干活的时候都要依次打开这么多窗口,还得进入相应的目录,虽然自动登录和登录后的动作可以部分解决这个问题,但是依然让人不爽。尤其是有的登录处于安全无法完全自动化,而登录后的动作又会经常有所变化。
  使用 GNU Screen 就可以了。screen 可以在一个控制台(如XshellsecureCRT) 登录 shell 中创建和管理多个 shell 窗口。可以从一个 shell 窗口迅速切换到另一个窗口,最重要的是一天的工作完了之后,不必退出这n多shell窗口,而只是将它们detach,然后退出登录,下次登录的时候可以使用screen重新恢复上次连接的多个窗口。可以理解为是一个虚拟的远程主机,假如有一批服务开启了,如果你退出再次登录,他们都还在运行。
  安装就不说了,配置会在后面说,先说下几个简单实用的命令吧,详细的命令man一下吧。

  • screen:第一次使用的时候,输入screen,即新建了一个session,然后默认有一个shell窗口,下面会有状态栏显示窗口的名称,通常是“0 bash”。

  • ctra a + A:假如你想重命名这个窗口,按ctra a,然后A,就可以重命名

  • ctrl a + c:新建窗口

  • screen -t name:新建名字为name的窗口

  • ctrl a + n or p:切换窗口,n next,p previous

  • ctrl a + ":列出所有的窗口,也可以在状态栏观察到

  • screen -S name:新建一个session 名字为name

  • ctra a + d:使得当前的session detached,这个是很重要的一个命令,这个命令使得你临时退出了该session,而下次可以进行重新连接

  • screen -ls:想进行重新连接的时候,你需要知道你的screen session是哪一个,然后使用screen -r id命令,ls列出了所有的screen session的id,当然假如你使用screen -S name创建的session的话,会有一个名字,更便于记忆

  • screen -r id/name:重新连接screen session id/name,即恢复访问你之前打开的诸多窗口

  • exit:退出当前的窗口

  • ctrl a + K:kill当前窗口


  •   这些命令目前对于我来说已经足够了,然后来说说配置,默认的screen的配置是无法在状态栏上显示所有的窗口的,只能显示当前窗口的状态,当然你可以用列表的方式,或者切换来访问其他的窗口。其实可以展示成类似标签的更好的方式,即可以使用状态栏在视觉上进一步区分各个窗口。启动您喜欢的文本编辑器,在主目录中创建包含以下代码的 .screenrc 文件:
    hardstatus on
    hardstatus alwayslastline
    hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a

    然后每个新窗口就会显示在状态栏,包含编号和名称,如“0 econsh”。
      刚刚开始使用screen,虽然只是菜鸟级别,但是确实是个申请神器,因此迫不及待和大家分享一下:)
    参考资料:
    对话 UNIX: 使用 Screen 创建并管理多个 shell
    linux 技巧:使用 screen 管理你的远程会话
    linux下的screen工具配置(针对 string escape)

    No comments:

    Post a Comment