この投稿は インタープリズム的「俺達私達の進捗を上げる25個前後のTips」 Advent Calendar 2015 - Qiitaの7日目 の記事です。
こんにちは、hiranoです。
対象読者
本記事は以下のような方は楽しく読める可能性があります。
背景と私
私はよくLinuxサーバーにログインします。
対象となるサーバーは数十台はあるので dotfile とか自作のスクリプトを予め配置するのは かったるい 大変なので、元々インストールされているコマンドとオプションを駆使して色々な操作をするようになりました。
個人的に これ結構便利じゃね? というものをご紹介したいと思います。 コマンドのオプションは憶えておくといろいろと便利です。なので、機能的な紹介と hirano 独自の憶え方も一緒に載せました。
いきなり言い訳
Linux と言いつつ全て mac でスクショをとっています。
これらのコマンドはLinuxでもMacでもほぼ動作が変わらないので問題はない Macでスクショ取るのが楽だった と思いますが、細かい挙動が違ってたらごめんなさい。
ls -lh
みんな大好き ls コマンドです。これに -lh をくっつけます。
まずは h をつけないとこうなります。

ファイルサイズが出ましたが 桁数多すぎて分からない
そこで h をつけるとこうなります。

全て byte 単位だったものが KB や MB で表現されました。すっきりしましたね。
オプションの憶え方
- h: human read easily
そう human の h でしょ。
補足
h オプションは df コマンドでも使用可能です。
du -sm *
現在のディレクトリの直下のファイルおよびディレクトリのサイズをメガバイト単位で表示する。

憶え方
- s: summary
- m: megabytes
nkf -g ファイル名
指定したファイルの文字コードを判定する。

憶え方
- g: guess
ln -snf シンボリックリンク先 シンボリックリンク名
ディレクトリに対するシンボリックリンクを作成する。もし既に同名のシンボリックリンクがあったとしても上書きする。

憶え方
ssymbolic linkn何がなんでもfforce(強制で)
vim -R ファイル名
vim で読み取り専用でファイルを開く。
大概のサーバーでは view コマンドが使用可能なので上記は使う必要がなさそうなのですが、 view で開いてしまうとハイライトが効かないケースがあり、上記のコマンドを使用したところ ハイライトが聞いた状態かつ、読み込み専用モード で開くことが出来ます。
憶え方
RReadOnlyに決まってるさ
diff -b ファイル1 ファイル2
比較対象のファイルの改行コードが異なっている場合、b オプションをつけないと全行が差分として抽出されてしまうが、 b オプションをつけることで改行コードの違いを無視してくれます。
憶え方
b気がついたら憶えていたので憶え方は良く分からない
lsof -i4TCP:ポート番号
指定したポート番号を使用しているプロセスを表示する。これはかなり便利。

憶え方
i4TCP:ポート番号: 無理ー \(^o^)/ 誰か憶え方教えてください。
history系コマンド
個人的に非常に便利なのが history 系のコマンドです。
普通に history と打てば以下のように直近のコマンド履歴が出ます。

よくやるのがコマンドやパスをコピって再利用することですが、コピペには 1文字コピーし忘れた! といった単純ミスによる悲劇がつきものです。なので私はコピペを極力やらないようにしています。具体的には以下の通り。
!! と !番号
!! と打つと直前のコマンドを再度実行します。 !番号 と打つと history コマンドで表示された時の通し番号のコマンドが実行されます。

↑キーで過去のコマンドを表示して実行した方が楽 というのは否定しませんが、
↑+Enterよりも!!+Enterだとホームポジションから手が離れないので嬉しい- かなり昔の履歴の場合は
↑だと何回押せばいいか分からなくてツライですが!番号 + Enterなら楽ちん
という感じで、用途に応じて使い分けます。
!!:番号 と !!$ と !番号:番号 と !番号$
history で一番強力だなと思うのがこれです。個人的によくやるミスが
cdって予め打ってたのを忘れててcd cd ディレクトリ名となっててエラーdiff ajax.js retina.jsって打とうとしたのに途中の文字が漏れててdiff ajax.j retina.jsとなってしまってエラー
というものがあります。
この時 ↑ で再度表示して修正してもいいのですが、私はこうやります。
cd !!$

つまり !!$ は 直前のコマンドの最後の要素 となります。
コマンド全体ではなくコマンドの一部を再利用出来るわけです。
diff !!:1s !!$

!!:1s は !!:1 と s に分かれて !!:1 は 直前のコマンドの2番目の要素 となり、その後ろに s がくっついて ajax.js になります。
!!$ は 直前のコマンドの最後の要素 なので retina.js になります。
で、結果的に diff ajax.js retina.js になります。
!系のまとめ
例から入ってしまいましたが、定義を書くと以下のようになります。
!!: 直前のコマンド全体!!:n: 直前のコマンドのn番目の要素 ※nは0から!!$: 直前のコマンドの最後の要素!m: m番目のコマンド全体!m:n: m番目のコマンドのn番目の要素 ※nは0からですが、mは直接指定!m$: m番目のコマンドの最後の要素
なお、これらはもちろん組み合わせが可能で、全く別の履歴番号の要素をピックアップすることも可能です。(下の例はあまり意味がある使い方ではないですが)

まとめ的なもの
今回ご紹介したコマンドは昔からあるものですし、使い方も目新しいものではありません。ですが、仕事だと 緊急で調査しなきゃならない ようなこともよくあり、その場合は綺麗にスクリプトをお膳立てして使うなんてことはやってられないことが少なくはありません。そういう場合には非常に 使える ノウハウだと思っています。少しでもみなさまのCUIライフの糧になれば幸いです。
インタープリズム的「俺達私達の進捗を上げる25個前後のTips」 Advent Calendar 2015 - Qiitaの8日目の記事