Linux のソフトリンクとハードリンクの詳細な説明

Linux のソフトリンクとハードリンクの詳細な説明

ヒント: まず、Linux システムにおけるファイルとディレクトリの基本的な保存について説明します。これにより、Linux システムにおけるハード リンクとソフト リンクを理解して学習しやすくなります。

1. ファイルとディレクトリの基本的な保存

パーティションについては以前説明しました。各パーティションは 2 つの部分に分かれていると理解できます。小さな部分にはファイルのi node 情報が保存され、大きな部分にはBlockファイル ブロックが保存されます。

ファイルの i-node に保存される情報には、 i node 番号、時間、権限、保存場所が含まれます。 Blockファイルにデータを保存します。

各フォルダーにはi node と対応するBlockファイルが含まれます。

しかし、疑問があります。ファイルのファイル名はどこに保存されるのでしょうか?

フォルダーroot内のファイルabcを例に挙げてみましょう。ファイルパスは/root/abcです。

rootディレクトリでは、すべてのファイルにi node 名と対応するBlockブロックがあり、 rootディレクトリには独自のi node 情報もあります。 i node 情報がある場所には、対応するBlockブロックがあります。 rootディレクトリのBlockブロックに格納されるデータはrootディレクトリの下にあるすべてのサブファイルとサブディレクトリのファイル名と、それに対応するi node 番号です。

つまり、 rootディレクトリ内のファイルのファイル名は、ファイルのiノードに書き込まれません。代わりに、親ディレクトリのBlockブロックに書き込まれます。
abcファイルのファイル名を検索する場合は、まずrootフォルダーのiノードを検索し、次にrootディレクトリのBlockブロックでabcファイル名と対応するiノード番号を検索する必要があります。最終的に、 abcファイル内のデータは、 abcファイルのiノード番号を通じて読み取られます。

rootディレクトリのファイル名またはiノードはどこに保存されますか?

rootディレクトリはルート ディレクトリの下にあります。ルート ディレクトリには独自のi node 情報と独自のBlockがあります。要約すると、 rootディレクトリのファイル名とi node 番号情報は、ルート ディレクトリのBlockブロックに配置されます。
そのルートのiノード番号を取得するにはどうすればよいでしょうか?

ルートiノード番号は固定されており、ルートiノード番号は 2 です。 (システムカーネルがロードされると1番が占有されるため)

[root@192 ~]# ls -ild /
2 dr-xr-xr-x. 25 ルート ルート 4096 12月27日 22:27 /
表示される最初の桁は i ノード番号です。

要約する

まとめると、 abcファイルの内容を表示するには、まずルートi node 番号を使用してルートBlockブロック内のデータを読み取り、 rootディレクトリのi node 情報を検索し、 rootディレクトリのBlockデータを読み取り、 abcファイルの i-node 情報を検索し、 abcファイルのBlockデータを読み取ります。
上記はファイルとディレクトリの基本的な保存方法です。

2. Inコマンドの紹介

(1)lnコマンドの基本情報を見てみましょう。

英語でのlnの本来の意味: make links between file場所のパス: /bin/ln実行権限: すべてのユーザー。機能の説明: ファイル間のリンクを確立します。

(2)lnコマンドの基本形式

[root@localhost ~] # ln [options] ソースファイル ターゲットファイル オプション:
  -s: ソフトリンクファイルを作成します。 「-s」オプションが追加されていない場合は、ハードリンクファイルが作成されます。 -f: 強制。ターゲット ファイルがすでに存在する場合は、ターゲット ファイルを削除してからリンク ファイルを作成します。

3. ハードリンクを作成する

(1)ハードリンクの作成方法

次に例を示します。

[root@localhost ~] # タッチキャンセル
[root@localhost ~ ]# ln /root/cangls /tmp/

# ハードリンク ファイルを作成します。ターゲット ファイルにはファイル名がないため、元のファイルと一致します。# つまり、/root/cangls と /tmp/cangls はハードリンク ファイルです。

lnアプリケーションの説明:

# 新しいファイル abc を作成し、abc ファイルのハードリンクの数を確認します [root@192 ~]# touch abc
[root@192 ~]# ls -il abc 
1043285 -rw-r--r--. 1 ルート ルート 0 12月29日 18:18 abc
# abc ファイルのハードリンクの数は 1 であることがわかります。

# tmp ディレクトリに abc ファイルのハード リンク ファイルを作成し、2 つのファイル間のハード リンクの数を確認します。
[root@192 ~]# ln abc /tmp/abc_h
[root@192 ~]# ls -il abc /tmp/abc_h 
1043285 -rw-r--r--. 2 ルート ルート 0 12月29日 18:18 abc
1043285 -rw-r--r--. 2 root root 0 12月29日 18:18 /tmp/abc_h
# abc ファイルの参照カウント (ハードリンクの数) が 1 増加したことがわかります。
# 上記の 2 つのファイルの i-node 番号が同じであることもわかります。

(2)ハードリンク機能

