黒い画面をもっと効率的に(使って自動化の時間を捻出)
View Slide
© 2021 3-shake Inc. 2自己紹介- 所属- Sreake 事業部- 5/1入社- 経歴- ネットワーク系ソフトウェア代理店 サポートエンジニア/開発エンジニア- PerlでWebアプリ開発してる会社 Webアプリケーションエンジニア /インフラエンジニア- 電子契約サービスの会社 SRE- 株式会社スリーシェイク <= nowすずきまさし (@masasuz)
© 2021 3-shake Inc. 3黒い画面をもっと効率的に- 昔のようにサーバに sshして作業するということはなくなりましたが、それでも開発運用作業をしてると、それなりにコマンドラインを触ることが多いと思います。- 今回はそんなコマンドライン操作を省力化、効率化するための Tipsを紹介したいと思います。- 基本的にはmacのzsh前提で話していきます- % zsh --version- zsh 5.8.1 (x86_64-apple-darwin21.0)- bashで差異があるものは適宜触れます- fish使う人はほぼ知ってると思うので触れません- windows端末を持ってないのでだいぶケアできないですなんだかんだでターミナルで作業することが多い
© 2021 3-shake Inc. 4目次- キーバインドの話- シェルとコマンドの話- プロンプトの話
© 2021 3-shake Inc. 5キーバインドの話- 矢印キーをなるべく使わないで最小限のショートカットを覚えるだけでだいぶ作業時間短縮ができると思います- その空いた時間でさらに自動化を進めると良いのではないでしょうかショートカットを使う
© 2021 3-shake Inc. 6キーバインドの話- emacライクキーバインド- デフォルトなのでこのキーバインドを覚えるとよいです- set -o emacs で切り替えられる- viライクキーバインド- set -o vi で切り替えられる- bindkeyで現在のキーバインドを見れるので確認してください- bashならbind -pキーバインドの種類
© 2021 3-shake Inc. 7キーバインドの話- Ctrl+m or j Enterと同じ- Ctrl+a 頭に移動- Ctrl+e 末尾に移動(end)- Ctrl+n 履歴を後ろ(next)↓- Ctrl+p 履歴を前(previous)↑- Ctrl+f 前に移動(forward)→- Ctrl+b 後ろに移動(back)←- Ctrl+h 1文字削除このあたり覚えるとホームポジションから手を動かすことが少なくなるはず
© 2021 3-shake Inc. 8キーバインドの話- Ctil+l スクリーンをクリア- Ctrl+r 履歴を検索- Ctrl+s 履歴を検索前に- 端末の設定でstopが優先される可能性あり- Ctrl+w 1ワード削除- Ctrl+k 現在カーソル位置から末尾まで削除- Ctrl+[ ESCと同じ- ECS+f 1ワード前に移動- ESC+b 1ワード後ろに移動ここまでできると省力化
© 2021 3-shake Inc. 9キーバインドの話- シェルのキーバインド設定より優先されます- stty -aで現在の設定が確認できます- Ctrl+sで画面停止されるので- stty stop undefで抑止すると良いかも端末のキーバインド
© 2021 3-shake Inc. 10目次- キーバインドの話- シェルとコマンドの話- プロンプトの話
© 2021 3-shake Inc. 11シェルとコマンドの話- 変数置換- コマンド置換- プロセス置換- ちょっとしたTips- fcコマンド- 事前に打ったコマンドの一部置換- ブレース展開覚えておくと便利な話
© 2021 3-shake Inc. 12シェルとコマンドの話- シェルのvarという変数は ${var} もしくは $var という形でアクセスできますが、それだけではなく変数単体で文字列処理ができたりします。- 例- ${var/before/after} 最短マッチで置換- ${var//before/after} すべて置換- ${var#pattern} 先頭の最短マッチ部を削除- ${var##pattern} 先頭の最長マッチ部を削除- ${var%pattern} 末尾の最短マッチ部を削除- ${var%%pattern} 末尾の最長マッチ部を削除- ${var:-default} 変数が未定義または空の場合デフォルト値を使う- ${var-default} 変数が未定義の場合デフォルト値を使う変数置換
© 2021 3-shake Inc. 13シェルとコマンドの話- `command`もしくは$(command) の形式でcommand 実行した結果の標準出力を文字列として扱うことができます。- コマンドの結果をログに残したいとき、とか dateで今日の日付を出してそれをログの名前にしたいときとか- somecommand > $(date +%Y-%m-%d).logコマンド置換
© 2021 3-shake Inc. 14シェルとコマンドの話- プロセス置換を使うことで一時ファイルを作らずに直接コマンドの標準出力をファイル扱いできます。- <(command) コマンドの標準出力をファイルとして扱う- >(command) コマンドの標準入力をファイルとして扱う- 便利な場面としては、コマンドの出力結果同士の diffを取りたいときとか。- diff -y <(command1) <(command2)プロセス置換
© 2021 3-shake Inc. 15シェルとコマンドの話- fcコマンド- コマンドラインをEDITORで編集、実行できます- 事前に打ったコマンドの一部置換- ^before^after- ブレース展開- {1..10} => 1 2 3 4 5 6 7 8 9 10- cp text{,.bak} => cp text text.bakそのほか
© 2021 3-shake Inc. 16目次- キーバインドの話- シェルとコマンドの話- プロンプトの話
© 2021 3-shake Inc. 17プロンプトの話- 一番目にするので知っておきたい情報をひと目で分かるようにしておくとはかどります。- ここまで紹介してきた要素を使って自分はプロンプト設定してます- このあたりについて話します- プロンプトの変更- 変数、コマンドの結果をプロンプトに表示する- プロンプトに表示させると便利なもの一番目にする部分なのでカスタマイズしたいところ
© 2021 3-shake Inc. 18プロンプトの話- PROMPT変数に書かれたものがプロンプトに出力されます- bashはPS1- 右プロンプトはRPROMPT変数- 可変のパスとかは右プロンプトに仕込むとよいかも- プロンプト変数で使える記号 (zsh)- %n user- %m host- %~ current directory- %* HH:MM:SS- %D YY-mm-dd-プロンプトの変更
© 2021 3-shake Inc. 19プロンプトの話- 基本的にシェル起動時に PROMPT変数に値が読み込まれるので、その時点で代入された結果が表示されます- 現在の状態をプロンプトに出すためには、 precmdフックでPROMPTを更新するfunctionを登録してあげる必要があります- autoload -Uz add-zsh-hook- add-zsh-hook precmd update_prompt変数、コマンドの結果をプロンプトに表示する
© 2021 3-shake Inc. 20プロンプトの話- 時刻- ユーザ、ホスト名- 端末を複数台使わない人は不要かも- カレントディレクトリ- 直前のコマンドの成否- 見た目上はエラー出てないのに失敗してる場合があるので気づきたい- gitの状態- AWS_RPOFILEの中身- kubernetsのcurrent-context- うっかり違う環境をいじるのを防ぎたいプロンプトに表示させると便利なもの
© 2021 3-shake Inc. 21まとめ- 覚えておくと捗るというTipsを紹介しました- シェルは沼にはまるときりが無いので使える部分だけ取り入れていただけたらと思います- 自分自身も全然使いこなせてるというわけでもないので、便利なTipsがあったら教えて下さい- イチから設定いじるの辛い人はoh-my-zshとか使うといいかもです- では、快適なコマンドラインライフをこれからもお過ごしください