Screen 惯用命令详解

Screen 常用命令详解

screen为多重视窗管理程序。
1.安装:
rmp -ivh screen-4.0.2-5
2.启动:
screen
默认会启动一个screen进程,读取/etc/scrennrc配置文件,~/.screenrc配置文件(如果有的话)

3.screen后面可以带的参数:
-c file: override默认的配置文件$HOME/.screenrc

-d [pid.tty.host]:断开screen进程(使用该命令时,screen的状态一定要是Attached,也就是说有用户连在screen里)。一般进程的名字是以pid.tty.host这种形式表示(用screen -list命令可以看出状态)。

-D [pid.tty.host]:与-d命令实现一样的功能,区别就是如果执行成功,会踢掉原来在screen里的用户并让他logout。

-r [pid.]tty.host:连上一个断开的screen进程,如果有多个断开的进程,需要指定[pid.]tty.host,常用命令

-d -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户再连接。

-D -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户并让他logout再连接

-ls或者-list:显示存在的screen进程,常用命令

-m:如果在一个Screen进程里,用快捷键crtl+a c或者直接打screen可以创建一个新窗口,screen -m可以新建一个screen进程。

-dm:新建一个screen,并默认是detached模式,也就是建好之后不会连上去。

-p number or name:预先选择一个窗口。
例如:如果现在有一个Screen进程,并且是dettached
screen -rp0
连接至screen,并默认进入0号窗口
screen -rpname
连接至screen,并默认进入name窗口
screen -rp=
连接至screen,并默认进入窗口列表

-S sessionname:指定screen进程的名字,如果原来的名字是[pid.]tty.host,现在就会变成pid.sessionname

-t name:设定窗口名字
screen -t entry
新建一个screen进程,里面有一个窗口,名字为entry
-v:显示screen程序的版本

-wipe:去除死去的screen进程。(用screen -list可以看出进程状态,显示为dead即为死去)

-x:连接到一个attached screen进程。也就是说如果有一个用户在screen里,你可以用这个命令连接,而不需要把对方踢掉,随后的操作两个人都能看到,这个称为multi display mode。类试于windows的机器,一个在console端,一个在远程用pcanywhere连接,是一个效果。




4.在screen中的操作:

(C-a c命令指的是按下Crtl+a,然后松开,在按下c)

C-a ":显示Screen里的所有窗口,并可以进行选择。最常用命令

C-a c:创建新窗口,常用命令

C-a num:切换至num号窗口。窗口名一般是0-9(我这个版本最多支持创建40个窗口,C-a "命令就可以看到窗口号,在最左边)

C-a A:为当前窗口设定一个标题,常用命令

C-a d:断开一个screen的进程,常用命令

C-a D:断开一个screen的进程并且logout

C-a K:删除当前的窗口,常用命令

C-a C-x:锁住终端

C-a C-z:挂起终端,也就是可以用jobs,fg之类的命令管理

C-a Z:重置终端至刚启动时的状态


5.实际运用:

我们公司游戏服务器用的linux,一般一组游戏由entry,db,map1,map2,map3,map4,map5...这些机器组成,每个机器上 有相应的程序,假设一组游戏7台服务器组成,那么维护起来就要连接到7台机器,然后开启或关闭程序。现在有了Screen这个程序,我就可以在entry 这台服务器上建立一个screen,从而控制整组的服务器。为什么用entry这台呢,因为即便其它程序都开了,entry不开,玩家还是登不上的。

用"screen"命令新建一个进程,然后用"C-a c"建立另外6个窗口,接着用"C-a A"为每个窗口该名字,分别叫entry,db.....这样功能就一目了然。进入db窗口,用ssh命令连接到对应的db机器(我们都是用密钥访问,所 以不要输入密码),然后开启程序,map机器一样道理。这样管理一组游戏就相当方便了,只需要连一台entry机器

但是随之而来的问题,如果entry机器挂了,或者维护时服务器需要重起,那就要重头开始重建screen,几十台entry建起来可不轻松。解决办法是 修改配置档,可以直接修改$HOME/.screenrc,或者另外新建一个文件,然后在命令行用screen -c file方式运行,个人感觉后一种较好。

文件内容:
screen -t entry 0 #-t表示指定窗口名称,0表示窗口的编号
screen -t db 1 1
screen -t map1 2
screen -t map2 3
screen -t map3 4
screen -t map4 5
screen -t map5 6
这样就可以了

也可以直接把ssh命令打进去(确认可以ssh,要不会有问题)
screen -t entry 0 
screen -t db 1 1 ssh ipofdb
screen -t map1 2 ssh ipofmap1
screen -t map2 3 ssh ipofmap2
screen -t map3 4 ssh ipofmap3
screen -t map4 5 ssh ipofmap4
screen -t map5 6 ssh ipofmap5

 


以下是命令和解释。
运行:
screen

Ctrl-a S 新建水平分割窗口
Ctrl-a Tab 切换窗口
Ctrl-a :screen bash 新建 screen 终端,并运行 bash
Ctrl-a :quit 退出 screen,将关闭所有 screen 终端,结束其中所有任务



screen 常用命令,

Ctrl-a c 新建 bash screen 终端
Ctrl-a " 列出
Ctrl-a A 重命名
Ctrl-a n 在当前窗口中切换到下一个 screen 终端
Ctrl-a p 在当前窗口中切换到上一个 screen 终端

Ctrl-a d 断开所有 screen 终端,返回 screen 执行前状态,但 screen 内所有终端的任务都在执行
screen -ls 列出当前用户的所有 screen 实例,包括联接和断开的
screen -R <pid> 重新联接到已断开的 screen 实例,如果有多个已断开的 screen 实例,则用 <pid> 区分

Ctrl-a S 新建水平分割窗口
Ctrl-a Tab 切换窗口
Ctrl-a X 关闭当前窗口
Ctrl-a + 扩大当前窗口,默认增加3行
Ctrl-a - 缩小当前窗口,默认减小3行

Ctrl-a :screen <command> 新建 screen 终端,并运行命令<command>
Ctrl-a :resize <height> 改变当前窗口高度为<height>
Ctrl-a :quit 退出 screen,将关闭所有 screen 终端,结束其中所有任务

Ctrl-a <Esc> 进入选择模式
<PageUp> 或 Ctrl-u 光标上移一页
<PageDown> 或 Ctrl-d 光标下移一页
<Left> 或 h 光标左移一格
<Down> 或 j 光标下移一行
<Up> 或 k 光标上移一行
<Right> 或 l 光标右移一格
<Space> 选择开始,选择结束
<Esc> 退出选择模式

Ctrl-a ] 粘贴选择的内容