シンボリックリンクとハードリンクの違いは何ですか?


768

最近私は就職の面接でこれを尋ねられました。私は正直に言って、シンボリックリンクの動作と作成方法は知っているが、ハードリンクの使用方法とシンボリックリンクの違いを理解していませんでした。


2
「ハードリンクの使用を理解していない」については、バイナリのコピーをたくさん行うビルドシステムで使用できます。実際のコピーの代わりにハードリンクを作成すると、処理速度が上がります。MSBuild 4.0はこれをサポートしています。
Ankush

13
このリンクは、理解するのに非常に役立ちます。askubuntu.com/questions/108771/...
KTA

2
unix.stackexchangeには、箇条書きの一覧があります。すべての制約が非常に簡潔にレイアウトされており、簡単に流用できるため、非常に役立ちます。(これらの箇条書きの多くは、この質問のコメントでのみ言及されている、またはまったく言及されていないエッジケース/警告をカバーしています)
Trevor Boyd Smith

回答:


781

ファイルシステムの下では、ファイルはiノードで表されます。(それとも複数のiノードですか?よくわかりません。)

ファイルシステム内のファイルは、基本的にはiノードへのリンクです。
ハードリンクは、同じ基本的なiノードへのリンクを持つ別のファイルを作成します。

ファイルを削除すると、基礎となるiノードへのリンクが1つ削除されます。iノードへのすべてのリンクが削除された場合にのみ、iノードが削除されます(または削除可能/上書き可能)。

シンボリックリンクは、ファイルシステム内の別の名前へのリンクです。

ハードリンクが作成されると、リンクはiノードへのリンクになります。元のファイルは基礎となるiノードにリンクしているため、元のファイルを削除、名前変更、または移動しても、ハードリンクには影響しません。iノード上のデータに対する変更は、そのiノードを参照するすべてのファイルに反映されます。

注:ハードリンクは、同じファイルシステム内でのみ有効です。シンボリックリンクは単に別のファイルの名前であるため、ファイルシステムにまたがることができます。


2
iノードはOSの特定のバリアントに依存していると思います。ただし、通常は1つのiノードであると思います。iノードには、ファイルに関する情報と、データがディスクのどこに格納されているかに関する情報があります。大きなファイルには、追加のテーブルへの間接ポインタがあります。
terson

76
シンボリックリンクがファイルシステムを通過できるが、ハードリンクは通過できないという便利な機能を追加することもできます(同じファイルシステム上のファイルを参照する必要があります)。
paxdiablo 2008年



1
@zen:ファイルシステムは、使用されていないときにいつでもマウント解除/再マウントできます。ルートパーティションの場合、これは少しトリッキーですが、実行できます(推奨しません)。ルートに対してそれを行うには、通常、最初に再利用CDを起動して、マウントを変更して再起動するのが最善です。しかし、スーパーユーザーにこの種の質問をする必要があります。
マーティンヨーク

464

Linux(ish)コンソールを使用して、役立つかもしれないいくつかの素晴らしい直感。

2つのファイルを作成します。

$ touch foo; touch bar

それらにデータを入力します。

$ echo "Cat" > foo
$ echo "Dog" > bar

(実際には、エコーがファイルの存在しない場合に作成されるため、そもそもエコーを使用できたかもしれませんが、気にしないでください。)

そして予想通り:

$cat foo; cat bar
Cat
Dog

ハードリンクとソフトリンクを作成してみましょう。

$ ln foo foo-hard
$ ln -s bar bar-soft

何が起こったのか見てみましょう:

$ ls -l

foo
foo-hard
bar
bar-soft -> bar

fooの名前を変更することは重要ではありません。

$ mv foo foo-new
$ cat foo-hard
Cat

foo-hardは、ファイルのiノード、コンテンツ、を指します-変更されていません。

$ mv bar bar-new
$ ls bar-soft
bar-soft
$ cat bar-soft  
cat: bar-soft: No such file or directory

