リンクとコピー

リンクとコピー

UNIXのリンクについていくつかの質問があります。

  1. UNIXのソフトリンクはWindowsのショートカットに似ていると言えますか?
  2. コピーとハードリンクの違いは何ですか?
  3. コピーよりもハードリンクを好むユースケースを教えてくれる人はいますか?

私は今混乱しています。どんな助けでも大変感謝します。

ベストアンサー1

基本的なことは、コピーはファイルのコピーを作成し、リンク(ソフトまたはハード)はそうではないということです。

抽象モデルとして、ディレクトリを以下を含むテーブルと考えてください。

filename       where the file is     content of the file
---------------------------------------------------------
a.txt          sector 13456          abcd
b.txt          sector 67679          bcde

ファイルをコピーすると、cp a.txt c.txt次の結果が表示されます。

filename       where the file is     content of the file
---------------------------------------------------------
a.txt          sector 13456          abcd
b.txt          sector 67679          bcde
c.txt          sector 79774          abcd

ファイルをハードリンクすると、ln b.txt d.txt次の結果が表示されます。

filename       where the file is     content of the file
---------------------------------------------------------
a.txt          sector 13456          abcd
b.txt          sector 67679          bcde
c.txt          sector 79774          abcd
d.txt          sector 67679          bcde

これで、ファイルb.txtd.txtまったく同じです。fここに文字を追加すると、d.txt次にも表示されます。b.txt

ハードリンクの問題は、同じファイルシステムでのみ作成できることです。したがって、ほとんどの人は次のソフトリンクを使用しますln -s a.txt e.txt

filename       where the file is     content of the file
---------------------------------------------------------
a.txt          sector 13456          abcd
b.txt          sector 67679          bcde
c.txt          sector 79774          abcd
d.txt          sector 67679          bcde
e.txt          sector 81233          "Look at where a.txt is located"

最初の近似では、ソフトリンクはWindowsのショートカットに少し似ています。ただし、ソフトリンクはファイルシステムの一部であるため、どのプログラムでも使用できます。 Windowsのショートカットはexplore.exe(および他のいくつかのプログラム)によって解釈されるファイルにすぎません。ただし、Windowsプログラムはショートカットを解釈するときに何かをする必要がありますが、Linuxではソフトリンクが自動的に処理されます。

ほとんどのリンクの使用はより柔軟で、他のファイルシステムを指すことができ、NFSなどで使用できるため、ソフトリンクを使用します。

私が見たハードリンクのユースケースの1つは、ユーザーがファイルを削除しないようにすることです。システム管理者は、「ポインタ」ディレクトリにハードリンクを作成し、ユーザーが誤ってファイルをrm編集した場合(頻繁に発生しているように見える)、テープを使用せずにディスク容量を2倍にするなどの作業なしですぐにファイルを復元できます。あります。

仕組みは次のとおりです。

filename       where the file is     content of the file
---------------------------------------------------------
a.txt          sector 13456          abcd
b.txt          sector 67679          bcde

ユーザーが を入力すると、rm a.txtフォームは次のようになります。

filename       where the file is     content of the file
---------------------------------------------------------
b.txt          sector 67679          bcde

すべての参照がa.txt失われます。他のファイルのためにディスク容量を回復できます。

ただし、システム管理者が重要なファイルリンクのコピーを保持している場合、フォーマットは次のようになります。

filename       where the file is     content of the file
---------------------------------------------------------
a.txt          sector 13456          abcd
b.txt          sector 67679          bcde
link.a.txt     sector 13456          abcd
link.b.txt     sector 67679          bcde

これでユーザーが入力すると、rm a.txtテーブルは次のようになります。

filename       where the file is     content of the file
---------------------------------------------------------
b.txt          sector 67679          bcde
link.a.txt     sector 13456          abcd
link.b.txt     sector 67679          bcde

13456 から始まるファイルへの参照がまだあるため、そのファイルのディスク領域は空き領域として表示されません。したがって、ファイルはまだ存在します。ユーザーがファイルを何らかの方法で復元できるかどうかを尋ねると、a.txtシステム管理者はそれを行うとln link.a.txt a.txtファイルがa.txt再表示されます。そして最新の編集内容。 (もちろん、link.a.txt同じファイルシステムの別のディレクトリにあるので、バックアップを忘れる可能性はありませんが、当時と場所では便利なオプションでした)。

おすすめ記事