ゼロからはじめる「Cygwin」 - コマンドラインを使ってみる編 (1) GUIではない世界--CUI
■前回、前々回の記事はこちら
・ゼロからはじめる「Cygwin」 第2回目 コマンドプロンプトでUNIXコマンドを使う編
http://news.mynavi.jp/articles/2013/11/25/zerokaracygwin/
・ゼロからはじめる「Cygwin」 第1回目 WindowsでUNIXを動かしてみよう!
http://news.mynavi.jp/articles/2013/08/06/cygwin/
○GUIではない世界--CUI
Windowsのみならず、携帯電話のOSであるAndroidなどもそうであるが、アイコンなどを表示し、マウスや指で操作するGUI(Grafical User Interface)が一般的である。それとまったく対象的なものが、CUI(Character User Interface)である。キーボードを使って、コマンドなどを入力する。コンピュータも実行結果を文字で出力する。
GUIと比較すると、以下のような欠点がある。
基本的なコマンドを覚える必要がある
画像やマルチメディアコンテンツの再生・操作は場合によって難しい
コンピュータリソースが乏しい時代に作られたものであることも大きい。初期のコンピュータには、今のようなディスプレイは存在せず、タイプライタ端末なども使われていた。一方、先行入力が可能であったり、処理の自動化、通信の負荷が少なくてすむといった利点も存在する。
では、最初の覚えておきたいコマンドを例に、Cygwinを使いながら進めてみよう。Cygwinを起動し、プロンプトに「ls」と入力する。インストールした状態だと、図1のように何も表示されない。
lsコマンドのlsは、List Segmentsの略で、そこにあるファイルの一覧を表示するコマンドである。では、図1の状態では、1つもファイルが存在しないのであろうか。
答えは、NOである。しかし、その前にコマンドの入力方法について説明しよう。図1では、「ls」とコマンドだけを入力した。一般的にコマンドには、オプションと引数が存在する。それを、マニュアルなどでは、
コマンド [オプション] [引数]
と書くことが多い。コマンドの後に1文字以上を空けてオプション、さらに1文字以上
空けて引数を続ける。[ ]の意味は、なくてもよいというものを表す。つまり、lsコマンドはオプションや引数がなくても、よいということである。
図1のままでは少しつまらないので、ホームディレクトリ(ログイン時にユーザーがおかれるディレクトリ、すべての作業はここからスタートする)に、ファイルをいくつかコピーした状態で始めてみる(この作業はWindows上で、Cygwin\home\ユーザー名のフォルダにコピーする)。
こうしてlsコマンドを実行すると、図2のようになる。
今度はファイル名などが表示される。さて、ここで、オプションを使ってみよう。lsに続けて「-l」と入力する(図3)。
今度はファイルサイズや日付なども表示されるようになる(?は、ユーザーやグループだが、Windowsでコピーしたので設定されていない)。これがオプションによる動作の違いである。さらに、引数を使ってみよう。
ls -lのあとにさらに「text」を追加する(図4)。
実は、図3で先頭に「d」が付いているものはディレクトリであった。ここでは、その中身を表示している。コマンドによっては、オプションを複数持つものがある。それらを複数組みわせてもよい。
aは、普段見えない隠しファイルも表示するオプションである(先頭が「.」で始まるファイルはドットファイルと呼ばれ、普通には表示されない)。オプションを複数指定する場合、順番は関係ない(ls -laとしても同じ結果となる。一方、引数はコマンドによって意味を持つことがある)。
また、どんなオプションや引数があるかを調べるには、--helpオプションを指定する。
長かったので一画面に収まらなかった。ここでは、とりあえず右のスライドバーで最初の方を確認してほしい。また、英語になってしまうが、manコマンドでマニュアルを表示させることもできる。
リターンキー(1行単位)やスペースキー(1画面単位)で、表示内容をスクロールさせることができる。
●簡略表現と特殊文字
○簡略表現と特殊文字
図5の1行目と2行目には「.」と「..」の2つのディレクトリが表示されている。これはどういう意味か?「.」はカレントディレクトリ、「..」は親ディレクトリを意味する。実際に実行すると以下のようになる。
$ pwd ←カレントディレクトリ名を表示
/home/Administrator
$ cd text ←textディレクトリに移動
$ pwd ←カレントディレクトリ名を表示
/home/Administrator/text
$ cp ../aaa.txt . ←親ディレクトリにあるaaa.txtをカレントディレクトリにコピー
$ cd ~ ←ホームディレクトリに移動
pwdコマンドは、Print Working Directoryの略でカレントディレクトリ名を表示する。cdコマンドは、Change Directorの略でディレクトリを移動する。cpコマンドは、Copyの略でファイルやディレクトリをコピーする。ここでは、親ディレクトリ(..)のaaa.txtというファイルをカレントディレクトリ(.)にコピーしている(cpコマンドでは、このように引数の順番に意味がある)。簡略表現は、こういうふうに使うことが多い。そして最後に「~」という簡略表現を使っている。「~」はホームディレクトリを意味する。どこにいても「cd ~」とすれば、ホームディレクトリに移動できる。
ここでは、「cd ..」でも同じ動作になる。
次に、覚えておきたいのがワイルドカードである。「*」は、0文字以上の任意の文字を表す。「?」は任意の1文字を表す。これは、同時に複数のファイルを操作したいときに便利なものだ。
$ ls ←すべてのファイルを表示
f0101.eps f0203.eps f0403.eps f08.jpg pic02.png pic13.png
f0102.eps f0204.eps f0404.eps f09.jpg pic03.png pic14.png
f0103.eps f04.eps f05.jpg f10.jpg pic04.png pic15.png
f0201.eps f0401.eps f06.jpg f11.jpg pic11.png pic17.png
f0202.eps f0402.eps f07.jpg pic01.png pic12.png
$ ls *.jpg ←拡張子が「jpg」のファイルのみ表示
f05.jpg f06.jpg f07.jpg f08.jpg f09.jpg f10.jpg f11.jpg
$ ls f*.* ←先頭が「f」で始まるファイルのみ表示
f0101.eps f0201.eps f0204.eps f0402.eps f05.jpg f08.jpg f11.jpg
f0102.eps f0202.eps f04.eps f0403.eps f06.jpg f09.jpg
f0103.eps f0203.eps f0401.eps f0404.eps f07.jpg f10.jpg
$ ls f0?.eps ←先頭が「f0」でさらに1文字あって、拡張子が「eps」のファイルを表示
f04.eps
$
いろいろ試してみるとおもしろい。
○重要な2文字コマンド
いくつかのコマンドを紹介してきたが、UNIXでは2文字のコマンドを使う機会が非常に多い。今回紹介しなかったものでは、df、du、ln、mv(Move)、ps(Process)、rm(Remove)、vi(Visual editor)、wc(Word Count)などがある。--helpオプションやmanコマンドを使って、その動作などを調べてみるとよいだろう。
また、インターネット上には、さまざまな形でこれらのコマンド紹介の記事がある。実際に「UNIXコマンド」での検索結果が、図8である。
残念ながら、本連載では、すべてのコマンドを網羅的に紹介することはできない。こういった有志の力を借りたいと思う。ただ、注意すべき点がある。第1回目でふれたように、UNIXにはさまざまな種類が存在する。その違いというべきか、コマンドによっては実装されていなかったりすることもある(逆にCygwinにはないコマンドもある)。オプションもすべて同じとはかぎらない。もし違っていても、これは実装が違うんだ、くらいの寛容な気持ちで臨んでほしい。