簡略表現と特殊文字

図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である。

図8 「UNIXコマンド」の検索結果

残念ながら、本連載では、すべてのコマンドを網羅的に紹介することはできない。こういった有志の力を借りたいと思う。ただ、注意すべき点がある。第1回目でふれたように、UNIXにはさまざまな種類が存在する。その違いというべきか、コマンドによっては実装されていなかったりすることもある(逆にCygwinにはないコマンドもある)。オプションもすべて同じとはかぎらない。もし違っていても、これは実装が違うんだ、くらいの寛容な気持ちで臨んでほしい。