【ターミナル改造②】「tmux」を導入して、傷だらけのssh難民から卒業

- 白黒ターミナルを利用する生活が多くなってきた無機質生活に、少々彩りを加えるために奔走する記事第二弾。
- とにかく手元に学習内容やデータを置くことを忌み嫌う私は、素晴らしき賢人記事の宝庫サイトを、こそこそ自己保存用として使用。
- 今回は、幾度となくssh突如切断等の被害に遭った私を救済してくれる「tmux」を整理することにしよう。

## 概要
- 端末多重管理ソフト。
- 複数の仮想端末を管理できる。
- 通信が途中で切れても、仮想端末での作業は残ったままのため、簡単に作業の復旧が可能。

## 特徴
### 1仮想端末完結
- 複数の仮想端末を起動可能であり、複数の端末を起動する必要がない。

### 1画面完結
- 仮想端末の複数画面分割が可能である。
- ssh接続していた場合、画面分割の際に、再度接続する必要がなく、同時作業が行える。

### セッション管理
- 「セッション」という仮想端末環境の作業管理の仕組みを使っている。
- そのため、サーバー接続時に、突然切断しても、簡単に切断前の作業に復旧することができる。

## 結果
- 下記のように、複数画面分割や時刻表示等も可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/b2b1bf54-5186-7d22-3be0-423ab8c8ff24.png)

- 下記のように、sshでの作業時では、接続されたまま、画面分割が可能。

<img width="569" alt="ec2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/58112870-2ffb-f897-8623-9a2cc51bf457.png">

## 導入
### 環境
- Amazon Linux 2 AMI 2.0
    - ※[EC2のAmazon Linux環境の作成はこちらの記事を参考](https://qiita.com/Quikky/items/2897573a42fd71cfc47f)
    - ※[Windowsのtmuxの導入はこちらの記事を参考](https://qiita.com/VTRyo/items/67f68deeac5b49ab2f88)
    - ※[Macのtmuxの導入はこちらの記事を参考](https://qiita.com/michiomochi@github/items/4bf8e34a91bbf3d9af20)

### インストール
- ターミナル(コマンドプロンプト)を開き、AWSのLinux環境に、tmuxを導入

```bash
# AWS Linuxサーバーにターミナル(コマンドプロンプト)から接続
$ ssh -i ~/.ssh/鍵ファイル.pem ユーザー名@グローバルIP
# tmuxの導入
$ sudo yum install tmux
# バージョン確認
$ tmux -V
```

## 基本操作
### 起動・接続・切断
- 下記のコマンドをうち、tmuxを起動する

```bash
# tmuxの起動
# 「tmux new -s セッション名」で、名前を指定して起動できる。
# 「tmux new -s セッション名 -d」とすることで、セッションは作成するが、接続はしない。
# 「tmux」とだけして、名前指定なしで、起動することも可能。
$ tmux new -s session_test
```

- 起動後は、画面下にセッション名がついた、仮想端末が起動する。
- 起動した仮想端末で、任意の作業をしてみる。
- 作業後、キーボード操作の「**Ctrl + b + d**」で、仮想端末の切断を行う。
- 切断後、下記のコマンドで、既存セッションに接続して、切断前の作業状況に戻っているか確認。

```bash
# 既存セッションの接続
# 「tmux a -t セッション名」で名前指定
# 「tmux a」で、最新のセッションへ接続。
$ tmux a -t session_test
```

### セッション操作
- 下記のコマンドは、セッションに関する基本操作

```bash
# セッション一覧の確認
$ tmux ls
# セッションの削除
$ tmux kill-session -t セッション名
# セッションの全削除
$ tmux kill-server
```

### ウィンドウ(タブ)操作
- ※**下記から、tmux起動状態で行う。**
- 下記の操作は、ウィンドウと呼ばれる、仮想端末への新規接続画面(タブ画面のようなもの)に関する基本操作

| キーボード操作 | 内容 |
|:-:|:-:|
| Ctrl + b + c  |  新規ウィンドウの作成 |
| Ctrl + b +  n |  次のウィンドウへの切り替え |
| Ctrl + b + p  |  前のウィンドウへの切り替え |
| Ctrl + b + 番号  |  指定番号のウィンドウへの切り替え |
| Ctrl + b + w  |  ウィンドウの一覧取得 |
| Ctrl + b + &  |  ウィンドウの削除 |

### ペイン(画面分割)操作
- 下記の操作は、ペインと呼ばれる、同画面内への仮想端末新規画面(画面分割のようなもの)に関する基本操作

| キーボード操作 | 内容 |
|:-:|:-:|
| Ctrl + b +  " |  新規ペインの縦分割 |
| Ctrl + b +  % |  新規ペインの横分割 |
| Ctrl + b + 矢印キー | ペインの切り替え  |
| Ctrl + b + q  |  ペインの画面番号表示 |
| Ctrl + b + &  |  ペインの削除 |

### 時刻表示
- `Ctrl + b + t`で、時刻表示が可能。

### スクロール操作
- ※**tmuxのスクロールの際に、うまく動かない場合があるときは、`Ctrl + b + [`をうち、コピーモードにしてから、動かす。**

- ※**コピーモードは、`Q`か`esc`キーで解除できる。**

## まとめ
- 今回はtmuxの導入ということで、「もっと早く知っていたら、どれほど良かっただろう」と、まるでサービスや啓発本の感想インタビューのような、鉄板思考を炸裂しながら、記事を書く。
- 「大の苦手で、恐怖でおののいていたことから、解放された」という、過去の十字架を匂わせる発言に、俊速で誰しもが異常な盛り発言と気づくだろう。
- 今度は、こちらの[tmuxの記事](https://qiita.com/yuki_ycino/items/ef5e6b63c8f9af2f03c0)を参考にしながら、拡張性あげていくことにしよう。

## 参考
- https://qiita.com/nl0_blu/items/9d207a70ccc8467f7bab  
→こちらの記事を参考にしました。大変お世話になりました。
- http://kanjuku-tomato.blogspot.com/2014/02/tmux.html  
→こちらの記事を参考にしました。大変お世話になりました。
- https://qiita.com/VTRyo/items/67f68deeac5b49ab2f88  
→Windowsでのtmux設定に関して参考にしました。大変お世話になりました。  
- https://qiita.com/VTRyo/items/67f68deeac5b49ab2f88  
→Macでのtmux設定に関して参考にしました。大変お世話になりました。
- https://qiita.com/michiomochi@github/items/4bf8e34a91bbf3d9af20   
→ec2でのlinuxサーバー作成に関して参考にしました。大変お世話になりました。