思考:(linux) tmux 超級終端快速入門的宏觀思維

tmux 工具集合?
GitHub - rothgar/awesome-tmux: A list of awesome resources for tmux??

要點:

  • 習慣性思維的變換
  • 與宿主機之間的雙向復制、粘貼
  • 手動備份全部窗口,以及還原
  • 自定義窗格提示信息
  • TPM 插件的安裝思想
  • 別名

???

  • 在有些場景里,可能無法取代通用終端?為止?

tmux 目前在各大 linux 發行版中,都默認安裝了。這也許是目前最好用的終端了?

但是,由于它默認是為鍵盤用戶設計的;因此,如果要使用鼠標,還需要做進一步的配置。

  • 官方提供了鼠標的基本配置命令,但是,需要用戶自己在 .tmux.conf 配置文件中開啟。
  • 使用第三方插件,需要安裝插件官方的說明來安裝和配置。
  • tmux 官方提供了許多的用于功能擴展的基礎配置接口語句,類似于 API 接口函數,比如鼠標開啟設置,默認沒有開啟鼠標。這些可以由用戶自己,或者第三方插件開發者進行功能擴展的主要參考依據。

思維變換:

  • prefix 前綴(默認 Ctrl+b,也可自定義):相當于 Shift,Ctrl,Alt 之類的功能鍵。使用命令前綴來取代通常的功能按鍵的好處:避免與系統、或其他 app 發生快捷鍵沖突。
  • 還原窗口的操作:
    原生方法:
    ## tmux attach(或簡寫為 tmux a)用于重新連接到通過關閉終端、
    # 或者,之前通過 tmux detach(快捷鍵 Ctrl+b d)分離的會話,恢復其運行狀態。
    tmux a 	# SSH 斷連后恢復工作環境7 恢復斷開會話? 	
    tmux a -t session_name 	# 同時處理多個任務8 ?多會話管理? 	
    第三方方法:
    tmux-plugins / tmux-resurrect ,可以將當前 tmux 的所有場景進行備份和還原。prefix +Ctrl+s / prefix +Ctrl+r 備份/還原。這個插件可以持久化直到窗格所使用的歷史命令,雖然 tmux 官方也有相關的命令,只不過有些簡陋而已。
    注意區別:
    1. tmux a :直接進入上一次 tmux退出時自動默認保存的場景。
    2. tmux a -t session_name :指定進入的 sesssion。
    3. tmux-resurrect :Ctrl+r 恢復上一次用戶手動保存時的場景。
    4. tmux :創建新會話 session,并進入該session默認的 0號窗口。
  • tmux-plugins 有許多的插件,使用 TPM 的好處是不需要一個一個地下載和配置。只要在 ~/.tmux.conf 中設置好了;然后,在 tmux 終端里操作prefix --> Shift+i(大寫 I),下載和安裝就可以自動完成了(安裝過程需要連接到 github)。

  • 復制與粘貼的思維:tmux 自有剪切板,只能在 tmux 的各個會話,窗口,窗格之間進行使用。如果 tmux 要與宿主機之間進行雙向的復制與粘貼,還需要自行解決。
    在 tmux 終端里,prefix+Ctrl+c 指將 tmux 剪切板的內容拷貝到系統剪切板。在宿主機里,還需要 Ctrl+v才能完成粘貼的操作。
    prefix +Ctrl+v 指將系統剪切板的內容,拷貝到 tmux 當前有效的光標處(如果當前在 tmux 中的光標不在有效位置,在粘貼不成功)。

  • 鼠標復制操作:鼠標選擇文本,放開左鍵后,直接就已經完成的文本的復制了。點擊滾輪鍵,即粘貼。

    ## 鼠標操作。tmux 官方本身就具有的功能,但是,需要用戶自己開啟了,才能使用。
    # 啟用鼠標和 vi 鍵位(可選)
    set -g mouse on
    set-window-option -g mode-keys vi
  • 手動復制粘貼操作:Tmux 的兩種鍵位操作模式為 ?vi 模式? 和 ?emacs 模式?,用于控制文本編輯、復制粘貼等操作。
    復制文本 Ctrl+b ---松開,再按---> [(開口向右)--- vi 模式下按空格 ---> 然后,開始用方向鍵選擇需要復制的文本 ---> 敲 enter 結束復制。
    粘貼:在有效光標處按 Ctrl+b ---松開,再按---> ](開口向左)。
    ?vi 模式需要用戶自己在 .tmux.conf 里開啟。默認是? ?emacs 模式。

    ##  ~/.tmux.conf 中設置默認模式。全部注釋掉,就是默認的 emasc 模式。
    # 設為 vi 模式
    set-window-option -g mode-keys vi
    # 設為 emacs 模式
    set-window-option -g mode-keys emacs
    


    ?

