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

推薦する

デザインリファレンス 美しく独創的なブログデザイン

以下にリストされているすべてのブログはオリジナルであり、独自にデザインされています。これらは、他者が...

Linux での GDB 入門チュートリアル

序文gdb は Linux で非常に便利なデバッグ ツールです。コマンドライン モードのデバッグ ツ...

Apple Watchのインタラクションデザインにおける4つの全く異なる体験が明らかに

今日も Watch アプリのデザインに関する話です。私はケーススタディが大好きなので、同じトピックを...

MySQL 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事では、MySQL 8.0.16 winx64のインストールと設定の具体的な方法を記載します。...

jQuery はパーセンテージスコアリングの進捗バーを実装します

この記事では、パーセンテージスコアリングプログレスバーを実現するためのjQueryの具体的なコードを...

3つの簡単な調整でMySQLを最適化する

私は熟練した DBA になるつもりはありませんが、MySQL を最適化するときは、いくつかの構成を調...

Dockerfile における ENV 命令の具体的な使用法の詳細な説明

1. Dockerfile 内の ENV 命令は、イメージの環境変数を定義するために使用されます。次...

Web開発でボックスを中央に配置するいくつかの方法

1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...

JS の FileReader を介して .txt ファイルの内容を取得する方法

目次JSはFileReaderを通じて.txtファイルの内容を取得します。 .txtファイルの読み取...

MySQL パフォーマンスの最適化: インデックスを効率的かつ正しく使用する方法

実践こそが真実をテストする唯一の方法です。この記事では、インデックスの全体的な使用法についてのみ説明...

Vue Element-ui フォーム検証ルールの実装

目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...

CentOs7 64 ビット MySQL 5.6.40 ソースコードのインストール プロセス

1. インストールプロセス中に問題が発生しないように、まず依存パッケージをインストールします。 [r...

Windows で MySQL データベースを別のディスクに移動する

序文今日、MySQL をインストールしたところ、データベース ストレージがデフォルトで C ドライブ...

JavaScript で配列の変更を監視する方法

序文以前、defineProperty を紹介したとき、オブジェクトの変更のみを監視でき、配列の変更...

JavaScriptはシンプルな日付効果を実装します

JavaScriptの日付エフェクトの具体的なコードは参考用です。具体的な内容は次のとおりです。コー...