本文将对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