需要關注:

  • 可選:tmux-continuum 自動備份、恢復插件,可能是版本不兼容,OS 定時服務,或是其他問題,沒有安裝成功。無關緊要的,因為可以使用手動的方式進行動備份、恢復。
  • ?tmux-yank 插件:Tmux plugin for copying to system clipboard. Works on OSX, Linux and Cygwin. 好像只是單向的。最后是直接采用 sh 腳本來實現。

  • 雖然可以自定義 prefix,將 Ctrl+b 改為其他的。但是,好像沒有必要吧?
    如果想追求快捷,就使用別名好了。只需要創建幾個別名就可以了,其他的都可以使用鼠標來操作。

  • tmux 這個工具火,所以有許多人為它提供了第三方插件擴展。但未必就是自己所需要的。工具而已,在漂亮它還是工具。

理解 Session、Window、Pane 關鍵區別

概念作用類比
會話(Session)管理多個窗口的集合瀏覽器“用戶配置文件”
窗口(Window)同一會話中的不同任務標簽頁瀏覽器“標簽頁”
窗格(Pane)同一窗口中的分屏終端終端“分屏”

掌握這三者的關系,可以高效利用 Tmux 管理復雜的終端工作流!

備注:

說實話,英文有幾十萬、上百萬的詞匯,中文字少,翻譯過來的概念就變成了4不象,難以理解。“會話”這個概念就是一個怪胎,不容易理解。

說白了,Session、Window、Pane 的本質,就是一種窗口的管理模式、或方式而已。

  • 為什么需要會話?本質上,相當于軟件開發工具 IDE 中的項目管理,暫且叫會話項目吧?它的好處就是在管理多個項目時,可以讓其中一個項目處在激活狀態,其他項目處在非激活狀態。在同一個會話中的各個窗口都是有一定關系的,或者人為地認為它們有關系。
    特點:每一個會話項目都是獨立的,關閉或打開不會影響其他的會話項目,就像在 IDE 中的項目管理那樣。每個項目,每個會話,都是一個獨立的被管理對象。
  • 為什么需要窗口?就像在同一個項目中,可以有多個源文件,每打開一個源文件,這個源文件就獨占了當前的窗口。也可以通過標簽圖標來切換不同的源文件顯示到當前的窗口。
  • 為什么需要窗格?在打開一個源文件之后,可能還需要打開其他的子窗口,如變量顯示窗口,信息輸出端口等等。窗格的效果也是如此。

與 IDE 不同,Session、Window、Pane 的具體用途,完全是由用戶自己來定義。

從窗口管理的角度來說,Session、Window、Pane 就是一種窗口的組織和管理方式而已。從使用的角度來說,任何一個窗口或窗格的用途,可以是一樣的。只不過將窗格定義為完全一樣的用途,有時是沒有什么意義的?

