interprism's blog

インタープリズム株式会社の開発者ブログです。

どんなサーバーにも入ってるコマンドの便利な使い方(ls, ln, du, historyなど)

この投稿は インタープリズム的「俺達私達の進捗を上げる25個前後のTips」 Advent Calendar 2015 - Qiitaの7日目 の記事です。

こんにちは、hiranoです。

対象読者

本記事は以下のような方は楽しく読める可能性があります。

  • よくLinuxを使用する方
  • dotfile とかスクリプトを楽に配置する方法を知らない方、または調べるのが かったるい 時間がかかって出来ない方
  • オプションが覚えられない方

背景と私

私はよくLinuxサーバーにログインします。 対象となるサーバーは数十台はあるので dotfile とか自作のスクリプトを予め配置するのは かったるい 大変なので、元々インストールされているコマンドとオプションを駆使して色々な操作をするようになりました。

個人的に これ結構便利じゃね? というものをご紹介したいと思います。 コマンドのオプションは憶えておくといろいろと便利です。なので、機能的な紹介と hirano 独自の憶え方も一緒に載せました。

いきなり言い訳

Linux と言いつつ全て mac でスクショをとっています。 これらのコマンドはLinuxでもMacでもほぼ動作が変わらないので問題はない Macでスクショ取るのが楽だった と思いますが、細かい挙動が違ってたらごめんなさい。

ls -lh

みんな大好き ls コマンドです。これに -lh をくっつけます。

まずは h をつけないとこうなります。

f:id:interprism:20151205013121p:plain

ファイルサイズが出ましたが 桁数多すぎて分からない

そこで h をつけるとこうなります。

f:id:interprism:20151205013139p:plain

全て byte 単位だったものが KBMB で表現されました。すっきりしましたね。

オプションの憶え方

  • h: human read easily

そう human の h でしょ。

補足

h オプションは df コマンドでも使用可能です。

du -sm *

現在のディレクトリの直下のファイルおよびディレクトリのサイズをメガバイト単位で表示する。

f:id:interprism:20151205013716p:plain

憶え方

  • s: summary
  • m: megabytes

nkf -g ファイル名

指定したファイルの文字コードを判定する。

f:id:interprism:20151205014200p:plain

憶え方

  • g: guess

ln -snf シンボリックリンクシンボリックリンク

ディレクトリに対するシンボリックリンクを作成する。もし既に同名のシンボリックリンクがあったとしても上書きする。

f:id:interprism:20151205015128p:plain

憶え方

  • s symbolic link
  • n 何がなんでも
  • f force(強制で)

vim -R ファイル名

vim で読み取り専用でファイルを開く。

大概のサーバーでは view コマンドが使用可能なので上記は使う必要がなさそうなのですが、 view で開いてしまうとハイライトが効かないケースがあり、上記のコマンドを使用したところ ハイライトが聞いた状態かつ、読み込み専用モード で開くことが出来ます。

憶え方

  • R ReadOnly に決まってるさ

diff -b ファイル1 ファイル2

比較対象のファイルの改行コードが異なっている場合、b オプションをつけないと全行が差分として抽出されてしまうが、 b オプションをつけることで改行コードの違いを無視してくれます。

憶え方

  • b 気がついたら憶えていたので憶え方は良く分からない

lsof -i4TCP:ポート番号

指定したポート番号を使用しているプロセスを表示する。これはかなり便利。

f:id:interprism:20151205090148p:plain

憶え方

  • i4TCP:ポート番号: 無理ー \(^o^)/ 誰か憶え方教えてください。

history系コマンド

個人的に非常に便利なのが history 系のコマンドです。

普通に history と打てば以下のように直近のコマンド履歴が出ます。

f:id:interprism:20151205091107p:plain

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

!! と !番号

!! と打つと直前のコマンドを再度実行します。 !番号 と打つと history コマンドで表示された時の通し番号のコマンドが実行されます。

f:id:interprism:20151205092102p:plain

↑キーで過去のコマンドを表示して実行した方が楽 というのは否定しませんが、

  • ↑+Enter よりも !!+Enter だとホームポジションから手が離れないので嬉しい
  • かなり昔の履歴の場合は だと何回押せばいいか分からなくてツライですが !番号 + Enter なら楽ちん

という感じで、用途に応じて使い分けます。

!!:番号 と !!$ と !番号:番号 と !番号$

history で一番強力だなと思うのがこれです。個人的によくやるミスが

  • cd って予め打ってたのを忘れてて cd cd ディレクトリ名 となっててエラー
  • diff ajax.js retina.js って打とうとしたのに途中の文字が漏れてて diff ajax.j retina.js となってしまってエラー

というものがあります。 この時 で再度表示して修正してもいいのですが、私はこうやります。

cd !!$

f:id:interprism:20151205093232p:plain

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

diff !!:1s !!$

f:id:interprism:20151205093634p:plain

!!:1s!!:1s に分かれて !!: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番目のコマンドの最後の要素

なお、これらはもちろん組み合わせが可能で、全く別の履歴番号の要素をピックアップすることも可能です。(下の例はあまり意味がある使い方ではないですが)

f:id:interprism:20151205095830p:plain

まとめ的なもの

今回ご紹介したコマンドは昔からあるものですし、使い方も目新しいものではありません。ですが、仕事だと 緊急で調査しなきゃならない ようなこともよくあり、その場合は綺麗にスクリプトをお膳立てして使うなんてことはやってられないことが少なくはありません。そういう場合には非常に 使える ノウハウだと思っています。少しでもみなさまのCUIライフの糧になれば幸いです。

インタープリズム的「俺達私達の進捗を上げる25個前後のTips」 Advent Calendar 2015 - Qiita8日目の記事

インタープリズムのページ

PAGE TOP