ソフトリンクが名前ではなく変更されたコンテンツを指しているため、ファイルのコンテンツが見つかりませんでした。

同様に、fooが削除されてfoo-hardも、コンテンツは保持されます。barが削除された場合、それはbar-soft存在しないファイルへの単なるリンクです。


12
これは、「ファイル」と「ハードリンク」が同じで、どちらもiノードを指していることを意味しますか?ファイルまたはハードリンクを削除しても、iノードを指している限り、コンテンツは存在しますか?
Daniel W.

1
@DanFromGermany正解。少なくとも1つのハードリンク(ファイル)がコンテンツを指している限り、コンテンツにアクセスできます。
Adam Matan 2013年

6
touch blah1; touch blah2次のように短縮できますtouch blah1 blah2
Dmitri Zaitsev 2015

11
@DmitriZaitsev確かに、初心者のIMOでは読みにくくなります。
Adam Matan 2015

8
これは、私が読んだ多くの回答の中で最も理解できる回答だと思います。サンプルは、説明文の束よりも優れています。
Scott Chu

435

ことわざにあるように、絵は千の言葉に値する。ここに私がそれを視覚化する方法があります:

ここに画像の説明を入力してください

ここにその写真を得る方法があります:

  1. myfile.txt新しいiノードを指す名前をファイルシステムに作成します(ファイルのメタデータを含み、その内容を含むデータのブロックを指します(つまり、「Hello、World!」というテキスト)。

    $ echo 'Hello, World!' > myfile.txt
    
  2. my-hard-linkファイルへのハードリンクをmyfile.txt作成します。つまり、「同じiノードをmyfile.txt指すファイルを作成する」ことを意味します。

    $ ln myfile.txt my-hard-link
    
  3. my-soft-linkファイルへのソフトリンクを作成しますmyfile.txt。これは、「ファイルを指すファイルを作成する」ことを意味しますmyfile.txt

    $ ln -s myfile.txt my-soft-link
    

myfile.txtが削除(または移動)された場合にどうなるかを確認します。my-hard-linkまだ同じコンテンツを指しているため、影響を受けませんが、my-soft-link現在は何も指していません。その他の回答では、それぞれの長所と短所について説明しています。


3
@ThunderWiring「ポイント」とは、リンクが参照するものを意味します。ハードリンクの場合は、iノードを直接参照します(つまり、によって参照されるのと同じiノードmyfile.txt)。ソフトリンクのために、それの参照は、(データが含まれています)iノードではなく、むしろそれの参照がへのファイルシステムパスですmyfile.txt(例えば/home/Documents/myfile.txt
akivajgordon

4
私はあなたの視覚的な反応@akivajgordonが本当に好きです-違いをよりよく理解するのに本当に役立ちました!
wmock

7
万語!
SaganRitual

13
多分私は遅いですが、あなたの写真は約2秒で20年間の謎を解き明かしました。
jdk1.0 2017年

3
最も有用な回答です。これがこの投稿に深く埋もれていることに私は怒っています。100ポイントのインターネットポイントを差し上げますが、残念ながら1ポイントしか差し上げません。
ダグルームズ2017

71

ハードリンクは、元のファイルが移動するときに便利です。たとえば、ファイルを/ binから/ usr / binまたは/ usr / local / binに移動します。/ bin内のファイルへのシンボリックリンクはこれによって壊れますが、ハードリンク(ファイルのiノードへの直接リンク)は問題になりません。

ハードリンクはディレクトリエントリのみを使用するため、ディスクスペースを節約できますが、シンボリックリンクは、それが指す名前を格納するために独自のiノードを必要とします。

ハードリンクは、解決にかかる時間も短くなります。シンボリックリンクは、シンボリックリンクディレクトリにある他のシンボリックリンクを指すことができます。また、これらの一部はNFSまたはその他の待ち時間の長いファイルシステム上にある可能性があるため、ネットワークトラフィックが解決される可能性があります。常に同じファイルシステム上にあるハードリンクは、常に単一のルックアップで解決され、ネットワーク遅延を伴うことはありません(NFSファイルシステム上のハードリンクである場合、NFSサーバーが解決を行い、それは見えません。クライアントシステム)。時々これは重要です。私にとってはそうではありませんが、これが重要になる可能性のある高性能システムを想像できます。

また、mmap(2)やopen(2)のようなものもハードリンクと同じ機能を使用してファイルのiノードをアクティブに保ち、ファイルがunlink(2)されても、iノードはプロセスが引き続きアクセスできるようにします。プロセスが閉じると、ファイルは本当に消えます。これにより、はるかに安全な一時ファイルが可能になります(オープンとリンク解除をアトミックに実行できる場合、私が覚えていないPOSIX APIが存在する可能性があり、実際には安全な一時ファイルがあります)。データに誰もアクセスできないようにします。/ procがすべての人にファイル記述子を見る機能を与える前に、それは本当でしたが、それは別の話です。

そういえば、プロセスAで開いているがファイルシステムでリンクされていないファイルを回復すると、ハードリンクを使用してiノードリンクが再作成されるため、ファイルを開いているプロセスがファイルを閉じたり閉じたりしてもファイルは消えません。


35

ソフトリンク

ソフトまたはシンボリックは、元のファイルへのショートカットです。元のファイルを削除すると、ショートカットは失敗します。ショートカットを削除するだけでは、元のファイルには何も起こりません。

ソフトリンク構文ln -s Pathof_Target_file link

出力: link -> ./Target_file

証明: readlink link また、ls -l link出力では、最初の文字がllrwxrwxrwxとして表示されます。これは、ファイルがソフトリンクであることを示しています。

リンクを削除する: unlink link

注:必要に応じて、現在のディレクトリから別の場所に移動した後でも、ソフトリンクは機能します。ソフトリンクを作成するときは、相対パスではなく絶対パスを指定してください。ie(./ Target_fileではなく、/ root / user / Target_fileから開始)

ハードリンク:

ハードリンクは、ミラーコピーまたは同じファイルへの複数のパスです。file1に何かを行うと、file 2に表示されます。一方を削除しても、もう一方は正常です。

iノード(またはファイル)が削除されるのは、すべての(ハード)リンクまたは(同じファイル)iノードへのすべてのパスが削除された場合のみです。

ハードリンクが作成されると、リンクには元のファイルのiノードが含まれます。元のファイルの名前変更または移動を削除しても、ハードリンクは基礎となるiノードにリンクしているため、ハードリンクには影響しません。iノード上のデータへの変更は、そのiノードを参照するすべてのファイルに反映されます。

ハードリンク構文ln Target_file link

出力:名前がリンクのファイルは、Targetfileと同じiノード番号で作成されます。

証明: ls -i link Target_file そのiノードを確認)

リンクを削除する: rm -f link通常のファイルと同じようにリンクを削除します)

