「ls -l」コマンドの表示からファイルの属性を理解しよう:“応用力”をつけるためのLinux再入門(9)(3/4 ページ)
今まで漠然と見ていた(かもしれない)「ls -l」コマンドには、実にたくさんの情報が詰め込まれています。1つ1つの意味を理解することで、Linuxではファイルがどのように管理されているかが見えてきます。
ハードリンクとシンボリックリンクの違いは?
全てのファイルには“名前”が付いています。ファイルの名前には「本名」と「別名」の2種類があり、それぞれ複数持つことができます。ファイルの“本名”を「ハードリンク」、“別名”を「シンボリックリンク」と呼びます。
ハードリンクとシンボリックリンクは、「ln」コマンドで増やすことができます。なお、自分で増やすという場合、通常はより自由度の高いシンボリックリンクを使います(※)。
※ハードリンクはその性質上、リンクしたいファイルが「同じファイルシステム上に存在しなければならない」という制限があります。しかし、シンボリックリンクの場合には、そのような制限はありません。
ディレクトリのハードリンク
ディレクトリの場合は「usr」や「home」といった名前の他に、自分自身を示す「.」というハードリンクが自動で作成されます。従って、ディレクトリにはハードリンクが「最低2つある」ことになります。
サブディレクトリがある場合は、サブディレクトリから見た「..」(親ディレクトリ)があるため、ハードリンクの数は3つとなります。つまり、特別にハードリンクを増やしていない限り、ディレクトリのハードリンク数は「サブディレクトリの数+2」となります。
シンボリックリンク
データファイルは「Document」ディレクトリの下に用途別に分けて管理し、よく使うファイルだけは「Desktop」に“ショートカット”を置いておく、という使い方はGUI環境ではおなじみでしょう。ショートカットは“近道”という名前の通り、目的のファイルへの「パス」が入っており、ショートカットを扱えるアプリケーションであればリンク先のファイルを簡単に開いたりすることができます。
シンボリックリンクは、普段はそれがシンボリックリンクであることや、実体がどこにあるかということを意識することなく、操作できるようになっています(※)。OSが面倒を見ているので、アプリケーション側が対応する必要はありません。
※一部のファイル操作コマンドは、シンボリックリンクのファイルそれ自体を操作できるように特別なオプションを用意したりしています。例えば、ファイルを圧縮する際に使用する「zip」コマンドには、“シンボリックリンクをリンクとして圧縮する”という意味のオプション(-y)があります。
シンボリックリンクに対するアクセスは、全てリンク先へのアクセスと同等に扱われます。例えば、テキストエディタでシンボリックリンクを開いた場合は、実体を開いた場合と同じように編集することができ、「cp」コマンドでコピーすれば、実体の複製が作成されます。
シンボリックリンクの作り方
シンボリックリンクは、「ln」コマンドの「-s」オプションを使い「ln -s リンク先 リンク名」で作成します。
例えば、「man」コマンドで参照するマニュアルが保存されている「/usr/local/share/man」ディレクトリへのシンボリックリンクを、「mandir」という名前でカレントディレクトリに作成する場合は、次のようにコマンドを実行します(画面5)。
ln -s /usr/local/share/man mandir
※「ln」コマンドのファイル名の並べ方は、ファイルをコピーする「cp」コマンドと同じです。「cp コピー元 コピー先」のように指定するので、例えば「cp file1 newfile」では、file1と同じ内容の新しいファイル「newfile」が作成されます。ちなみに、cpコマンドでも「-s」オプションが使え、「cp -s コピー元 コピー先」と指定すると複製を作るのではなく、シンボリックリンクを作るという意味になります。
ちなみに、シンボリックリンクファイルには、リンク先のパス名だけが保存されています。例えば、先ほど作成した「mandir」の場合、「/usr/local/share/man」が20文字(20バイト)なので、ファイルサイズが20となっています。
Copyright © ITmedia, Inc. All Rights Reserved.