如何在 Linux 上使用 tmux(以及為什麼它比屏幕更好)
已發表: 2022-01-29 Linux tmux
命令是一個終端多路復用器,例如screen
。 它的擁護者很多,而且直言不諱,因此我們決定將兩者進行比較。 tmux
真的更好,還是只是喜歡你所知道的?
tmux 與屏幕
tmux
和 GNU screen
命令都是終端多路復用器。 它們允許您在單個終端窗口中擁有多個窗口,並在它們之間來回跳轉。 一個窗口可以分為多個窗格,每個窗格都為您提供一個獨立的命令行。
您還可以分離會話,使其成為在後台運行的無頭實體——您甚至可以關閉啟動它的終端窗口。 準備好後,您可以打開一個新的終端窗口並重新附加仍在運行的會話。 您也可以通過 SSH 連接執行此操作。
您可以在一台計算機上分離會話,回家,然後登錄到遠程計算機。 重新連接後,您可以重新附加後台會話並再次以交互方式使用它。
什麼是屏幕命令?
screen
命令也是一個終端多路復用器,它包含許多選項。 有關您可以用它做的所有事情的內幕,請查看我們的深入文章。
這一次,我們將專注於tmux
。 隨著我們的繼續,我們將提到screen
如何處理相同的特性或功能。
只有一件事讓我們對screen
感到惱火。 當我們談到它時,我們將介紹它,並看看tmux
的表現是否更好。
相關:如何使用 Linux 的 screen 命令
安裝 tmux
雖然screen
通常默認安裝在流行的 Linux 發行版上,但tmux
不是。 要在 Ubuntu 上安裝tmux
,請鍵入以下內容:
sudo apt-get install tmux
在 Manjaro 上,您可以使用pacman
:
sudo pacman -Sy tmux
在 Fedora 31 上,已經安裝了tmux
。
啟動 tmux 會話
要啟動tmux
,只需鍵入它並按 Enter 鍵:
多路復用器
當您處於tmux
會話中時,終端窗口將顯示一個狀態欄。
狀態欄的右側顯示主機名、時間和日期。 左側顯示以下會話相關信息:
- [0]:這是會話名稱。 默認情況下,它們從零開始編號。 我們將介紹如何為下面的會話賦予有意義的名稱。
- 0:bash*: 0 表示這是此會話中的第一個窗口。 此會話中運行的唯一進程是
bash
。 如果你運行一個程序,它的名字就會出現在這裡。 星號 (*) 表示這是您正在查看的窗口。 每次在tmux
會話中創建一個新窗口時,它的窗口編號和在其中運行的程序的名稱都會添加到狀態欄中。
默認情況下, screen
命令不會為您提供狀態欄。 您必須盲目飛行並依靠自己的智慧知道發生了什麼,這需要一些練習。 (除非您配置自己的狀態欄。)
從好的方面來說,您不會失去一行終端窗口空間。 當然,您通常會擴展終端窗口以使使用終端多路復用器變得有價值。 在這種情況下,狀態欄丟失一行並不是什麼大問題。 我們將終端窗口的圖像保留為默認大小,以便您查看信息。
使用擊鍵向tmux
發出命令,這有兩個部分。 首先,您按下 Ctrl+B 來引起tmux
的注意。 然後您快速按下下一個鍵向tmux
發送命令。 命令是通過按字母、數字、標點符號或箭頭鍵給出的。
在screen
中也是一樣的,只是你按下 Ctrl+A 來引起它的注意。
要關閉窗口,請按 Ctrl+B,然後快速按 X。狀態欄變為琥珀色。 然後系統會提示您確認是否要終止該窗口。
如果您改變主意,請按 Y 關閉窗口或按 N。 之後您不必按 Enter 鍵; Y 或 N 足以記錄您的選擇。
如果按 Y,則窗口關閉。 因為這是此會話中的唯一窗口,所以會話終止。
tmux
會話已關閉,您將返回到啟動tmux
的命令行。 您將在終端窗口中看到“[exited]”。
這似乎是在說明顯而易見的事情,但它確認您已經關閉了會話並且沒有讓它分離並運行。 我們將在下面討論分離會話。
啟動一個命名的 tmux 會話
如果您定期啟動多個tmux
會話,您將很快體會到為每個會話賦予有意義的名稱的功能。 您也可以在screen
中命名會話,但它們不會顯示在會話窗口的任何位置。
要使用會話名稱啟動tmux
,請使用new
(新會話)命令和-s
(會話名稱)選項。 我們的會話將被稱為“geek-1”,因此我們輸入以下內容:
tmux 新 -s geek-1
當tmux
會話加載時,“geek-1”顯示為最左側狀態欄中的第一個條目。
添加更多窗口
要在當前會話中創建一個新窗口,請按 Ctrl+B,然後按 C。您將在當前會話中獲得一個空白終端窗口。 所以我們將在這個新窗口中運行一些東西,讓我們使用-w
(跟隨)選項啟動dmesg
命令:
dmesg -w
現在我們在會話中有兩個窗口; 一個運行top
,另一個運行dmesg
。 不過,我們一次只能看到一個(稍後會詳細介紹)。
看一下狀態欄的左側。 我們仍在“geek-1” tmux
會話中。 在窗口 0 中,top 正在運行,而在窗口 1 中, dmesg
正在運行。 dmesg
後面的星號 (*) 告訴我們哪個窗口是可見的。
要在窗口之間跳轉,請按 Ctrl+B,然後按以下鍵之一:
- N :顯示下一個窗口。
- P:顯示上一個窗口。
- 0 到 9:顯示編號為 0 到 9 的窗口。
您還可以從列表中選擇一個窗口。 如果您按 Ctrl+B,然後按 W,則會出現一個窗口列表。
要移動琥珀色高亮條,請按向上或向下箭頭、Home 或 End。 顯示屏的底部顯示突出顯示窗口中內容的預覽。
按 Enter 移動到突出顯示的窗口,或按 Esc 離開窗口列表而不切換。
分離和附加會話
如果您按 Ctrl+B,然後按 D,您將分離會話。 它將繼續在後台運行,但您將無法看到它或與之交互。
我們已經在會話中開始了top
,所以我們有一個正在運行的過程來演示。 然後,我們按Ctrl+B,再按D。會話消失,變成後台會話。
我們回到原來的終端窗口。 tmux
有一條消息告訴我們會話已分離。 它也讓我們想起了我們給會議起的名字。 這很方便,因為我們用它來附加到後台會話,然後將其恢復為交互式會話。
要附加一個分離的會話,我們將使用帶有-t
(目標會話)選項的不言自明的attach-session
命令。 我們還將提供我們希望召回的會話的名稱。
我們輸入以下內容:
tmux 附加會話 -t geek-1
我們的會話返回並再次成為可見的交互式會話。
當您附加會話時,您在分離會話之前啟動的任何長時間運行或持續的進程仍將在後台運行(除非它們已完成)。
screen
可以做到這一點,但不那麼直觀。
處理多個會話
讓我們打開另一個終端窗口,並啟動一個名為“geek-2”的新tmux
會話:
tmux 新 -s geek-2
在該會話中,我們將啟動dmesg
:
dmesg -w
現在,我們有了最初的“geek-1” tmux
會話,以及一個名為“geek-2”的新會話。
狀態欄向我們展示了這個會話被稱為“geek-2”,它有一個運行dmesg
的窗口。
如果我們按 Ctrl+B,然後按 D,我們將分離該會話。
回到“geek-1” tmux
會話,我們按 Ctrl+B,然後按 S 以查看tmux
會話列表。
需要明確的是,這是一個會話列表。 我們之前看到的類似顯示是單個會話中的窗口列表。
您可以通過按向上和向下箭頭、Home 和 End 來移動琥珀色高亮條。 底部顯示突出顯示的會話中內容的預覽。
如果您按右箭頭,則會顯示突出顯示的會話的窗口。
按 Enter 移動到突出顯示的會話或窗口,或按 Esc 離開會話列表而不更改會話。 如果您選擇一個新會話,您當前的會話將分離,而您選擇的會話將附加。
在我們這樣做之前,我們分離了“geek-2”會話。 但是,您可以使用仍附加到其原始終端窗口的會話來執行此操作。 當您這樣做時,任何屏幕更改都將同時出現在兩個tmux
會話中。
screen
命令也可以通過一組類似的命令來執行此操作。
使用窗格
如果按 Ctrl+B,然後按雙引號 (“”),則會將窗口水平拆分為兩個窗格。
這只影響當前窗口; 會話中的其他人不會改變。 我們在頂部窗格中使用了tmux ls
命令來列出此會話中的窗口。 有兩個,狀態行告訴我們我們在第一個窗口中。 如果我們通過按 Ctrl+B 跳到窗口零,然後按 0(零),我們會看到它就像我們離開它一樣。
這是兩個獨立的命令行,而不是一個窗口中的兩個視圖; 它們是不同的、獨立的殼。 我們可以通過在每個窗格中運行不同的命令來顯示這一點。
我們輸入以下內容:
uname -a
ls -hl
要從一個窗格移動到另一個窗格,請按 Ctrl+B,然後按向上、向下、向左或向右箭頭。
如果您按 Ctrl+B,然後按百分號 ( %)
,它將垂直拆分當前窗格。
按 Ctrl+B,然後按 Q 使tmux
短暫閃爍每個窗格的編號。
這些數字用於tmux
的提示和消息。 按 Ctrl+B,然後按 X 關閉當前窗格。 狀態欄變為琥珀色,系統會提示您確認是否要關閉該窗格編號。 按 Y 刪除窗格,或按 N 保留原樣。
如果按 Y,則刪除窗格。
screen
命令也有窗格,但同樣,它們使用起來不太直觀。 screen
讓我們煩惱的事情是,如果您使用窗格分離會話,當您重新連接該會話時它們會消失。 這很快就會變老。
A Ctrl+B 備忘單
我們在下麵包含了您可以在tmux
中使用的不同命令的備忘單。
會話命令
- S:列出會話。
- $:重命名當前會話。
- D:分離當前會話。
- Ctrl+B,然後 ?:在
tmux
中顯示幫助頁面。
窗口命令
- C:創建一個新窗口。
- ,:重命名當前窗口。
- W:列出窗口。
- N:移動到下一個窗口。
- P:移動到上一個窗口。
- 0 到 9:移動到指定的窗口號。
窗格命令
- %:創建水平分割。
- “:創建垂直分割。
- H 或向左箭頭:移動到左側的窗格。
- I 或右箭頭:移動到右側的窗格。
- J 或向下箭頭:移動到下面的窗格。
- K 或向上箭頭:移動到上面的窗格。
- 問:簡要顯示窗格編號。
- O:按順序在窗格中移動。 每按一次都會帶你到下一個,直到你循環瀏覽所有這些。
- }:將當前窗格的位置與下一個交換。
- {:交換當前窗格與前一個窗格的位置。
- X:關閉當前窗格。
他們如何比較
在功能方面, screen
和tmux
的性能相似並且提供相同的主要功能。 您訪問這些功能的方式明顯不同。 tmux
提供了更流暢、更舒適的方式來獲取各種功能。 然而,這不是唯一的區別。
在tmux
中重命名會話和窗口的功能非常簡潔,並且當您重新附加會話時它會保留窗格這一事實改變了遊戲規則。
另一方面,當您分離並重新附加會話時, screen
會完全丟失窗格。 這幾乎很煩人,足以讓你一開始就避免分離。
tmux
還有很多其他功能,包括其極其靈活的腳本功能。 你有責任自己去看看。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev ·查看·字符串·類型·重命名· zip ·解壓縮· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重新啟動·停止·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