注意:シンボリックリンクは、単に別のファイルの名前であるため、ファイルシステムにまたがることがあります。一方、ハードリンクは同じファイルシステム内でのみ有効です。

シンボリックリンクには、ハードリンクがないいくつかの機能があります。

  • ファイルの内容へのハードリンクポイント。一方、ソフトリンクはファイル名を指します。
  • 一方、ハードリンクのサイズはコンテンツのサイズであり、ソフトリンクはファイル名のサイズです。
  • ハードリンクは同じiノードを共有します。ソフトリンクにはありません。
  • ハードリンクはファイルシステムをまたぐことはできません。ソフトリンクにはあります。
  • ハードリンクを使用しているときにシンボリックリンクが指す場所がすぐにわかる場合は、ファイルシステム全体を調べて、同じiノードを共有するファイルを見つける必要があります。

    # find / -inum 517333

    /home/bobbin/sync.sh
    /root/synchro
    
  • ハードリンクはディレクトリを指すことはできません。

ハードリンクには2つの制限があります。

  • ディレクトリをハードリンクすることはできません。Linuxでは、ディレクトリの非循環ツリー構造を維持することはできません。
  • ファイルシステム間でハードリンクを作成することはできません。異なるファイルシステムには異なる独立したiノードテーブルがあるため、両方のファイルは同じファイルシステム上にある必要があります(異なるファイルシステム上の2つのファイルですが、同じiノード番号は異なります)。

