ハードリンクを作成するとしますln x y
。
リンクを作成した後、xからファイルを削除せずにyからリンクを削除する方法はありますか? yに対して操作を行いましたが、xも削除したようですrm -rf
。可能であれば、これを避けたいと思います。ハハ。
答え1
$ echo 'hello' >name
$ ln name othername
$ ls -l
total 4
-rw-r--r-- 2 kk wheel 6 Jun 25 09:45 name
-rw-r--r-- 2 kk wheel 6 Jun 25 09:45 othername
$ cat othername
hello
$ rm name
$ ls -l
total 2
-rw-r--r-- 1 kk wheel 6 Jun 25 09:45 othername
$ cat othername
hello
1つのハードリンクを削除しながら他のハードリンクも削除する場合は、深刻な間違いを犯すことです。この場合、rm
またはを使用することは重要ではなく、rm -rf
どの名前が削除されるかは重要ではありません。
ハードリンクを削除すると、ファイル名の1つだけが削除されます。私の考えでは、rm -rf
これら2つの名前を削除する唯一の方法は、これら2つの名前と一致するファイル名globと一緒に使用するか、両方の名前を含むディレクトリを削除することです。
コメントを見ると、実際に次の項目へのハードリンクを生成するアプリケーションを使用しているようです。目次。特定の条件では、macOS HFS +ファイルシステムでこれが可能です。一般的に本物ハードリンクディレクトリを扱うのは面倒で、その使用は主にAppleのTimeMachineソフトウェアのようなものに制限されています。
関連Stackoverflow質問:OS Xでディレクトリハードリンクを生成するUnixコマンドは何ですか?
unlink
その質問に対する回答で述べたように、ハードリンクされたディレクトリを削除するrm -r
代わりに使用する必要があります。rm -r
コンテンツ(すべての名前で)。
また見なさい:ディレクトリハードリンクを強制的に作成しますか?
答え2
私はこれが古い投稿であることを知っていますが、ハードリンクはファイルでのみ機能しますが、ハードリンクオプションと一緒にコピーを使用して再帰的なコピーを作成できますが、Mac OSでも動作しますが、Macでは警告が表示されますが、メッセージは無視できます.
cp -Ral x y
再帰を表し-R
、-a
属性を表し、-l
リンクを表します。
その後は、またはをrm -rf x
実行でき、rm -rf y
他のものはそのまま残ります。
答え3
リンクは、同じファイルを指す新しいファイル名です。ハードリンクを作成することは、ソースファイルのinodeを指す新しいディレクトリエントリ(ファイル名)を作成することです。これがファイルシステム間でハードリンクを作成できず、両方のリンクのメタデータ(権限、xattrsなど)が同じ理由です。 Linuxでは、ディレクトリ以外のファイルに対してのみハードリンクを作成できます。
ディレクトリエントリの数は、inodeのリンク数で追跡されます。ハードリンクが作成されると、リンク数が増加します。ファイルが削除されると、ディレクトリエントリが削除され、リンク数が減ります。ls -l
出力の2番目の列でリンク数を確認できます。単一のディレクトリエントリ(リンク)を削除しても、他のディレクトリエントリは削除されません。
ターゲットファイルを含む同じディレクトリに新しいハードリンクを作成すると、両方のリンクがrm -rf *
削除されます(リンク数が0になると、ファイルが使用するスペースがファイルシステムから回収されます)。