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 ボタンの権限制御の導入

推薦する

トップ 10 Js 画像処理ライブラリ

目次導入1. 異食症2. レナ3. コンプレッサー4. ファブリック5. ぼかす6. 画像を結合する...

iOS WeChat H5ページのゴム反発効果の落とし穴記録

ビジネス要件最近開発したプロジェクトの一つに、WeChat公式アカウントに関連したH5ページがありま...

CSS で左上の三角形を作成するいくつかの方法の詳細な説明

今日は、CSS を使用して左上の三角形を記述するいくつかの方法を紹介します。概略図(幅と高さを60p...

MySQLの共有ロックと排他ロックの使用例の分析

この記事では、例を使用して MySQL の共有ロックと排他ロックの使用方法を説明します。ご参考までに...

Windows での MySQL 5.7.18 のインストールと設定のチュートリアル

この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...

M1 ProチップでVueプロジェクトを開始する方法

目次導入Homebrewをインストールするnvmをインストールするノードをインストールするインストー...

Linux RabbitMQ クラスタ構築プロセス図

1. 全体的な手順冒頭で、RabbitMQ サービスをインストールして実行する方法を紹介しましたが、...

Vueはvueメタ情報を使用して各ページのタイトルとメタ情報を設定します。

title: vue は vue-meta-info を使用して各ページのタイトルとメタ情報を設定...

Vueの子コンポーネントが親コンポーネントのメソッドを呼び出す場合の詳細な説明

1. 子コンポーネントのthis.$parent.eventを通じて親コンポーネントメソッドを直接呼...

HTML テキストフォーマットの簡単な例 (詳細な説明)

1. テキストの書式設定: この例では、HTML ファイル内のテキストを書式設定する方法を示します...

知らないかもしれない奇妙で興味深いDockerコマンド

はじめに使えるかもしれないが、あまり使われていない、シンプルで実用的なDockerコマンドをいくつか...

Vueでシングルサインオンを実装する方法のまとめ

最近プロジェクトが中断され、RageFrame の研究は一時的に終了しました。この記事では、シングル...

ネイティブ JS オブジェクト指向タイピング ゲーム

この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内...

XHTML 特殊文字コレクション

注意&#160;ノーブレークスペース = ノーブレークスペース、 iexcl ¡ &...

Linux で crontab を使用してスケジュールされたタスクを追加する方法

序文Linux システムはシステム サービス crond によって制御されます。 Linux システ...