目录
通过ssh在Linux终端下工作,有一个很烦的事情就是,如果需要执行一个长时间的命令(例如拷贝一个大文件,或者做DDL)时,如果终端意外断开(网络或者别的原因),一般命令就会终止,当然你可以使用nohup命令,这里提供另一个办法:使用screen。
Updates
修改Bash提示符@2024-09
每次去执行echo $TERM
也挺麻烦的,所以,另一个办法就是在Bash的提示符中,将变量$TERM
展示出来:
vim ~/.bash_profile
...
export PS1="[\u@$TERM \W]\$ "
...
此外,还需要再 .screenrc
文件中新增如下代码:
shell -$SHELL
关于该代码的说明:How to tell GNU screen to run .bash_profile in each new window?@ServerFault
更进一步的,可以使用如下的PS1
:
export PS1="[\u@${TERM}-${STY#[0-9]*.} \W]\$ "
这里说明一下${STY#[0-9]*.}
这部分内容:
${STY}
是一个screen下的环境变量,在screen运行时可以获取当前session的名称(“Alternate socket name”)${STY#[0-9]*.}
这里的#
后面的部分,则是Bash
的string操作符号,这里的删除后面的匹配的子串(Substring Removal
)。更多详细说明,参考:Manipulating Strings@Advanced Bash-Scripting Guide
如何判断当前是不是在screen下@2024-05
只需要在终端尝试输出$TERM
即可:
echo $TERM
screen
如果是非screen下,可能会看到如下输出:
echo $TERM
xterm-256color
初次使用vim按ctrl+s
锁屏@2024-05
同样是发送了XOFF
导致的锁屏问题。
在现代的开发者中,如果初次使用vim
,还不习惯使用:w
进行保存时,比较容易遇到这个问题,因为现在软件中,ctrl+s
已经默认是保存操作了。
这也是同样的原因,可以使用ctrl+q
进行解锁操作。这与screen
是类似的,同样是发送了XOFF
命令字符导致的。
关于ctrl+a,S
锁屏的问题@2024-05
在刚开始使用screen
的时候,经常会误触ctrl+a,S
(ctrl+a,后面跟一个命令键S)导致屏幕锁定,这时候可以通过ctrl+a,Q
来解除锁定。
如果被这个困扰的比较厉害,可以考虑禁用ctrl+a,S
命令。禁用的方法是在~/.screenrc
中新增如下命令内容(参考):
bind s
为什么ctrl+a,S
会锁定屏幕@2024-05
经过一段时间的搜索挖掘,大致确认,这是一个早期屏幕输出设备的一个指令之一,可以控制屏幕输出流。ctrl+a,S
更多的时候是ctrl+s
,会发送XOFF
命令字符(ASCII码编号是19)告诉服务器不要在发送输出内容,也就是我们感受到的“锁定屏幕”,可以使用ctrl+a,q
或ctrl+q
再次发送XON
命令字符(ASCII码编号是17)实现解锁。
关于更多底层原理可以参考如下文章:
- Why does CTRL+S freeze your PuTTY screen? 较为形象的解释了为什么需要
XOFF/XON
- Session freezes when using the screen command 如何解锁,并禁用锁定
- 15 Flow Control@Screen User’s Manual 在screen命令的手册的第15章中,非常详细的解释了使用与原理,不过,很多内容比较底层,并不是很容易理解。不过如果
screen
命令使用得多的话,这个手册可以考虑多看看
Update(2010-10-08) :screen -ls查看列表
[supu@host u01]$ screen -ls
There is a screen on:
9348.supu (Detached)
1 Socket in /var/run/screen/S-supu.
可以通过kill -9 9348杀死该会话,然后通过screen -wipe清理被杀死的会话。
概述
一般,我们创建一个screen会话,然后连接会话并在会话下工作,这时候,我们可以随时挂起会话,去做别的事情,而且这个挂起的会话会一直在后台执行。而后又可以重新连接会话。下面是一个简单的How-to:
1. How-to
1.1 创建一个screen会话
screen -dmS supu
该命令,创建一个名为supu的会话,当时并不立刻进入会话。
1.2 连入会话
screen -r supu
连入会话后,就可以做任何想做的工作了。
1.3 挂起该终端
如果你在会话中,做了某个需要等很久的操作,或者你需要离开一段时间,这时就需要执行挂起操作了:
(ctrl+a) + D 先按下Ctr+a然后按D键(screen捕获ctrl+a,后面跟一个命令键D,可以通过ctrl+a ?查看更多)
1.4 其他相关
而后,可以重新使用-r参数回到会话;在会话中,用exit可以退出并关闭这个会话;还可以使用screen -ls命令来查看当前的全部会话状态。
2. 一些名词
Attached和Detached
一般screen -ls可以看到多个会话状态,例如:
[admin@my174 ~]$ screen -ls
There are screens on:
22872.supu (Detached)
18283.pts-3.my174 (Attached)
2 Sockets in /var/run/screen/S-admin.
Detached表示会话处于挂起状态,Attached表示有终端在连接会话。
“22872.supu”这是会话名。22872是一个唯一会话ID,后面supu是自定义的会话名,可以使用screen -r 22872等同于screen -r supu。
Enjoy!
参考:linux 技巧:使用 screen 管理你的远程会话 | man screen
Leave a Reply