おかげさまで、本コラムも第100回という節目を迎えることができました。中断前を通算すると444回、約12年続く超長期連載になります。これもひとえに読者の皆さまのおかげ、今後も変わらぬ"スタイル"を追求していきたいと思います。
さて、今回は「シェル」について。第100回記念としては地味すぎるテーマかもしれないが、ある程度の(UNIX方面の)基礎知識があることを前提としてきた経緯を考えれば、このタイミングで"お約束"を紹介する意味はあるはず。呪文のようで意味不明と避けられがちなコマンドの誤解を解くためにも、知って損なしの基礎知識をピックアップしてみよう。
1. ホームディレクトリとは
Terminalを起動すると、「$」という記号(プロンプト)が表示され入力待ちの状態になる。この一連の処理を担うプログラムが「シェル」であり、Terminalでコマンドを入力/実行するという行為は「シェルを介してコマンドの処理をシステム(カーネル)に依頼する」ことにほかならない。
その際基点となる領域が「ホームディレクトリ」だ。通常、Terminal(シェル)を起動すると、ホームディレクトリを振り出しに作業がスタートとなる。そこから他の領域(ディレクトリ=フォルダ)へ移動し、ファイルなどに対しさまざまな処理を行うことが、Terminalを使う目的だ。
OS Xの場合、ホームディレクトリは起動ボリューム(/)→ユーザ(Users)→現在ログイン中のユーザ名(仮に「shinobu」)のフォルダであり(フルパスは/Users/shinobu)、Finder上では家のアイコンで表現される。Terminalを起動してディレクトリを変更しないまま何かコマンドを実行し、ファイルを作成したとすれば、そのファイルは家のアイコンのフォルダに保存されている、というわけだ。
2. 「cd」でディレクトリを移動
Terminalの起動直後はホームディレクトリが作業領域となるが、これをデスクトップや「書類」などのディレクトリ(フォルダ)に変更したいときはどうするか。そのとき使うのがChange Directoryを意味するコマンド「cd」で、ヒトが呼吸するように自然かつ頻繁に利用することになる。
使い方はかんたん、Terminalに「cd」と入力し、スペースキーを押して半角スペース1字ぶん空けたあと、移動したいディレクトリ名を入力、行末で「return」キーを押せばいい。ただし、書類は「Documents」、デスクトップは「Desktop」のように、Finderが置き換えたものではない"素"のディレクトリ名を入力すること。
なお、ディレクトリ名を省略し「cd」とだけコマンドを実行すると、ホームディレクトリに移動する。どこかのディレクトリへ移動したあと、ホームディレクトリへ戻りたいときに使う基本テクニックだ。
$ cd Documents
3. カレントディレクトリと「.」
シェルでは、"ファイルシステム上のどこで作業しているか"が重要な意味を持つ。ファイルに対しなんらかの処理をくわえようとコマンドを実行するのだから、対象のファイルがどこにあるか、生成したファイルがどこに保存されるかは、いつも意識しなければならない。
その現在位置は「カレントディレクトリ」と呼ばれ、Terminalの初期値ではプロンプトの左横に表示するよう設定されている。Terminalを起動するとホームディレクトリが出発点になると前述したが、言い換えれば「Terminalの起動直後のカレントディレクトリはホームディレクトリ」となる。
シェルでは、カレントディレクトリを意味する記号として「.」を利用できる。ときどき「ダウンロードしたコマンドを実行できない!?」という相談を受けるが、多くの場合はカレントディレクトリがコマンドサーチパス(コマンドの保存場所、シェルは特定のディレクトリを検索してコマンドを実行しようとするのだ)に含まれないことが原因だ。コマンド名の直前に「./」を付け、実行したいコマンドがカレントディレクトリにあることを明示すれば、この問題は解決する。
$ ./foobarcommand
4. ホームディレクトリと「~」
シェルにはいくつかの記号があり、前述した「.」はその一例だ。そしてそれ以上に利用頻度が高い記号が「~」(チルダ)で、ホームディレクトリそのものを意味する。
たとえば、「~/Documents」と書かれていれば、それはホームディレクトリ直下にある「Documents」を意味する。「~/Documents/Sea.txt」であれば、/Users/ユーザ名/Documentsディレクトリにある「Sea.txt」というファイルだ。
このしくみを利用すると、ファイルをコピーするときなど長々とパスを記述する手間が省ける。カレントディレクトリ上のファイル「Flower.jpg」をピクチャフォルダへコピーするときには、以下の要領でパスを記述すると作業が格段にラクになるだろう。
$ cp Flower.jpg ~/Pictures