LinuxまたはUnixのようなシステムでは、各ファイルには呼ばれる一意の識別子があります。ファイルの位置を識別するだけでなく、権限、所有者、ファイルサイズ、ファイルの作成時間などのファイルのメタ情報も保存します。イノードを理解することは、特にハードリンク、ファイル許可、およびストレージ構造を扱う場合、ファイルシステムを深く理解するために重要です。
この記事では、PHPのLSTAT()関数を使用して、ファイルのイノード数を取得する方法を示し、INODEの役割と重要性を例で説明します。
簡単に言えば、INODEはファイルシステム内のファイルの「IDカード」であり、次のものが含まれています。
ファイルタイプ(通常のファイル、ディレクトリ、シンボリックリンクなど)
ファイル許可
所有者とユーザーグループ
ファイルサイズ
作成、変更、アクセス時間
リンク数(ハードリンクの数)
データブロックポインター(ファイルデータの実際のストレージ場所)
ファイル名自体はイノードにありません。ファイル名はディレクトリエントリに保存され、イノードを介してファイルの内容に関連付けられています。
ハードリンク:複数の異なるファイル名が同じイノードを指し、ファイルの「エイリアス」を実装できます。
ファイルが同じかどうかを判断します。inodeが同じ場合、同じファイルを指すことを意味します。
ファイルシステムのデバッグとメンテナンス:管理者とプログラマーは、INODEを使用してファイルステータスを判断し、最適化および修理できます。
LSTAT()は、ファイルまたはイノード番号を含むシンボリックリンクに関する詳細情報を取得するためのPHPの組み込み関数です。 stat()とは異なり、 lstat()はシンボリックリンクに従うことはありませんが、シンボリックリンク自体に関する情報を取得します。
lstat()ファイルのさまざまなプロパティを含む配列を返します。ここで、 「ino」がイノード番号です。
<?php
// 情報を取得するファイルパスを指定します
$file = '/path/to/your/file.txt';
// 使用 lstat ファイル情報を取得します
$fileInfo = lstat($file);
if ($fileInfo === false) {
echo "无法ファイル情報を取得します";
} else {
// 得る inode 番号
$inode = $fileInfo['ino'];
echo "書類 {$file} の inode 番数はです: {$inode}\n";
}
?>
注:URLを介してリモートファイル情報を取得する場合、PHPのlstat()はリモートファイルを直接操作できず、ローカルファイルパスのみを処理できます。
2つのファイルパスがあるとしますが、それらが同じイノードを指しているかどうか、つまりそれらがハードリンクであるかどうかを判断したいとします。
<?php
$file1 = '/path/to/file1.txt';
$file2 = '/path/to/file2.txt';
$info1 = lstat($file1);
$info2 = lstat($file2);
if ($info1 && $info2) {
if ($info1['ino'] === $info2['ino']) {
echo "書類 {$file1} そして {$file2} それは難しいリンクです,inode 番同じ番号: {$info1['ino']}\n";
} else {
echo "書類 {$file1} そして {$file2} 不それは難しいリンクです,inode 番異なる数字\n";
}
} else {
echo "无法ファイル情報を取得します\n";
}
?>
INODEは、ファイルシステムの重要な概念であり、ファイルの一意の識別子です。
PHPのLSTAT()関数は、ファイルのイノード番号とその他の詳細情報を簡単に取得できます。
イノード数は、ハードリンク、ファイル認証、その他のシナリオを決定するために使用できます。
INODEを理解することは、ファイルシステムの構造とファイル管理をより深く理解するのに役立ちます。