screen

screen 是一個非常強大的終端多工工具,允許你在一個單一終端會話中運行多個進程,並且能夠在不同的會話之間切換或恢復會話。以下是 screen 的一些基礎用法,包括新建會話、進入會話、列出會話和刪除會話等。

1. 新建會話

創建一個新的 screen 會話並進入它:

1
screen

這將創建一個默認的會話,並打開一個新窗口,你可以在其中運行命令。

創建帶名稱的會話

你可以給會話指定一個名稱,方便後續管理:

1
screen -S my_session

這會創建一個名為 my_sessionscreen 會話。


2. 進入已存在的會話

如果你有一個正在運行的會話,並且想重新進入,可以使用以下命令:

1
screen -r

這將恢復你最近分離的會話。

恢復指定名稱的會話

如果你有多個 screen 會話在運行,可以通過會話名稱來恢復指定會話:

1
screen -r my_session

如果有多個會話,screen -r 會要求你選擇特定會話。


3. 分離會話

你可以從當前的 screen 會話中退出,而不會關閉會話,這叫做分離會話。使用快捷鍵:

1
Ctrl-a d

這將把你從當前的 screen 會話中分離,會話仍在後台運行。


4. 列出所有會話

你可以查看當前正在運行的所有 screen 會話:

1
screen -ls

這會列出所有活動的 screen 會話及其編號。例如:

1
2
3
4
There are screens on:
3456.my_session (Detached)
1234.another_session (Detached)
2 Sockets in /var/run/screen/S-username.

5. 刪除會話

要刪除(終止)一個 screen 會話,你有幾種方式:

退出當前會話

如果你處於一個 screen 會話中,並希望結束它,可以簡單地輸入 exit 命令來終止該會話:

1
exit

這會關閉該會話的所有窗口並終止會話。

刪除指定會話

你可以從外部終止指定的 screen 會話:

1
screen -S my_session -X quit

這將終止名為 my_sessionscreen 會話。

終止所有會話

如果你想終止所有 screen 會話,可以使用以下命令:

1
killall screen

這會殺死所有運行中的 screen 會話。


6. 在會話內操作

screen 有許多內部命令,可以幫助你在一個會話中進行操作:

  • 新建窗口:在當前會話中創建一個新窗口(類似於 tmux 的窗口),快捷鍵:

    1
    Ctrl-a c
  • 切換窗口:在不同窗口間切換,快捷鍵:

    1
    2
    Ctrl-a n  # 切換到下一個窗口
    Ctrl-a p # 切換到上一個窗口
  • 關閉窗口:在當前窗口內,執行 exit,這會關閉當前窗口:

    1
    exit

7. 自動恢復屏幕尺寸

有時,當你從不同大小的終端恢復 screen 會話時,屏幕尺寸不會自動調整。你可以通過以下快捷鍵來手動調整屏幕尺寸:

1
Ctrl-a :resize

這將使 screen 自動適應當前終端的尺寸。

8. 進入已經附加的會話

你在使用 screen 命令时遇到了一个问题。错误信息显示存在一个名为 27537.test 的会话,但该会话已附加在另一个终端上,因此无法重新连接。

  1. 查看当前运行的 screen 会话

    1
    screen -ls
  2. 强制分离已附加的会话
    如果你想强制分离这个会话,可以使用:

    1
    screen -d 27537.test

    这会将会话从当前终端中分离出来。

  3. 重新连接会话
    然后,你可以再次尝试连接:

    1
    screen -r 27537.test

小結

screen 非常靈活,可以用來保持長時間運行的進程不中斷,例如長時間運行的腳本或伺服器應用程序。同時,它的分離和恢復功能使你可以在不同終端之間輕鬆切換。如果你熟悉 tmux,你會發現它們有很多相似的功能,但 screen 更加簡單且內置於大多數 Linux 發行版中。

tmux 简要用法

1. 查看會話歷史記錄

tmux 有一个内置的滚屏缓冲区,你可以通过进入复制模式(Scrollback Mode)来查看会话中的历史输出。

步骤:

  1. 进入复制模式
  • 使用键盘快捷键 Ctrl + b,然后按 [ (即 Ctrl + b [),进入复制模式。
  1. 滚动查看历史输出
  • 使用 方向键PgUp/PgDn 来上下滚动查看输出。
  • 如果你的终端支持滚动手势(如鼠标滚轮),你也可以通过滚动查看历史。
  1. 退出复制模式
  • q 退出复制模式,返回正常模式。

2. 向已經創建的會話發送指令

使用 tmux send-keys 命令將指令發送到已存在的 tmux 會話中。以下是如何在一條命令中完成這個操作:

1
tmux send-keys -t mc_spigot_server './startserver.sh' C-m

這裡的參數解釋如下:

  • send-keys: 用於將鍵盤輸入發送到指定的 tmux 會話。
  • -t mc_spigot_server: 指定要發送命令的會話名稱。
  • './startserver.sh': 要執行的命令。
  • C-m: 模擬按下 Enter 鍵以執行該命令。

這樣就可以直接在指定的 tmux 會話中執行指定腳本了。