UNIX的なアレ

UNIX的なこととかいろいろ

個人的なShellTipsをまとめてみた

naoya_itoの火を噴いたシェルtips - Togetter

これを読んでふと書きたくなったので。ちなみに僕はbash使っています。

CTRLを使った便利系

まず、UNIXな操作あたり。

キーバインド 意味
CTRL + s キー入力を受け付けなくする 画面出力抑える
CTRL + q 上記解除
CTRL + z バックグラウンドに. fgで戻る
CTRL + l 画面をクリア。clearと同等
CTRL + c 現在の処理を停止
CTRL + d exitと同等
CTRL + r historyからコマンド検索

emacsっぽいやつ

どっちかというとキー操作に近い。基本はemacs。metaは僕はoptionに割り当ててる。とりあえず触りたい人はESCでOK。

キーバインド 意味
CTRL + a 行頭
CTRL + e 行末
CTRL + f
CTRL + b
CTRL + p
CTRL + n
CTRL + k いまいるカーソルから後ろを切り取り
CTRL + y 貼り付け
CTRL + j / CTRL + m returnと同等
meta + f ワードジャンプ(前)
meta + b ワードジャンプ(後)

よくつかう地味なコマンド

コマンドというかtips的なもの。

ワンライナーで条件式

||とか&&で条件書く。ディレクトリがなければmkdirみたいなときに使う。以下のような感じ。

test -d ~/foo || mkdir ~/foo

ファイルのバックアップをラク

fooというファイルのバックアップをとるときに以下のようにして書ける。

cp -ip foo{,.bak}

さらに日付を付けたい場合はこんな感じで書く。

cp -ip foo{,.`date +%Y%m%d`}

標準出力からrootでファイルを作りたいときはtee

リダイレクトでやってもいいんだけど、ちょっとハマるのでteeコマンドを使うことが多い。

echo hogehoge | sudo tee /path/to/file

こんなかんじでヒアドキュメントと組み合わせることもある。手順書を書くときなんかは便利。手順書でviとか勘弁。

sudo tee /path/to/file << EOF
hogehoge
fugafuga
EOF

xargsで1行ずつ実行したい

find .  | xargs echo

みたいにやると、echoの引数に全部わたってきてしまう。1行ずつ実行したい場合は以下のようにしてやる。

find . | xargs -n1 echo

xargsなくてもfindだけでexec

xargsネタになるとfindだけでできるよ的な話になるのでこっちも。こんな感じで書ける。

find . -exec echo {} \;

特定のPIDファイルのプロセスチェック

pidファイルからプロセス調べたいときってある。

 ps `cat /var/run/httpd.pid `

名前解決にはhostコマンド

名前をひくときにちゃんと見たいときはdigとかつかうけど、ただ単純にIPアドレスを引っ張りたいときはこっちのほうがラク。そういえば、nslookupはやめようねって10年くらい前に言われた。

host nanapi.jp

pushd / popd

一旦他のディレクトリに移動してから戻りたいときとかよく使う。pushdでカレントディレクトリがスタックにたまっていく。

grep -ir

findしてgrepしてる人見かけるけど、grepだけでできる。まぁagつかうけど。

grep -ir foo *

resetコマンド

バイナリファイルを間違ってcatしたりしてしまってターミナル上の表示がおかしくなった時。resetを打てばOKです。

reset

emacsdaemon化しておく

emacsは--daemonというオプションでdaemon化できる。あとはemacsclientからつなぐだけ。以下の記述をbashrcに入れている。

alias emd="emacs --daemon"
alias emc="emacsclient -c"
alias ekill="emacsclient -e '(progn (defun yes-or-no-p (p) t) (kill-emacs))'"

とりあえず思いついたあたりでこんなところ。