screen nohup disown

引述自:

http://www.gnu.org/software/screen/manual/screen.html

http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

http://www.ibm.com/developerworks/cn/aix/library/au-gnu_screen/

http://gnailuy.com/2011/07/23/gnu-screen%E4%BD%BF%E7%94%A8%E5%85%A5%E9%97%A8/

http://lifegoo.pluskid.org/wiki/Screen.html

screen 可以在SSH登录 shell 中创建和管理多个 shell 窗口。可以从一个 shell 窗口迅速切换到另一个窗口,可以离开正在运行的 shell 并在任何时候重新连接。实际上,screen 提供许多虚拟化的控制台。

图 1 到图 5 展示 screen 的特性和操作。

=========================================================================

看一下 图 1, 这里假设用户已经使用 SSH 登录到一台远程主机。最初,在本地主机上有一个本地 shell 和一个远程 shell。通常,使用远程 shell 在远程主机上运行命令;输出经过加密之后通过 SSH 连接发送到本地 shell(在各张图中,用蓝色表示当前可见的 shell 输出)。如果本地 shell 或远程 shell 或它们之间的连接中断了,远程 shell 就会终止,您的工作成果就会丢失。

典型的 SSH 连接

图 1. 典型的 SSH 连接
ryoma@smartpc:~$ ssh lz@223.3.53.91
lz@223.3.53.91's password: 
Last login: Tue Dec 31 14:24:19 2013 from 223.3.103.47
lz@ubuntu:~$ 

 =========================================================================

图 2 显示在远程主机上启动 screen 之后的情况。screen 程序启动,进而启动一个新的 shell 窗口 A,可以在此窗口中运行命令。A 的输出是可见的(由蓝色表示);这个 shell 的输出经过 screen,再经过远程登录 shell,最后通过 SSH 到达本地登录 shell。

Screen 管理 shell 窗口

图 2. screen 管理 shell 窗口

screen 本身并不 “露面”;它是一个代理,其作用是在它管理的正在运行的可用窗口中做出选择。在任何时候,screen 只能显示一个窗口的输出。

lz@ubuntu:~$screen
lz@ubuntu:~$top
一个 Screen 会话正在运行(尽管看不到),窗口 A 处于活动状态,它正在运行系统监视器 top,每隔几秒刷新一次系统性能信息

=========================================================================

图 3中,当与screen的连接断开时,screen 代理仍然存在,它控制的所有窗口也还存在,但是与 screen 的连接临时切断了,这会让用户返回到远程登录 shell。

可以断开与 Screen 的连接,而它管理的窗口仍然存在

图 3. 可以断开与 screen 的连接,而它管理的窗口仍然存在

为了临时断开与 Screen 会话及其所有窗口的连接,按 ^a,然后按 d(小写的字母 D,代表 “detach”)。^a 是 screen 命令的前缀,d 是用于断开连接的命令。现在处于 图 3 所示的状态。screen 会话和窗口 A 仍然存在。可以通过运行 screen -list 确认这一点:

lz@ubuntu:~$ screen -list
There is a screen on:
    15545.pts-45.ubuntu    (01/18/2014 03:36:09 PM)    (Detached)
1 Socket in /var/run/screen/S-lz.

screen -list 命令显示所有可用的 screen 会话。

编号为 15545 的会话已经断开连接并相应地加上了标志。因为只有一个 screen 会话,所以可以直接用 screen -r 重新连接它。由于运行了 screen,top 会一直运行。

=========================================================================

图 4 显示一种可能出现的情况。已经重新建立了到 screen 的连接,还创建了另外两个窗口(BC)。窗口 A 和 B 继续运行 shell 和所有附属作业,但是只有 C 的输出是可见的。当然,可以在窗口之间切换以监视各个作业的状态。

Screen 可以管理多个窗口

图 4. screen 可以管理多个窗口

