web-dev-qa-db-ja.com

IDでファイルにアクセスし、ファイル属性を変更します

すべてのファイルと同様に、ディレクトリにもファイルIDがあります。あなたはタイプすることによってそれらを見ることができます

ls -i
  1. IDでファイルコンテンツを表示するにはどうすればよいですか?

  2. ディレクトリ属性をファイルに変更する(Dを削除する)にはどうすればよいですか?

3
0xDEAD BEEF

探しているデータがファイルシステムにあるようです。あなたの質問に対する答えは、使用しているファイルシステムによって異なります。 ext3を使用していると仮定します。

ファイルシステム内のデータを表示および変更する高度な機能については、 debugfs(8) を参照してください。ただし、注意してください。このツールを使用すると、実際に破損する可能性があります。これは、スナップショットで仮想マシンを使用する良い機会です(私が推奨したように ここ )。スナップショットを作成してから、ファイルシステムを必要なだけ変更します。以前のスナップショットからVM)をいつでも復元できます。

1

ファイル名へのiノード:

find / -inum <number>

ディレクトリをファイルに変換することはできません。

ディレクトリ内部データについては、 dirent.h を参照してください。

ディレクトリへのアクセス については、GNU Cライブラリを参照することもできます。

2
harrymc

-解決策とその仕組み-つまり-iノードはすべてのディレクトリが記録するものです。実際、各ディレクトリはファイルであり、ファイル名とそれに対応するiノード番号のリストが含まれています。

したがって、-見たい場合は、ここのディレクトリiノード内にあるのはそれを行う方法です-

1)hddでdebugfsを開きます。/dev/disks/by-id /の下に私のものが見つかりました。

debugfs ATA-434 ... blalbalba

次にtypecat <inode number>

orcat filename

ordump <inode number> outfile

そのiノードのデータを取得します!

ちょっと待って!それではありません!

iノードは実際にはデータを含みません。データ(ブロック番号)へのポインターが含まれています。 iノードに実際に含まれているのは、ファイルモード、属性、所有者、グループ、サイズ、リンクなどです。いいこと? debugfsを使用して、そのデータを表示するだけでなく、データを変更することもできます。

これがあなたのやり方です!

1)書き込みモードでdebugfsを開きますdebugfs -w ATA4249...blalbla

2)iノードを変更モードで開き、必要なすべてのフィールドを変更/表示します

mi <inode number>

それでおしまい!

0
0xDEAD BEEF