Unix:元のファイルが削除されたときに、ソフトリンクファイルが元のファイルを指しているのはなぜですか?


0

Windows 7 64ビットPCを使用しています。Cygwinバージョン2.6.0をc:\ cygwin64ディレクトリにインストールしました。

file1という名前のファイルがあります。そのために、file1_soft1という名前のソフトリンクファイルを作成しました。

ls -i -l コマンドは私にこの出力を与えます:

合計2
3377699721198685 -rw-r--r-- 1 cChappatiドメインユーザー57 Jan 20 19:47 file1
37154696926542763 lrwxrwxrwx 1 cChappatiドメインユーザー5 Jan 21 10:36 file1_soft1-> file1

その後、rm file1コマンドを使用して元のファイルを正常に削除しました。

ls -i -lコマンドを実行すると、次の出力が得られます。

合計1
37154696926542763 lrwxrwxrwx 1 cChappatiドメインユーザー5 Jan 21 10:36 file1_soft1-> file1

file1ファイルがもう存在しないのに、file1_soft1ファイルがfile1ファイルにまだリンクされているのはなぜですか?

file1_soft1ファイルも削除されるか、file1ファイルへのソフトリンクが削除された通常のファイルになると予想していました。しかし、これは起こりませんでした。

ありがとう


1
それが「ソフト」リンクと呼ばれる理由の一部です。
-grawity

1
これは、Windowsシンボリックリンクの通常の動作です。ローマが消えた場合、すべての道路標識も自動的に変わりますか?いいえ
ジグガンジャー

回答:


3

file1ファイルがもう存在しないのに、file1_soft1ファイルがfile1ファイルにまだリンクされているのはなぜですか?

Windowsファイルシステムは、リンク先のファイルが削除されたかどうかを確認するためにリンクを監視しません。

そうすると、かなりのオーバーヘッドが追加されます。

  • すべてのリンクのリストを維持する

  • リストを定期的にチェックして、リンクされているファイルが削除されているかどうかを確認します。

Windows:

  • ファイルのソフトリンク(mklinkおよびshortcut)の作成に使用されるWindowsコマンドは、両方とも存在しないターゲットへのリンクを作成できます。

Unix:

  • ソフトリンクを作成するUnixコマンド(ln -s)は、存在しないターゲットへのリンクも作成できます。

    $ ll
    total 0
    $ ln -s target dummy
    $ ll
    total 1
    lrwxrwxrwx 1 DavidPostill None 6 Jan 21 16:19 dummy -> target
    $ cat dummy
    cat: dummy: No such file or directory
    $
    

    シンボリックリンクがまだ存在するファイルを削除した場合、rm成功しますが、シンボリックリンクは残り、それを参照しようとすると「ファイルが見つかりません」というエラーが返されます。


参考文献

  • Windows CMDコマンドラインのAZインデックス -Windowsのcmdラインに関連するすべてのものに関する優れたリファレンス。
  • mklink-ディレクトリまたはファイルへのシンボリックリンクを作成するか、ハードファイルリンクまたはディレクトリジャンクションを作成します。
  • ショートカット -Windowsショートカット(.LNKファイル)を作成します。

  • Linux用のBashコマンドラインのAZインデックス -Bashコマンドラインに関連するすべてのものに関する優れたリファレンス。

  • ln-ファイル間のリンクを作成します。デフォルトでは、ハードリンクを作成します。-sオプションを使用すると、シンボリック(または「ソフト」)リンクが作成されます。

4

これは、ソフトリンクがファイル自体ではなくパスを指しているためです。

リンクがまだ元のファイルを指しているという仮定は間違っています。元のパスを指している。

このパスに何が存在するかは関係ありません。新しいファイルfile1(またはその名前のディレクトリ)を作成すると、リンクはそれを指します。

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