您的位置:首页 > 运维架构 > Linux

linux screen 命令详解

2013-12-31 16:28 591 查看




功能说明:

使用telnet或SSH远程登录linux时,如果连接非正常中断(远程机器关闭),重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。

语  法:

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

补充说明:

screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。


我的用法:

1,开启一个screen并进入:

screen -S test1 #这里用-S表示给screen起名字,以后切换的时候比较方便。这时就进去了screen test1了。里面可以跑一些程序。

2,退出该screen:

Ctrl-a d #这里的ctrl-a表示同时按ctrl键和a键,然后再单独按d键。这时退到跟终端。

3,在根下查看开启的所有screen:

screen -ls # 比如会有25764.test1 (Detached)等。

4,在根下进入某个screen:

screen -r test1 #这时又进入到指定的screen session中,或者screen -r 25764。

5,关闭该session:

exit #在该screen中退出,退到根下。

6,强制连接,踢掉原来的

screen -D -r 20791

screen -x -r 20791(共享原来的)

7,当前窗口假死,强制关闭当前窗口,跳到下一个

Ctrl-a K

8,上翻

Ctrl-a Ctrl-[


语  法:

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 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

C-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 : ->输入命令(quit/split等):

除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。

--End--

~/.screenrc的配置

[python] view
plaincopy

# ~/.screenrc

#

# 用系统的一些设置

shell -$SHELL

# 避免类似进入vi退出后屏幕刷新不完

altscreen on

#

# 启动时不显示欢迎屏幕

startup_message off

#

# hangup时自动detach

autodetach on

#

# 一个screen die,不冻结整个screen

nonblock on

#

# UTF-8 is necessary.

defutf8 on

#

# Change default scrollback value for new windows: scrollback 10000

defscrollback 10000

#

# start with visual bell as default

vbell off

vbell_msg "Bell on %t (%n)"

#

# 在最下一行显示窗口列表和时钟

hardstatus on

hardstatus alwayslastline

hardstatus string "%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d %c:%s "

#

# default windows

screen -t shell 0

screen -t vim 1

#

# 按 Ctrl-Z w 或 Ctrl-Z Ctrl-W 显示窗口列表

bind w windowlist -b

bind ^w windowlist -b

#

# 定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按 Ctrl-Z z。默认是Ctrl-a

#escape ^Zz

【注】:

问题:

在使用screen的时候,相信不少同学碰到过这样的问题:使用screen启动一个新窗口之后,之前shell配置文件(比如:~/.bashrc)里定义的变量和alias全部失效。自己不得不使用“. ~/bashrc”又重新加载一遍配置,就这样,启动一个窗口,手动加载一次,非常繁琐麻烦。

解决方案:

在screen的配置文件.screenrc里增加配置项

shell -$SHELL

这句话的意思是:screen启动窗口后,自动加载当前shell的配置文件(比如:~/.bashrc),当然SHELL变量已经是定义好的

问题:

linux中显示中文OK:

echo $LANG

en_US.UTF-8

但是screen中不能正确显示中文,

解决方法:

设置~/.screenrc

defencoding gbk

encoding gbk gbk

遇到一个问题,每次一关闭SecureCRT screen中的字体设置就有问题,需要重新关闭screen,再开启。【未解决】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: