本文参考自 阮一峰老师Tmux 使用教程
不仅仅是分屏那么简单。。。
和screen差不多,类似的还有Zellij, Rust 项目鉴赏: zellij 替代 screen, tmux 的终端工具
会话管理
将窗口与会话”解绑” 对于没有图形界面只有shell的场景(如服务器),尤其有用..这是其最核心解决的问题(窗口管理啥的只能算锦上添花的辅助功能)
即便是窗口关了,ssh断了,只要不重启机器, 不结束tmux进程,“会话中的任务”就一直还在 (不然之前这种case,只能用nohup,但用nohup无法恢复会话了~)
新建会话
第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。
使用编号区分会话直观,更好的方法是为会话起自定义的名称
tmux new -s 自定义的会话名称
分离会话
Ctrl+b d 或 tmux detach
会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行
tmux ls 可查看当前所有的 Tmux 会话
接入会话
tmux attach 用于重新接入某个已存在的会话
1 | 使用会话编号 |
或者简写:
$ tmux a -t 自定义的会话名称
杀死会话
tmux kill-session 用于杀死某个会话
1 | 使用会话编号 |
切换会话
tmux switch 用于切换会话
1 | 使用会话编号 |
重命名会话
tmux rename-session用于重命名会话
1 | tmux rename-session -t 0 <new-name> |
上面命令将0号会话重命名。
会话快捷键
下面是一些会话相关的快捷键
1 | Ctrl+b d:分离当前会话。 |
即最简的使用步骤:
- 1.新建会话tmux new -s my_session。
- 2.在 Tmux 窗口运行所需的程序。
- 3.按下快捷键Ctrl+b d将会话分离。
- 4.下次使用时,重新连接到会话tmux attach-session -t my_session。
窗格操作 & 窗口管理
这个用处没那么大,不过比较容易弄得很酷炫
对于tmux:
竖直分屏:
tmux
ctrl+b
shift+%
1 | Ctrl+b %:划分左右两个窗格。 |
1 | Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。 |
其实Mac上iterm2或者终端的分屏&窗口管理快捷键差不多够用了
对于iterm2:
- ⌘ + d : 垂直分屏
- ⌘ + shift + d : 水平分屏
- ⌘ + ] 和 ⌘ + [ 在最近使用的分屏直接切换
对于终端:
- command+w:关闭标签
- command+t:新建标签
- command+数字或command+左右方向键:切换标签
- command+enter:切换全屏
- command+f:查找
- command+d:垂直分屏
- command+shift+d:水平分屏
- command+option+方向键:切换屏幕
- ctrl+u:清除当前行
- ctrl+a:到行首
- ctrl+e:到行尾
- ctrl+w:从光标位置删除至开始
- ctrl+k:从光标位置删除至末尾
因为BlockScout这个服务的启动,需要非常多的环境变量,不想在bashrc中写…于是起一个窗口,只在里面配置env
1 | LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: |
如何让 Node Exporter在后台运行
要让Node Exporter在后台运行,可以使用以下方法之一:
使用nohup命令:登录到目标机器上,运行以下命令启动Node Exporter,并使用nohup命令将其放在后台运行:
1
nohup /path/to/node_exporter/node_exporter > /dev/null 2>&1 &
将
/path/to/node_exporter/node_exporter替换为实际的Node Exporter二进制文件路径。该命令将启动Node Exporter,并将其输出重定向到/dev/null,以避免在终端中显示输出信息。Node Exporter将在后台运行,并将其日志和错误信息保存在当前目录的nohup.out文件中。使用tmux或screen:tmux和screen是终端复用工具,可以创建多个终端会话,并在会话中运行Node Exporter。这样,即使断开SSH连接,Node Exporter仍将在后台持续运行。
使用tmux:首先安装tmux,然后运行以下命令:
1
tmux new-session -d -s node_exporter '/path/to/node_exporter/node_exporter'
将
/path/to/node_exporter/node_exporter替换为实际的Node Exporter二进制文件路径。此命令将创建一个名为”node_exporter”的tmux会话,并在会话中运行Node Exporter。要断开SSH连接后保持Node Exporter运行,请使用tmux attach-session -t node_exporter命令重新连接到tmux会话。使用screen:首先安装screen,然后运行以下命令:
1
screen -S node_exporter -dm /path/to/node_exporter/node_exporter
将
/path/to/node_exporter/node_exporter替换为实际的Node Exporter二进制文件路径。此命令将创建一个名为”node_exporter”的screen会话,并在会话中运行Node Exporter。要断开SSH连接后保持Node Exporter运行,请使用screen -r node_exporter命令重新连接到screen会话。
这些方法中的任何一种都可以将Node Exporter放在后台运行,并在SSH连接断开后继续保持运行。
tmux ls xxx 什么意思?
1 | tmux ls |
什么意思?
tmux ls 是用于列出当前正在运行的 tmux 会话的命令。在提供的输出中,有两个会话:
bridge-backend:这是一个 tmux 会话,它包含了一个窗口(window)。会话创建于 2023 年 6 月 18 日 20:32:21,窗口的尺寸为 159x35。l2explr:这是另一个 tmux 会话,它也包含了一个窗口。会话创建于 2023 年 6 月 18 日 20:56:31,窗口的尺寸为 195x39。
每个 tmux 会话可以包含多个窗口,而每个窗口可以再分为多个窗格(pane),以便同时运行多个命令或应用程序。通过 tmux,你可以在一个终端会话中创建和管理多个窗口和窗格,以提高终端的多任务处理能力。
tmux a -t l2explr 什么意思?
tmux a -t l2explr 是一个 tmux 命令,用于连接到一个已经存在的 tmux 会话。
解释该命令的各个部分:
tmux是一个终端复用工具,它允许你在一个终端窗口中同时运行多个终端会话。a是attach-session的缩写,表示连接到一个已经存在的 tmux 会话。-t l2explr指定要连接的目标会话。-t选项用于指定目标会话的标识符或名称。在这里,l2explr是会话的标识符或名称。
因此,tmux a -t l2explr 的意思是连接到一个名为 l2explr 的 tmux 会话。连接到会话后,你可以在其中执行命令、运行程序或查看会话中已经运行的内容。
请注意,要成功执行该命令,你需要在之前创建并运行了一个名为 l2explr 的 tmux 会话。如果会话不存在或已经关闭,该命令将无法连接到会话。
在tmux中ctrl+c什么意思
在 tmux 中,Ctrl+c 的作用是向当前的前台进程发送 SIGINT 信号,通常会终止或中断该进程。
具体来说,在 tmux 会话中按 Ctrl+c 会产生以下效果:
如果当前在运行一个进程或命令,那么这个进程会收到 SIGINT 信号而中断或退出。这和直接在终端中按 Ctrl+c 的效果一样。
如果没有在运行任何进程,那么它会终止当前的 tmux 窗口。
如果在 tmux 的命令提示符下按 Ctrl+c,会取消当前正在输入的命令。
如果在 tmux 复制模式下按 Ctrl+c,会退出复制模式,不复制任何内容。
在 vi 编辑器中,Ctrl+c 通常被映射为退出编辑器。
所以在 tmux 中,Ctrl+c 主要用来中断或退出前台进程、窗口或命令,这是它的默认行为。
与普通终端不同的是,在 tmux 中按 Ctrl+c 不会退出整个 tmux 会话,只会影响当前的窗口或进程。tmux 的会话和窗口会保持运行。
这使得在 tmux 中使用 Ctrl+c 更加安全方便,可以灵活中断各种进程,而不必担心退出整个工作环境。是 tmux 中非常常用的一个快捷键。
Ctrl-b d呢?
在 Tmux 中,Ctrl-b d 用于将当前的 Tmux 会话detach(分离),不会关闭整个 Tmux 会话,只是将当前会话暂时放到后台运行。
Ctrl-b 是 Tmux 的默认前缀键,d 为分离会话的快捷键。
按下 Ctrl-b d 后,当前 Tmux 会话会分离,返回到正常的 Shell 界面,但是该 Tmux 会话仍然在后台保持运行。
此时可以执行其他操作,不受该 Tmux 会话影响。当需要重新接入该会话时,可以使用:
1 | tmux attach |
它会重新连接刚才 detach 的会话。
Ctrl-b d 的主要作用就是快速将 Tmux 会话放到后台,暂时不看也不操作,但是会话保持打开状态。
这在需要频繁操作 Shell 时很有用,可以随时通过 attach 接入 Tmux 会话,也无需完全退出会话。
detach 和 attach 是 Tmux 管理多个会话的重要操作方式之一。Ctrl-b d 是 detach 的最常用快捷键。
fg命令呢
fg命令的作用是将后台运行的作业(job)调至前台继续运行。
当一个进程或命令被挂起到后台(使用 Ctrl + Z)或者直接使用 & 符号在后台运行时,可以使用fg将它调回前台。
fg 基本语法:
1 | fg [job_id] |
job_id 是要恢复的后台作业的编号或标识符,可以使用 jobs 命令查看。
如果不指定 job_id,fg 会将当前SESSION中最新挂起的作业调至前台。
例如:
1 | # 运行sleep命令并挂起到后台 |
fg 经常和 Ctrl + Z 配合使用,可以方便的将进程在前后台切换。
fg 只能恢复当前SESSION里的作业,对于使用 nohup 或用其他终端运行的作业无效。
另外 bg 命令类似,也可以将后台作业调至前台,不同的是 bg 是以后台模式运行。
我可以使用bg命令将后台作业调至前台吗?
不可以,bg 和 fg 的作用有点不同:
- fg (foreground) 命令是将后台作业调至前台运行
- bg (background) 命令是将后台作业调回后台运行
bg 不会将后台作业调至前台,它只是重启后台暂停的作业,让它在后台继续运行。
例如:
1 | # 后台运行 sleep |
这个例子中,sleep 被调到后台运行,然后通过 kill 命令暂停,bg 命令将其在后台重启,不会调至前台。
如果需要将后台作业调至前台运行,应该使用 fg(foreground) 命令:
1 | # 后台运行 sleep |
fg 会将后台 sleep 调到前台来运行,从而可以交互使用。
所以 bg 和 fg 的区别是:
- bg - 以后台模式运行作业
- fg - 以前台模式运行作业
如果要将后台作业调到前台,应当使用 fg 命令。
既然有bg 和 fg,为什么还需要tmux?
bg 和 fg 只能在当前终端会话内操作后台作业,但 tmux 的作用更加广泛和强大:
bg/fg 只影响当前 shell 会话,退出 shell 后后台作业也会退出。而 tmux 作业完全独立于 shell 会话之外。
tmux 可以保存多个会话并方便切换,每个会话可分割多个窗口,bg/fg 单纯在一个终端里操作不具备这些功能。
tmux 会话可以脱离接入,后台持续运行, bg/fg 必须在接入的终端内操作。
tmux 支持丰富的定制化,窗口及面板布局、按键绑定等,bg/fg 不具备定制功能。
tmux 作业之间可以方便切换及交互,bg/fg 只能操作当前会话的一个作业。
tmux 可以持久化会话状态、同步到多设备,bg/fg 不支持会话保存及同步。
总之,tmux 是全面的终端会话与多路复用管理工具。bg/fg 仅为最基础的作业控制命令,功能有限。如需长时间运行作业、多会话管理等,tmux 是必备之选。
tmux的会话保存和同步功能如何使用?
tmux 支持将会话状态保存到服务器,并可以在不同客户端间同步,主要通过 tmux 自带的 tmux server 和 tmux attach 来实现。
保存会话状态
可以使用 tmux detach 将当前会话分离保存在服务器上。这个会话会在后台持续运行。
也可以在退出 tmux 时使用 tmux kill-session -t session-name 保留指定的会话。
同步到其他客户端
在另一个客户端使用:
1 | tmux attach -t session-name |
它会连接到指定的 preserved session。
这样两个客户端就同步连接到了同一个 tmux 会话。
其它客户端操作
tmux ls列出保留的会话tmux attach连接到最近使用的会话tmux attach -d连接但不显示会话tmux kill-session -t session-name删除保留的会话
利用 tmux server 的会话保存及 attach 功能,可以便捷的在多个终端里同步管理长时间运行的任务,非常适合远程服务器的使用。
mix phx.server 什么意思?
mix phx.server 是 Elixir 的 Phoenix 框架提供的一个命令,用于启动 Phoenix 项目的服务器。
mix 是 Elixir 的构建工具,提供了许多命令来方便构建和管理 Elixir 项目。
phx.server 是 Phoenix 框架扩展提供的命令,在一个 Phoenix 项目中运行它会:
- 编译项目的 assets(如 js, css 等静态资源)
- 启动应用的端点(Endpoint)
- 监听端口并 Serve 请求
所以在 Phoenix 项目中,运行 mix phx.server 可以启动开发服务器,用于开发环境下运行和调试该 Phoenix 应用。
常见的用法有:
1 | # 简单启动服务器 |
使用 mix phx.server 可以大大简化 Phoenix 项目的启动流程,是开发 Phoenix 应用必备的命令。
killall webpack 什么意思?
killall webpack 这个命令的作用是终止机器上所有名为 webpack 的进程。
其中:
killall 是 Linux/Unix 系统中用来终止进程的命令。
webpack 是进程名称,指定要终止的进程。
killall 命令会终止系统中所有匹配指定名称的进程。
因此 killall webpack 将会终止系统中所有名为 webpack 的进程。
这对于终止某些异常启动多次的进程非常有用。
例如,在某些 Node.js 项目中,可能会同时启动多个 webpack 进程,这时可以用 killall webpack 来终止它们,然后重新单进程启动 webpack。
killall 通常需要 root 权限才能终止所有进程,如果是普通用户,它只能终止该用户启动的进程。
总之,killall webpack 是强制终止系统所有 webpack 进程的一个简便方法,可以用来重新启动 webpack 或清理进程。
另外还有与tmux类似的screen
关于screen
Screen version 4.00.03 (FAU) 23-Oct-06
Copyright (c) 1993-2002 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann
This program is free software; you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation; either version 2, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License along with this program (see the file
COPYING); if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to screen@uni-erlangen.de
原文链接: https://dashen.tech/2020/03/13/Tmux-使用小记/
版权声明: 转载请注明出处.