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 就会终止,您的工作成果就会丢失。
图 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。
图 2. screen 管理 shell 窗口
screen 本身并不 “露面”;它是一个代理,其作用是在它管理的正在运行的可用窗口中做出选择。在任何时候,screen 只能显示一个窗口的输出。
lz@ubuntu:~$screen lz@ubuntu:~$top
一个 Screen 会话正在运行(尽管看不到),窗口 A 处于活动状态,它正在运行系统监视器 top,每隔几秒刷新一次系统性能信息
=========================================================================
图 3中,当与screen的连接断开时,screen 代理仍然存在,它控制的所有窗口也还存在,但是与 screen 的连接临时切断了,这会让用户返回到远程登录 shell。
图 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 的连接,还创建了另外两个窗口(B 和 C)。窗口 A 和 B 继续运行 shell 和所有附属作业,但是只有 C 的输出是可见的。当然,可以在窗口之间切换以监视各个作业的状态。
图 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 代理连接到它的窗口),继续您的工作。
图 5. 可以随意中断与 screen 的连接和重新连接
如果您常常要访问远程服务器以执行维护或开发软件,那么 GNU Screen 是必不可少的工具。
=========================================================================
图6显示可以同时运行多个 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 会话的最佳用法之一。如果允许,可以连接现有的会话并在此会话的任何窗口中与其他用户协作。甚至可以独立地切换到会话中的另一个窗口。如果您与其他用户在同一窗口中,输入或显示的任何内容都会反映给所有伙伴。我们来试一下:
- 选择一台工作计算机并登录。
- 输入
screen -S sharing -t one
创建一个名为 sharing 的 Screen 会话和一个名为 one 的新窗口。 - 用
screen -t two
创建另一个窗口。 - 如果愿意,检查一下目前的状态:按 Ctrl-a,然后按 d,然后输入
screen -list
和screen -r sharing
,然后按 Ctrl-a,然后按"。 - 在 one 窗口中输入
echo
,在此窗口中产生一些输出。 - 在同一台计算机上,打开第二个登录窗口。
- 在此窗口中,输入
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快速标记一个单词等。还可以通过 C
和 c
设 定左右边界以实现矩形拷贝。另外,在这个状态还可以进行文本搜索。关于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的命令行 |
另外要提到的几个常用技巧:
- 重复 escape 键可以在当前窗口与上一个窗口之间迅速切换。例如从窗口1按^Z3切换到窗口3,之后可以按^Z^Z在窗口1和3之间切换。
- 窗口分割的用法:首先按^ZS(S要大写)进行分割,然后用^Z切换到分割出的新屏幕,再用^Z<数字>在新屏幕内切换窗口。结束分割可以用^ZX。
- 翻页:用了screen之后就不能用平常的 Shift-PageUp 和 Shift-PageDown 来翻页。可以按 ^Z[ 进入复制模式,即可利用与 vi 相同的快捷键来翻页查看历史。最后按Esc取消复制模式。