SSH 时 Screen 的使用
有时候会碰到这样的情况,用 SSH 远程到一个 FreeBSD 主机进行一些操作,有时候这些操作要花很长的时间,这样就会出现一些问题,你运行 SSH 客户端的电脑就不能关了或如果出现网络中断,则当前连接就会中断,就算是你重新打开 SSH ,也只会打开一个新的 session,无法恢复之前的 session 。
这个时候,你就需要 Screen 这个工具了。它可以解决这个问题。
安装方法:
cd /usr/ports/sysutils/screen make install clean
screen 的常用参数:
-A:将所有的视窗都调整为目前终端机的大小。 -d:分离指定的screen会话。 -h:指定视窗的缓冲区行数。 -m:即使目前已在会话中的screen会话,仍强制建立新的screen会话。 -r:恢复分离的screen会话。 -R:先试图恢复离线的会话。若找不到离线的会话,即建立新的screen会话。 -s:指定建立新视窗时,所要执行的shell。 -S:指定screen会话的名称。 -v:显示版本信息。 -x:恢复之前离线的screen会话。 -ls:显示目前所有的screen会话。 -list:显示目前所有的screen会话。 -wipe:检查目前所有的screen会话,并删除已经无法使用的screen会话。
screen 会话中的快捷键,先按 ctrl+a,然后再按如下:
?:Help,显示按键绑定情况。 c:Create,创建新的窗口。 n:Next,切换到下个窗口。 p:Previous,切换到前一个窗口。 M:查看活动状态。 x:锁住当前的窗口,需用用户密码解锁。 d:Detach,暂时离开当前会话,此后可以恢复。 z:把当前会话放到后台执行,可以使用shell的fg命令回去。 w:Windows,列出已创建的窗口。 t:Time,显示当前时间。 K:Kill,强行关闭当前的窗口。 [0..9]:切换到第 0..9个窗口。 [Space]:由窗口0顺序切换到窗口9。 C-a:在两个最近使用的窗口间切换。 S:水平分屏。 |:垂直分屏。 X:关闭当前分屏。 Q:关闭除当前分屏的所有分屏。 [Tab]:在分屏中切换。 [:Copy,进入拷贝模式,此时可以回滚、搜索、复制,就像用使用vi一样。 ]:Paste,粘贴刚刚在拷贝模式选定的内容。
当 按了 ctrl+a d 把 screen session detach 掉后,会回到还没进 screen 时的状态,此时在 screen session每个window 内跑的 process (无论是前景/背景)都在继续执行,即使 logout 也不影响.
screen -ls #显示所有的 screen sessions screen -r [keyword] #选择一个 screen session 回来,恢复离线的screen作业,单独输入 screen -r 也行的.
创建一个以 mps 命名的会话:
screen -S mps
也可以在创建会话的时候,指定要执行的命令,如:
screen -S mps vi test.txt
需要注意的是,如果退出 vi 也会退出 screen 会话。
应用场景:
想要时时该监视 top 和某 access.log 的情况,那就这样:
# 创建以 mps 命名的会话 screen -S mps # 进入会话后,新建一个窗口 ctrl+a,c # 将窗口垂直分割 ctrl+a,| # 在两个窗口间切换 ctrl+a,tab # 分别运行命令 top tail -f /var/log/httpd-access.log
补充说明:
screen 是一个多重视窗管理程序,此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用 telnet 登入主机或是使用老式的终端机时,才有可能用到 screen 程序。
PS :
此文章有参考及引用网上文章,如涉及版权,请告知。谢~
又 PS :
听说现在更流行使用 tmux 了。不过现在这个用得还行,暂时懒得去研究了。