[techaday:0015] 覚えておきたいLinuxコマンドの典型的なオプション

[techaday:0015] 覚えておきたいLinuxコマンドの典型的なオプション

例えば gcc -v

はじめに

Linux 大好きな皆さんなら任意の作業をターミナルから離れなくてもできますよね?(ほんとだろうか)
突然そんな無茶ぶりをされた時に重要になるのが,コマンドに付加するオプションに関する知識です.
逆に言うと,オプション1つ知らないだけですごく遠回りをしながら作業をしてしまう可能性もあるわけです.

そんなわけで,今回は典型的なコマンドラインオプションを例を交えながら見ていきましょう.きっと他にも便利なオプションがないか調べたくなりますよ.

え?ターミナルでブラウジングはできない? w3m があるじゃないですか w3m が.

前提知識

  • シェルをちょっと使える
  • コマンドを叩くことに恐怖心があまりない

効能

  • これまでターミナル上で実行することを諦めていたような処理ができるようになるかもしれない
  • コマンドのオプションについて興味を持つようになるかもしれない

コマンドのオプション

Linux というか UNIX 系ならほとんどのコマンドは

コマンド名 オプション(任意) ファイル名や処理対象 ...

という書式で実行できるように暗黙のうちに統一されています.

また,オプションに関してはだいたい以下のような暗黙のルールがあります.

  • オプションのフルネームを指定するときは -- の後に名前を書く.
    : gcc --help : gcc のヘルプを表示する

  • オプションに対してパラメータを指定する必要があるときは --option=param もしくは --option param のように書く.

  • 頻繁に使用するであろうオプションには省略した書き方も用意する.その場合は - の後に頭文字か関連する文字を1文字書く.
    : gcc -v gcc --version : gcc のバージョン情報を表示する

  • 略記のオプションを複数指定するときは,-a -b -c だけでなく -abc とも書ける
    : ls -al ls -a -l : カレントディレクトリにある全てのディレクトリとファイルを long listing format でリスト表示する

暗黙の と繰り返し書きましたが,調べた限りでは明文化された決まりはないようで,これまでのソフトウェアがそうしてきたのでそれにしたがっているというだけみたいです.

つぎの節からは,独断と偏見による個人的な使用頻度順に,よくあるオプションを見ていきましょう.

レベル1(頻度高)

以下に挙げたのはオプションの中でもごくごく基本的なものです.基本的なものだからこそ落とし穴があるのですが,その話はまた今度書きます.

  • --help
    言わずもがな,ヘルプです.コマンドの使い方に困ったら --help をつけて実行すると,だいたいのプログラムなら簡単な使い方を表示してくれます.
    たまに表示してくれないやつもいます.例は割愛.

  • --version (-v, -V)
    バージョン情報を表示します.省略形で -v が使える場合もありますが,後述する --verbose オプションがある場合はそっちに -v の座を奪われてしまう不憫なやつです.
    頻繁に使うオプションではありませんが,だいたいのコマンドに備わっているということで書いておきます.例は割愛.

  • --recursive (-r, -R)
    再帰オプションです.カレントディレクトリもしくは指定したディレクトリ以下の全ファイルに対して処理をしたい時によく使います.
    とにかくたくさん使うので,下に挙げたものでもほんの一例です.
    例1 cp -r a b : a 以下にある全ファイルを b にコピーする
    例2 ls -R : カレントディレクトリ以下の全ディレクトリについてファイルのリストを表示する
    例3 rm -rf / : / 以下を強制全削除 (良い子は実行しないでね!)
    例4 chmod -R 666 c : c 以下にある全ファイルのパーミッションを666にする
    例5 grep -r hoge . : カレントディレクトリ以下にある全ファイルに対して grep する

  • --output (-o, -O)
    出力先を指定します.
    例1 wget http://... -O file : 指定したアドレスのファイルを file にダウンロードする
    例2 gcc po.c -o po : po.c をコンパイルして実行ファイルを po に出力する
    例3 sort hoge -o poyo : hoge の内容をソートした結果を poyo に書く

  • --force (-f)
    強制処理をさせるときにつけます.あんまりいい気分のするオプションではありません.
    例1 git push -f : 強制的にリモートレポジトリを更新する
    例2 rm -rf / : / 以下を強制全削除 (良い子は実行しないでね!)

レベル2(頻度中)

特定のツール群と組み合わせてよく使われるオプションがいくつかあります.

  • --file (-f)
    処理する対象のファイルを指定します.引数にファイルのパスを複数渡す必要があってややこしい類のコマンドに実装されていることが多いように思います.
    例1 tar -xf po.tar : po.tar を展開する

  • --port (-p, -P)
    ポート番号を指定します.ネットワーク関連のコマンドで頻出します.
    例1 ssh 192.168.1.4 -p 99999 : 指定したIPアドレスの99999番ポートに ssh
    例2 scp -P 99999 192.168.1.4:foo ./bar : scp の場合の書式.ややこしい

  • --quiet (-q)
    警告や進行状況等のメッセージを表示させないためのオプションです.シェルスクリプトを組むときによく使います.
    似たようなオプションとして --silent というのが用意されている場合もあります.
    例1 grep -q : 結果を標準入出力に書き出さずに grep
    例2 make --quiet : 静かに make

  • --verbose (-v, -V)
    詳細な出力を行わせるオプションです.一度走らせると時間がかかるようなタイプのコマンドによく実装されています.
    例1 tar -xvf po.tar : po.tar を展開しつつ進捗状況を表示する
    例2 gem install rake -V : 状況を表示しながら rake をインストールする
    余談ですが,例2は gem のインストール時のエラーをトレースする際に便利です.

レベル3(頻度低)

普段はあまり使わないものの,知っておくと便利かもしれないぐらいの準典型的なオプションです.

  • -n, -c
    行数やバイト数のような個数やカウントを指定する場合に使います.
    例1 dmesg | tail -n 3 : dmesg の末尾3行を表示する
    例2 ping -c 3 192.168.1.4 : 3回 ping

  • --yes (-y)
    確認が必要な項目についてすべて YES を選択して処理を続行するオプションです.余談ですが,yをひたすら出力し続けるだけの yes コマンドというものもあります.
    例1 apt-get -y upgrade : apt-get upgrade の過程ですべて YES を選択して続行する

  • --interactive (-i など)
    対話型実行を行うためのオプションです.
    例1 git rebase -i : git rebase の作業をインタラクティブに行う
    例2 php -a : php のインタラクティブシェルを起動

まとめ

どうでしたか?「このオプション,このコマンドにもあるかな?」など気になった際は man--help を使ってオプションがあるかどうか調べてみると知識が広がると思います.

  • 典型的なコマンドラインオプションを例を交えながら列挙した
  • (思ったよりいろいろ挙げられなかった)

参考

補足

  • 出現頻度が高ければ高いほど「このオプションあるだろー」と思って実行して落とし穴にハマります.これについてはまた後日書きます.