ハード/シンボリックリンクが実際に作成されたファイルであるかどうかを明確にしたかっただけです??
コマンドを実行しました:
ln source hardlink
ln -s source softlink
-- ls コマンドは、この 2 つのリンクをファイルとして表示します。
私の質問は、ln / ln -s
実際にファイルを作成しますか?
よろしく、 darkie15
はいといいえ :-)
UNIX では、ファイルの内容は、そのファイルのディレクトリ エントリとは異なります。複数のディレクトリ エントリが同じ内容を指すようにすることができます (これがどのように機能するかについては、inodeを参照してください)。
これらのディレクトリ エントリはすべて同じです。最初に作成されたものであっても、特別なことは何もありません。削除しても内容は消えず、ディレクトリ エントリだけです。iノードがそれを指しているディレクトリエントリがゼロになると、内容は消えます(そして、すべてのプロセスがファイルを閉じます-プロセスにはまだファイルがあるため、ログファイルを削除してディスクスペースを空けようとして、それを見つけるためだけに噛まれたことがあります開いている場合、ディレクトリエントリがそれらを指していなくても、ファイルの内容は復元されません)。
それはハードリンク用です。
ソフトリンクは少しトリッキーです。それらは、ターゲットファイルへのパスを含む一種の「ファイル」(個別のiノード)を作成します。そして、それらのリンクは等しくありません。元のファイルを削除すると、どこにも指していないソフト リンクが残ります。
inode は特定のファイル システムで一意であるため、ハード リンクは別のファイル システムのデータを参照できません。
ソフトリンクには、その i ノードではなくターゲットファイルへのパスが保存されるため、その制限はありません。
次のトランスクリプトが役立つ場合があります。
$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
hello
$ cat f2
hello
$ cat f3
hello
$ rm f1
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
cat: f1: No such file or directory
$ cat f2
hello
$ cat f3
cat: f3: No such file or directory
エントリを短くするために i ノード番号の最後の 4 桁のみを使用しました (また、のような i ノード番号でヒットしないようにします43910096366994672
) 。また、最初に作成されたファイルの内容がまだ参照されているため、削除されても存続していることがわかります。f1
f2
f3
f1
f2
ただし、は inode ではなく名前f3
を参照しているためf1
、使用しようとするとエラーが発生します。
余談ですが、UNIX が次のようにあなたをもてあそぶとき、あなたはそれを気に入らなければなりません:
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
spacebackspacexという名前のファイルを作成して、誰かがそれを削除しようとするのを見るのと同じくらい楽しいです:-)
どちらもファイルを作成しません。
ディスク上のファイルは「inode」によって識別されます。ディレクトリは、ファイル名を inode にマップします。ハード リンクとは、「このディレクトリに、名前を付けたファイルと同じ inode を指す新しいファイル名を作成する」ことを意味します。
シンボリック リンクとは、「このディレクトリに、この他のファイルが指している i ノードを指す新しいファイル名を作成する」ことを意味します。
mangoman がコメントで指摘しているように、シンボリック リンクはリンク ターゲットの名前のファイルを作成しますが、注意を払うべきではありません。これは、あなたには関係のない特別なファイルです。