ソース ファイルとハード リンク ファイルには同じInodeBlockあります。どちらかのファイルを変更すると、もう一方のファイルも変更されます。どちらかのファイルを削除すると、もう一方のファイルは使用可能になります。ハードリンクは明確にマークされておらず、ハードリンクファイルの場所を確認することが困難です(ハードリンクファイルであるかどうかを判断することは困難です。自分で作成した場合はまだ覚えているかもしれませんが、他の人が作成した場合は、ファイルがハードリンクファイルであるかどうかはまったく判断できません)。使用することは推奨されません。ハードリンクはディレクトリをリンクできません。ハード リンクはパーティションをまたぐことはできません (2 つのファイルは同じパーティションの同じi node 番号を必要とするため、パーティションをまたいで見つけることはできません)。

(3)ハード接続原理

上記のrootディレクトリにabcファイルを作成し、次に/tmp/ディレクトリにabcファイルのハード リンク ファイルabc_hを作成しました。

rootディレクトリ、 abcファイル、およびtmpディレクトリにはそれぞれ独自のiノード番号と対応するBlockブロックがあります。 rootディレクトリの i-node 番号を通じて対応するBlockを見つけます。 Blockブロックにはabcファイルの名前とi node 番号が記録されるため、 abcファイルを見つけることができます。ハードリンクされたファイルabc_hiノード番号とファイル名は、 tmpディレクトリのBlockブロックに記録されます。また、 abcファイルと上記のabc_hハードリンク ファイルのi node 番号は同じなので、 tmpBlockブロック内のabc_h情報を通じてabcファイルのi node 番号も見つけることができます。

したがって、 rootディレクトリに記録されたabcファイル情報とtmpディレクトリに記録されたabc_hファイル情報は、両方ともrootディレクトリのabcファイルを指します。

下の写真をご覧ください:

したがって、上の図は次のことを証明しています。
どちらかのファイルを変更すると、もう一方のファイルも変更されます。
どちらかのファイルを削除すると、もう一方のファイルは使用可能になります。

4. ソフトリンクを作成する

(1)ソフトリンクの作成方法

ソフト リンクは、Windows システムでは直接ショートカットとして扱うことができます。

次のようにソフト リンク ファイルを作成します。

[root@localhost ~]# abc をタッチする
[root@localhost ~]# ln -s /root/abc /tmp/

rootディレクトリにcdeファイルを作成し、ソフト リンク/tmp/cde_sファイルを作成して、これら 2 つのファイルを表示します。

次の図に示すように:

[root@localhost ~ ]# touch cde
[root@localhost ~ ] # ln -s /root/cde /tmp/cde_s
[root@localhost ~ ] # ls -il /root/cde /tmp/cde_s
1055972-rw-r--r--1 ルート ルート 0 2月 1715:30 /root/cde
261634 1rwxrwxrwx 1root root 17年2月9日15時30分 /tmp/cde_s->/root/cde

例:

まず、作成されたソフト リンク ファイルには、これがソフト リンク ファイルであることと、そのソース ファイルが配置されている場所が明確に示されていることがわかります。
/tmp/cde_s->/root/cde 。ハードリンクが明確にマークされていないのはそのためです。

2 つ目: ファイルへの引用リンクの数は増加しませんでした。

3 つ目: 2 つのファイルの i-node 番号が完全に異なります。

4 番目: ソース ファイルabcは 0 バイトで空です。ソフトリンクのファイルサイズは9バイトです。

(2)ソフトリンク特性

ソフト リンクとソース ファイルには異なるInodeBlockあります。どちらかのファイルを変更すると、もう一方のファイルも変更されます。ソフト リンクを削除しても、ソース ファイルには影響しません。ソース ファイルを削除すると、ソフト リンクは使用できなくなります。これは、ソフト リンクには実際のデータが含まれず、ソース ファイルのInodeのみが保存されるためです。ソース ファイルのサイズがどれだけ大きくても、ソフト リンク ファイルのサイズは変わりません。ソフト リンクには最大の権限lrwxrwxrwxがあります。ただし、実際のデータがないため、最終的なアクセスにはソース ファイルの権限を参照する必要があります。ソフト リンクはディレクトリをリンクしたり、パーティションをまたいだりできます。ソフトリンク機能は明白であり、ソフトリンクを使用することをお勧めします。

(3)ソフト接続原理

rootディレクトリにcdeファイルがあり、 tmpディレクトリにcdeファイルのソフトリンクファイルcde_s作成されます。 rootディレクトリのblock rootディレクトリのi node 番号を通じて見つけることができます。 rootディレクトリのblock cdeファイルのファイル名とi node 番号が記録されます。 cdeファイルのi node 番号を見つけることで、 cdeファイルのblock見つけて、その中のデータを読み取ることができます。

tmpディレクトリには、独自のi node 番号と対応するblockがあります。tmp tmpblockcde_sファイルのファイル名とi node 番号が含まれます (ハード リンクの 2 つのi node 番号は同じであるため、同じファイルを指していることは前述したとおりです)。一方、ソフト リンク ファイルとソース ファイルのi node 番号は異なります。これは、 cde_sファイルには独自のi node 番号とcde_sblockがあることを意味します。

