まず第一に、Linuxシステムでは、カーネルは新しく作成された各ファイルにiノード(インデックスノード)を割り当て、各ファイルには固有のiノード番号があります。ファイルの属性はインデックスノードに格納され、ファイルにアクセスすると、インデックスノードがメモリにコピーされ、ファイルにすばやくアクセスできます。リンクは、共有ファイルとそれにアクセスするユーザーの複数のディレクトリエントリとの間の接続を確立する方法です。 Linuxには、ハードリンクとソフトリンクの2種類のリンクがありますソフトリンクは、シンボリックリンクとも呼ばれます。ハードリンクハードリンクはファイルインデックスノードへのポインタです、システムはそれのためにinodeを再配布しませんあなたはハードリンクを確立するために:lnコマンドを使用することができます。構文:ln [options] existingfile newfileln [options] existingfile-listディレクトリの使用法:最初の種類:" existingfile"のハードリンクを作成します。ファイル名は" newfile"です。 < existingfile-list"に含まれるすべてのファイルに対して同じ名前のハードリンクを作成します。よく使用されるオプション[options] - f「newfile」が存在するかどうかに関係なくリンクを作成します。 -n「newfile」がすでに存在する場合、リンクは作成されません。例を示します。$ ls– il13058 -rwx - - - - - - 1 longcheng longcheng 48 8月5日16:38 file113059 -rwx - - - - - 1 1 longcheng longcheng 57 8月5 16:40 file2 $ ln File2 file2hard $ ls - ilx3058 -rwx - - - - - - 1 longcheng longcheng 48 8月5日16:38 file113059 -rwx - - - - - - 2 2 longcheng longcheng 57 8月5 16:40 file213059 -rwx - - - - - - 2 longcheng longcheng 57 August 5 16:40 file2hardリンクが作成される前は、file1によって表示されるリンクの数は1であることに注意してください(1)リンクが作成されると、file1とfile1hard間のリンク数は2になります。 File1hardは、iノード番号が同じです。(3)file1とfile1hardで表示されるファイルサイズも同じです。 lnコマンドの操作の結果、file1とfile1hardは同じファイルの2つの名前で、同じiノード番号とファイル属性を持ち、file1を作成するためのハードリンクは、現在のディレクトリ内のfile1のファイルインデックスノードです。新しいポインタを作成してください。以下に示すように、rm file2のようにそれらのどれでも削除することができ、一度に1つのポインタだけが削除され、リンクの数は1つ減らされますファイルの内容へのポインタ、すなわちリンクの数だけ0に減らされます。ファイルの内容がディスクから削除されます。現在のディレクトリの論理構造:(申し訳ありませんが、マップは表示されていません)。異なるディレクトリにあるが同じファイルシステムにあるファイルへのハードリンクを作成することも可能です。 file1とfile2が/home /longcheng /dir1ディレクトリにあるとすると、次のコマンドは/home /longchengにfile2へのハードリンクを作成します。 Ln file2 /home /longcheng /file2hard次のプログラムは、dir1ディレクトリにすべてのファイルを作成し、dir2 $ mkdir dir2 $ ln /home /longcheng /dir1 /* /home /longcheng /dir2ディレクトリにハードリンクを作成します。 - 既存のファイルnewfileが存在する場合、元の新しいファイルがどのファイルであっても、現在のユーザーだけが書き込みアクセス権を持っていても、newfileはexisitngfileのハードリンクファイルになります。ハードリンクはスペースを節約しますが、ファイルシステムをLinuxシステムに統合するための伝統的な方法でもあります:(1)異なるファイルシステムのファイル間にリンクを確立することは不可能です。 。多くの木がrootユーザーが作成することができると言うが、著者はrootユーザーでさえ作成することができないことを学習過程で発見しました、私のシステムはRedhatです、カーネル2.4、2.6は試みました。実際、ubuntuでは、スーパーユーザーに切り替えると、ディレクトリへのハードリンクを作成することも不可能になります。ハードワイヤードファイルサイズが乗算されることに注意してください。次に、ソフトリンク(シンボリックリンク)シンボリックリンクはファイルへの間接的なポインタです。ハードリンクはファイルのiノードを直接指します。ソフトリンクはファイルシステムの制限なしにハードリンクの欠点を克服し、どのユーザーもディレクトリへのシンボリックリンクを作成することができます。現在ではより広く使用されており、より柔軟性があり、異なるマシンや異なるネットワーク間でファイルをリンクすることさえ可能です。ソフトリンクを作成するには、lnの後にオプションndを追加するだけです$ ls -il13058 -rwx - - - - - - 1 longcheng longcheng 48 August 5 16:38 file113059 -rwx - - - - - 2 longcheng longcheng 57 8月5 16:40 file213059 -rwx - - - - - - 2 longcheng longcheng 57 8月5 16:40 file2hard $ ln– s file1 file1soft $ ls -il13058 -rwx - - - - - 1 Longcheng longcheng 48 8月5 16:38 file113059 -rwx - - - - - - 2 longcheng longcheng 57 8月5 16:40 file213059 -rwx - - - - - - 2 2 longcheng longcheng 57 8月5 16:40 file2hard13061 lrwxrwxrwx 1 Longcheng longcheng 5 August 5 16:58 file1soft-> gt1上記のリンクからの結果はソフトリンクとハードリンクとして見ることができます、違いは概念的だけでなく、実装においても違います。違いは、ハードリンク元のファイルとリンクファイルではiノード番号が同じであることを示し、ソフトリンク元のファイルとリンクファイルではiノード番号が異なるため2つのファイルであることを示しています。ハードリンクファイルと元のファイルは本質的に完全に等しいので、リンク数が異なっていても、ソフトリンクのリンク数は増えず、ファイルサイズも異なるため、ソフトリンクはリンクファイルを明確に書き込み、ハードリンクは書き込まれません。同じではない、ハードリンクファイルのサイズは元のファイルと同じです、この強調、それは同等であり、ここで表示されるソフトリンクのサイズは元のファイルと異なり、file1のサイズは48B、file1softです。それは5Bです、そして、5内側は実際には「file1」のサイズです。要するに、ソフトリンクの確立は新しいファイルを作成することです。リンクされたファイルにアクセスするとき、システムはそれがリンクされたファイルであることを見つけ、リンクされたファイルを読んで実際にアクセスされているファイルを見つけます。異なるシステム間でソフトリンクを作成し、ディレクトリへのリンクを確立することは、ここでの例ではありません。もちろん、リンクファイルには元のファイルのパス情報が含まれているため、元のファイルをあるディレクトリから別のディレクトリに移動してからリンクファイルにアクセスすると、システムはそれを見つけることができずこの欠陥がなければ、どのようにそれを移動したいのでしょうか;そしてそれはシステムが新しいインデックスノードを作成しそしてオリジナルのファイルへのパスを保存するために余分なスペースを割り当てなければなりません。追加するには:あなたはsymlinkを通してリンクファイルを見ることができます、あなたは学ぶためにman symlinkを使うことができます。