本文将对 tmux 与 screen 命令的使用进行比较,并简单的进行对比。
封面图片来源《妄想破绽》
前言
你是否有过在 SSH 连接远程终端的时候,需要同时后台运行多个程序,抑或是需要开启多个终端进行观察。那么你需要一个终端复用程序,比如 tmux 或者 screen。tmux 和 screen 命令差不多,都是终端复用程序,你还可以在 SSH 断开后重新连接端口继续执行命令。
安装
如果你的 Ubuntu 没有 tmux 或者 screen,那么你可以使用如下命令进行安装
tmux:
1 | sudo apt install tmux |
screen:
1 | sudo apt install screen |
使用
tmux
简单创建
1 | tmux |

[0] 0:zsh* : 意味着现在是 session name 为 0,session number 为 0,环境为 zsh,* 意味着当前窗口
“DESKTOP-7A4A8RD” : hostname
18:59 28-Mar-21 : 当前时间
创建一个有名字的 session
1 | tmux new -s <session-name> |
此时可以看到原本 [0] 里面的 0 变成了设置的 session-name
竖直分离窗口
在 tmux 窗口中按下 ctrl+b 然后再按下 %

水平分离窗口
在 tmux 窗口中按下 ctrl+b 然后再按下 "

展示会话编号
在 tmux 窗口中按下 ctrl+b 然后再按下 q

切换窗口
在 tmux 窗口中按下 ctrl+b 然后再按下 o
关闭窗口
在 tmux 窗口中按下 ctrl+b 然后再按下 x 或者 ctrl+d
列出已有 tmux
在 tmux 窗口中按下 ctrl+b 然后再按下 s

分离会话
在 tmux 窗口中按下 ctrl+b 然后再按下 d 或者
1 | tmux detach |
重连会话
1 | tmux attach -t <session-name> |
杀死会话
1 | tmux kill-session -t <session-name> |
screen
1 | screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s <shell>][-S <作业名称>] |
wsl 中使用 screen 提示权限不足可以参考本文末尾的 wsl 中提示 screen 需要 root 权限解决
创建简单窗口
在 screen 窗口中按下 ctrl+a 然后再按下 c
1 | screen |

创建终端并运行命令
1 | screen vi main.c |

离开 screen 终端
在 screen 窗口中按下 ctrl+a 然后再按下 d
显示已经创建的 screen
在 screen 窗口中按下 ctrl+a 然后再按下 "
1 | screen -ls |


重新连接会话
1 | screen -r <id> |
水平分割
在 screen 窗口中按下 ctrl+a 然后再按下 |,只会分割而不会创建新的 session。使用 ctrl+a 然后按下 tab 切换窗口,ctrl+a 然后按下 c 新建 session。下同

screen 竖直分割
在 screen 窗口中按下 ctrl+a 然后再按下 S。注意大写

分割中切换窗口
使用 ctrl+a 然后按下 tab 切换窗口
杀死 session
使用 ctrl+d
对比
screen 和 tmux 都是终端复用,大体的功能上都差不多,tmux 是 BSD 协议,screen 是 GNU 协议。从个人感觉上 tmux 对个人更友好,在分割窗口 时候自动创建新会话,同时有状态条显示,还可以自动命名窗口,这是 screen 没有的。screen 可以和其他用户分享会话,而 tmux 不行。
wsl 中提示 screen 需要 root 权限解决
参考 superuser
1 | mkdir ~/.screen && chmod 700 ~/.screen |
可以把下面这一句放进 ~/.bashrc
1 | export SCREENDIR=$HOME/.screen |
参考
Tmux vs. Screen tool comparison
How to Use tmux on Linux (and Why It’s Better Than Screen)
使用 tmux 分屏(既可以左右分屏,也可以上下分屏)
Tmux 使用教程
Linux screen 命令
Cannot make directory ‘/var/run/screen’: Permission denied