按 ^a,然后按 c(小写的字母 C,代表 “create”)创建一个新窗口。接下来,按 ^a,然后再次按 c。现在,screen 会话管理三个窗口。按 ^a,然后在当前窗口中按双引号键("),就可以看到会话中可用窗口的列表:

Num Name          Flags

  0 bash          $
  1 bash          $
  2 bash          $

 在默认情况下,窗口的名称取自它启动的第一个命令(通常是一个 shell)。因此,在上面的列表中有三个 bash 窗口。可以用箭头键在窗口列表中上下移动;只需按回车即可选择窗口。

=========================================================================

图 5 显示中断与 screen 的连接并终止远程登录 shell 的情况。screen 和它的窗口仍然存在。可以重新登录并连接 screen(并通过 screen 代理连接到它的窗口),继续您的工作。

可以随意中断与 Screen 的连接和重新连接

图 5. 可以随意中断与 screen 的连接和重新连接

如果您常常要访问远程服务器以执行维护或开发软件,那么 GNU Screen 是必不可少的工具。

=========================================================================

图6显示可以同时运行多个 screen 会话,每个会话有一组同时运行的窗口,每个 screen 实例跟踪它自己的当前窗口。

Screen 提供多个会话,每个会话有多个窗口

图 6. screen 提供多个会话,每个会话有多个窗口

=========================================================================

终止当前窗口的方法是,在窗口的 shell 提示上输入 exit,或者按键盘快捷键 ^a,然后按 k(小写的字母 K,代表 “kill”)。如果使用后一种方法,那么在窗口底部会出现一个警告,要求您确认要杀死此窗口。按 y(小写的字母 Y,代表 “yes”)确认,或按 n(小写的字母 N,代表 “no”)拒绝。如果杀死一个 Screen 会话中运行的所有窗口,屏幕命令就会输出一个消息并终止:

Really kill this window [y/n]

 

lz@ubuntu:~$ screen -r 15545
[screen is terminating]
lz@ubuntu:~$ screen -list
No Sockets found in /var/run/screen/S-lz

=========================================================================

由于同时运行多个看起来相同的窗口,管理时可能引起混乱。最好能够轻松地区分窗口,而不需要逐一打开每个窗口。如果在断开连接和重新连接之间间隔的时间比较长的话,这种特性尤其有意义。指定窗口名称的方法是,激活窗口,按 ^a A(大写的字母 A,代表 “Annotate”),根据需要按 Backspace 删除现有的名称,然后在提示上输入一个有意义的名称:

  Num Name                    Flags

  0 leisure                    $
  1 vim logfile                $
  2 vim cppfile                $

 

(1)在任何窗口中输入 screen,不带任何参数,就会打开一个新窗口。^a,然后按 c 与输入 screen 的作用相同,差异只是后一种方式通过提供命令行选项立即配置新会话。还有另一种创建窗口的方法,就是在Screen会话的一个Shell窗口中运行screen命令。听起来有点绕,其实就是如果你已经在一个Screen会 话中了,那么再在其中命令screen,不会递归地在其中产生新的Screen会话,而是会在已有的Screen会话中创建一个新的窗口

(2)  可以实用 screen -S name 命令创建一个指定名称的 会话

      可以使用 screen -t name 命令在创建窗口时指定窗口名称。例如,要想创建一个新窗口并把它命名为 debugger,只需进入 Screen 管理的一个窗口,然后输入 screen -t debugger。如果打开窗口列表,其中一个窗口的标签应该是 debugger

      

(3)如果已经断开了与 screen 窗口的连接,可以用 screen -p ID 命令重新连接特定的窗口,其中的 ID 是一个数字或名称。

lz@ubuntu:~$screen -t ghost
lz@ubutnu:~$screen -t new

Num Name                  Flags

  0 leisure               $
  1 vim logfile           $
  2 vim cppfile           $
  3 ghost                 $
  4 new                   $

lz@ubuntu:~$screen -p ghost

(4)可以用 screen -L 命令把每个窗口的输出记录在日志中。每个窗口有自己的日志文件,文件名通常是 ~/screenlog.n,其中的 n 是窗口列表中显示的窗口编号。这个特性对于记录复杂的步骤(比如重新配置系统)非常有帮助。

(5)在 screen 文档中记录了所有快捷键。最有用的组合键包括:按 ^a,然后按 0(数字零)到 9 立即切换到特定的窗口;按 ^a,然后按 C(大写的字母 C,代表 “Clear”)清除一个窗口的内容;按 ^a,然后按 H 启用或禁用日志记录;按^a,然后按^a 在当前窗口和前一个窗口之间来回切换;按^a,然后按^\(反斜杠)杀死所有窗口并终止当前的 Screen 会话。

=========================================================================

共享是 screen 会话的最佳用法之一。如果允许,可以连接现有的会话并在此会话的任何窗口中与其他用户协作。甚至可以独立地切换到会话中的另一个窗口。如果您与其他用户在同一窗口中,输入或显示的任何内容都会反映给所有伙伴。我们来试一下:

  1. 选择一台工作计算机并登录。
  2. 输入 screen -S sharing -t one 创建一个名为 sharing 的 Screen 会话和一个名为 one 的新窗口。
  3. screen -t two 创建另一个窗口。
  4. 如果愿意,检查一下目前的状态:按 Ctrl-a,然后按 d,然后输入 screen -listscreen -r sharing,然后按 Ctrl-a,然后按"
  5. one 窗口中输入 echo,在此窗口中产生一些输出。
  6. 在同一台计算机上,打开第二个登录窗口。
  7. 在此窗口中,输入 screen -x -r sharing -p one-x 选项指定多用户模式;-p one 直接连接到 one 窗口。应该会马上看到与另一个登录会话相同的输出,见下图。

=========================================================================

嵌套的 Screen 会话(禁止如此使用,是一个坏习惯)

在一个嵌套的 screen 会话中卡住是非常容易的。一个常见的情况是:你从一个 screen 会话内启动了一个 ssh 会话,在这个 ssh 会话中,你又启动了 screen。默认地,响应 C-a 命令的是最先启动的外层screen。如果要向内层 screen 输入命令,用 C-a a 加上你的命令。

例如: C-a a d  ===》断开内层 screen 会话

           C-a a K===》杀死内层 screen 会话

=========================================================================

在/home/user/.screenrc文件中加入如下信息,以显示状态栏

hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "

 

消除残余的编辑文本

当你在 screen 内打开文本编辑器再关掉它,文本内容仍然会在终端上显示。要解决这点,将下列内容加入 ~/.screenrc 中:

altscreen on

 

使用 256 色

默认地,screen 使用 8 色终端模拟器。如果你用的是支持 256 色的终端,可以通过如下命令来支持更多的色彩:

term screen-256color

 

关闭欢迎信息

将下面这行加入到 ~/.screenrc

startup_message off

附:
#屏幕缓冲区 1024 行。
defscrollback 1024

 

让标题栏动态显示 urxvt|xterm|aterm 窗口名称

这非常简单,只是将你当前的 hardstatus 栏变成 caption 栏,并编辑对应项:

backtick 1 5 5 true
termcapinfo rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;\007'
hardstatus string "screen (%n: %t)"
caption string "%{= kw}%Y-%m-%d;%c %{= kw}%-Lw%{= kG}%{+b}[%n %t]%{-b}%{= kw}%+Lw%1`"
caption always

 这会在你的终端模拟器标题栏显示 "screen (0 bash)" 之类的内容。标题栏提供日期、当前时间,并给 screen 窗口加上颜色。

 

使用 X 滚动机制

滚动缓存可以用 C-a [ 来查看。但是这很不方便。要使用滚动条,如 xterm 或 konsole,将下面这行加入 ~/.screenrc

termcapinfo xterm* ti@:te@

 

会话锁定和解锁

Screen允许使用快捷键^a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键^a q可以解锁一个会话。

也可以使用^a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。

 

发送命令到Screen会话

在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:

screen -S session_name -X screen ping gnailuy.com

这个命令在一个叫做session_name的Screen会话中创建一个新窗口,并在其中运行ping命令

 

退出Screen会话

除 了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键^a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实^a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,

 

屏幕分割

现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键^a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是^a |。分屏以后,可以使用^a <tab>在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。

可以用^a X快捷键关闭当前焦点所在的屏幕区块,也可以用^a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。

 

复制和粘贴

Screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键^a <Esc>或者^a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使 用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。还可以通过 Cc 设 定左右边界以实现矩形拷贝。另外,在这个状态还可以进行文本搜索。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。

一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在 copy/paste buffer中,并退出copy/paste模式。在正常模式下,可以使用快捷键^a ]将储存在buffer中的内容粘贴到当前窗口。

 

查看各个窗口的历史

使用Screen时,每个虚拟终端的历史输出都会显示在物理终端的回滚缓冲中,因此使用物理终端自带的回滚功能会查看到不同窗口中内容的混杂。 Screen为每个虚拟终端都设有有自己的回滚缓冲,其实在上面提到的copy/paste模式中,就可以查看到一个窗口单独的缓冲。

 

监视窗口中的活动

使用Screen时,可以将编译放在后台窗口,然后在其他窗口进行其他工作。如果编译耗时很长,那么可以使用Screen的监视功能,在编译完成 后,窗口不再活动后,为我们做出提示。可以使用^a _快捷键监视一个窗口,如果这个窗口超过30秒没有任何活动,就为用户做出提示。

相反的,可以使用^a M监视一个窗口,如果这个窗口有活动,为用户做出提示。这个功能可以用于监视IRC频道是否有新的谈话等。

 

Caption 定制

caption 命令可以用于定制显示的 caption ,通过指定 always 参数,可以让 她始终显示,而不仅仅是在分割的时候才显示出来。显示的内容里面可以使用的 特殊命令详细请参见 screen 的 info 文档里面 String Escapes 一节。网 上有一个好像是 FreeWizard@newsmth 的配置,非常不错:

caption always "%?%F%{-b 4w}%:%{-b bb}%? %H | %l | %m-%d %c |%?%F%{-b 4w}%?%L=%-Lw%45>%{-b w4}%n%f* %t%{-}%+Lw%-0<"

显示了时间、系统负荷以及各个窗口的标签等很实用的内容。

-----------------------------------------------------------------------------------------------------------------------------------------

如果你在实验室没有分离一个Screen会话,就无从恢复会话了。这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:

screen -d
screen -r

 或者使用如下命令一次性完成上述Detach+Reattach的工作。:

screen -dRR

-----------------------------------------------------------------------------------------------------------------------------------------

假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个Screen会话,你朋友可以在他的终端上命令:

screen -x

这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又 处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口 中去,那还是可以分别进行不同的操作的。

-----------------------------------------------------------------------------------------------------------------------------------------

 默认情况下,screen接收以^a开始的命令。这种命令形式在screen中叫做键绑定(key binding),^a叫做命令字符(command character)。但默认的^a与vi的增1功能冲突。如果你不幸习惯了^a,那么当你在没有screen的环境下使用vim时,你会在不经意之间按下^a而改变附近的数字。因此最好改成别的键。用的screen快捷键都在左手,因此escape应当放在键盘的左面三列。^Q和^S被终端使用无法绑定,^` screen不支持,^W与vim的切换窗口命令冲突,^D与vim的翻页冲突, ^X与vim的减1功能冲突,^E与vim的滚屏冲突,^C为很常用的中止程序。因此只能用^Z了。^Z用于暂停程序,不常用,可以将其设置为screen的escape键。需要暂停程序时按 ^Z z 即可。(我设定为 ^y, 现在还为发现改建会与哪些快捷键冲突

可以通过^a ?来查看所有的键绑定:

^a ?       显示所有键绑定信息
^a w    显示所有窗口列表
如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:

0$ bash  1$ bash  2$ bash  3-$ bash  4*$ bash

这个例子中我开启了五个窗口,其中*号表示当前位于窗口4,-号表示上一次切换窗口时位于窗口3。

^a ^a      切换到之前显示的窗口
^a c       创建一个新的运行shell的窗口并切换到该窗口
^a n    切换到下一个窗口
^a n or ^a <space>: 按顺序切换到下一个窗口

^a p       切换到前一个窗口(与^a n相对)
^a p or ^a <backspace>: 按顺序切换到上一个窗口

^a 0..9 切换到窗口0..9
^a <number or name>: 切换到第<number>或者名字是<name>的窗口

^a a    发送 ^a到当前窗口
Emacs和bash中,^a快捷键用于回到行首。但是在Screen中,^a就会被Screen吞掉而无法直接发送给Emacs或bash。要在 Emacs或者bash等程序中使用^a,只需要按^a a,这个快捷键把^a本身发送给Screen中运行的程序,避免快捷键的冲突。


^a d    暂时断开screen会话
^a D       暂时断开screen会话,并退出当前终端上的登录
^a k    杀掉当前窗口


^a [ 进入拷贝/回滚模式
用了screen之后就不能用平常的 Shift-PageUp 和 Shift-PageDown 来翻页。可以按 ^a[ 进入复制模式,即可利用与 vi 相同的快捷键来翻页查看历史。最后按Esc取消复制模式。
进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样。

   ^a ]       粘贴文本

 

 

 ^a "       窗口列表
这个快捷键会将所有窗口在单独一个屏幕上列出来,可以使用vi-like的快捷键j和k在窗口之间选择,回车进入所选窗口。

 

^a A       重命名当前窗口
^a S       将当前窗口水平划分为两个区域
^a |       将当前窗口垂直划分为两个区域
^a X       关闭分割出的屏幕
^a <TAB>   将输入焦点转至下一区域
^a Q       关闭当前Screen中除当前窗口的所有窗
^a s       锁定会话
^a x       锁定会话,这样锁定之后,会话会被Screen所属用户的密码保护
^a q       解锁会话
^a :       进入screen的命令行
^a >       write paste buffer to file
^a <       read paste buffer from file

 

因为screen把^a看作是screen命令的开始,所以如果你想要screen窗口接收到^a字符,就要输入^a a。Screen也允许你使用-e选项设置自己的命令字符和转义字符,其格式为:

-exy x为命令字符,y为转义命令字符的字符
下面命令启动的screen会话指定了命令字符为^t,转义^t的字符为t,通过^t ?命令可以看到该变化。
screen -e^tt

也可以通过改变~/.screenrc中的escape键来进行改变,下面将escape键改为y:
escape ^yy

 

 

其他常用的命令选项有:

-c file                             使用配置文件file,而不使用默认的$HOME/.screenrc
-d|-D [pid.tty.host]                不开启新的screen会话,而是断开其他正在运行的screen会话
-h num                              指定历史回滚缓冲区大小为num行
-list|-ls                           列出现有screen会话,格式为pid.tty.host
-d num_or_name                      将指定的screen作业离线
-m                                  即使目前已在作业中的screen作业,仍强制建立新的screen作业
-d -m                            启动一个开始就处于断开模式的会话 -r sessionowner/ [pid.tty.host]  重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限
-S sessionname                   创建screen会话时为会话指定一个名字
-R                                  先试图恢复离线的作业,若找不到离线的作业,即建立新的screen作业
-s shell_name                       指定建立新视窗时,所要执行的shell
-A                                  将所有的窗口都调整为目前终端的大小
-wipe [match]                    同-list,但删掉那些无法连接的会话
-v                                  显示screen版本信息

 

如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:

ryoma@smartpc:~$ screen -ls                                                            
There are screens on:                                                                  
    13768.pts-14.smartpc    (01/18/2014 02:53:37 PM)    (Detached)                     
    7643.pts-14.smartpc (01/18/2014 11:11:02 AM)    (Detached)                     
    2 Sockets in /var/run/screen/S-ryoma.                                              
                                                                                       
ryoma@smartpc:~$ kill -9 7643                                                          
ryoma@smartpc:~$ screen -ls                                                            
There are screens on:                                                                  
    13768.pts-14.smartpc    (01/18/2014 02:53:38 PM)    (Detached)                     
    7643.pts-14.smartpc (01/09/2014 05:33:05 PM)    (Dead ???)                         
Remove dead screens with 'screen -wipe'.                                               
2 Sockets in /var/run/screen/S-ryoma.                                                  
                                                                                       
ryoma@smartpc:~$ screen -wipe                                                          
There are screens on:                                                                  
    13768.pts-14.smartpc    (01/18/2014 02:53:38 PM)    (Detached)                     
    7643.pts-14.smartpc (01/09/2014 05:33:05 PM)    (Removed)                          
1 socket wiped out.                                                                    
1 Socket in /var/run/screen/S-ryoma.                                                   
                                                                                       
ryoma@smartpc:~$ screen -ls                                                            
There is a screen on:                                                                  
    13768.pts-14.smartpc    (01/18/2014 02:53:37 PM)    (Detached)                     
1 Socket in /var/run/screen/S-ryoma.                                                   
                                                                                       
ryoma@smartpc:~$ 

 

-d –m 选项是一对很有意思的搭档。他们启动一个开始就处于断开模式的会话。你可以在随后需要的时候连接上该会话。有时候这是一个很有用的功能,比如我们可以使用它调试后台程序。该选项一个更常用的搭配是:-dmS sessionname

启动一个初始状态断开的screen会话:
ryoma@smartpc:~$screen -dmS mybug gcc test.c
连接该会话:
ryoma@smartpc:~$screen -r mybug

使用C-a A给窗口起名字。使用C-a w可以看到这些窗口名字。

=========================================================================

在screen中创建一个新的窗口有如下方式:

1、直接键入screen命令
ryoma@smartpc:~$screen
screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。

2、screen命令后跟你要执行的程序。
ryoma@smartpc:~$screen vim test.c
screen创建一个执行vim test.c的单窗口会话,退出vim将退出该窗口/会话。

3、以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。

 

重新连接会话:

不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。
例如,我们打开一个screen窗口编辑/tmp/abc文件:
ryoma@smartpc:~$screen vi /tmp/abc
之后我们想暂时退出做点别的事情,那么在screen窗口键入^d,screen会给出detached提示:
半个小时之后回来了,找到该screen会话:
ryoma@smartpc:~$screen -ls
There are screens on:
    13768.pts-14.ubuntu    (01/18/2014 02:53:37 PM)    (Detached)
    7643.pts-14.ubuntu    (01/18/2014 11:11:02 AM)    (Detached)
2 Sockets in /var/run/screen/S-xxxx.
重新连接会话:
ryoma@smartpc:~$screen -r 13768

 

附:

注:这些快捷键都需要在按完 escape 键之后使用。 默认的escape键是 Ctrl-A,上面贴出的 .screenrc 中将其改成了 Ctrl-Z。 例如 d,实际操作时应当按 Ctrl-Z d。

快捷键 功能
d 中断当前会话,下次可以用 screen -r 命令恢复
c 开新窗口
0-9数字 在窗口0-窗口9之间迅速切换
n 下一个窗口
p 上一个窗口
S 分割屏幕
TAB 在分割的屏幕之间切换
X 关闭分割出的屏幕
[ 进入复制模式,用hjkl移动光标,空格选中开始点,再次按空格选择结束点,进行复制
] 粘贴
? 帮助
: 进入screen的命令行

另外要提到的几个常用技巧

  1. 重复 escape 键可以在当前窗口与上一个窗口之间迅速切换。例如从窗口1按^Z3切换到窗口3,之后可以按^Z^Z在窗口1和3之间切换。
  2. 窗口分割的用法:首先按^ZS(S要大写)进行分割,然后用^Z切换到分割出的新屏幕,再用^Z<数字>在新屏幕内切换窗口。结束分割可以用^ZX。
  3. 翻页:用了screen之后就不能用平常的 Shift-PageUp 和 Shift-PageDown 来翻页。可以按 ^Z[ 进入复制模式,即可利用与 vi 相同的快捷键来翻页查看历史。最后按Esc取消复制模式。

posted on 2014-01-18 14:43  阿加  阅读(476)  评论(0编辑  收藏  举报

导航