はじめに
Linux 大好きな皆さんなら任意の作業をターミナルから離れなくてもできますよね?(ほんとだろうか) 突然そんな無茶ぶりをされた時に重要になるのが,コマンドに付加するオプションに関する知識です. 逆に言うと,オプション1つ知らないだけですごく遠回りをしながら作業をしてしまう可能性もあるわけです.
そんなわけで,今回は典型的なコマンドラインオプションを例を交えながら見ていきましょう.きっと他にも便利なオプションがないか調べたくなりますよ.
え?ターミナルでブラウジングはできない? w3m があるじゃないですか w3m が.
前提知識
- シェルをちょっと使える
- コマンドを叩くことに恐怖心があまりない
効能
- これまでターミナル上で実行することを諦めていたような処理ができるようになるかもしれない
- コマンドのオプションについて興味を持つようになるかもしれない
コマンドのオプション
Linux というか UNIX 系ならほとんどのコマンドは
コマンド名 オプション(任意) ファイル名や処理対象 ... |
という書式で実行できるように暗黙のうちに統一されています.
また,オプションに関してはだいたい以下のような暗黙のルールがあります.
-
オプションのフルネームを指定するときは
--の後に名前を書く. 例 :gcc --help:gccのヘルプを表示する -
オプションに対してパラメータを指定する必要があるときは
--option=paramもしくは--option paramのように書く. -
頻繁に使用するであろうオプションには省略した書き方も用意する.その場合は
-の後に頭文字か関連する文字を1文字書く. 例 :gcc -vgcc --version:gccのバージョン情報を表示する -
略記のオプションを複数指定するときは,
-a -b -cだけでなく-abcとも書ける 例 :ls -alls -a -l: カレントディレクトリにある全てのディレクトリとファイルを long listing format でリスト表示する
暗黙の と繰り返し書きましたが,調べた限りでは明文化された決まりはないようで,これまでのソフトウェアがそうしてきたのでそれにしたがっているというだけみたいです.
つぎの節からは,独断と偏見による個人的な使用頻度順に,よくあるオプションを見ていきましょう.
レベル1(頻度高)
以下に挙げたのはオプションの中でもごくごく基本的なものです.基本的なものだからこそ落とし穴があるのですが,その話はまた今度書きます.
-
--help言わずもがな,ヘルプです.コマンドの使い方に困ったら--helpをつけて実行すると,だいたいのプログラムなら簡単な使い方を表示してくれます. たまに表示してくれないやつもいます.例は割愛. -
--version(-v,-V) バージョン情報を表示します.省略形で-vが使える場合もありますが,後述する--verboseオプションがある場合はそっちに-vの座を奪われてしまう不憫なやつです. 頻繁に使うオプションではありませんが,だいたいのコマンドに備わっているということで書いておきます.例は割愛. -
--recursive(-r,-R) 再帰オプションです.カレントディレクトリもしくは指定したディレクトリ以下の全ファイルに対して処理をしたい時によく使います. とにかくたくさん使うので,下に挙げたものでもほんの一例です. 例1cp -r a b: a 以下にある全ファイルを b にコピーする 例2ls -R: カレントディレクトリ以下の全ディレクトリについてファイルのリストを表示する 例3rm -rf /:/以下を強制全削除 (良い子は実行しないでね!) 例4chmod -R 666 c: c 以下にある全ファイルのパーミッションを666にする 例5grep -r hoge .: カレントディレクトリ以下にある全ファイルに対して grep する -
--output(-o,-O) 出力先を指定します. 例1wget http://... -O file: 指定したアドレスのファイルをfileにダウンロードする 例2gcc po.c -o po:po.cをコンパイルして実行ファイルをpoに出力する 例3sort hoge -o poyo:hogeの内容をソートした結果をpoyoに書く -
--force(-f) 強制処理をさせるときにつけます.あんまりいい気分のするオプションではありません. 例1git push -f: 強制的にリモートレポジトリを更新する 例2rm -rf /:/以下を強制全削除 (良い子は実行しないでね!)
レベル2(頻度中)
特定のツール群と組み合わせてよく使われるオプションがいくつかあります.
-
--file(-f) 処理する対象のファイルを指定します.引数にファイルのパスを複数渡す必要があってややこしい類のコマンドに実装されていることが多いように思います. 例1tar -xf po.tar:po.tarを展開する -
--port(-p,-P) ポート番号を指定します.ネットワーク関連のコマンドで頻出します. 例1ssh 192.168.1.4 -p 99999: 指定したIPアドレスの99999番ポートにssh例2scp -P 99999 192.168.1.4:foo ./bar:scpの場合の書式.ややこしい -
--quiet(-q) 警告や進行状況等のメッセージを表示させないためのオプションです.シェルスクリプトを組むときによく使います. 似たようなオプションとして--silentというのが用意されている場合もあります. 例1grep -q: 結果を標準入出力に書き出さずにgrep例2make --quiet: 静かにmake -
--verbose(-v,-V) 詳細な出力を行わせるオプションです.一度走らせると時間がかかるようなタイプのコマンドによく実装されています. 例1tar -xvf po.tar:po.tarを展開しつつ進捗状況を表示する 例2gem install rake -V: 状況を表示しながらrakeをインストールする 余談ですが,例2はgemのインストール時のエラーをトレースする際に便利です.
レベル3(頻度低)
普段はあまり使わないものの,知っておくと便利かもしれないぐらいの準典型的なオプションです.
-
-n,-c行数やバイト数のような個数やカウントを指定する場合に使います. 例1dmesg | tail -n 3:dmesgの末尾3行を表示する 例2ping -c 3 192.168.1.4: 3回ping -
--yes(-y) 確認が必要な項目についてすべて YES を選択して処理を続行するオプションです.余談ですが,yをひたすら出力し続けるだけのyesコマンドというものもあります. 例1apt-get -y upgrade:apt-get upgradeの過程ですべて YES を選択して続行する -
--interactive(-iなど) 対話型実行を行うためのオプションです. 例1git rebase -i:git rebaseの作業をインタラクティブに行う 例2php -a:phpのインタラクティブシェルを起動
まとめ
どうでしたか?「このオプション,このコマンドにもあるかな?」など気になった際は man や --help を使ってオプションがあるかどうか調べてみると知識が広がると思います.
- 典型的なコマンドラインオプションを例を交えながら列挙した
- (思ったよりいろいろ挙げられなかった)
参考
- Command-Line Options - The Art of Unix Programming a-zに対応する典型的なオプションがリストになっています.
補足
- 出現頻度が高ければ高いほど「このオプションあるだろー」と思って実行して落とし穴にハマります.これについてはまた後日書きます.