tmux、セッション

tmuxのセッションとは、複数のターミナルを一つのまとまりとして管理するための単位です。

tmuxを使い始めた頃はセッションを意識せずに使用しますので、機能の紹介に留めます。


ターミナル上で、

$ tmux

を実行することで、



tmuxの画面に切り替わりますが、これは無名のセッションが生成され、そのセッションに接続(アタッチ)されたことになります。


tmuxから元のターミナルに戻る場合は、

Ctrl + b
x

でセッションを終了(kill)するか、

Ctrl + b
d

で接続を外す(デタッチ)のどちらがあります。


デタッチする最大の利点は、セッション内で行っていた処理を残すことができることで、ターミナル上で、

$ tmux ls

をすることで、

0: 1 windows (created Thu Dec  5 17:17:38 2024)

のように終了していないセッションを確認することが出来ます。


再び、セッションにアタッチするには、

$ tmux a -t 0

※ 0はセッション名になります。

を実行します。


セッション名を指定せずにセッションを作成したら、セッション名は連番が振り分けられますが、

$ tmux new -s セッション名

でセッション名を指定してセッションを作成することができます。


補足

ターミナル上でセッション名を変更する場合

$ tmux rename -t 変更前セッション名 変更後セッション名

ターミナル上でセッションを削除する場合

$ tmux kill-session -t セッション名

ターミナル上でセッションを一括で削除する場合

$ tmux kill-server



tmuxのセッションの大きな特徴として、うっかりターミナルを閉じてしまった場合に再びターミナルを起動したら閉じる前の作業が残っているという事があります。


この機能を活かす為にはターミナルを起動する時にtmuxを自動で起動するように設定する必要があります。


ご利用中のシェルがbashの場合

$ micro ./.bashrc

.bashrcの末尾に

if [[ -z "$TMUX" && ! "$TERM" =~ "screen" && ! "$TERM" =~ "tmux" && $- == *i* ]]; then
    # 既存のセッションがあればアタッチし、なければ新規作成
    tmux attach-session -t default 2>/dev/null || tmux new-session -s default
fi

を追加します。


シェルがzshでも~/.zshrcに上記のコードを追加しても良いですが、

# ターミナル起動時に tmux を自動起動(zsh最適化版)
if [[ -z "$TMUX" && -o interactive ]]; then
    # 既存のセッションがあればアタッチし、なければ新規作成
    tmux attach-session -t default 2>/dev/null || tmux new-session -s default
fi

の方がおすすめです。

※クロームブック(chromebook)のクロスティーニ(crostini)では上記の設定のみではターミナルをうっかり閉じてしまった時にセッションは残りません

京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。