2017-04-02 106 views

回答

1

如果你有find (GNU findutils)訪問findPOSIX find,你可以用它-inum選擇它,

-inum n 
     File has inode number n. It is normally easier to use the 
     -samefile test instead 

只是用它與-exec選項一起打開使用cat的文件,

find . -inum 1346087 -exec cat {} \; 

假設inode我的文件的值爲sample.txt

ls -id sample.txt 
1346087 sample.txt 
2

this unixexchange answer

您無法通過索引節點訪問文件,因爲這會破壞通過權限訪問控制。例如,如果您沒有遍歷目錄的權限,則無論文件權限如何,都無法訪問該目錄中的任何文件。如果您可以通過inode訪問文件,則會繞過目錄權限。

有一些方法可以通過inode編號獲取文件的路徑或名稱,例如使用find。一旦你獲得了一個文件路徑,你可以使用任何常規工具。

find有一個inum參數用於通過inode查找文件。這裏有一個例子:

find -inum 1704744 -exec cat {} \; 

這將打印索引節點1704744文件的內容,假設它位於當前目錄或它的一個子。

注意ls也有一個-i選項以獲取與文件關聯的inode。

2

獲取的inode與EXT2/EXT3/EXT4文件系統:

inode=262552 
device=/dev/sda1 
sudo debugfs -R "ncheck $inode" $device 2>/dev/null 

輸出(例如):

 
Inode Pathname 
262552 /var/log/syslog 

要顯示文件的內容:

sudo debugfs -R "ncheck $inode" $device 2>/dev/null | awk '/[1-9]/ {print $2}' | xargs cat 
1

便攜,但是進展緩慢方法是使用find -inum ...獲取給定inode的文件名,並在下一步中使用找到文件名。

如果您只需要該文件的content(通過inode編號),就存在一些文件系統/操作系統特定的解決方案。

對於MacOS的是簡單的:

inode=48747714 
eval "$(stat -s "/Volumes/volume_name")" 
cat /.vol/$st_dev/$inode 

例如在OS X的HFS文件系統存在僞目錄/.vol,您可以使用由它們的索引節點號訪問文件的內容爲:在/Volumes

/.vol/device_id/inode_number 

device_id是從stat對於給定的volume_name獲得,(檢查ls /Volumes)。

相關問題