UNIX/Linuxでbashを使っている場合、起動時に~/.bashrcが実行されます。そこに
if [ -f ~/.bash_aliases ]; then |
. ~/.bash_aliases |
fi |
という記述があれば、~/.bash_aliasesが実行されます。今回は、私のそれ (ちょっとした便利ツール的なaliasたち) を紹介します (一部は、既に以前の記事で紹介済みなので、それらについては今回は割愛します)。なお、aliasと一緒にfunctionも記述されていますが、そこは気にせず運用しています。
まずは、定番の確認系です。cp/mvは上書きは上書きの確認、rmは削除の確認をするのをデフォルトにし、確認不要のときだけ-fを付けるようにします。
alias cp='cp -i' |
alias mv='mv -i' |
alias rm='rm -i' |
cdコマンド用です。複数階層を戻りたい場合に便利です。最初のcd.は一見無意味ですが、カレントディレクトリを他のターミナルなどから削除・作り直しされたときに使います。
alias cd.='cd ./' |
alias cd..='cd ../' |
alias cd...='cd ../../' |
ちなみに、10階層分までのaliasをループで作る方法もあります。
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) です。
alias lockdir='chmod a-w -R' |
alias unlockdir='chmod u+w -R' |
以前の記事でalljpg (.jpgと.jpegを検索) を紹介しましたが、それの応用形です。
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は以前の記事で紹介した「行頭と行末に’を付ける」です。
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と記述できます。
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 列番号」などで処理するときなどに使う文字列操作です。
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"' |
実行結果:
$ 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のように使います。
alias cutscr='cut -c -`tput cols`' |
jupyterのプロセスを纏めて落とすために作りました。
function getpids() { |
echo `ps x | grep $1 | awk '{print $1}'` |
} |
alias psjupyter='getpids jupyter' |
alias killjupyter='kill `psjupyter`' |
割とタイプ量が多いので。
alias up='svn up' |
alias cu='svn cleanup' |
alias re='svn revert -R' |
いつも、hostsファイルの場所を忘れてしまうので。
alias vihosts='vi /cygdrive/c/Windows/System32/drivers/etc/hosts' |
以上が、現在の私の.bash_aliasesになります。よろしければ、使ってみてください。今後、アップデートなどがありましたら、また記事にしたいと思います。