この記事は『CRESCO Advent Calendar 2021』 2日目の記事です。
技研のまつけんです。
UNIX/Linuxでbashを使っている場合、起動時に~/.bashrcが実行されます。そこに
1 2 3 |
if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi |
という記述があれば、~/.bash_aliasesが実行されます。今回は、私のそれ (ちょっとした便利ツール的なaliasたち) を紹介します (一部は、既に以前の記事で紹介済みなので、それらについては今回は割愛します)。なお、aliasと一緒にfunctionも記述されていますが、そこは気にせず運用しています。
定番の確認関連
まずは、定番の確認系です。cp/mvは上書きは上書きの確認、rmは削除の確認をするのをデフォルトにし、確認不要のときだけ-fを付けるようにします。
1 2 3 |
alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' |
ディレクトリ関連
cdコマンド用です。複数階層を戻りたい場合に便利です。最初のcd.は一見無意味ですが、カレントディレクトリを他のターミナルなどから削除・作り直しされたときに使います。
1 2 3 |
alias cd.='cd ./' alias cd..='cd ../' alias cd...='cd ../../' |
ちなみに、10階層分までのaliasをループで作る方法もあります。
1 2 3 4 5 6 7 8 9 10 11 |
for N in `seq 10` do S='.' D='' for I in `seq $N` do S=$S. D=$D../ done alias cd$S="cd $D" done |
続いて、ディレクトリ操作です。再帰的に書き込み禁止にしたり、書き込み可能にします。前者は全ユーザの書き込みを禁止(a-w)しますが、後者は所有者だけが対象 (u+w) です。
1 2 |
alias lockdir='chmod a-w -R' alias unlockdir='chmod u+w -R' |
検索関連
以前の記事でalljpg (.jpgと.jpegを検索) を紹介しましたが、それの応用形です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
alias allpng='find -type f -iname "*.png"' alias allmovie='find -type f -iname "*.mov" -or -iname "*.avi" -or -iname "*.mp4" -or -iname "*.wmv"' alias allimage='find -type f -iname "*.jpg" -or -iname "*.jpeg" -or -iname "*.png" -or -iname "*.bmp"' alias allpy='find -type f -iname \*.py' alias allnb='find -type f -iname \*.ipynb' alias allcp='find -type f -iname \*.cpp' alias allc='find -type f -iname \*.c' alias allh='find -type f -iname \*.h' alias allch='find -type f -iname \*.[ch]' alias allcph='find -type f -iname \*.cpp -or -iname \*.h' alias allccph='find -type f -iname \*.cpp -or -iname \*.[ch]' |
必要なら、お好みで| sortを追加するか、allxx | sortで使ってください。また、こちらは検索した上でgrepするものです。qは以前の記事で紹介した「行頭と行末に’を付ける」です。
1 2 3 4 5 6 7 8 |
alias allpygrep='allpy | q | xargs grep' alias allnbgrep='allnb | q | xargs grep' alias allcpgrep='allcp | q | xargs grep' alias allcgrep='allc | q | xargs grep' alias allhgrep='allh | q | xargs grep' alias allchgrep='allch | q | xargs grep' alias allcphgrep='allcph | q | xargs grep' alias allccphgrep='allccph | q | xargs grep' |
なお、こちらのfind_by_extを使えば、allmovieはfind_by_ext mov avi mp4 wmvと記述できます。
1 2 3 4 5 6 7 8 |
function find_by_ext() { CMD='find -type f' for E in $@ do CMD=$CMD" -iname \"*.$E\" -or" done echo $CMD | sed -e 's# -or$##' | bash } |
文字列操作
CSV/TSVファイルなどを「cut -d , -f 列番号」などで処理するときなどに使う文字列操作です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
alias zs="sed -e 's#^0\+0#0#' -e 's#^0\([^0]\)#\1#'" # zero suppress alias comma='sed \ -e "s#\(^[0-9]\+\)\([0-9]\{3\}[ \t]\)#\1,\2#g" \ -e "s#\(^[0-9]\+\)\([0-9]\{3\}\$\)#\1,\2#g" \ -e "s#\([ \t][0-9]\+\)\([0-9]\{3\}[ \t]\)#\1,\2#g" \ -e "s#\([ \t][0-9]\+\)\([0-9]\{3\}[ \t]\)#\1,\2#g" \ -e "s#\([ \t][0-9]\+\)\([0-9]\{3\}\$\)#\1,\2#g" \ -e "s#\(^[0-9]\+\)\([0-9]\{3\},\)#\1,\2#g" \ -e "s#\(^[0-9]\+\)\([0-9]\{3\},\)#\1,\2#g" \ -e "s#\(^[0-9]\+\)\([0-9]\{3\},\)#\1,\2#g" \ -e "s#\(^[0-9]\+\)\([0-9]\{3\},\)#\1,\2#g" \ -e "s#\([ \t][0-9]\+\)\([0-9]\{3\},\)#\1,\2#g" \ -e "s#\([ \t][0-9]\+\)\([0-9]\{3\},\)#\1,\2#g" \ -e "s#\([ \t][0-9]\+\)\([0-9]\{3\},\)#\1,\2#g" \ -e "s#\([ \t][0-9]\+\)\([0-9]\{3\},\)#\1,\2#g"' |
実行結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ echo 0000 | zs 0 $ echo 0000123 | zs 123 $ echo 000.0000123 | zs .0000123 $ echo 123456789 | comma 123,456,789 $ echo 1234567890123456789 | comma 1234,567,890,123,456,789 $ echo '123456 7890 1234567890123456789' | comma 123,456 7,890 1234,567,890,123,456,789 $ df | grep tmpfs | comma tmpfs 8,215,424 2,068 8,213,356 1% /run tmpfs 41,077,116 220 41,076,896 1% /dev/shm tmpfs 5,120 0 5,120 0% /run/lock tmpfs 41,077,116 0 41,077,116 0% /sys/fs/cgroup tmpfs 8,215,420 0 8,215,420 0% /run/user/1005 tmpfs 8,215,420 0 8,215,420 0% /run/user/1004 |
コンマは18桁まで対応します。小数の先頭のゼロを残すかどうかは好みが分かれるところですね (-e ‘s#^.#0.#’を追加すれば残せます)。
こちらは、スクリーンサイズ (使用中のターミナルのウィンドウの横幅) に合わせてcutするものです。各行が長いテキストファイルなどを狭いウィンドウで見るときに、例えば、cat /etc/passwd | cutscrのように使います。
1 |
alias cutscr='cut -c -`tput cols`' |
プロセス操作関連
jupyterのプロセスを纏めて落とすために作りました。
1 2 3 4 5 6 |
function getpids() { echo `ps x | grep $1 | awk '{print $1}'` } alias psjupyter='getpids jupyter' alias killjupyter='kill `psjupyter`' |
Subversion関連
割とタイプ量が多いので。
1 2 3 |
alias up='svn up' alias cu='svn cleanup' alias re='svn revert -R' |
Cygwin用
いつも、hostsファイルの場所を忘れてしまうので。
1 |
alias vihosts='vi /cygdrive/c/Windows/System32/drivers/etc/hosts' |
まとめ
以上が、現在の私の.bash_aliasesになります。よろしければ、使ってみてください。今後、アップデートなどがありましたら、また記事にしたいと思います。