ここで重要なのは、 cde_sファイルのblockに何が保存されるかということです。
そこにデータを格納すると、 cdeファイルとcde_sファイルはリンクされず、完全にコピーされます。このようにすると、ソース ファイルが変更されるとソフト リンク ファイルが変更され、ソフト リンク ファイルが変更されてもソース ファイルが変更されないという状況は発生しません。

実際、ソース ファイルのiノード番号はcde_sファイルのblockに格納されます。

以下のように表示されます。

これは、新しく作成されたソフト リンク ファイルに作成後のデータが含まれており、ソース ファイルの変更によってデータ サイズが変更されない理由も説明しています。

もう一つ注意すべき点は、ソフトリンク ファイルの権限が最も大きいことですが、この権限はソフトリンク ファイル用です。ソフトリンク ファイルのblockデータは保存されません。ソース ファイルを操作する場合は、ソース ファイルの権限を確認する必要があります。この点には注意が必要です。

(4)説明

Windows では、ソフトウェアが深くインストールされていて見つけにくいため、デスクトップにショートカットが作成されます。Linux でソフト リンクを作成する目的は何ですか? いずれにしても、すべてディレクトリを介してアクセスされるのですか?

Linux システムでは、ソフト リンクの主な機能は、管理者の使用習慣を管理することです。

以下のように表示されます。

古い Linux システムでは、 /etc/rc.localファイルの場所が使用されています。システムが更新されると、アップグレードのニーズに合わせて/etc/rc.localファイルの場所が変更されます。このファイルを見つけるのに非常に苦労しています。この問題の解決策は、アップグレードのニーズと使用習慣の両方を考慮して、これら 2 つのファイルのソフト リンクを作成し、上記の問題を解決することです。

また、 defファイルへのソフト リンクを作成するには相対パスが使用され、 anaconda-ks.cfgファイルへのソフト リンクを作成するには絶対パスが使用されることにも注意してください。

上図から、相対パスでソフトリンクを作成するとエラーが発生することがわかります。

ヒント: ソフト リンクを作成するときは、必ず絶対パスを使用してください。ハード リンクの場合、絶対パスは必須ではありません。

Linux のソフトリンクとハードリンクの詳細な説明については、これで終わりです。Linux のソフトリンクとハードリンクに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux のソフトリンクとハードリンクの詳細な説明

<<:  MySQL の group by に関する簡単な説明

>>:  Vue ボタンの権限制御の導入

推薦する

JavaScript の遅延読み込み属性パターンに関する簡単な説明

目次1. はじめに2. オンデマンド属性モード3. 乱雑な遅延読み込み属性パターン4. クラスの唯一...

Vue実装のカウンターケース

この記事では、カウンター表示を実現するためのVueの具体的なコードを例として紹介します。具体的な内容...

MySQL よく使われる関数の詳細な概要

目次MySQL 共通関数1. 数値関数文字列関数3. 時間機能4. システム機能5. 集計関数MyS...

MySQLのジョイントクエリについて詳しく説明します

目次ユニオンクエリ1. 中国の各省のIDと名前を照会する2. 湖南省のすべての地級市のIDと名称3....

CSS3 マウスホバー遷移ズーム効果

以下は、純粋な CSS で記述された画像マウスホバーズーム効果です。実際、基本原理は非常に単純です。...

Vueプロジェクトはログインと登録の効果を実現します

この記事の例では、ログインと登録の効果を実現するためのvueプロジェクトの具体的なコードを共有してい...

Web ページの HTML コードの説明: 順序付きリストと順序なしリスト

このセクションでは、HTML のリスト要素について学習します。リストは、Web サイトのデザインにお...

JavaScript 配列重複排除問題の詳細な研究

目次序文 👀リサーチを始めましょう🐱‍🏍オリジナル🧶 indexOf を使用した元の方法の最適化 ✍...

JavaScript でクールなマウス テーリング効果を実装

これを見た後、あなたにも手ができて、さまざまな美しい小さなしっぽを作れるようになることを保証します!...

MySQLデータベースを操作するためのコマンドラインツールmycliの簡単な紹介

GitHub にはあらゆる種類の魔法のツールがあります。今日、私はデータベースを操作するためのコマン...

Linux 継続的インテグレーションで Maven を自動的にインストールする方法

Mavenパッケージを解凍する tar xf apache-maven-3.5.4-bin.tar....

Dockerコンテナを更新、パッケージ化、Alibaba Cloudにアップロードする方法

今回は、実行中のコンテナをイメージにパッケージ化して Alibaba Cloud にアップロードし、...

IntelliJ IDEA で Java を使用して MySQL データベースに接続する方法の詳細な説明

1. MySQLデータベースをダウンロードし、インストールして設定するダウンロードアドレス: htt...

Linuxでディスクをマウントする方法

仮想マシンを使用しているときに、ディスク容量が不足し、継続使用するためにディスクをマウントする必要が...

CSS アニメーション プロパティの使用方法とサンプル コード (transition/transform/animation)

開発中、優れたユーザー インターフェイスには常にいくつかのアニメーションが組み込まれます。 CSS ...