3
「ハードリンクのサイズはコンテンツのサイズで、ソフトリンクのサイズはファイル名のサイズです。」明確にするために、別のハードリンクを作成しても、数バイトだけ空き領域に影響を与えます。
Ingo

34

ハードリンクとシンボリックリンクの違いを確認する簡単な方法は、簡単な例です。ファイルへのハードリンクは、ファイルが格納されている場所、またはそのファイルのiノードを指します。シンボリックリンクは、実際のファイル自体を指します。

したがって、「a」というファイルがあり、ハードリンク「b」とシンボリックリンク「c」を作成すると、すべてファイル「a」を参照します。

echo "111" > a
ln a b
ln -s a c

「a」、「b」、「c」の出力は次のようになります。

cat a --> 111
cat b --> 111
cat c --> 111

次に、ファイル「a」を削除して、「a」、「b」、「c」の出力がどうなるかを見てみましょう。

rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory

どうしたの?

ファイル "c"はファイル "a"自体を指しているため、ファイル "a"が削除されると、ファイル "c"は何もポイントせず、実際には削除されます。

ただし、ファイル "b"は、ファイル "a"のストレージの場所またはiノードを指します。したがって、ファイル "a"が削除されると、それはiノードを指さなくなりますが、ファイル "b"はそうするため、ハードリンクがそれをポイントしなくなるまで、iノードは "a"に属していたコンテンツを保存し続けます。


ファイルは非常に抽象的なオブジェクトであり、すべての抽象的なものを備えているため、高レベルの実装の本当の意図は、抽象化を吹き飛ばす危険を冒さずに適切な説明に及ばない可能性があることを指摘しておくと役立ちます。
Cholthi Paul Ttiopic

28

シンボリックリンクはパス名にリンクしています。これは、システムのファイルツリーのどこにあってもかまいません。また、リンクが作成されるときに存在する必要もありません。ターゲットパスは、相対パスでも絶対パスでもかまいません。

ハードリンクは、iノードへの追加のポインタです。つまり、ターゲットと同じボリューム上にのみ存在できます。ファイルへの追加のハードリンクは、ファイルを参照するために使用される「元の」名前と区別できません。


また、リンク先のファイルを削除すると、シンボリックリンクが壊れ、ハードリンクはファイルシステムにファイルを「保持」するため、有効なままになります。
njsf 2008年

21

ウィキペディアを紹介します。

いくつかのポイント:

  • シンボリックリンクは、ハードリンクとは異なり、ファイルシステムを横断できます(ほとんどの場合)。
  • シンボリックリンクはディレクトリを指すことができます。
  • ハードリンクはファイルを指し示し、複数の名前で同じファイルを参照できるようにします。
  • 少なくとも1つのリンクがある限り、データは引き続き利用できます。

1
理論的には(実際には場合によっては)ハードリンクもディレクトリを指すことができます(実際、「。」は現在のディレクトリへのハードリンクであり、「..」は親ディレクトリへのハードリンクです)。しかし、それらは危険である可能性があるため、ほとんどのUNIXでは許可されていません(または特別な手順を実行する必要があります)。アップルは、タイムマシンの実装にそれらを使用しています。例:earthlingsoft.net/ssp/blog/2008/03/x5_time_machine
Joachim Sauer

3
あなたは記事へのリンクを指しています...それはあなたをシンボリックリンクにしますか?
イアンキャンベル

@JoachimSauer新しいAppleファイルシステムにより、Time Machineがディレクトリへのハードリンクを使用する必要がなくなると思いますか?
cjm

最高評価の回答の説明よりも、ウィキペディアの説明が大幅に短く、具体的であることがわかりました。
Lakesare、

9

