你
是不是经常需要
SSH
或者
telent
远程登录到
Linux
服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp
传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口
或者断开连
接,否则这个任务就会被杀掉,一切半途而废了。
或者我们起一个服务,比如说esmi,会有终端输出,只有在启动程序的那个终端才能看到终端输出,这个终端不可能永远不关掉,以后再要看输出就没办法了。用nohup?
还有些登录工具不支持标签窗口,同一台服务器上执行多个任务时就不得不打开多个窗口,到后面窗口一多自己都找不到哪个窗口在干什么了。
试试看screen吧,一定会有惊喜。
简
单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多
个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在使用过程中可以退出screen,甚至可以关掉
登录窗口,下次再进去重新挂上screen会话,所有工作全部都会恢复。
举个例子,登录进服务器后,在screen会话里启动esmi,退出会话后,甚至关掉登录窗口后,下次再要看esmi的输出,只要重新挂上原先的screen会话,那所有终端输出又都能看到了。
启动screen的方法,很简单,直接用screen命令就可以。
这样就启动了一个screen的窗口,你可以随意执行shell命令,就像你在一个真正的shell环境里一样。
之后你如果打exit,就会直接退出screen,注意,这是真正的退出,如果你希望重新回到这个scren窗口,那在退出时就不能直接exit,要用Ctrl-a
d,就是按住Ctrl,再按a,然后再单独按d。
过一会儿你想再回到刚刚的screen窗口,用命令screen
-ls
$
screen
-ls
There
is
a
screen
on:
15112.pts-5.test205
(Detached)
1
Socket
in
/tmp/uscreens/S-zhulp.
如果只有一个screen会话,那就直接用screen
-r恢复,试试看,刚刚退出前的窗口就又出现了。
如果你在退出screen后,又另外打开了一个screen会话,那用screen
-ls时就会出现多个会话显示
$
screen
-ls
There
are
screens
on:
16466.pts-23.test205
(Detached)
15112.pts-5.test205
(Detached)
2
Sockets
in
/tmp/uscreens/S-zhulp
这时就需要指定screen的会话ID来进入到不同的会话,像这样:
$
screen
-r
16466
有的时候,特别是网络不稳定的时候,连接会被中断,不用担心,screen上的环境都还在,不过有可能你会发现用screen
-ls时的显示是这样的:
$
screen
-ls
There
is
a
screen
on:
16466.pts-23.test205
(Attached)
1
Socket
in
/tmp/uscreens/S-zhulp.
这时用screen
-r
会显示
$
screen
-r
There
is
a
screen
on:
16466.pts-23.test205
(Attached)
There
is
no
screen
to
be
resumed.
如何中断一个
screen
session?
看例子:
[root@dev
~]#
screen
-ls
There
is
a
screen
on:
4083.down_video
(Attached)
1
Socket
in
/var/run/screen/S-root.
请注意:
当前看到的session
:
down_video
正在被连接使用中,
这时我想使用此session
[root@dev
~]#
screen
-r
down_video
There
is
a
screen
on:
4083.down_video
(Attached)
There
is
no
screen
to
be
resumed
matching
down_video.
此时用
-r
不能取到此
screen
session
这时只能用
-d
参数来强制中断它
[root@dev
~]#
screen
-d
down_video
[4083.down_video
detached.]
[root@dev
~]#
screen
-r
down_video
再用
-r
取回
screen就成功了
注意:原来的被我们中断的连接会显示
:
[root@dev
~]#
screen
-r
down_video
[remote
detached]
有
的时候挂到screen会话后可能希望看到历史输出,用滚动条是不行的,screen提供了Ctrl-a
[命令,这时会进入到复制模式,你可以用方向键或者翻页键很方便的在历史输出中移动,同时,因为前面说了,是进入到复制模式,你可以用回车,设置复制的开
始点,然后再按一次回车设置复制的结束点,同时会退出复制模式,这时用Ctrl-a
]命令,可以把前面选择的内容粘贴到当前screen窗口。翻历史输出时可以用g移动到历史缓冲区首,用G移动到历史缓冲区尾,方便吧?
screen还有另外一个很强大的功能,多窗口管理。
进入到screen后,按Ctrl-a
c,就创建了一个全新的窗口,你可以用Ctrl-a
Ctrl-a切换回之前的窗口,也可以用Ctrl-a
"显示窗口列表,用方向箭选择后按回车切换,为了方便记忆,你还可以用Ctrl-a
A命令给窗口改名字,试试看。
Screen主要耗时较长的操作,如编译程序,如果不用screen,在编译过程中,如果断开ssh,编译也会中断。但是使用screen,就相当于后台任务,即使中断ssh,编译还是继续执行。
本文只介绍screen的常用操作。
安装screen:(以centos为例,debian系的就用apt)
yum
install
screen
在执行耗时操作时,先打开screen会话。
screen
-S
会话名
会话名,是为这个screen会话定义一个名字,方便下次回到这个会话,当然,也可以直接执行screen,不加任何参数,通过会话id来回到这个会话。
启动新的screen会话后,执行你需要的操作。
退出当前screen会话:
exit
把会话隐藏到后台:
按ctrl+a+d
获取所有会话列表:
screen
-ls
screen
进入screen模式
C-a
c
在当前screen下建立新的窗口
exit
退出当前窗口,如果它是此screen的唯一窗口时,此screen也将完全退出。
C-a
d
暂时断开screen会话
screen
-ls
查看有哪些screen。
screen
-r
id
打开编号为id的screen窗口。
C-a
w
显示所有窗口列表
C-a
n
切换到下一个窗口
C-a
p
切换到前一个窗口(与C-a
n相对)
这个命令会返回所有会话的id以及会话名
进入之前的screen会话(如果已经在该会话里,就进不去了):
四:使用screen进行远程协作:
1,什么情况下会用到这个远程协作?
比如:你需要给在远方的同事在一台服务器上面演示一项功能的操作步骤,
又如:你和同事需要连接到同一台服务器上面协作完成 一项工作,每个人执行其中的一部分
2,步骤:
需要有一个人先登录到服务器,比如你的伙伴先
登录,
登录后执行:
[root@dev
~]#
screen
-S
cooperate
下面我们以同一帐号 登录到同一台机器上面:
先查看情况:
[root@dev
~]#
screen
-ls
There
is
a
screen
on:
4195
.cooperate
(Attached)
1
Socket
in
/var/run/screen/S-root.
我们可以看到cooperate这个session是正在被连接的,
下面我们连接进入此session,即:
我们和伙伴使用同一个帐号进入同一个screen
session
[root@dev
~]#
screen
-x
cooperate
说明:
-x:Attach
to
a
not
detached
screen
session.
(Multi
display
mode)
就是连接
到一个未被断开的scr
een
session,
注意此时两边的显示内容是完全相
同,
注意:此时我们和伙伴都可以输入命令了,大家在一个session开始协同工作,
比如:咱们在这边执行:
ls
伙伴的屏幕上会有相同的显示信息
或者我们起一个服务,比如说esmi,会有终端输出,只有在启动程序的那个终端才能看到终端输出,这个终端不可能永远不关掉,以后再要看输出就没办法了。用nohup?
还有些登录工具不支持标签窗口,同一台服务器上执行多个任务时就不得不打开多个窗口,到后面窗口一多自己都找不到哪个窗口在干什么了。
试试看screen吧,一定会有惊喜。
简
举个例子,登录进服务器后,在screen会话里启动esmi,退出会话后,甚至关掉登录窗口后,下次再要看esmi的输出,只要重新挂上原先的screen会话,那所有终端输出又都能看到了。
启动screen的方法,很简单,直接用screen命令就可以。
这样就启动了一个screen的窗口,你可以随意执行shell命令,就像你在一个真正的shell环境里一样。
之后你如果打exit,就会直接退出screen,注意,这是真正的退出,如果你希望重新回到这个scren窗口,那在退出时就不能直接exit,要用Ctrl-a
过一会儿你想再回到刚刚的screen窗口,用命令screen
$
There
1
如果只有一个screen会话,那就直接用screen
如果你在退出screen后,又另外打开了一个screen会话,那用screen
$
There
2
这时就需要指定screen的会话ID来进入到不同的会话,像这样:
$
有的时候,特别是网络不稳定的时候,连接会被中断,不用担心,screen上的环境都还在,不过有可能你会发现用screen
$
There
1
这时用screen
$
There
There
如何中断一个
There
1
请注意:
There
There
这时只能用
[root@dev
[4083.down_video
[root@dev
再用
注意:原来的被我们中断的连接会显示
[root@dev
[remote
有
screen还有另外一个很强大的功能,多窗口管理。
进入到screen后,按Ctrl-a
Screen主要耗时较长的操作,如编译程序,如果不用screen,在编译过程中,如果断开ssh,编译也会中断。但是使用screen,就相当于后台任务,即使中断ssh,编译还是继续执行。
本文只介绍screen的常用操作。
安装screen:(以centos为例,debian系的就用apt)
yum
在执行耗时操作时,先打开screen会话。
screen
会话名,是为这个screen会话定义一个名字,方便下次回到这个会话,当然,也可以直接执行screen,不加任何参数,通过会话id来回到这个会话。
启动新的screen会话后,执行你需要的操作。
退出当前screen会话:
exit
把会话隐藏到后台:
按ctrl+a+d
获取所有会话列表:
screen
screen
C-a
exit
C-a
screen
screen
C-a
C-a
C-a
这个命令会返回所有会话的id以及会话名
进入之前的screen会话(如果已经在该会话里,就进不去了):
四:使用screen进行远程协作:
1,什么情况下会用到这个远程协作?
又如:你和同事需要连接到同一台服务器上面协作完成 一项工作,每个人执行其中的一部分
2,步骤:
登录后执行:
[root@dev
下面我们以同一帐号 登录到同一台机器上面:
先查看情况:
[root@dev
There
1
我们可以看到cooperate这个session是正在被连接的,
下面我们连接进入此session,即:
[root@dev
说明:
注意:此时我们和伙伴都可以输入命令了,大家在一个session开始协同工作,