2009-07-24 13 views
6

私は削除されたファイルを持っていますが、まだ私のプログラムを開いています。私はlsofを使ってinode番号を見つけました。どのようにしてそのiノードに戻るハードリンクを作成できますか?特定のinodeへのリンク

すべてのコードが役に立ちますが、Perlは便利です。/procのから

答えて

10

コピー/ PID/FD/ファイルディスクリプタ

使用lsofのはPIDとファイルディスクリプタを見つけます。

のようにあなたはdebugfsのリンクを再作成するためにコマンドを使用することができますEXTファイルシステム上
+1

をiノードを指しこれはうまくいきますが、なぜ私は理解できません!それらは実際のファイルへのシンボリックリンクです。シンボリックリンクはそのファイル名でファイルにアクセスしますが、そうではありませんか? – Thomas

+1

ハードリンクは同じファイルシステム上になければならない(つまり、リンクは/ procになければならない)ため、/ procのエントリにハードリンクすることはできません。コピーはうまくいくはずです。 – mark4o

+1

マーク:ありがとう、ありがとう。トーマス:彼らは本当のシンボリックリンクではなく、ただのように見えます。詳細はproc_register_dynamicのGoogleを参照してください。 – moonshadow

1

:私はちょうど私自身の小さなテストを実行しました

myfileという名前の「ファイル」を作成します
debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile' 

と16

+1

これは質問に答えます。ありがとうございました!ただ1つの問題があります。 'link'コマンドはinodeの参照カウントを増加させません。実際には、プログラムがファイル記述子を閉じた直後にファイルが失われる可能性があり、inodeの参照カウントがゼロに減少します。残念ながら、私はinodeの参照カウントを変更する簡単で信頼できる方法を知らない。 ---また、inode番号を取得する方法については、 'stat -L/proc/PID/fd/FILE_DESCRIPTOR'(または' ls -Li')の完全な答えが必要です。 – pabouk

関連する問題