tmux 有一種模式,可以讓 N個窗口實現完全一樣的操作(需要開啟),好處是所有的終端端口,分別連接到不同的服務器,在一個窗格里執行 apt update,那么,所有窗格都在執行相同的命令。

  • 會話?相同與 VSCode 中的不同文件夾,每個文件夾最好就是被解釋、被作為是一個獨立的項目。
  • 窗口?同欄瀏覽。在同一個標簽菜單欄中進行瀏覽。通過在 tmux 的底部標簽菜單,可以同時瀏覽到不同的窗口名稱標簽。每個窗口,相當于在 IDE 中的不同源文件標簽菜單。
    類似于 firefox 瀏覽器中的網頁標簽,每一個標簽對應于一個完整的網頁,只不過 firefox網頁標簽默認在頂部,而 tmux 窗口標簽默認在底部。
  • 窗格?同窗瀏覽。一個窗口被分割成幾個子窗口。比如:docker build ,docker run ,docker log 等等,分別單獨占用一個窗口;這樣做的好處:與通常用途的終端窗口來比較吧,普通終端運行完了docker build ,docker run ,docker log之后,要想再次進行 docker build ,那么,就要按3次?向上箭頭,或者需要輸入命令,太麻煩了;打開多個終端,或多個標簽,相比之下也麻煩。如果在輸入了一堆命令之后,再想回到之前輸入過的某個命令,就更麻煩了。多窗口終端解決了這個痛點。