ハードリンクは、増分バックアップを行うときに非常に役立ちます。たとえば、rsnapshotを参照してください。アイデアはハードリンクを使用してコピーすることです:

  • バックアップ番号nをn + 1にコピー
  • バックアップn-1をnにコピー
  • ...
  • バックアップ0をバックアップ1にコピーする
  • 変更されたファイルでバックアップ0を更新します。

すべての増分バックアップは、変更されていないファイルの同じiノードセットをポイントするため、新しいバックアップは、行った変更とは別に余分なスペースを占有しません。


6

ハードリンクとソフトリンク

ハードリンクとソフトリンクは、この画像で簡単に説明できます。


5
ソフトリンクの画像が正しくないようです。ポイント:ソフトリンクのiノードは、元のファイルのiノードを指してはなりません。元のファイルの名前を変更すると、関連するソフトリンクが無効になります
percy507

@ percy507はい、あなたは正しいです-しかし、私はそれを非常に素晴らしく直感的な説明で見つけます。ただ、...、iノードとの間に矢印がないことを想像
マイケル・リトビン

5

私はニックの質問を付け加えますハードリンクはいつ有用または必要ですか?私の頭に浮かぶ唯一のアプリケーションは、シンボリックリンクでは機能しませんが、chrootされた環境でシステムファイルのコピーを提供することです。


異なるシステムの異なる場所にマウントポイントがある分散システム。もちろん、これは一貫性を保つことにより、システムから設計することもできます。
terson

@Tanktalusが良い例だと思います。
Nick Stinemates 2008年

4

MSDNから、

シンボリックリンク

シンボリックリンクは、別のファイルシステムオブジェクトを指すファイルシステムオブジェクトです。指し示されているオブジェクトはターゲットと呼ばれます。

シンボリックリンクはユーザーに対して透過的です。リンクは通常のファイルまたはディレクトリとして表示され、ユーザーまたはアプリケーションがまったく同じ方法で操作できます。

シンボリックリンクは、UNIXオペレーティングシステムとの移行およびアプリケーションの互換性を支援するように設計されています。Microsoftは、UNIXリンクと同様に機能するようにシンボリックリンクを実装しました。

シンボリックリンクは、絶対リンクでも相対リンクでもかまいません。絶対リンクは、パス名の各部分を指定するリンクです。相対リンクは、相対リンク指定子が指定されたパスのどこにあるかを基準にして決定されます

絶対シンボリックリンクの例

X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"

相対シンボリックリンクの例

X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"

ハードリンク

ハードリンクは、複数のパスは、単一のファイル参照れるファイルのファイルシステムである同じ体積にします

ウィンドウでハードリンクを作成するには、リンクを作成する場所に移動し、次のコマンドを入力します。

mklink /H Link_name target_path

ハードリンクは、作成された順序に関係なく、どの順序でも削除できることに注意してください。また、次の場合はハードリンクを作成できません。

  • 参照は別のローカルドライブにあります
  • 参照にはネットワークドライブが含まれます。つまり、参照の1つはネットワークドライブです。
  • 作成されるハードリンクはターゲットと同じパスにあります

ジャンクション

NTFSは、junctionと呼ばれる別のリンクタイプをサポートしています。MSDNでは次のように定義しています。

ジャンクション(ソフトリンクとも呼ばれます)がハードリンクと異なる点は、ジャンクションが参照するストレージオブジェクトが個別のディレクトリであり、ジャンクションが同じコンピューター上の異なるローカルボリュームにあるディレクトリをリンクできることです。それ以外の場合、ジャンクションはハードリンクと同じように動作します。

ハードリンクセクションとジャンクションセクションの太字部分は、両者の基本的な違いを示しています。

ウィンドウにジャンクションを作成し、リンクを作成する場所に移動して、次のように入力するコマンド:

mklink /J link_name target_path

3

