Screen
screen
是一个功能强大的命令行工具,它允许你多次开启多个连接到同一个终端会话的窗口,并且能在没有活动连接时继续后台工作。这特别适用于远程工作环境,因为即使远程连接中断,由 screen
启动的会话也能继续运行。以下是一些基本的 screen
用法:
启动新会话
创建一个新的 screen
会话:
screen
也可以为会话命名,以使其易于识别:
screen -S <session-name>
替换 <session-name>
为你所选择的任何名称。
分离和重新连接会话
分离 (detach) 是指从 screen
会话中退出并让它在后台继续运行。你可以通过在 screen
会话中按 Ctrl-a
接着按 d
来分离当前会话。
要重新连接 (reattach) 到一个已存在的 screen
会话,使用:
screen -r <session-name>
如果不记得会话名字,可以使用 screen -ls
列出所有 screen
会话,然后选择一个会话名来重新连接。
强制连接处在‘attached’状态的会话
screen -r -d session_name
列出所有会话
查看所有的 screen
会话:
screen -ls
终止会话
要结束 screen
会话,只需在会话中退出 shell 即可。通常这可以通过输入 exit
命令,或者按 Ctrl-d
来完成。如果你在 screen
会话中分离了,你需要先重新连接会话,然后再退出。
向已创建的窗口发送命令
-
使用
screen
的stuff
命令:
screen -X
命令可以发送输入到screen
会话。如果你想把命令传递到特定窗口,可以使用stuff
命令。以下是具体步骤:首先,找到目标窗口的名称或编号:
screen -ls
输出可能如下:
12345.pts-0.hostname (Detached) 67890.pts-1.hostname (Attached)
假设我们要向会话
67890
(并且这个会话中有3个窗口)中的窗口1
发送命令:screen -S 67890 -p 1 -X stuff 'your_command_here\n'
其中:
-S 67890
指定会话 ID。-p 1
指定窗口编号。-X stuff 'your_command_here\n'
发送命令到窗口,并在命令末尾添加\n
以模拟回车键。
示例
-
向特定窗口发送命令:
# 发送命令到会话 67890 的窗口 1 screen -S 67890 -p 1 -X stuff 'ls -l\n'
注意
stuff
会直接把字符串发送到指定窗口的终端,因此要确保命令后面加上\n
来模拟回车。- 一些特殊字符可能需要转义,例如双引号、反斜杠等。
在会话中创建新窗口
在 screen
会话中,你可以打开多个窗口。要创建一个新窗口,可以在 screen
会话中按 Ctrl-a
然后按 c
。
在窗口间切换
在 screen
会话的窗口间切换,可以用 Ctrl-a
然后输入窗口编号或按 n
切换到下一个窗口,按 p
切换到上一个窗口。
分屏显示
screen
对于分屏同样支持。可以创建水平分屏或者垂直分屏:
- 水平分屏:
Ctrl-a
然后S
(大写的 ‘s’) - 垂直分屏:
Ctrl-a
然后|
(需要screen
支持垂直分割)
然后你可以使用 Ctrl-a
和方向键来在分割出的不同区域间切换。
复制和粘贴
screen
提供了一个简易的复制和粘贴机制:
- 进入复制模式:
Ctrl-a
然后[
- 使用方向键移动光标来选择文本
- 开始选择文本时按下
空格键
,然后移动光标来选择文本区域 - 完成选择后再次按
空格键
;复制的文本将被保存到screen
的缓冲区 - 粘贴缓冲区中的文本到
screen
中:Ctrl-a
然后]
定制化和配置
screen
允许通过 .screenrc
文件进行定制化。用户可以在自己的家目录下创建这个文件,以自定义键绑定、默认shell等设置。
以上是 screen
的一些基本用法概览。screen
是一个非常强大的工具,拥有更多的高级功能,你可以通过阅读官方文档或者 man screen
来了解更多。
Tmux
退出会话
在tmux
中,关闭一个会话(session)有几种方式,这取决于你当前处于会话内还是在会话之外。这里给出几种不同情况下关闭tmux会话的方法。
当你在会话内部:
-
退出所有窗格:在会话内的所有窗格(panes)中执行退出命令(如
exit
或按Ctrl
+D
),当最后一个窗格被关闭时,tmux会话也会随之结束。 -
使用tmux命令:按下
Ctrl
+b
,然后输入:
进入命令模式,输入kill-session
命令后按Enter
键。这会立即关闭当前会话。
当你在会话外部:
-
通过会话名称:如果你不在tmux会话内部但知道要关闭的会话名称,可以在终端中使用以下命令关闭指定的会话:
tmux kill-session -t 会话名称
这里,
会话名称
是你想关闭的tmux会话的名字。 -
通过会话ID:同样地,如果你知道会话的ID(在tmux里可以通过
tmux list-sessions
命令查看),也可以使用会话ID来指定要关闭的会话:tmux kill-session -t $会话ID
其中,
$会话ID
应替换为实际的会话ID,例如$0
。
批量关闭会话:
- 如果你想关闭所有tmux会话,可以使用
kill-server
命令。这个命令会结束tmux服务器及其所有会话,但需要谨慎使用,因为它会关闭你当前打开的所有tmux会话:tmux kill-server
请记住,关闭会话会导致其中所有窗格和窗口中正在运行的进程被终止。如果有任何重要的工作仍在进行中,请确保先适当保存或完成这些工作,再执行关闭操作。