Linux リンクは 2 つのタイプに分けられ、1 つはハード リンクと呼ばれ、もう 1 つはシンボリック リンクと呼ばれます。デフォルトでは、ln コマンドはハード リンクを生成します。ハード リンクとソフト リンクの違いは、基本的に inode ノードから始まります。以下は、Linux における 2 種類のリンクの違いを確認するために、Linux システムでハード リンクとソフト リンクを作成する例です。
まず第一に、Linux システムでは、カーネルが新しく作成された各ファイルに i ノード (インデックス ノード) を割り当て、各ファイルには一意の i ノード番号があることを理解する必要があります。ファイルの属性はインデックスノードに格納されており、ファイルにアクセスする際にはインデックスノードがメモリ上にコピーされるため、ファイルへの高速アクセスが実現されます。
リンクは、共有ファイルと、それにアクセスするユーザーの複数のディレクトリ エントリとの間の接続を確立する方法です。 Linux にはハード リンクとソフト リンクの 2 種類のリンクがあり、ソフト リンクはシンボリック リンクとも呼ばれます。
ハードリンク
端的に言うと、ハード リンクはファイル インデックス ノードを指すポインタであり、システムはそれに i ノードを再割り当てしません。 :ln コマンドを使用してハード リンクを作成できます。文法:### リーリー
使用法: 最初: 「existingfile」のハードリンクを作成し、ファイル名は「newfile」とします。 2 番目: 「directory」ディレクトリに、「existingfile-list」に含まれるすべてのファイルに対して同じ名前のハード リンクを作成します。一般的に使用されるオプション [オプション] -f は、「newfile」が存在するかどうかに関係なく、リンクを作成します。 -n 「newfile」がすでに存在する場合、リンクは作成されません。例は次のとおりです。 リーリー ###知らせ:### リンクを作成する前、file1 によって表示されるリンクの数は 1です。 リンクを作成すると、(1) file1 と file1hard のリンク数は 2 になります、(2) file1 と file1hard の i ノード番号は同じです、(3) file1 と file1hard で表示されるファイル サイズも同じになります。
ln コマンド操作の結果は次のとおりです: file1 と file1hard は同じファイルの 2 つの名前です。これらは同じインデックス ノード番号とファイル属性を持っています。ファイル file1 へのハード リンクを作成するということは、ファイル インデックス ノードがfile1 は現在のディレクトリにあります。新しいポインタを作成します。
リンクの数は同時に 1 つずつ減ります。ファイルの内容を指すすべてのポインタ、つまりリンクの数が 0 になった場合にのみ、カーネルはファイルの内容をファイル コンテンツから削除します。ディスク。現在のディレクトリの論理構造: (申し訳ありませんが、図は表示されていません)。
次のプログラムは、dir1 ディレクトリ内のすべてのファイルに対するハード リンクを dir2 ディレクトリ内に作成します。 リーリー
ln -fexistingfile newfile を使用した場合、newfile が既に存在する場合、元の newfile がどのようなファイルであっても、現在のユーザーのみが書き込み権限を持ち、newfile は exitngfile のハードリンク ファイルになります。ハード リンクはスペースを節約し、Linux システムでファイル システムを統合する従来の方法でもありますが、いくつかの欠点があります。
(1) 異なるファイルシステムのファイル間ではリンクを確立できません
(2) スーパー ユーザーのみがディレクトリのハード リンクを作成できます。多くのツリーでは root ユーザーでも作成できると書かれていますが、作成者は学習プロセス中に root ユーザーでも作成できないことを発見しました。私のシステムは Redhat で、カーネル 2.4 と 2.6 を試しました。他のシステムで可能かどうかはわかりません。 。
ソフトリンク(シンボリックリンク)
ソフト リンクを作成するには、ln の後にオプション -s を追加するだけです。例は次のとおりです: リーリー
上記のリンクの結果から、ソフト リンクとハード リンクの違いは概念だけでなく、実装にもあることがわかります。
###違い:### ハード リンクの元のファイルとリンクされたファイルは共通の i ノード番号を共有し、それらが同じファイルであることを示しますが、ソフト リンクの元のファイルとリンクされたファイルは異なる i ノード番号を持ち、それらが 2 つの異なるファイルであることを示します。ファイル属性において、ソフトリンクにはリンクファイルであることが明記されていますが、ハードリンクにはリンクファイルであることが明記されていません。これは、本質的にハードリンクファイルと元のファイルは完全に同等の関係にあるためです。
リンクの数が異なり、ソフト リンクの数は増加しません。ファイル サイズが異なり、ハード リンク ファイルによって表示されるサイズは元のファイルと同じです。つまり、ソフト リンクを確立すると、新しいファイルが作成されます。リンクされたファイルにアクセスすると、システムはそれがリンクされたファイルであることを認識し、リンクされたファイルを読み取って実際にアクセスするファイルを見つけます。もちろん、ソフト リンクにはハード リンクにはない欠点もあります。リンク ファイルには元のファイルのパス情報が含まれているため、元のファイルをあるディレクトリから別のディレクトリに移動し、リンク ファイルに再度アクセスすると、システムはそれを見つけることができませんが、ハード リンクは見つけられます この欠陥がなければ、好きなように移動できますが、システムは新しいインデックス ノードを作成し、元のファイルのパスを保存するために追加のスペースを割り当てる必要もあります。
以上がLinux システムでのハード リンクとソフト リンクの作成を説明する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。