Articles

Linuxや他のUnixライクなオペレーティングシステムは、すべてをファイルとして扱うことによって一貫性を維持します(ハー キーボード、マウス、プリンター、モニター、ハードディスク、プロセスは、登録簿はLinuxのファイルとして扱われる。 通常のファイルには、テキスト(テキストファイル)、音楽、ビデオ(マルチメディアファイル)などのデータが含まれています。

通常のデータ以外に、サイズ、所有権、アクセス許可、タイムスタンプなど、これらのファイルに関するいくつかの他のデータがあります。 ファイルに関するこのメタデータは、inode(インデックスノード)と呼ばれるデータ構造で管理されます。Linuxのinodeとは何ですか?

すべてのLinuxファイルまたはディレクトリ(技術的な観点からは、それらの間に本当の違いはありません)にはinodeがあり、このinodeにはファイルのメタデー

たとえば、inodeには、ファイルが格納されているすべてのブロックのリスト、そのファイルの所有者情報、アクセス許可、およびファイルに設定されている他のすべての属性が含まれています。

Inodeの制限はファイルシステムごとであり、ファイルシステムの作成時に決定されます。 最大ディレクトリサイズはファイルシステムに依存するため、正確な制限は異なります。

パフォーマンスを向上させるには、ファイルをサブディレクトリにソートするのではなく、大きなディレp>

inode番号とは何ですか?

Inode番号はインデックス番号とも呼ばれます。 Inodeは、作成中にファイルやディレクトリに割り当てられる一意の番号です。 Inode番号はファイルシステム全体に一意になります。inodeは、ext3やext4などの伝統的なUnixスタイルのファイルシステム上のデータ構造です。 ファイルとディレクトリのプロパティを格納します。ext3やext4などのLinux拡張ファイルシステムは、inodeテーブルと呼ばれるこれらのinodeの配列を維持します。 この表には、そのファイルシステム内のすべてのファイルのリストが含まれています。 Inodeテーブル内の個々のinodeには、inode番号と呼ばれる一意の番号(そのファイルシステムに固有)があります。

次の情報がinodeに格納されます。

  • ファイルタイプ:通常のファイル、ディレクトリ、パイプなど。
  • そのファイルへのアクセス許可: 読み取り、書き込み、実行
  • リンク数:inodeに対するハードリンクの数
  • ユーザー ID:ファイルの所有者
  • グループID:グループの所有者
  • ファイルのサイズ:または特別なファイルの場合のメジャー/マイナー番号
  • タイムスタンプ:アクセス時間、変更時間、(inode)変更時間
  • 属性:不変’例えば
  • アクセス制御リスト:特別なユーザー/グループの権限
  • /li>
  • ファイルの場所へのリンク
  • ファイルに関するその他のメタデータ

inodeはファイルの名前ではなく、その内容のみを格納することに注

inodeデータ構造の図

Linuxでinodeをチェックする方法

inodeを見たい場合は、任意のextファイルシステムファイルシステムのプロパティとその中で使用されるファイル。

a.ファイルデータ情報の表示

statコマンドを使用して、ファイルまたはディレクトリのinodeデータを表示できます。

次のようにファイルの名前を指定する必要があります:

stat出力は、ファイルのさまざまなタイムスタンプ、その所有権とアクセス許可、および保存場所を示します。 ファイルのデータはディスクブロックに保持され、inodeのstatコマンド出力に表示されます。

以下のように、--formatオプションを使用してファイルのinode番号のみをリストすることができます。

# stat --format=%i hello530461

b.ファイルのインデッ Lsの-iオプションは、各ファイルのinode番号を表示します。 これを-lオプションと組み合わせて、情報を詳細に一覧表示することができます

# ls -iltotal 140984520170 dr-xrw-rw- 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1263206 -rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz519187 drwxr----- 2 root root 4096 Apr 13 01:35-rwSr--r-- 1 root root 5747 Apr 25 01:45 bootstrap655799 drwxr-xr-x 2 root root 4096 May 16 17:46 course528927 drwxr-xr-x 3 root root 4096 Apr 29 00:29 environments

最初の列はinode番号を与えます。 特定のファイルのinodeを以下のように表示できます。

# ls -i continue.sh 519450 continue.sh

c.ファイルシステムのinodeスペース情報を表示

デフォルトでは、dfコマン 代わりに、-i--inodesオプションを渡すことで、使用可能で使用されているinodeに関するレポートを受け取ることができます。

この情報は、パーティションに非常に多くの小さなファイルがあり、使用可能なディスク領域を枯渇させるよりも早く使用可能なinodeを枯渇させるd.ファイルシステムスーパーブロックの内容を一覧表示する

tune2fs -lコマンドを使用して、inodeに関連するすべての情報を表示できます。

# tune2fs -l /dev/sda6 | grep inodeFilesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isizeFree inodes: 2224350First inode: 11Journal inode: 8First orphan inode: 1575905Journal backup: inode blocks

e.ファイルシステムメタデータを操作

debugfsコマンドでExt4ファイルシステム上に存在するinodeの内容を見ることができます。 Inodeの内容を表示するには、ファイルシステムデバッガーで使用できるstatコマンドを使用する必要があります。 完了したら、exitを使用してdebugfs環境を閉じます。

debugfsでの作業中は、ファイルシステム上のファイルにアクセスできないことを確認します。 mount -o remount /yourfilesystem

を使用してファイルシステムを再マウントすることを検討する必要があります。debugfsを使用して、inodeを使用してファイルを削除元に戻すことができます。

ディレクトリのInode構造

上記のように、Linuxのディレクトリもファイルとして扱われます。 ディレクトリは、ファイル名をinode番号にマップする特別なファイルです(このマッピングはdirectory entryまたはdentryと呼ばれます)。 したがって、ディレクトリにファイルや他のディレクトリが含まれていると言うとき、このディレクトリはそれらのファイルとディレクトリ(ディレ

これが、ディレクトリが同じ名前の二つのファイルを保持できない理由です。ファイルが親ディレクトリによってそのinodeにマップされるので、一番上のディレクトリ(つまり/ directory)はどのようにinodeにマップされますか? /ディレクトリのinode番号は固定されており、常に2です。

Linuxのリンクとインデックス番号

ls -lの出力では、権限の後の列と所有者の前の列がリンク数です。 リンク数は、ファイルへのハードリンクの数です。 ハードリンクを理解するには、リンクから始めます。 リンクは別のファイルへのポインタです。

Linuxの世界では、二つのタイプのリンクが存在します。

A.シンボリックリンク(またはソフトリンク)

シンボリックリンクは、その内容がリンク先のファイルを指す別のファイルです。 シンボリックリンクを作成するには、オプション-sを指定してlnコマンドを使用します。 Lnコマンドを使用する場合は、最初に元のファイルの名前を参照してから、作成するリンクの名前を参照するようにしてください。ここで’filesync’は’filesync’へのシンボリックリンクです。’filesync’は’filesync’へのシンボリックリンクです。’filesync’は’filesync’へのシンボリックリンクです。’filesync’は’filesync’へのシンボリックリンクです。’filesync’はsync.shショートカットとしてそれについて考えてみてください。 ‘Filesync’を編集することは、元のファイルを直接編集するようなものですが、実際には何が起こるかです。 元のファイルを削除または移動すると、リンクが壊れ、’filesync’ファイルが長く利用できなくなります。

ls -lls -l出力の最初の位置にある文字lと、名前が参照しているファイルを示すリストの最後にある矢印によって示されます。

# ls -l filesync lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh

シンボリックリンクの内容は、ターゲットファイルの名前のみです。 シンボリックリンクの権限が完全に開いていることがわかります。 これは、権限が管理されていないためです

シンボリックリンクと元のファイルを比較すると、それらの間に明確な違いがあります。

元のファイルは、inodeに直接接続された名前であり、シンボリックリンクはその名前を参照します。 シンボリックリンクのサイズは、シンボリックリンクで他の情報が利用できないため、参照するファイルの名前のバイト数です。

b.ハードリンク

ハードリンクが何であるかを知るためには、ファイルのidは名前ではなくinode番号であることを理解することが重要です。 ハードリンクは、inodeを参照する名前です。 これは、’file1’に’file2’という名前のハードリンクがある場合、これらのファイルは両方とも同じinodeを参照することを意味します。 したがって、ファイルのハードリンクを作成するときには、実際に行うことは、inodeに新しい名前を追加することだけです。これを行うには、オプションなしでlnコマンドを使用します。

これを行うには、オプションなしでlnコマンドを使用します。

# ls -l /home/bobbin/sync.sh -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro

さて、二つのファイルを比較してみましょう

ハードリンクの興味深い点は、元のファイルとリンクの間に違い

あなたが指摘しているように、ソフトリンクとは異なり、ハードリンクは特別なファイルではありません。 さて、リンク数は、ファイルがハードリンクされている数です。 したがって、上の図に示すように、ハードリンクを作成した後にリンク数が増加します。 これらのハードリンクには2つの制限があります:

  • ディレクトリをハードリンクすることはできません。 Linuxでは、ディレクトリの非循環ツリー構造を維持することは許可されていません。
  • ファイルシステム間でハードリンクを作成することはできません。 異なるファイルシステムには異なる独立したinodeテーブルがあるため、両方のファイルが同じファイルシステム上にある必要があります(異なるファイ

Linuxでハードリンクを見つける方法

inode番号を指すすべてのファイル名を取得できます。 これは、同じコンテンツ(inode)を指すファイル名を持つことができる唯一のタイプのリンクであるため、ハードリンクを取得できることを意味します。 以下のようにfindコマンドの-inumオプションでそれを行うことができます

# find / -inum 517333/home/bobbin/sync.sh/root/synchro

これで、どのファイル名がデータ情報を指リンクは実際のリンクされたファイルに影響します(ソフトリンク自体を削除(または移動)するrmまたはmvコマンドを除く)

inodeが重要な役割を果 ファイルのコピー

ファイルをコピーすると、新しいinodeを持つ新しいファイルが作成されます。

# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile

b.ファイルを移動

ファイルシステム間で移動すると、mvコマンドは元のファイルがその場所から削除され しかし、ファイルシステム内で移動すると、inodeは変更されず、inodeのディレクトリマッピングのみが変更され、ハードディスク上の実際のデータ(ファイルの内容)

# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt

さて、ファイルを移動し、結果を確認してみましょう

# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt

c.ファイルを削除

rmコマンドが発行されたとき、最初にファイルのリンク数をチェックします。 リンク数が1より大きい場合、そのディレクトリエントリが削除され、リンク数が減少します。 それでも、データは存在し、inodeにも影響はありません。 また、リンク数が1の場合、inodeテーブルからinodeが削除され、inode番号が空きになり、このファイルが占有していたデータブロックが空きデータブロックリストに追加されます。ファイルを削除して結果を確認してみましょう

# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile

inodeの数が減少していることがわかります。

結論

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です