![Linux カーネルで inode によってファイルを削除する方法](https://rvso.com/image/782589/Linux%20%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%A7%20inode%20%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
Linux カーネルでファイルの inode を取得しました。inode によってファイルを削除したいと思います。
inode のすべての dentry をリンク解除する必要がありますか? または、任意の dentry をリンク解除する必要がありますか?
何を保護するためにどのロックを使用すればよいですか?
答え1
ポータブル ファイル削除呼び出し、unlink()、remove()、および高レベルのラッパーは、ほとんどすべてパス名を受け取ります。i ノードは、主に実装の詳細です。
これをシェルで行うには、GNUのようなツールを活用する。探す。
find /tmp -type f -inum $INODE
/tmp
検索するパス$INODE
と番号を置き換えます。-delete
結果をリンクしない場合は追加します。同じ inode の名前が複数見つかる場合があります。
この方法はすべてのファイルを走査するため、効率的ではありません。
答え2
Linux ではファイルを削除できません。
あなたができる行うべきことは、それへのすべての参照を削除することだけです。そうすると、ファイルシステムは自動的にスペースを削除し、inode を未使用としてマークします。
ただし、ファイルは実行中のプロセスによって参照される可能性があることに注意してください。ファイルシステム内でそのファイルが参照されていない場合でも、ファイルは存在し続けます。プロセスが終了するかファイルを閉じるまで、ファイルは存在し続けます。