screen:终端窗口管理器

    通过SSH连接Linux服务器执行命令时,你是否有过SSH意外断开连接的经历?你已经知道,在SSH断开后正在执行的命令就会强行停止,这真是太糟糕了,你是否想要改变?
    通过SSH执行命令时,有时我们想同时运行多个任务。可是你也知道同一时间一个SSH终端只能执行一个任务。难道真的没有办法改变吗?

    通过手机连接Linux服务器时,如果你准备编译代码,肯定会为屏幕上刷出一大堆编译信息而感到痛心----这些都是白花花的流量啊!难道没有什么工具可以让我们退出终端时也能继续编译吗?
    有,当然有,它就是screen,多重视窗管理程序。


    先让我们进行一个测试,执行以下命令:
    screen
    如果你成功进入了一个“新的屏幕”(就是屏幕刷新了,光标回到了顶部,就像刚登录时那样),就说明你可以直接开始使用screen。
    如果出现错误提示,比如:
    Cannot find terminfo entry for 'vt320'
    这个提示说明终端类型不合适(可以调整,等下说)。
    如果出现:
    -bash: screen: command not found
    就说明你没有安装screen,需要安装。


    安装screen的方法:
    如果是CentOS或者Red Hat,执行以下命令:
    yum install screen
    如果是Debian或者Ubuntu,执行以下命令:
    apt-get install screen
    装完就可以用了。


    终端类型不合适的解决方法:
    执行如下命令:
    export TERM=xterm
    通过修改环境变量使终端类型成为xterm类型的终端,这样就可以用screen了。
    如果改之后发现显示效果变差,可以试试用vt100、vt200、vt400等。这些“型号”指示了终端控制排版使用的协议,它们不代表分辨率。用不适合的终端类型可能导致排版混乱。xterm是我发现与MIDPSSH(JAVA的SSH客户端)兼容性最好的终端类型了。

    比如,如果你的终端只支持vt100,改成vt200之后执行ls就看不到颜色了,因为vt200的颜色控制和vt100不兼容。
    逐一尝试后,某些命令如果还是排版混乱,就退出screen再执行这些命令吧。

    如果是MIDPSSH,有一个设置终端类型的地方(在Network/网络里),填上vt100就完成了,不用再执行命令了。很多手机终端都有这种设置,自己找找。


    最后,screen的各种使用方法:
    使用以下命令创建一个新窗口:
    screen
    如果窗口未退出时断开连接,使用以下命令可以恢复窗口:
    screen -r
    如果是刚刚断开,窗口可能认为没有断开,恢复失败,这时需要先挂起窗口:
    screen -d
    然后再screen -r就恢复了。
    如果有多个窗口,用以下命令列出窗口:
    screen -ls
    你会看到窗口id(窗口列表中的数字,如显示成5620.pts-0.humn,就说明窗口id是5620)
    恢复指定窗口id的窗口
    screen -r 5620
    
    如何关闭窗口?
    在窗口中执行exit命令。如果你之前执行过su,你需要执行两次exit才能关闭并退出窗口。退出窗口后,你会发现屏幕回到了进入窗口前的状态。
    
    如何从窗口中退出但不关闭窗口?
    这需要使用快捷键,先同时按Ctrl和A,然后放开,再按D,就挂起并退出窗口了。(手机终端使用模拟快捷键,先选择Ctrl,然后输入A,再输入D即可)
    这时你就可以用screen新建第二个窗口了。
    用screen -r恢复窗口。如果有两个或以上的窗口,要带窗口id。
    挂起窗口非常有用,因为正在运行程序的窗口也可以挂起,所以你可以在编译代码时挂起手机端的SSH喝杯茶,流量绝对省。


su与screen:为何无法恢复窗口
        如果你用普通用户登录,首先执行su切换到root权限,然后再执行screen,下次再登录时可能无法恢复窗口。
    为什么?因为su之后你已经是root了,screen会认为是root打开的窗口,只有root才能恢复。
    所以如果你先su再screen,恢复时也必须先su再screen -r。
    而且这样仍然可能恢复失败(我也不知道为什么)。
    所以最好的方法是先screen,再在窗口里su。这样下次进入直接screen -r就可以回到su之后的状态了,方便快捷。


    终端快捷键:
    几乎所有的命令都可以按Ctrl加C强行结束。
    很奇怪Linux的ping命令为什么会一直ping不会自己结束吗?因为它正等着你按Ctrl加C呢。
    top等命令也是如此。
    在下载某个文件时不想继续了?对wget使用Ctrl加C吧,下次用带-c参数的命令下载还可以断点续传。
回复列表(13|隐藏机器人聊天)
添加新回复
回复需要登录