また:

  1. ハードリンクの読み取りパフォーマンスはシンボリックリンクよりも優れています(マイクロパフォーマンス)
  2. シンボリックリンクは、コピー、バージョン管理などが可能です。つまり、実際のファイルです。反対に、ハードリンクは少し低いレベルにあり、シンボリックリンクと比較して、ハードリンクを通常のファイルとしてではなくハードリンクとして操作する手段を提供するツールが少ないことがわかります。

3

単純に、ハードリンク:ファイルに新しい名前を追加するだけです。つまり、ファイルは同時に多くの名前を持つことができ、すべての名前は互いに等しく、誰も好みません。ハードリンクはすべてのコンテンツをコピーすることを意味しませんファイルの作成と新しいファイルの作成はそれではなく、単に既知の代替名を作成するだけです。

シンボリックリンク(symlink):別のファイルへのファイルポインター。シンボリックリンクが後で削除される既存のファイルを指している場合、シンボリックリンクは、ファイル名がなくなっても同じファイル名を指し続けます。


3

通常の「ファイル」とは、実際には2つの異なるものです。ファイルのデータとディレクトリエントリです。ファイルのハードリンクを作成すると、実際には同じデータを参照する2番目のディレクトリエントリが作成されます。両方のディレクトリエントリの機能はまったく同じです。それぞれを使用して、ファイルを開いて読み取ることができます。したがって、実際には「ファイルとハードリンク」はなく、「2つのディレクトリエントリを持つファイルデータ」があります。ファイルを削除すると考えると、実際にはディレクトリエントリが削除され、データの最後のディレクトリエントリが削除されると、データ自体も削除されます。ディレクトリエントリが1つしかない通常のファイルの場合、ディレクトリエントリを削除すると、通常どおりデータが削除されます。(ファイルが開かれている間、OSはファイルへの一時リンクを作成しますが、

例として、ファイルA.txt、ハードリンクB.txtを作成し、A.txtを削除します。A.txtを作成すると、いくつかのデータが作成され、ディレクトリエントリはA.txtになります。ハードリンクを作成したときに、まったく同じデータを指す別のディレクトリエントリB.txtが作成されました。A.txtを削除しても、最初にファイルB.txtを作成した場合とまったく同じように、すべてのデータと単一のディレクトリエントリB.txtが残っています。

ソフトリンクは、データを含まず、別のディレクトリエントリのパスを除いて、(ほとんど)通常のファイルです。ソフトリンクが参照するファイルを削除すると、ソフトリンクにはディレクトリエントリを指し示さないパスが含まれます。これは壊れています。ソフトリンクを削除しても、他のファイルを削除するのと同じように、リンク先のファイルは影響を受けません。


2

ディレクトリエントリは、構造体へのリンクです。

struct dentry{
    ino_t ino;
    char  name[256];
}

inoはiノードの番号、名前はファイル名、iノードの構造は次のようになります。

struct inode{
      link_t nlink; 
      ...
}

たとえば、ファイル/ 1を作成すると、ディレクトリエントリは次のようになります。

struct dentry{
     ino_t ino; /* such as 15 */
     char  name[256]; /* "1" */
} 

inode構造体は次のようになるでしょう:

   struct inode{ /* inode number 15 */
         link_t nlink; /* nlink = 1 */
         ...
    }

次に、ハードリンク(/ 100の場合があります)を作成します。ディレクトリエントリは次のようになります。

  struct dentry{
     ino_t ino; /* 15 */
     char  name[256]; /* 100 */
  }

inode構造体は次のようになるでしょう:

   struct inode{ /* inode numebr 15 */
         link_t nlink; /* nlink = 2 */
         ...
    }

次に、ファイル1へのシンボリックリンク(/ 200の場合があります)を作成します。ディレクトリエントリは次のようになります。

  struct dentry{
        ino_t ino; /* such as 16 */
        char  name[256]; /* "200" */
  }

inode構造体は次のようになるでしょう:

   struct inode{ /* inode number 15 */ 
         link_t nlink; /* nlink = 2 */
         ...
    }

   struct inode{ /* inode number 16 */
         link_t nlink; /* nlink = 1 */
         ...
    } /* the data of inode 16 maybe /1 or 1 */

2

上記のすべての回答に加えて、ハードリンクファイルとソフトリンクファイルの検索の違いは、以下のように理解できます。

f6現在のディレクトリと、という名前のディレクトリにファイルがありますt2

名前が付けられf1./t2/f2シンボリックリンクであるファイルf6

名前のファイルf7./t2/f8のハードリンクされていますf6

ソフトリンクとハードリンクを見つけるには、次を使用できます。

$ find -L . -samefile f6 

> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8

使用できるハードリンクのみを見つけるには:

$ find . -xdev -samefile f6

> ./f6
> ./f7
> ./t2/f8

ハードリンクは同じファイルシステム上に作成できるため、-Lオプションを使用せずにすべてのハードリンクを検索できます(-xdev、同じファイルシステム/マウントポイントで、)。不要な検索を別のマウントポイントに保存します。

したがって、ハードリンクを検索する方がソフトリンクを検索するよりもいくらか高速です(私が間違っているか、明確でない場合は修正してください)。


1

シンボリックリンクは、ハードリンクと同様に、ファイルに別の名前を付けます。ただし、シンボリックリンクが残っていても、ファイルを削除できます。


いいえ。シンボリックリンクは「同じファイルの別の名前」ではなく、それ自体がターゲットファイルにリンクしているファイルです。
Kusalananda 2016

1

使用量の私の2セント:

ソフトリンクは、長いパス名を短くするために使用できます。

ln -s /long/folder/name/on/long/path/file.txt /short/file.txt

変更/short/file.txtは元のファイルに適用されます。

大きなファイルを移動するためにハードリンクを使用できます。

$ ls -lh /myapp/dev/
total 10G
-rw-r--r-- 2 root root 10G May 22 12:09 application.bin

ln /myapp/dev/application.bin /myapp/prd/application.bin

別のフォルダへのインスタントコピー。元のファイル(上の/myapp/dev)は、ファイルに触れることなく移動または削除できます。/myapp/prd


0

一般的なシナリオであるソフトウェアのインストールでハードリンクを理解する簡単な方法を見つけました。

ある日、ソフトウェアをフォルダにダウンロードしDownloadsてインストールしました。私がした後sudo make install、いくつかの実行可能ファイルはcpローカルのbinフォルダーに編集されました。ここでcpは、ハードリンクを作成します。私はソフトウェアに満足していましたが、それDownloadsが長期的には良い場所ではないことにすぐに気付きました。したがって、私mvはソフトウェアフォルダーを sourceディレクトリに移動しました。まあ、Windowsのように、ターゲットリンクについて心配することなく、以前と同じようにソフトウェアを実行できます。これは、ハードリンクが直接iノードと他のファイルを見つけることを意味します。


0

この答えでは、私がファイルを言うとき、私はメモリ内の場所を意味します

保存されたすべてのデータは、iノードと呼ばれるデータ構造を使用してメモリに格納されます。すべてのiノードにはiノード番号があります。iノード番号は、iノードにアクセスするために使用されます。ファイルへのすべてのハードリンクの名前は異なる場合がありますが、同じiノード番号を共有します。すべてのハードリンクは同じiノード番号(同じiノードにアクセスする)を持っているため、すべてのハードリンクは同じ物理メモリを指します。

シンボリックリンクは特別な種類のファイルです。ファイルでもあるので、ファイル名とiノード番号があります。前述のように、iノード番号はデータを指すiノードにアクセスします。シンボリックリンクのiノード番号は、別のファイルへの「パス」を指すiノードにアクセスします。より具体的には、シンボリックリンクのiノード番号は、別のハードリンクを指すiノードにアクセスします。

GUIでファイルを移動、コピー、削除するときは、物理メモリではなくファイルのハードリンクで遊んでいます。ファイルを削除するときは、ファイルのハードリンクを削除しています。物理メモリは消去されていません。ファイルへのハードリンクがすべて削除されている場合、格納されているデータにアクセスできなくなりますが、メモリに残っている可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.