Linux には、2 種類のファイル接続があります。1 つは Windows のショートカットに似ており、対象のファイル (またはディレクトリ) にすばやくリンクできます。これはソフト リンク、またはシンボリック リンクと呼ばれます。もう 1 つは、新しいファイルを作成する代わりに、ファイル システムの inode 接続を通じて新しいファイル名を生成する方法です。これはハード リンクと呼ばれ、エンティティ リンクとも呼ばれます。 ソフト リンクとハード リンクはまったく異なるものです。 1. ハードリンク 1.1 はじめに 一般的に、ファイル名と inode 番号は 1 対 1 で対応しており、各 inode 番号はファイル名に対応します。ただし、Unix/Linux システムでは、複数のファイル名が同じ inode 番号を指すことができます。つまり、同じコンテンツに異なるファイル名を使用してアクセスできます。ファイル コンテンツを変更すると、すべてのファイル名に影響しますが、1 つのファイル名を削除しても、別のファイル名へのアクセスには影響しません。この状況は「ハードリンク」と呼ばれます。 ln コマンドはハードリンクを作成できます: ln <ソースファイル> <ハードリンク> 上記のコマンドを実行すると、ソース ファイルとターゲット ファイルの inode 番号は同じになり、両方が同じ inode を指します。 inode 情報には「リンク数」という項目があり、inode を指しているファイル名の総数が記録されており、このとき 1 増加します。逆に、ファイル名を削除すると、inode ノード内の「リンク数」が 1 減少します。この値が 0 に減少すると、この inode を指すファイル名がないことを示し、システムはこの inode 番号とそれに対応するブロック領域をリサイクルします。 さて、ディレクトリファイルの「リンク数」についてお話します。ディレクトリを作成すると、デフォルトで「」と「…」の 2 つのディレクトリ エントリが生成されます。前者の inode 番号は現在のディレクトリの inode 番号であり、これは現在のディレクトリの「ハード リンク」に相当します。後者の inode 番号は現在のディレクトリの親ディレクトリの inode 番号であり、これは親ディレクトリの「ハード リンク」に相当します。したがって、任意のディレクトリの「ハード リンク」の合計数は、常に 2 とそのサブディレクトリ (隠しディレクトリを含む) の合計数の合計に等しくなります。ここで、2 はディレクトリ名自体への「ハード リンク」と、現在のディレクトリ内の「.」への「ハード リンク」を指します。 1.2 ハードリンクとinodeの関係 ハード リンクは、基本的に、ソース ファイルと同じ inode にマップされるファイルのエイリアスです。次に、ソース ファイル lvlv.txt とハード リンク lvlv_hd.txt をそれぞれ /etc ディレクトリと /root ディレクトリに作成し、ファイルのプロパティを確認します。 #ハードリンク ln /etc/lvlv.txt /root/lvlv_hd.txt を作成します #ファイル属性を一覧表示する ll -i /etc/lvlv.txt 7792474 -rw---x--x 2 b3335 b3335 22 11月9日 21:05 lvlv.txt ll -i /root/lvlv_hd.txt 7792474 -rw---x--x 2 b3335 b3335 22 11月9日 21:05 lvlv_hd.txt 上記から、ハードリンク /etc/lvlv_hd.txt の inode はソースファイル lvlv.txt と同じであり、その他の情報もまったく同じであることがわかります。ストレージ図は次のとおりです。 図の内容は、ディレクトリ /root 内のハード リンク lvlv_hd.txt と /etc 内のファイル lvlv.txt が同じ inode を介して同じファイル コンテンツをポイントしていることを示しています。ディレクトリのデータ エンティティには、各ファイル名とファイルの inode 番号が記録されます。ハード リンクは本質的にファイルのエイリアスであることがわかります。 1.3 ハードリンクに関する注意事項 ハード リンクには 2 つの制限があります。 (2)ディレクトリに接続できません。ディレクトリに接続されたハードリンクにより、ディレクトリの inode と物理ブロックがループを形成する可能性があるためです。このとき、ディレクトリが削除されると、ディレクトリ エンティティ ブロックはシステムからアクセスできなくなり、孤立したディレクトリ (ルート ディレクトリからアクセスできなくなる) になります。孤立したディレクトリの inode とエンティティ ブロックを削除する場合は、マーク付けとクリーニングを実行する必要がありますが、これはディスク上で操作するのに非常に時間がかかります。ソフト リンクでは、ターゲット ディレクトリのリンク数が増加しないため、この問題は発生しません。 たとえば、/etc ディレクトリまたはそのサブディレクトリにハード リンク /etc/etc_hd が作成されると、次の図に示すようにループが形成されます。 このとき、/etc ディレクトリを削除するために 2. ソフトリンク ハード リンクとは異なり、ソフト リンクは独自の inode を持つ独立したファイルを作成しますが、このファイルは接続されているファイルへのデータの読み取りを指示します。ポインティング操作としてファイルのみが使用されるため、ソース ファイルが削除されると、ソフト リンク ファイルは「開けません」というメッセージが表示され、削除されたソース ファイルは見つかりません。 ソフト リンクを作成し、そのソフト リンクのプロパティを表示してみましょう。 #ソフトリンクを作成 $ ln -s /etc/lvlv.txt lvlv_sb.txt #ファイル属性を表示 $ ll -i 7792474 -rw---x--x 2 b3335 b3335 22 11月9日 21:05 lvlv.txt [b3335@MIC ルート]$ ll -i 7792478 lrwxrwxrwx 1 b3335 b3335 11月13日 15:23 lvlv_sb.txt -> /etc/lvlv.txt ソフトリンクのinodeノードはソースファイルlvlv.txtとは異なり、ソフトリンクのサイズは文字列「/etc/lvlv.txt」13の長さと正確に等しいことがわかります。ソフトリンクは別の新しいファイルであり、ファイルの内容はポイントされたファイルのパスであることがわかります。 以下は、lvlv.txt ファイルを例として示したソフト リンクの概略図です。 上記は、Linux のハードリンクとソフトリンクを区別する詳細な内容です。Linux のハードリンクとソフトリンクの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySql でデータの重複挿入を回避する 3 つの方法
>>: Vueモバイル端末に最適な適応ソリューションについての簡単な説明
docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...
目次1 コンテナクラウドとは何ですか? 2 Dockerの紹介3 dockerを使ってMySQLをイ...
今日、ちょっとした問題に遭遇し、長い間苦労しました。そのことを皆さんにシェアしたいと思います。 a ...
OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...
ブラウザはおそらく私たちにとって最も馴染みのあるツールです。 Firefox、Opera、Safar...
layui テーブルには複数行のデータがあります。外部入力コンテンツを通じて、指定された行を見つけ...
システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...
多くの人が、ウェブサイト上のテキストはデザインする必要があるのかと疑問に思うかもしれません。多く...
1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...
1. インストールディレクトリにzipパッケージを解凍します。まず、mysql-8.0.11-win...
序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...
序文Crond は Linux のスケジュール実行ツール (Windows のスケジュールされたタス...
概要実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィ...
この記事では、jQueryプラグインを使用したマインスイーパゲームの最初の記事の具体的なコードを参考...
カメラを開くと通常はスキャンボックスが表示されますが、静的なQRコードではフォーカスを合わせたりスキ...