linux中强大的screen命令.docx
- 文档编号:29417835
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:18
- 大小:110.19KB
linux中强大的screen命令.docx
《linux中强大的screen命令.docx》由会员分享,可在线阅读,更多相关《linux中强大的screen命令.docx(18页珍藏版)》请在冰豆网上搜索。
linux中强大的screen命令
linux中强大的screen命令
linux , screen
今天用SCREEN用点生了,有几个功能不知道怎么用,上网搜了一下,有位哥们写的挺细的,向这哥们致敬,我这里就转走了,备查用。
因为还有好几个有用实用好用的功能文章都没有描述到。
我将在转载的最后给预补充。
以下转载开始
转载地址:
今天发现了一个“宝贝”,就是Linux的screen命令,对于远程登录来说,不仅提供了类似于nohup的功能,而且提供了我非常喜欢的“多个桌面”的功能。
平常开一个putty远程登录,经常需要在两个程序之间来回切换,怎么办?
ctrl-z和fg、bg?
这些太麻烦了。
其实我们可以借助screen命令来实现轻松便捷的切换。
我主要是参考了下面的两篇文章(附在结尾),我自己总结的方法是:
“首先用screen[-S]命令建立一个session,然后就可以在这个session中建立多个window了。
使用screen[-S]可以建立多个session,而每个session又可以建立多个window。
在不同的window之间可以用Ctrl-An/p等命令来切换。
而想要在多个session之间切换,则需要你Ctrl-Ad回到登录session(就像一棵大树的根),然后再通过screen-ls查看有哪些session,然后使用screen-r来决定恢复到哪个session。
对于已经AttachedSession则不能直接screen-r,需要先screen-d,然后才能screen-r”
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
【转载1】
系统管理员经常需要远程登录服务器
然后在服务器上跑一些程序
有个时候
得跑很长时间(超过12小时)
这是如果程序没结束就退出远程管理终端
远程跑的程序很有可能就此当掉
以前常用的解决方式是用命令nohup
但是nohup也有很多的问题
当有了screen
这一切便都迎刃而解了
敲入命令screen
会创建一个跑着shell的单一窗口
在这里面
你可以跑你所需要的程序
然后Ctrl+ad退出刚创建的窗口(回到进入screen前的环境)
然后再敲入命令screen创建新的终端窗口
就这样
你可以建立多个有shell的窗口(这些窗口里都可以跑你自己的应用)
这样就是你退出远程管理窗口(进入screen的环境)
你的screen窗间的窗口都不会关闭
里面跑得应用自然也不会当掉
用screen-ls可以看所有的screensessions
用screen-rsessionid可以进sessionid指定的特定的screensession
最后screensession不再使用的时候
screen-rsessionid进去
exit退出即可
Unix/Linux工具:
Screen命令使用
screen使用
使用screen非常简易.只需在SHELL键入screen,便可打开一个screensession。
而在每个screensession下,所有命令都以ctrl+a(C-a)开始。
现在让我来简单介绍基本的命令
C-ac->Create,开启新的window
C-an->Next,切换到下个window
C-ap->Previous,前一个window
more..
C-aC-a->Other,在两个window间切换
C-aw->Windows,列出已开启的windows有那些
C-a0->切换到第0个window
C-a1..9->切换到第1..9个window
C-aa->发出C-a,在emacs,ve,bash,tcsh下可移到行首
C-at->Time,显示当前时间,和系统的load
C-aK(大写)->killwindow,强行关闭当前的window
C-a[->进入copymode,在copymode下可以回滚、搜索、
复制就像用使用vi一样
C-bBackward,PageUp
C-fForward,PageDown
H(大写)High,将光标移至左上角
LLow,将光标移至左下角
0移到行首
$行末
wforwardoneword,以字为单位往前移
bbackwardoneword,以字为单位往后移
Space第一次按为标记区起点,第二次按为终点
Esc结束copymode
C-a]->Paste,把刚刚在copymode选定的内容贴上
C-a?
->Help,显示简单说明
C-ad->detach,将目前的screensession(可能含有多个windows)
丢到后台执行当按了C-ad把screensessiondetach掉后,会回到还没进screen时的状态,此时在screensession里每个window内运行的process(无论是前台/后台)都在继续执行,即使logout也不影响。
下次login进来时:
screen-ls->显示所有的screensessions
screen-r[keyword]->选择一个screensession恢复对话
若screen-ls里有Attachedsessions:
screen-d[keyword]-> 强制detach,以便「接手」过来
实例:
说明看了那么多,让我们用一个实际例子来结束我们今天的学习。
在我们开启一个screen后,然后使用joe编辑一个文件,之后因为临时需要离开这时就可以运行Ctrl+ad,显示如下:
[becks@ec-basebecks]$screen
[detached]
这个时候当我们运行ps-e可以看到pts/2这个我刚刚运行的screen正在运行joe
6264pts/200:
00:
00bash
6354pts/200:
00:
00joe
而当我们回来后想恢复这个session,只需要键入screen-r,而当你有多个session时候,系统将提示你选择一个,如下:
[becks@ec-basebecks]$screen-r
Thereareseveralsuitablescreenson:
6263.pts-1.ec-base(Detached)
6382.pts-1.ec-base(Detached)
Type"screen[-d]-r[pid.]tty.host"toresumeoneofthem.
输入该session的pid进行恢复
[becks@becksbecks]$screen-r6263
想退出screen的session,和退出shell一样,只需要键入exit命令,成功退出后将有以下提示
[screenisterminating]
【转载2】
linuxscreen命令详解
功能说明:
使用telnet或SSH远程登录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-Syourname->新建一个叫yourname的session
screen-ls->列出当前所有的session
screen-ryourname->回到yourname这个session
screen-dyourname->远程detach某个session
screen-d-ryourname->结束当前session并回到yourname这个session
在每个screensession下,所有命令都以ctrl+a(C-a)开始。
C-a?
->Help,显示简单说明
C-ac->Create,开启新的window
C-an->Next,切换到下个window
C-ap->Previous,前一个window
C-a0..9->切换到第0..9个window
Ctrl+a[Space]->由視窗0循序換到視窗9
C-aC-a->在两个最近使用的window间切换
C-ax->锁住当前的window,需用用户密码解锁
C-ad->detach,暂时离开当前session,将目前的screensession(可能含有多个windows)丢到后台执行,并会回到还没进screen时的状态,此时在screensession里 每个window内运行的process(无论是前台/后台)都在继续执行,即使logout也不影响。
C-az->把当前session放到后台执行,用shell的fg命令則可回去。
C-aw->Windows,列出已开启的windows有那些
C-at->Time,显示当前时间,和系统的load
C-aK->killwindow,强行关闭当前的window
【转载完,以下是我的补充】
1.改变窗口名字
一般在我用的过程中,一个SESSION都会对应好几个窗口(WINDOW)。
比如我按下CTRL+aw查询窗口口列表,给出来
1$bash 2-$bash 3*$irc
总共3个窗口,默认都是bash,最后的3我以给改过名了,叫IRC,这样多个窗口就记起来就方便多了,改名是按CTRL+aA大写A,是改名,小写a是和上次你用的窗口切换,这个是一个实用的功能,这样你开很多个window也很容易记住。
1*$project 2$bash 3-$irc
我的3个窗口,一个是项目的,一个是用来执行SHEEL,一个是我的IRC,是用来聊天,或者测试用的。
2.使用指定的会话名字
xsty@xsty-desktop:
~$ screen-dmSirctest
xsty@xsty-desktop:
~$screen-r
Thereareseveralsuitablescreenson:
4687.irctest (2010年09月11日15时58分08秒) (Detached)
4225.pts-0.xsty-desktop(2010年09月11日14时45分15秒) (Detached)
Type"screen[-d]-r[pid.]tty.host"toresumeoneofthem.
默认情况下screen使用的名字是PID.TTY.HOST的命名规则,如果有太多会话,那么多的PID可能分不清哪个是哪个,所以很有必要指定一个好记的名字,这时就用-mdS选项
3.还有另一编文章,是IBM上的,基本上上面说的都以经说了比较全面了。
下面转载过来
linux技巧:
使用screen管理你的远程会话
田强(tianq@),软件工程师,IBM中国软件开发中心
2007年7月31日
你是不是经常需要远程登录到Linux服务器?
你是不是经常为一些长时间运行的任务头疼?
还在用nohup吗?
那么来看看screen吧,它会给你一个惊喜!
你是不是经常需要SSH或者telent远程登录到Linux服务器?
你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp传输等等。
通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。
必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
元凶:
SIGHUP信号
让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。
在Linux/Unix中,有这样几个概念:
∙进程组(processgroup):
一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
∙会话期(session):
一个或多个进程组的集合,有唯一一个会话期首进程(sessionleader)。
会话期ID为首进程的ID。
∙会话期可以有一个单独的控制终端(controllingterminal)。
与控制终端连接的会话期首进程叫做控制进程(controllingprocess)。
当前与终端交互的进程称为前台进程组。
其余进程组称为后台进程组。
根据POSIX.1定义:
∙挂断信号(SIGHUP)默认的动作是终止程序。
∙当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。
∙如果会话期首进程终止,则该信号发送到该会话期前台进程组。
∙一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。
因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。
我们来看一个例子。
打开两个SSH终端窗口,在其中一个运行top命令。
[root@tivf09root]#top
在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。
[root@tivf09root]#ps-ef|greptop
root51805128001:
03pts/000:
00:
02top
root58573672001:
12pts/200:
00:
00greptop
使用pstree命令可以更清楚地看到这个关系:
[root@tivf09root]#pstree-H5180|greptop
|-sshd-+-sshd---bash---top
使用ps-xj命令可以看到,登录shell(PID5128)和top在同一个会话期,shell为会话期首进程,所在进程组PGID为5128,top所在进程组PGID为5180,为前台进程组。
[root@tivf09root]#ps-xj|grep5128
5126512851285128pts/05180S00:
00-bash
5128518051805128pts/05180S00:
50top
367218095180943672pts/218094S00:
00grep5128
关闭第一个SSH窗口,在另一个窗口中可以看到top也被杀掉了。
[root@tivf09root]#ps-ef|grep5128
root186993672004:
35pts/200:
00:
00grep5128
如果我们可以忽略SIGHUP信号,关掉窗口应该就不会影响程序的运行了。
nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup默认将其重定向到nohup.out文件。
值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。
nohup
虽然nohup很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。
其实我们可以使用一个更为强大的实用程序screen。
流行的Linux发行版(例如RedHatEnterpriseLinux4)通常会自带screen实用程序,如果没有的话,可以从GNUscreen的官方网站下载。
[root@tivf06~]#rpm-qa|grepscreen
xscreensaver-4.18-5.rhel4.11
screen-4.0.2-5
开始使用Screen
简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。
Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
在screen中创建一个新的窗口有这样几种方式:
1.直接在命令行键入screen命令
[root@tivf06~]#screen
Screen将创建一个执行shell的全屏窗口。
你可以执行任意shell程序,就像在ssh窗口中那样。
在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。
2.Screen命令后跟你要执行的程序。
[root@tivf06~]#screenvitest.c
Screen创建一个执行vitest.c的单窗口会话,退出vi将退出该窗口/会话。
3.以上两种方式都创建新的screen会话。
我们还可以在一个已有screen会话中创建新的窗口。
在当前screen窗口中键入de>C-acde>,即Ctrl键+a键,之后再按下c键,screen在该会话内生成一个新的窗口并切换到该窗口。
screen还有更高级的功能。
你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。
例如,我们打开一个screen窗口编辑/tmp/abc文件:
[root@tivf06~]#screenvi/tmp/abc
之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入de>C-adde>,Screen会给出detached提示:
暂时中断会话
半个小时之后回来了,找到该screen会话:
[root@tivf06~]#screen-ls
Thereisascreenon:
16582.pts-1.tivf06(Detached)
1Socketin/tmp/screens/S-root.
重新连接会话:
[root@tivf06~]#screen-r16582
看看出现什么了,太棒了,一切都在。
继续干吧。
你可能注意到给screen发送命令使用了特殊的键组合C-a。
这是因为我们在键盘上键入的信息是直接发送给当前screen窗口,必须用其他方式向screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。
这种命令形式在screen中叫做键绑定(keybinding),C-a叫做命令字符(commandcharacter)。
可以通过de>C-a?
de>来查看所有的键绑定,常用的键绑定有:
C-a?
显示所有键绑定信息C-aw显示所有窗口列表C-aC-a切换到之前显示的窗口C-ac创建一个新的运行shell的窗口并切换到该窗口C-an切换到下一个窗口C-ap切换到前一个窗口(与C-an相对)C-a0..9切换到窗口0..9C-aa发送C-a到当前窗口C-ad暂时断开screen会话C-ak杀掉当前窗口C-a[进入拷贝/回滚模式
Screen常用选项
使用键绑定C-a?
命令可以看到,默认的命令字符(Commandkey)为C-a,转义C-a(literal^a)的字符为a:
Screen常用选项
因为screen把C-a看作是screen命令的开始,所以如果你想要screen窗口接收到C-a字符,就要输入C-aa。
Screen也允许你使用-e选项设置自己的命令字符和转义字符,其格式为:
-exyx为命令字符,y为转义命令字符的字符
下面命令启动的screen会话指定了命令字符为C-t,转义C-t的字符为t,通过C-t?
命令可以看到该变化。
[root@tivf18root]#screen-e^tt
自定义命令字符和转义字符
其他常用的命令选项有:
-cfile使用配置文件file,而不使用默认的$HOME/.screenrc-d|-D[pid.tty.host]不开启新的screen会话,而是断开其他正在运行的screen会话-hnum指定历史回滚缓冲区大小为num行-list|-ls列出现有screen会话,格式为pid.tty.host-d-m启动一个开始就处于断开模式的会话-rsessionowner/[pid.tty.host]重新连接一个断开的会话。
多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限-Ssessionname创建screen会话时为会话指定一个名字-v显示screen版本信息-wipe[match]同-list,但删掉那些无法连接的会话
下例显示当前有两个处于detached状态的screen会话,你可以使用screen-r
[root@tivf18root]#screen–ls
Therearescreenson:
8736.pts-1.tivf18(Detached)
8462.pts-0.tivf18(Detached)
2Socketsin/root/.scree
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 强大 screen 命令