Chinaunix首页 | 论坛 | 博客
  • 博客访问: 308077
  • 博文数量: 120
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 1290
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-19 01:46
文章分类

全部博文(120)

文章存档

2010年(84)

2009年(36)

我的朋友

分类:

2010-03-31 14:02:50

screen


功能说明:

使用
telnetSSH远程登录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 -> 新建一个叫
yournamesession
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、原始链接以及本声明。


Linuxscreen命令不错,习惯了你会觉得它比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在窗口13之间切换。

  • 窗口分割的用法:首先按^ZSS要大写)进行分割,然后用^Z切换到分割出的新屏幕,再用^Z<数字>在新屏幕内切换窗口。结束分割可以用^ZX

  • 翻页:用了screen之后就不能用平常的 Shift-PageUp Shift-PageDown 来翻页。可以按 ^Z[ 进入复制模式,即可利用与 vi 相同的快捷键来翻页查看历史。最后按Esc取消复制模式。

关于 escape 键的选择
默认的Ctrl-Avi的增1功能冲突。如果你不幸习惯了Ctrl-A,那么当你在没有screen的环境下使用vim时,你会在不经意之间按下Ctrl-A而改变附近的数字。因此最好改成别的键。
常用的screen快捷键都在左手,因此escape应当放在键盘的左面三列。Ctrl-QCtrl-S被终端使用无法绑定,Ctrl-` screen不支持,Ctrl-Wvim的切换窗口命令冲突,Ctrl-Dvim的翻页冲突, Ctrl-Xvim的减1功能冲突,Ctrl-Evim的滚屏冲突,Ctrl-C为很常用的中止程序。因此只能用Ctrl-Z了。Ctrl-Z用于暂 停程序,不常用,可以将其设置为screenescape键。需要暂停程序时按 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环境,那么这个环境就是在PID25403的虚拟环境里面的子虚拟环境。

参考资料:

(其中一些命令可能已经改变了功能)





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 BackwardPageUp
C-f ForwardPageDown
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,以便「接手」过来 实例




阅读(853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~