GNU/Linux >> Linux の 問題 >  >> Linux

/dev ディレクトリ以外のデバイス ファイルからハード リンクを作成できないのはなぜですか?

<ブロック引用>

しかし、ハード リンクは /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 を使用 .ソフトリンクはファイルシステムをまたがることができ、存在しないものを指すことさえできます.


    Linux
    1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

    2. Rmが読み取り専用ファイルを削除できるのはなぜですか?

    3. /dev/dm-Z デバイスから /dev/sdX および /dev/mapper/mpathY デバイスをマップする方法

    1. なぜ /home 以外のものを別のパーティションに入れるのですか?

    2. 一部の Linux システムでは、mtab でルート ファイルシステムが /dev/<実デバイス ノード> ではなく /dev/root として表示されるのはなぜですか?

    3. /dev/null に書き込む仮想ブロック デバイスを作成します。

    1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

    2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

    3. /dev/sda と /dev/sda1 の違い