この節では、ファイルの管理や整理のために Solaris オペレーティング環境で使用するディレクトリ階層について説明します。
ファイルはディレクトリにまとめられますが、ディレクトリも階層構造になっています。この階層の最上位は「ルート」ディレクトリと呼ばれ、「/」で表されます。
次の図 3–1 の例では、ファイルシステム内のディレクトリごとに多数のサブディレクトリがあります。文字「/」は、ディレクトリのレベルを識別するために使用されます。/ (ルート) ディレクトリには、/usr、/bin、/export/home、/lib というサブディレクトリなどがあります。さらに /export/home サブディレクトリには、user1、user2、user3 などのサブディレクトリがあります。
コマンドを実行するには、その対象となるファイルまたはディレクトリを含むディレクトリを指定する必要があります。指定されるディレクトリの下に存在するディレクトリとファイルの名前は、区切り文字であるスラッシュで結合されてパス名を形成します。たとえば、次の図の user3 ディレクトリのパス名は /export/home/user3 です。
同一ディレクトリ内のすべてのサブディレクトリとファイルの名前は一意でなければなりませんが、ディレクトリが異なればこれらの名前が同じであってもかまいません。たとえば、/usr ディレクトリには /usr/lib というサブディレクトリがあります。/usr/lib と /lib ではパス名が異なるため、これらの名前に重複はありません。
ファイルのパス名の機能は、ディレクトリのパス名とまったく同じです。ファイルのパス名は、ファイルシステム階層におけるそのファイルの位置を表します。たとえば、/export/home/user2 ディレクトリに report5 というファイルが存在する場合、このファイルのパス名は /export/home/user2/report5 となります。このパス名は、ファイル report5 はディレクトリ user2 の中にあり、user2 はディレクトリ home の中にあり、home はルート (/) ディレクトリの中にあることを示しています。
pwd (print working directory) コマンドは、ファイルシステム階層内でのユーザの現在位置を表示します。
$ pwd /home/user1 |
実際の出力は、ディレクトリ構造の違いのためにこの例とは異なることがあります。作業用ディレクトリが、ファイルシステム階層内でのユーザの現在位置となります。
各ユーザはホームディレクトリを持っています。端末またはウィンドウを始めて開いたときには、最初の位置がホームディレクトリになります。ホームディレクトリは、ユーザアカウントの作成時にシステム管理者によって作成されます。
cd (change directory) コマンドを使うと、ファイルシステム階層内を自由に移動できます。
$ cd /usr/lib $ pwd /usr/lib |
cd コマンドを引数なしで入力すると、自分のホームディレクトリに戻ります。たとえば、ホームディレクトリが /export/home/user1 の場合は、次のようになります。
$ cd $ pwd /home/user1 |
ホームディレクトリは /export/home/user1 ですが、cd コマンドはユーザを /home/user1 に返します。これは、ホームディレクトリがオートマウンタによって /home ディレクトリにマウントされているためです。
Bourne Again、C、Korn、TC、および Z シェルでは、ホームディレクトリを示す短縮名としてチルド文字 (~) が使用されます。たとえば、次のように入力するとホームディレクトリ内の music サブディレクトリに移動できます。
example% cd ~/music |
この短縮名を使ってほかのユーザのホームディレクトリを指定することもできます。次に例を示します。
example% cd ~username |
username はほかのユーザのログイン名です。このコマンドによって、そのユーザのホームディレクトリに移動します。
Bourne シェルを使用している場合は、この短縮名「~」は機能しません。
Bourne シェルを使用している場合は、$home
と入力してホームディレクトリを指定できるようにシステム管理者がすでに設定している場合があります。その場合は、次のコマンドを入力すると作業ディレクトリをホームディレクトリ内の music サブディレクトリに移動できます。
$ cd $home/music |
サブディレクトリのすぐ「上」のディレクトリは、親ディレクトリと呼ばれます。前記の例では、/home が /home/user1 の親ディレクトリです。親ディレクトリは、シンボル .. (ピリオドを 2 つ) で表します。したがって、cd .. というコマンドを入力すると、次の例で示すように、作業用ディレクトリが親ディレクトリに変わります。
$ pwd /home/user1 $ cd .. $ pwd /home |
現在の作業ディレクトリが /home/user1 のときに、/home/user2 にあるファイルの処理を行いたいという場合は、次のコマンドを入力します。
$ pwd /home/user1 $ cd ../user2 $ pwd /home/user2 |
../user2 は、user2 の親ディレクトリを経由するようシステムに指示します。この例に示すように、絶対パス名 /home/user2 を入力するより簡単です。
新しいディレクトリを作成するには、mkdir コマンドのあとに新しいディレクトリの名前を指定します。
$ mkdir veggies $ cd veggies $ mkdir broccoli $ cd broccoli $ pwd /home/user2/veggies/broccoli |
ファイルやディレクトリの絶対パス名はスラッシュ (/) で始まり、そのファイルまたはディレクトリとルートディレクトリとの間のディレクトリ構造全体から見た関係を表します。ただし、現在の作業用ディレクトリに対するファイルやディレクトリの相対関係を表す省略名 (相対パス名) を使うこともできます。
親ディレクトリにいる場合は、絶対パス名ではなくディレクトリ名だけを指定すればサブディレクトリに移動できます。前記の例では、cd veggies というコマンドで veggies ディレクトリの相対パス名が使われています。現在の作業用ディレクトリが /home/user2 の場合、このディレクトリの絶対パス名は /home/user2/veggies となります。
別個のサブディレクトリをいくつか作成し、そのディレクトリ構造の中を移動してみてください。移動の際には絶対パス名と相対パス名の両方を使ってみてください。現在位置は pwd コマンドで確認します。
ディレクトリを別の名前に置き換えることによって、ディレクトリ名を変更できます。ディレクトリ名の変更には mv コマンドを使います。
$ pwd /home/user2/veggies $ ls broccoli $ mv broccoli carrots $ ls carrots |
mv コマンドを使って、ディレクトリをすでにある別のディレクトリ内に移動することもできます。
$ pwd /home/user2/veggies $ ls carrots $ mv carrots ../veggies2 $ ls ../veggies2 carrots |
この例では、mv コマンドを使って、carrots ディレクトリを veggies から veggies2 に移動しています。
ディレクトリとその下にあるファイルをコピーする場合は、cp -r コマンドを使います。
$ cp -r veggies veggies3 $ |
上記のコマンドは、veggies ディレクトリに含まれるすべてのファイルとサブディレクトリを新しいディレクトリ veggies3 にコピーします。これは「再帰的コピー」と呼ばれ、-r (recursive) オプションで指定します。このオプションを指定しないでディレクトリをコピーしようとすると、エラーメッセージが出されます。
空のディレクトリを削除する場合は、rmdir コマンドを使います。
$ rmdir veggies3 $ |
ディレクトリにファイルやサブディレクトリが含まれている場合、rmdir コマンドではディレクトリは削除できません。
ディレクトリとそのすべての内容 (すべてのサブディレクトリおよびファイル) を削除する場合は、再帰的削除を指示する -r オプションを指定して rm コマンドを実行します。
$ rm -r veggies3 $ |
rmdir コマンドで削除したディレクトリは復元できません。rm -r コマンドで削除したディレクトリとその内容についても同様に復元できません。