1. ホーム
  2. オペレーティングシステム
  3. ユニックス/BSD

Unixシステムにおけるハードリンクとソフトリンクの説明

2022-01-16 05:03:45

簡単に言うと、リンクとはファイルシステム内の別の場所へのショートカットです。長いパス名を入力したり、複数のフォルダにcdを打ったりするのを避けるために非常に便利です。Windowsのデスクトップにあるプログラムのアイコンも実はショートカットです。これも理解できると思いますが、両者には大きな違いがあるのです。unixのリンクには、ハードリンクとソフトリンクの2種類があります。

ユニックスハードリンク

ハードリンクとは、同じi-node(ハードディスク上の物理的な位置)を持つ別のファイルを参照するディレクトリエントリーのことです。実際には、ファイルは1つしかなく、ハードディスク上の同じ物理データを指すディレクトリ・エントリーは2つ以上しかありません。


コピーコード
コードは以下の通りです。

ln /usr/local/etc/rc.d/nginx nginx

このコマンドを使用して、ハードディスク /usr/local/etc/rc.d/nginx の別のアドレスを表す nginx という名前のファイルをカレントディレクトリに作成します。これで、カレントディレクトリにある nginx を使って、同じ名前のファイルに直接アクセスすることができます(もちろん、接続はすでに作成されているので、nginx ファイルを編集したい場合は、ロングパスの代わりに "vi /usr/local/etc/rc.d/nginx" を実行するだけで、実行したい場合はロングパスを入力しなくても大丈夫です)。

ls -l nginx を実行すると、ハードリンクファイルのパーミッションが元のファイルと全く同じであることがわかりますので、ハードリンクファイルのパーミッションを直接変更すると、元のファイルの対応するパーミッションも変更されることになります。

要するに、元のファイルと同じサイズ、変更時間、パーミッションなどになるわけです。

ハードリンクされたファイルを削除するためにrmを実行すると、リンクカウントが1減算されて変更されますが、ハードウェア上の同じ物理位置を指す別のリンクが存在するため、ファイルはまだ存在します。ファイルは、そのハードリンクがすべて削除され、リンクカウントが0になったときにのみ削除されます。

スクリプトハウス注:UNIXのハードリンクには、ディレクトリをリンクできない、ファイルシステムの範囲にまたがることができない、という2つの大きな制限があります。

UNIXソフトリンク

UNIXのソフトリンクは、シンボリックリンクやシンボリックリンクとも呼ばれ、Windowsでいうショートカットに相当するものです。ハードリンクとは異なり、ソフトリンクはハードウェア上に独自のi-nodeを持つ独立したファイルです。ソフトリンクは単に他のファイルへのポインタを含むファイルです。使用方法 ln -s コマンドでソフトリンクを作成し、その後に ls -l -b をクリックすると、ファイルのプロパティが表示されます。


コピーコード
コードは以下の通りです。

ln -s /etc/rc.conf a
ls -l -b

  • etc/rc.conf を編集する場合、長いパスを入力するのではなく、ソフトリンクを使って直接編集することができます。例えば、" を実行することで、/etc/rc.conf を編集することができます。 vi a は "と同じ意味です。 vi /etc/rc.conf "です。編集中に "No such file or directory found" のようなエラーが表示され、lsコマンドを実行したらファイルが見つかった場合は、対象のファイルやディレクトリが存在しない、つまり空になってしまったソフトリンクを使用していることになります。そのファイルがソフトリンクであるかどうかは,ls -lというコマンドで確認することができます.ソフト・リンクであれば,リンク先のファイルやディレクトリが存在するかどうかを確認することができます.

    スクリプトハウス注:対象ファイルを遠ざけたり、削除することはできません、ソフト削除は失敗します。

    UNIXのハードリンクとソフトリンクの違い

    1. アクセス権は実ファイルへのアクセスを表すものではなく、ソフトリンクのプロパティ(自分の両方やワークグループへのアクセス権など)を変更することはできません。これらの操作は、実ファイルに対してのみ可能です。

    2. ソフトウェアリンクは他のファイルを指す実ファイルであり、(ハードリンクのように)ハードディスク上の場所への単なるディレクトリではないため、接続の数は実際には1つだけです。

    3. ファイルサイズは確認できません。ソフトリンクに記載されているサイズは、その中に含まれる接続ファイルのサイズであり、それが指し示す実ファイルのサイズではありません。

    4. ファイルの修正時間も正確ではありません。ソフト接続では、接続が最後に変更された時刻がわかりますが、参照するファイルが最後に変更された時刻はわかりません。

    5. ファイル名は、->の後に、そのファイルが参照する実ファイルのパス名が続くことを示します。

    6. ファイルが削除される。ハード接続と異なり、ソフト接続が参照している元のファイルが削除されると、そのファイルのデータブロックも削除され、接続が空になります。ただし、rmコマンドで接続を削除した場合、元のファイルはそのまま残ります。

    7. i-nodeの占有。ソフト接続に対するハード接続の利点は、i-nodeを占有しないことです。これは些細なことに思えるかもしれませんが、ハードディスクで利用できるi-nodeの数が限られている場合はそうではありません。ハードディスク上に無数の小さなファイルがある場合、ドライブ上にまだ多くのスペースが残っていても、それらの小さなファイルがドライブ上のすべてのi-nodeを使い果たし、いくつかのファイルが削除されてi-nodeの一部が解放されない限り、i-nodeが使い果たされた後に新しいファイルを作成することができない可能性があります。

    結合の使い方の選択についてですが、結合の使い方としては、元ファイルと対象ファイルが現在のファイルと同じファイルシステム上にあることを条件にハード結合するのが最も一般的な使い方です。実ファイルの情報を提供し、元ファイルが削除・移動されても空の接続にならない利点があります。しかし、別のファイルシステム上にあるディレクトリやファイルを結合する必要がある場合は、ソフト結合を使用する必要があります。