人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

inode番号からファイルのパスを得る方法を教えてください。

↓のOSにてお願いします。pythonなどの言語で出来ると助かります。
* Mac OS X Snow Leopard
* Linux

●質問者: kunitz
●カテゴリ:コンピュータ インターネット
✍キーワード:Linux Mac OS X OS Python Snow Leopard
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● dolduke
●60ポイント

UNIX 系のファイルシステムは基本的に上から下にたどるようにできているので、対象ファイルが存在する事が分かっている場所から再起的に探す事になると思います。find コマンドは -inum inode_number オプションを持っているので、これを利用するのが簡単かも知れません。find の最初の引数でどこから検索するかを指定するので、ここが大きいファイルシステムの上の方のディレクトリだと操作に時間がかかるかもしれません。想定される場所が限定できるなら、なるべく具体的な場所から探した方がよいでしょう。python から呼ぶ必要があるのであれば os.popen, os.popen2 を介して呼び、標準出力の結果をえるという事も可能です。


例:inode 番号 1657248 のファイルのパスを /private/etc 以下で探して表示する

$ find /private/etc -inum 1657248


find を起動したくないという事であれば、同様の処理を python で書く事も可能です。

#!/usr/bin/env python

import os
from stat import *

def find_inum(inum, dir_path):
 for f in os.listdir(dir_path):
 fpath = os.path.join(dir_path, f)
 statrec = os.stat(fpath)
 mode = statrec[ST_MODE]
 ino = statrec[ST_INO]
 if ino == inum:
 print fpath
 return True
 if S_ISDIR(mode):
 if find_inum(inum, fpath):
 break
 return False

based = '/private/etc' # example
target_inum = 1657248 # example

if __name__ == '__main__':
 find_inum(target_inum, based)

http://www.python.jp/doc/2.5/lib/os-file-dir.html#l2h-2675


あるディレクトリ以下の inode とパスの一覧をえて、それを検索する方法も考えられます。

ここでは一覧を得るコマンド部分の例を示します。


対象を通常ファイルのみにする場合(-type f でファイルに限定):

$ find /private/etc -type f | xargs ls -i


ディレクトリも含める場合(ディレクトリ自身を表示するため ls に -d を指定):

$ find /private/etc | xargs ls -di


カーネルには DNLC, dcache といったデータ構造があって、これを使うとより速く見つける事も可能ですが、だいぶ面倒になりますし、そもそもキャッシュなので、最近使っていないファイルの情報はありません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