分类:
2010-03-31 14:02:50
screen
功能说明:
使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的
session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端
的应用。
语 法:
screen
[-AmRvx -ls -wipe][-d <作业名称>][-h
<行数>][-r
<作业名称>][-s
][-S
<作业名称>]
补充说明:
screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。
参 数:
-A
将所有的视窗都调整为目前终端机的大小。
-d
<作业名称>
将指定的screen作业离线。
-h
<行数>
指定视窗的缓冲区行数。
-m
即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r
<作业名称>
恢复离线的screen作业。
-R
先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s
指定建立新视窗时,所要执行的shell。
-S
<作业名称>
指定screen作业的名称。
-v
显示版本信息。
-x
恢复之前离线的screen作业。
-ls或--list
显示目前所有的screen作业。
-wipe
检查目前所有的screen作业,并删除已经无法使用的screen作业。
常用screen参数:
screen
-S yourname -> 新建一个叫yourname的session
screen
-ls -> 列出当前所有的session
screen
-r yourname -> 回到yourname这个session
screen
-d yourname -> 远程detach某个session
screen
-d -r yourname -> 结束当前session并回到yourname这个session
在每个screen
session 下,所有命令都以
ctrl+a(C-a)
开始。
C-a
? -> Help,显示简单说明
C-a
c -> Create,开启新的 window
C-a
n -> Next,切换到下个 window
C-a p -> Previous,前一个
window
C-a 0..9 -> 切换到第
0..9 个window
Ctrl+a
[Space] -> 由視窗0循序換到視窗9
C-a
C-a -> 在两个最近使用的
window 间切换
C-a x -> 锁住当前的
window,需用用户密码解锁
C-a
d -> detach,暂时离开当前session,将目前的
screen session (可能含有多个
windows) 丢到后台执行,并会回到还没进
screen 时的状态,此时在
screen session 里
每个 window 内运行的
process (无论是前台/后台)都在继续执行,即使
logout 也不影响。
C-a z ->
把当前session放到后台执行,用
shell 的
fg 命令則可回去。
C-a
w -> Windows,列出已开启的
windows 有那些
C-a t -> Time,显示当前时间,和系统的
load
C-a K -> kill
window,强行关闭当前的 window
screen简单配置:
版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接以及本声明。
Linux的screen命令不错,习惯了你会觉得它比windows的任务栏好用多了。下面是我的.screenrc,仅供参考。
#
#
~/.screenrc
#
# 启动时不显示欢迎屏幕
startup_message
off
# 定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按
Ctrl-Z z。
escape
^Zz
# 屏幕缓冲区 1024
行。
defscrollback 1024
#
在最下一行显示窗口列表和时钟
hardstatus
on
hardstatus alwayslastline
hardstatus string
"%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d
%c:%s "
# 关闭错误提示
vbell
off
# 按 Ctrl-Z w 或
Ctrl-Z Ctrl-W 显示窗口列表
bind
w windowlist -b
bind ^w windowlist -b常用快捷键
注:这些快捷键都需要在按完
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
翻页:用了screen之后就不能用平常的 Shift-PageUp 和 Shift-PageDown 来翻页。可以按 ^Z[ 进入复制模式,即可利用与 vi 相同的快捷键来翻页查看历史。最后按Esc取消复制模式。
关于 escape
键的选择:
默认的Ctrl-A与vi的增1功能冲突。如果你不幸习惯了Ctrl-A,那么当你在没有screen的环境下使用vim时,你会在不经意之间按下Ctrl-A而改变附近的数字。因此最好改成别的键。
常用的screen快捷键都在左手,因此escape应当放在键盘的左面三列。Ctrl-Q和Ctrl-S被终端使用无法绑定,Ctrl-`
screen不支持,Ctrl-W与vim的切换窗口命令冲突,Ctrl-D与vim的翻页冲突,
Ctrl-X与vim的减1功能冲突,Ctrl-E与vim的滚屏冲突,Ctrl-C为很常用的中止程序。因此只能用Ctrl-Z了。Ctrl-Z用于暂
停程序,不常用,可以将其设置为screen的escape键。需要暂停程序时按
Ctrl-Z z 即可。
++++++=++++++++++++++++++++++++++++++++++++++++++++++++++++++++
From:http://blog.chinaunix.net/u/28387/showart_319332.html
很多时候我们会遇到这样的情况,一个任务需要运行很长时间,例如编译某个庞大的软件包,或者运行更新软件包如:apt-get
upgrade
等等。没当这个时候,我们被迫一直开启一个ssh客户端的链接,以便观察任务执行的状态、进行下一步操作等等。如果这个时候你的PC机需要关机或者重启,
那么对于我们来说可能是个很痛苦的选择,因为一旦ssh连接断开后,想了解任务执行的情况就非常困难了!
这就是我今天向大家推荐
Screen这个软件包的原因,这个软件包可以说是一个虚拟shell环境工具。你可以在你登录到服务器之后,用这个工具创建一个虚拟的shell环境,
在这个环境中工作,可以完全不用考虑断开连接对你的影响。下面我介绍一下Screen的基本使用方法。
首先是安装。大部分的发行版中都默认安装了这个包,检验你的系统中是否有这个包,可以敲命令:
screen
-list
如果你的系统中有这个包,将会输出:
No
Sockets found in /tmp/screens/S-root.
如果没有这个包,那么输出可能是:
-bash:
screen: command not found
如果没有这个包的话,可以自行安装:
如果你使用APT软件包管理工具:apt-get
install screen
如果你使用yum软件包管理工具:yum
install
screen
你也可以到Screen的官方网站去下载软件包,地址是:
安装了Screen之后,你就可以享受他给你带来的方便了。
首先,用你的ssh客户端登录你的服务器。在提示符(#或者$)下输入:
screen
-S MyScr
(其中“MyScr”是你为这个虚拟shell环境起的名字,可以自定义)
输入回车之后,你就可以在这个虚拟的shell环境中工作了,你工作的内容都会被一直保留下来。试试吧,在里面敲几个命令,运行几个程序,和平常没有两样吧~~
如果想要退出要怎么办呢?只要按下Ctrl+A,然后按d,就可以退出刚刚建立的虚拟shell环境了(名字是MyScr)
若干时间后,你又想继续刚才的工作了,只要再敲:
screen
-r
MyScr
就可以看到刚刚的界面了。怎么样,还是很简单适用的吧,呵呵。
当然,你不给这个虚拟shell环境命名也是没问题的,如果只有一个虚拟环境的话,也可以这样用
screen(回车)
工作……退出……
screen
-r
继续工作
系统还会默认用PID号码表识screen虚拟的shell环境。
例如,我直接用screen命令建立了一个虚拟环境,退出之后,我想查看虚拟环境的情况:
screen
-list
输出应该是类似下面的:
There
is a screen on:
25202.pts-1.firewallX (Detached)
1
Socket in
/tmp/screens/S-root.
其中:
“25202”是这个虚拟环境的PID。不信的话,可以ps查看一下,呵呵~
“pts-1”是说你的ssh客户端登录的系统端口号是pts-1
“firewallX”是我这台主机的名字
如果你建立了很多虚拟环境,又没有为他们命名的话,就只能用PID来识别他们了。(记住这个PID号码太烦了吧,还是名字好!)
例如,我现在有两个screen建立的虚拟环境,我输入:
screen
-list
输出为:
There
are screens on:
25202.pts-1.firewallX (Detached)
25403.pts-1.firewallX (Detached)
2
Sockets in
/tmp/screens/S-root.
那么,我如果想进入第二个虚拟环境的话,我可以用什么命令呢?答案如下:
screen
-r 25403
如果我登录进去之后,用ctrl-a
c:再创建一个新的虚拟Shell环境,那么这个环境就是在PID为25403的虚拟环境里面的子虚拟环境。
参考资料:
(其中一些命令可能已经改变了功能)
Linux操作系统下Screen命令的简单使用方法
有时候我们经常需要登录远程服务器运行一些程序,如果这些程序需要运行很长时间(几个小时),而程序运行过程中出现网络故障,或者客户机故障,这时候客户机与远程服务器的链接将终端,并且远程服务器没有正常结束的命令将被迫终止。
解决此问题的最简单的方法是nohup,但是nohup也有很多的问题,有了screen,这一切便都迎刃而解了。
screen其实就是linux虚拟终端,你可以用它创建很多虚拟终端,每个终端可以创建1~10个窗口,每个窗口相当于一个linux
shell窗口,可以执行的操作和正常shell完全一样。
【终端操作】
(需要在物理shell中操作)
screen:创建一个虚拟终端并且登录之
screen
-ls:列出当前所有虚拟终端
screen
[-d] -r sessionid:进入指定的虚拟终端
【终端中的窗口操作】(挂载某个终端)
Ctrl+a c :创建窗口
Ctrl+a
w :窗口列表
Ctrl+a n
:下一个窗口
Ctrl+a
p :上一个窗口
Ctrl+a
0-9 :在第0个窗口和第9个窗口之间切换
Ctrl+a
K(大写)
:关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
exit
:关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
Ctrl+a
d :退出当前终端,返回加载screen前的shell命令状态
如何关闭一个终端?
如果需要关闭一个终端,可以先进入此终端,然后将所有窗口关闭,当所有窗口都关闭的时候,终端自动关闭,并且出现“[screen
is terminating]”。
【友情提醒】
使用screen创建的虚拟终端虽然实用上大大提高工作的安全性,但是,如果终端创建得太多,很容易让人找不到原来的程序在哪个终端中的哪个窗口中执行,令人迷惑,所以,终端的数目不宜创建过多,并且要时刻记住您程序所运行的具体终端、窗口。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
用screen
-ls可以看所有的screen
sessions
用screen -r
sessionid可以进sessionid指定的特定的screen
session
最后
screen
session不再使用的时候
screen
-r sessionid进去
exit退出即可
Unix/Linux 工具:
Screen 命令使用
screen使用
使用screen非常简易.只需在SHELL键入screen,便可打开一个screen
session。
而在每个screen
session 下,所有命令都以 ctrl+a
(C-a) 开始。现在让我来简单介绍基本的命令C-a
c -> Create,开启新的 window
C-a
n -> Next,切换到下个
window
C-a p -> Previous,前一个
window
more..
less.. C-a C-a -> Other,在两个
window 间切换
C-a w
-> Windows,列出已开启的
windows 有那些
C-a 0
-> 切换到第 0 个
window
C-a 1..9 -> 切换到第
1..9 个windowC-a a ->
发出 C-a,在
emacs, ve, bash, tcsh 下可移到行首C-a
t -> Time,显示当前时间,和系统的
load
C-a K(大写) ->
kill window,强行关闭当前的
windowC-a [ -> 进入 copy
mode,在 copy mode
下可以回滚、搜索、
复制就像用使用
vi 一样C-b
Backward,PageUp
C-f
Forward,PageDown
H(大写)
High,将光标移至左上角
L
Low,将光标移至左下角
0
移到行首
$ 行末
w
forward one word,以字为单位往前移
b
backward one word,以字为单位往后移
Space
第一次按为标记区起点,第二次按为终点
Esc
结束 copy mode
C-a ] ->
Paste,把刚刚在 copy mode
选定的内容贴上C-a ? ->
Help,显示简单说明C-a d ->
detach,将目前的 screen
session (可能含有多个 windows)
丢
到后台执行 当按了 C-a d 把
screen session detach 掉后,会回到还没进
screen 时的状态,此时在
screen session 里每个 window
内运行的 process
(无论是前台/后台)都在继续执行,即使
logout 也不影响。 下次
login 进来时:screen -ls
-> 显示所有的 screen
sessions
screen -r [keyword] -> 选择一个screen
session 恢复对话若 screen
-ls 里有 Attached
sessions:
screen -d [keyword] -> 强制
detach,以便「接手」过来
实例