しかし、ハード リンクは /dev ディレクトリにしか作成できず、他のディレクトリでは作成できませんでした。
エラー メッセージに示されているように、異なるファイル システム間でハード リンクを作成することはできません。ソフト (シンボリック) リンクのみを作成できます。
たとえば、 /home
の場合 ルート パーティションとは別のパーティションにある場合、/tmp/foo
をハード リンクすることはできません。 /home/user/
まで .
さて、@RichardNeumann が指摘したように、/dev
通常、devtmpfs ファイルシステムとしてマウントされます。この例を参照してください:
[[email protected] ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
したがって、/dev
内のファイルへのハード リンクのみを作成できます。 /dev
以内 .
ハード リンクはファイル システム間では機能しないため、目的を達成するためにハード リンクを使用することはできません。
ただし、 mknod
で目的を達成できます コマンド。
ls -l /dev/devicefile
を実行 .次のような出力が表示されるはずです:
crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
1, 9
).mknod /path/to/destination c 1 9
を実行します (必要な値に置き換えます)。これが機能する理由
デバイス ファイルは、カーネルまたはカーネル ドライバーによって実装された抽象ファイルへの実質的なハード リンクです。別のファイル システムからファイル システム オブジェクトへのハード リンクを作成することはできませんが、これらはファイル システム オブジェクトではないため、メジャーおよびマイナー参照番号を知ることで、任意のファイル システムからそれらへの参照を作成できます。
ハードリンクは、ファイルを指す別のエントリをディレクトリに作成するだけです (ファイルは、ディレクトリなどのファイルのようなものです)。したがって、ハードリンクは別のファイル システムのファイルを参照できません。
この場合、ソフトリンクはあなたの友達です。 ln -s
を使用 .ソフトリンクはファイルシステムをまたがることができ、存在しないものを指すことさえできます.