其他說明

  • 使用設置到 ~/.bashrc 中的自定義別名,高效輸入命令。當然,最好采用專門的別名文件。
    ## ~/.bashrc
    ## 加載目錄下所有別名文件
    for file in ~/aaa-my-all/my-alias/*; doif [ -f "$file" ]; then. "$file"fi
    done
    
  • 其他更多的功能,在一般使用場景里,應該不需要吧?
  • 其他命令格式,以后再補充。反正網絡上很容易就找到;

在不同窗格中的標識問題

? Easy Bash Prompt Generator??

用途:手動自定義 tmux 各個窗格的不同提示符

簡單用途沒有必要使用 如?Starship 工具吧?

## ~/.bashrc## 手動設置。其他工具設置,由于版本等問題,安裝配置,麻煩? 
custom_terminal?_prompt() {# "$1" 這里使用自定義內容local container_name="$1"# echo "custom_shell_prompt"export PS1="\[\e[33m\]"$1"\[\e[m\]:\[\e[32m\]\w\[\e[m\] \n \$ "  # 可替換為下面“可選設置”中的某條語句
}
alias ctp='custom_terminal?_prompt'## 注意,上面的函數,到此結束。不要復制下面的代碼。
##===========================
## 可選設置
# 色號178(比172稍亮)
export PS1="\[\e[38;5;178;1m\]$1\[\e[m\]:\[\e[32m\]\w\[\e[m\] \n \$ "
# 色號172
export PS1="\[\e[38;5;172;1m\]$1\[\e[m\]:\[\e[32m\]\w\[\e[m\] \n>\$ "
# 色號166(更飽和的橙)
export PS1="\[\e[38;5;166;1m\]$1\[\e[m\]:\[\e[32m\]\w\[\e[m\] \n \$ "

用法:

# 在終端里輸入
ctp 這里使用自定義內容 ctp dev
ctp log

??

將當前 tmux 所有的會話、窗口、窗格等等進行備份和恢復:還是使用插件方便

安裝插件 tmux-plugins /tpm :Tmux Plugin Manager

?
GitHub - tmux-plugins/tmux-resurrect: Persists tmux environment across system restarts.???

1. 下載到指定的目錄下

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

2. Reload TMUX environment so TPM is sourced: 刷新環境變量,類似于 source ~/.bashrc

# type this in terminal if tmux is already running
tmux source ~/.tmux.conf

3. Installing plugins? 安裝插件

上面提到的下載插件,只是下載了相當于是綠色軟件而已。

  • 已經相當于是綠色軟件了,為什么還需要安裝:因為該 app 的成功運行,還需要創建有關的文件夾、文件,以及環境變量設置等等,
  1. Add new plugin to ~/.tmux.conf with set -g @plugin '...'
  2. Press prefix + I (capital i, as in Install) to fetch the plugin. (此步驟,需要在 tmux 終端里運行)

You're good to go! The plugin was cloned to ~/.tmux/plugins/ dir and sourced.

4. 在?.tmux.conf 的末尾,需要加入

# 官方:Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)

run '~/.tmux/plugins/tpm/tpm'

與宿主機之間的 復制、粘貼 功能:自己搞一個更方便。

## 例子## ~/.tmux.conf
# V0.21
## # type this in terminal if tmux is already running
# tmux source ~/.tmux.conf# 啟用鼠標和 vi 鍵位(可選)
set -g mouse on
set-window-option -g mode-keys vi## ubuntu 只需要安裝 sudo apt install xsel
## 雖然也可以使用 wl-copy ,但需要安裝,沒有必要安裝那么多不同的剪切板。除非 xsel 不能用了?
# 綁定 Ctrl+B Ctrl+c 復制到系統剪貼板
bind C-c run-shell "\if tmux show-buffer > /dev/null 2>&1; then \if [ \"$XDG_SESSION_TYPE\" = wayland ] && command -v wl-copy >/dev/null; then \tmux save-buffer - | wl-copy; \else \tmux save-buffer - | xsel -i -b; \fi; \else \tmux display-message 'No content in tmux buffer!'; \fi"# 可選:綁定 Ctrl+B Ctrl+v 從剪貼板粘貼(反向操作)
bind C-v run-shell "\tmux set-buffer \"$(if [ \"$XDG_SESSION_TYPE\" = wayland ] && command -v wl-paste >/dev/null; then \wl-paste; \else \xsel -o -b; \fi)\"; \tmux paste-buffer"#### 啟用插件 TPM 
# ------------------------
## 啟用插件管理器
set -g @plugin 'tmux-plugins/tpm'
# 添加自動備份插件:確保 tmux-resurrect 在 tmux-continuum 之前加載:
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
## 啟用自動恢復
## set -g @continuum-boot 'on' # 設置了,不成功 https://github.com/tmux-plugins/tmux-continuum/blob/master/docs/automatic_start.md
set -g @continuum-restore 'on'## 修改備份路徑?
# set -g @resurrect-dir '~/.tmux_backups'#### 最后:運行 TPM
run '~/.tmux/plugins/tpm/tpm'

resurrect 插件備份與恢復

路徑搜索優先順序:

這個目錄需要用戶自己創建,優先級高。當這個目錄存在時,就不會再使用?~/.local/share/tmux/resurrect/ ,這個 linux app 的慣用伎倆。

~/.tmux/resurrect/

默認安裝時,使用這個目錄,優先級低。

~/.local/share/tmux/resurrect/

如果需要備份,就打包?resurrect 這個目錄好了。

last 這個鏈接文件,總是指向最新生成的 .txt 文件。修改這個鏈接文件的指向,可以恢復到指定的備份文件。一般沒有必要吧?

一般 linux 發行版默認已經安裝了 tmux。

可以

sudo apt install tmux

?如果必須的功能沒有的話,也可以編譯安裝最新版的。

$ sudo make uninstall
[sudo] password for test: ( cd '/usr/local/bin' && rm -f tmux )  # 手動刪除
## 安裝 失敗git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
# ---------------sudo make install
make[1]: Entering directory '/home/test/aa/aa/tmux'/usr/bin/mkdir -p '/usr/local/bin'/usr/bin/install -c tmux '/usr/local/bin'
make  install-exec-hook
make[2]: Entering directory '/home/test/aa/aa/tmux'
if test xmdoc = xmdoc; then \sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1 \>./tmux.1.mdoc; \
else \sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1| \gawk -f ./mdoc2man.awk >./tmux.1.man; \
fi
/usr/bin/mkdir -p /usr/local/share/man/man1
/usr/bin/install -c -m 644 ./tmux.1.mdoc \/usr/local/share/man/man1/tmux.1
make[2]: Leaving directory '/home/test/aa/aa/tmux'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/test/aa/aa/tmux'

tmux-3.5a

## 安裝 ok# tmux-3.5a
#-----------------------sudo make install
[sudo] password for test: 
make[1]: Entering directory '/home/test/Downloads/aazzz/tmux-3.5a'/usr/bin/mkdir -p '/usr/local/bin'/usr/bin/install -c tmux '/usr/local/bin'
make  install-exec-hook
make[2]: Entering directory '/home/test/Downloads/aazzz/tmux-3.5a'
if test xmdoc = xmdoc; then \sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1 \>./tmux.1.mdoc; \
else \sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1| \gawk -f ./mdoc2man.awk >./tmux.1.man; \
fi
/usr/bin/mkdir -p /usr/local/share/man/man1
/usr/bin/install -c -m 644 ./tmux.1.mdoc \/usr/local/share/man/man1/tmux.1
make[2]: Leaving directory '/home/test/Downloads/aazzz/tmux-3.5a'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/test/Downloads/aazzz/tmux-3.5a'

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82493.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82493.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82493.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python實例題:Python協程詳解公開課

目錄 Python實例題 題目 課程目標 課程內容規劃 1. 課程開場(5 分鐘) 2. 基礎概念講解(15 分鐘) 并發與并行: 線程與進程: 3. Python 協程的實現方式(20 分鐘) 生成器實現…

AI時代的數據可視化:未來已來

你有沒有想過,數據可視化在未來會變成什么樣?隨著人工智能(AI)的飛速發展,數據可視化已經不再是簡單的圖表和圖形,而是一個充滿無限可能的智能領域。AI時代的可視化不僅能自動解讀數據,還能預測…

強化學習PPO算法學習記錄

1. 四個模型: Policy Model:我們想要訓練的目標語言模型。我們一般用SFT階段產出的SFT模型來對它做初始化。Reference Model:一般也用SFT階段得到的SFT模型做初始化,在訓練過程中,它的參數是凍結的。Ref模型的主要作用…

邊緣計算從專家到小白

“云-邊-端”架構 “云” :傳統云計算的中心節點,是邊緣計算的管控端。匯集所有邊緣的感知數據、業務數據以及互聯網數據,完成對行業以及跨行業的態勢感知和分析。 “邊” :云計算的邊緣側,分為基礎設施邊緣和設備邊緣…

Windows:Powershell的使用

文章目錄 零、格式化輸出命令1、Format-List(別名:fl) 一、服務管理SC命令二、軟件管理命令三、權限管理命令1、Get-Acl2、Set-Acl 總結 零、格式化輸出命令 1、Format-List(別名:fl) 可通過管道符傳遞對象…

實現在h5中添加日歷提醒:safari喚起系統日歷,其它瀏覽器跳轉google日歷

需求:點擊按鈕后,將設定的一些信息插入到系統日歷的日程安排中。 調研過程 先google了一段時間,了解該需求大概的實現方式。可以創建日歷文件,在點擊的時候下載該日歷文件,看起來還比較復雜,并且由于不具…

【Bluedroid】藍牙 HID 設備服務注冊流程源碼解析:從初始化到 SDP 記錄構建

本文圍繞藍牙 HID(人機接口設備)服務注冊流程,詳細解析從 HID 服務啟用、設備初始化、L2CAP 通道注冊到 SDP(服務發現協議)記錄構建的全流程。通過分析關鍵函數如btif_hd_service_registration、BTA_HdEnable、HID_Dev…

Win10無法上網:Windows 無法訪問指定設備、路徑或文件。你可能沒有適當的權限訪問該項目找不到域 TEST 的域控制器DNS 解析存在問題

目錄 一.先看問題 二.解決問題 三.補充備用 一.先看問題 Win08有網且已經加入域 Win10無網并且找不到域(說明:Win10我之前已經加入過域的,并且能夠上網,但每次在宿舍和教室切換校園網,就會導致只有Win10無網&#…

M0基礎篇之ADC

本節課使用到的例程 一、Single模式例程基本配置的解釋 在例程中我們只使用到了PA25這一個通道,因此我們使用的是Single這個模式,也就是我們在配置模式的時候使用的是單一轉換。 進行多個通道的測量我們可以使用Sequence這個模式。 二、Single模式例程基…

淺談裝飾模式

一、前言 hello大家好,本次打算簡單聊一下裝飾者模式,其實寫有關設計模式的內容還是蠻有挑戰性的,首先呢就是小永哥實力有限擔心說不明白,其次設計模式是為了解決某些問題場景,在當前技術生態圈如此完善的情況下&#…

04 mysql 修改端口和重置root密碼

當我們過了一段時間,忘了自己當初創建的數據庫密碼和端口,或者端口被占用了,要怎么處理呢 首先,我們先停止mysql。 一、修改端口 打開my.ini文件,搜索port,默認是3306,根據你的需要修改為其他…

【基于 LangChain 的異步天氣查詢1】異步調用 Open-Meteo API 查詢該城市當前氣溫

目錄 一、功能概述 二、文件結構 三、城市天氣實時查詢(運行代碼) weather_runnable.py main.py 運行結果 四、技術亮點 五、使用場景 一、功能概述 它實現了以下主要功能: 用戶輸入地點(城市名) 構造提示詞…

Spark的三種部署模式及其特點與區別

Spark支持多種集群部署模式,主要分為以下三類: 部署模式特點適用場景資源管理依賴Local模式單機運行,所有進程(Driver、Executor)在同一個JVM中開發調試、小規模數據測試無集群資源管理,僅本地線程模擬無需…

再度深入理解PLC的輸入輸出接線

本文再次重新梳理: 兩線式/三線式傳感器的原理及接線、PLC的輸入和輸出接線,深入其內部原理,按照自己熟悉的方式去理解該知識 在此之前,需要先統一幾個基礎知識點: 在看任何電路的時候,需要有高低電壓差&…

dockerfile編寫入門

dockerfile 入門 前提已經知道常用的docker和linux命令 如容器的創建,運行, linux的文件命令,會上傳文件到linux等等 dockerfile簡介 之前我們所使用的鏡像都是別人構建好的,但是別人構建好的鏡像不一定能滿足我們的需求。為了滿足我們自己的某一些需求&#xff…

jenkins 啟動報錯

java.lang.UnsatisfiedLinkError: /opt/application/jdk-17.0.11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory。 解決方案: yum install freetype-devel 安裝完成之后重啟jenkins。

Harness: 全流程 DevOps 解決方案,讓持續集成如吃飯般簡單

引言 在當今快速發展的軟件開發世界中,高效的 DevOps 工具變得越來越重要。Harness 作為一個開源的運維平臺,為開發和運維團隊提供了從代碼托管到 CI/CD 的全流程解決方案,同時實現自動化的開發環境和制品管理。這種集中化的工具可以顯著減少運維難度,提高團隊效率,真正解…

Kubernetes生產實戰(十七):負載均衡流量分發管理實戰指南

在Kubernetes集群中,負載均衡是保障應用高可用、高性能的核心機制。本文將從生產環境視角,深入解析Kubernetes負載均衡的實現方式、最佳實踐及常見問題解決方案。 一、Kubernetes負載均衡的三大核心組件 1)Service資源:集群內流…

單脈沖前視成像多目標分辨算法——論文閱讀

單脈沖前視成像多目標分辨算法 1. 論文的研究目標及實際意義1.1 研究目標1.2 實際問題與產業意義2. 論文的創新方法及公式解析2.1 核心思路2.2 關鍵公式與模型2.2.1 單脈沖雷達信號模型2.2.2 匹配濾波輸出模型2.2.3 多目標聯合觀測模型2.2.4 對數似然函數與優化2.2.5 MDL準則目…

Java后端程序員學習前端之JavaScript

1.什么是JavaScript 1.1.概述 JavaScript是一門世界上最流行的腳本語言javaScript 一個合格的后端人員&#xff0c;必須要精通JavaScript 1.2.歷史 JavaScript的起源故事-CSDN博客 2.快速入門 2.1.引入JavaScript 1.內部標簽 <script>//.......</script> --…