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

推薦する

MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明

MySQL Limit はセグメント内のデータベース データをクエリでき、主にページングで使用されま...

HTML で div を非表示にする テーブルを非表示にする TABLE または DIV コンテンツの CSS スタイル

今夜、数日間悩まされていた問題を解決しました。本当に解決したかどうかはわかりませんが、解決されている...

Vue が学ぶべき知識ポイント: forEach() の使用

序文フロントエンド開発では、目的のコンテンツを取得するためにループをトラバースする必要がある状況に頻...

Vue が DingTalk の出勤カレンダーを実装

この記事では、DingTalkの勤怠カレンダーを実装するためのVueの具体的なコードを参考までに共有...

入力ボックスのオートコンプリート機能をオフにする

これで、autocomplete と呼ばれる input の属性を使用できるようになりました。オート...

HTML で #include ファイルを使用する例

a.htmとb.htmの2つのファイルがあります。同じディレクトリ内のa.htmの内容は次のとおりで...

Linuxで環境変数を削除する詳細な手順

Linuxで環境変数を削除するには?unsetコマンドを使用してすぐに削除します1. Linuxクラ...

JavaScriptのプリミティブ値とラッパーオブジェクトの詳細な紹介

目次序文文章プリミティブ型プリミティブ値ラッパーオブジェクト物体コンストラクタ通常機能(関数)プリミ...

HTML タグ dl dt dd 使用方法

基本構造:コードをコピーコードは次のとおりです。 <ダウンロード> <dt>...

10分で始めるCSS3アニメーション

導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...

MySQL の NULL と空の文字列

最近、MySQL に触れました。昨日、テーブル構造情報を格納するための新しいテーブルを作成しました。...

MySQL で大量のデータ (数千万) を素早く削除するためのいくつかの実用的なソリューションの詳細な説明

著者は最近、仕事でパフォーマンスのボトルネックの問題に遭遇しました。MySQL テーブルには毎日約 ...

MySQLはinit-connectを使用してアクセス監査機能の実装を増やします

まず init-connect を通じて mysql 接続を初期化し、次にインスタンスに接続する必要...

Mysqlのインポートとエクスポート時に発生する問題の解決

背景すべての業務を Docker の運用管理に移行してから、一連の落とし穴に遭遇しましたが、今回は ...

Vue で動的に読み込まれたローカル画像を処理する方法

問題を見つける今日は、vue ファイルにローカル画像を導入する際に問題が発生したので、この記事を書き...