终端、会话、screen虚拟会话都是些什么?
平时敲命令的工具就是一个终端,一个窗口就相当于一个终端会话,一旦关闭窗口或断开连接,这个会话就会关闭,会话中的工作会停止,历史记录也不会保存。 但screen创建的虚拟会话可以在后台运行,就算关闭了命令窗口或断开了ssh连接,会话中的工作也会继续,记录也能保存,再次用“screen -r + 会话名称” 就可以切换回该会话界面。 所以在screen虚拟会话上操作,就不怕网络不好导致ssh突然断开,也不用一直开着终端软件。
screen的作用:
- 会话恢复:终端关闭或连接中断不会导致会话停止,它能在后台运行,能保留会话的历史记录
- 多窗口:自由切换多个独立的会话
- 会话共享:可以同时在多个不同终端上共享一个会话、
安装
$ sudo apt-get update
$ sudo apt-get install screen
用法
screen + 参数 +(会话名称/ID)
常用的: -S name //新建并启动一个名为name的会话 -ls //显示所有会话,会话名的左边是会话id,状态:Attached或Detached -d name或id //离线name会话,状态变成Detached -r name或id //恢复到name会话,状态变成Attached -x name或id //共享name会话
exit //停止并删除当前会话
screen kill id 删除指定会话
如果screen -r无法恢复会话,显示
就先screen -d离线该会话,再screen -r恢复
查看当前终端或会话的属性
$ echo $STY //如果回显是空的,那么就是在真·终端里,否则会显示当前的会话 ID和名称.
$ echo $TERM //回显当前终端的种类。
补充
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 重新联接到已断开的 screen 实例,如果有多个已断开的 screen 实例,则用 区分
Ctrl-a S 新建水平分割窗口
Ctrl-a Tab 切换窗口
Ctrl-a X 关闭当前窗口
Ctrl-a + 扩大当前窗口,默认增加3行
Ctrl-a - 缩小当前窗口,默认减小3行
Ctrl-a :screen 新建 screen 终端,并运行命令
Ctrl-a :resize 改变当前窗口高度为
Ctrl-a :quit 退出 screen,将关闭所有 screen 终端,结束其中所有任务
Ctrl-a 进入选择模式
或 Ctrl-u 光标上移一页
或 Ctrl-d 光标下移一页
或 h 光标左移一格
或 j 光标下移一行
或 k 光标上移一行
或 l 光标右移一格
选择开始,选择结束
退出选择模式
Ctrl-a ] 粘贴选择的内容
[screen:]
- 用screen -dmS session_name 来建立一个处于断开模式下的会话(并指定其会话名)。
- 用快捷键CTRL-a d 来暂时断开当前会话。
- 用screen -r session_name 来重新连接指定会话。
screen -x session_name 连接一个非断开模式的会话
- 用screen -list 来列出所有会话。
C-a ? 显示所有键绑定信息
C-a w 显示所有窗口列表
C-a K ==exit 杀掉当前窗口
C-a c 创建一个新的运行shell的窗口并切换到该窗口
C-a C-a 切换到之前显示的窗口
C-a n 切换到下一个窗口
C-a p 切换到前一个窗口
C-a 0..9 切换到窗口0..9
C-a a 发送 C-a到当前窗口
C-a [ 进入拷贝/回滚模式
-list|-ls 列出现有screen会话,格式为pid.tty.host
-wipe [match] 同-list,但删掉那些无法连接的会话
-d|-D [pid.tty.host] 不开启新的screen会话,而是断开其他正在运行的screen会话
-r sessionowner/ [pid.tty.host] 重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要
指定sessionowner,需要setuid-root权限
-h num 指定历史回滚缓冲区大小为num行