はじめに
こんにちは,アドベントカレンダー2日目担当のさわぴーです.機械学習関連の研究が専門で,ソフトウェア開発は薄く広く遊んでいます.
この記事では,個人的にオススメのbashの設定をの中から,PC初心者の人にぜひオススメしたいものを厳選していくつか紹介します.サクッと導入できるような分量になっているので,ぜひ試していただければと思います.
筆者がWindowsを使っていないので,LinuxとMacを想定しています.Windowsユーザーの方は,WSLなどでLinuxを使う時などに参考にしていただければと思います.
bashとは?
シェル(ターミナル)の一種…ということくらいしか筆者も分かってないので割愛します.難しい話は後回しで,軽くぱぱっと便利に使えるようにしましょっか!
余談: Linux入れるとだいたいの場合,デフォルトでシェルがこれになっている印象です.もっと高機能なシェルもありますが,そういうのに慣れてしまうと他のPC,例えば共用サーバーなどを使う時に苦労しそうなのでbashに慣れておくと間違いないのかな〜と思っています.そういえばMacはかつてはデフォルトでbashが入っていましたが,一時期からzshという別のシェルに変わりましたね.
bashの設定は,色々な方法でできるみたいです.~/.bashrc,~/.bash_profileなど,設定ファイルがいくつかあります.厳密には細かい違いがあるみたいですが,とりあえず以下はすべて~/.bashrcに書きましょう(設定したい内容によっては各ファイルをちゃんとわけないといけないようですが,今回の設定は大丈夫です).前述の通り,難しいことは後回しじゃ!
alias
シェルにおけるaliasとは,コマンドを短縮して記述できるもの,と認識しておけば大丈夫かと思います.長くて打つのが面倒なコマンドやオプションを,自分好みの短縮形にして使おう,というノリです.
ちょっと詳しく知りたい方は,こちらとかが参考になるかと思います.
ちなみに,ちょっとレベルアップした話として,aliasは~/.bash_aliases に書くというものがあります.気になった方はぜひ調べてみてください.
Linux/Mac共通
alias gits='git status'
alias dc='docker compose'
alias va='source venv/bin/activate'
- gits
- ソフトウェア開発においてほぼ必須のgit.CUIで使う場合には,現在の状態(どんな変更があるのか,など)を知るために頻繁に打つと思います.他にも,”git diff”とかも登録しとくと便利だと思います.余談ですが,git関連のaliasは,~/.gitconfigなどに記述することもできます.が,それだけで記事1本分の内容になりそうなのでここでは割愛します.
- dc
- 色々作る時に度々登場するdockerとdocker compose.jackでも多くの人が使っている印象です.…が,”docker compose”って打つのって面倒じゃないですか?? ということで短縮するのがオススメです.ただし,筆者のとあるUbuntuマシンでは,dcというコマンドが別で使われていたため,被りが無いか確認したほうがいいかもです(元のdc: なにかの電卓系のCLIツールは使っていなかったので削除しました).
- va
- pythonの仮想環境を扱う方法のひとつにvenvがありますが,それを起動するコマンドを打つのが面倒この上なし.venvの使い方はここでは省略しますが,筆者はcondaなど他のpython仮想環境よりもvenvが使い勝手が良いな〜と感じています.Windowsではちょっとコマンドが違った気がするので要注意かもです.
Linux
alias op='xdg-open'
alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'
alias nsmi='nvidia-smi'
- op
- 主に op . のような感じで,コマンドラインからnautilusなどのファイルブラウザ(MacでいうところのFinder,Windowsでいうところのエクスプローラー)を開くために使っています.Macだと open に相当します.
- pbcopy&pbpaste
- Macで使えるコマンドですが,Linuxでも xsel を使うと再現できるので使っています.ターミナル上でコピペできて便利です.
- nsmi
- GPUを搭載したマシンで,正しくGPUを認識しているか,現在どれくらいのGPUの計算資源を使っているのか,などの状況を確認するために頻繁に使うのですが,長いので短くしました.機械学習関連のことをしている人には共感してもらえるのではないかと思います.
Mac
alias dls='limactl start docker'
- dls
- 筆者はMacでdockerを使うために,limaというツールでUbuntuの仮想マシンを動かして,その中で動くdockerにMacから接続する,という手段をとっています.その仮想マシンを起動するコマンドが長くて面倒だったので,「dockerをlimaでstart」を略してエイリアスにしました.limaを使ったdocker環境の構築はこちらが参考になるかと思います.
prompt
プロンプトとは,シェルでコマンドを入れる時にデフォルトで表示されている文字列のことです.下の画像では, ks@ から次の行の $ までの部分です.(誤字が多いことで有名な筆者ですが,labtopは誤字ではないです.labのlaptopでlabtopです.)
この部分の文字列は, PS1 というbashの変数に書式を代入することでカスタマイズすることができます.画像の例では,
{ユーザー名}@{ホスト名(PCの名前)}💻:{カレントディレクトリ}
$
となっています(最後の $ のあとには空白が入っています).また,カレントディレクトリがgitのリポジトリ内の場合,
{ユーザー名}@{ホスト名(PCの名前)}💻:{カレントディレクトリ}[{gitの現在のブランチ名} {gitの状態を表す記号}]
$
となっています(git関連については後述).
これはMacの環境ですが,これを設定するためには以下のように~/.bashrcに記述します.
source ~/.bash/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
export PS1='\[\033[01;97m\]\u@\h\[\033[00m\]'💻:'\[\033[01;33m\]\w\[\033[0;31m\]$(__git_ps1 [%s])\[\033[00m\]\n$ '
また,筆者のUbuntu環境では以下のようにしています.ポイントは,Ubuntuだと直接絵文字を表示できなかったため `echo -e '\U1F3EB'` で指定したものを出力しているところです.他にも,プロンプトの色を変えて一目でどのマシンかわかるようにしています(sshで色々なマシンに入ると,よく混乱してしまうので…).
source /etc/bash_completion.d/git-prompt
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]'`echo -e '\U1F3EB'`:'\[\033[01;33m\]\w\[\033[0;31m\]$(__git_ps1 [%s])\[\033[00m\]\n\$ '
注意点として,それぞれ1行目で source によって読み込むファイルのパスは各自の環境に合わせて変更してください.存在しない場合は,こちらなどを参考に導入し,そのダウンロードしたパスを記述してください.
備考
.bashrcを編集したら, $ source ~/.bashrc を実行しましょう.これによって最新の設定ファイルが読み込まれて反映されます.
おわりに
基本的なもので,かつ便利だと感じたものを厳選しました.自分のCUIを育てたい方,ぜひ試してみてはいかがでしょうか? このあたりをゴリゴリ改造していって,「シェル芸」の道の第一歩を歩んでいっていただければ幸いです.