本文将对 tmux 与 screen 命令的使用进行比较,并简单的进行对比。

封面图片来源《妄想破绽》

前言

你是否有过在 SSH 连接远程终端的时候,需要同时后台运行多个程序,抑或是需要开启多个终端进行观察。那么你需要一个终端复用程序,比如 tmux 或者 screentmuxscreen 命令差不多,都是终端复用程序,你还可以在 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

对比

screentmux 都是终端复用,大体的功能上都差不多,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