जल्दी से पता लगाएं कि कौन सी फ़ाइल (एस) एक विशिष्ट इनोड संख्या से संबंधित है


44

मुझे इस आदेश की जानकारी है:

find /path/to/mountpoint -inum <inode number>

लेकिन यह बहुत धीमी खोज है, मुझे ऐसा लगता है कि ऐसा करने का एक तेज़ तरीका होना चाहिए। क्या कोई तेज़ विधि जानता है?


यह मेरी पहली बार है जब मैं इनोड का उपयोग करके खोज देख रहा हूं आपको इनोड द्वारा खोज करने की आवश्यकता कब होती है?
कॉर्न

@Coren - यह आमतौर पर उपयोग किया जाता है यदि आपके पास एक फ़ाइल है, तो कहें, सामने एक "-"। आप इसके बारे में पता लगाने के लिए ls -li कर सकते हैं, फिर: खोजें। -inum <inode> -exec rm -i {} \; यह एक बेल्ट-एंड-ब्रेयर्स दृष्टिकोण है जिससे आप फ़ाइल को हटा सकते हैं। बेशक, आप 'rm - -filename', या rm ./-filename, या rm "-filename" भी कर सकते हैं।
swisscheese

2
@ सेलिनक्स के साथ, लॉग संदेश में इनोड शामिल है, लेकिन पूर्ण पथ नहीं है। तो आपको फ़ाइल को संदर्भित करने के लिए इनोड की खोज करनी होगी। (वैसे भी मेरा उपयोग मामला)
पैट्रिक

1
@ उदाहरण के लिए, जब किसी फ़ाइल में कई हार्ड लिंक होते हैं, तो आपने देखा है कि सामग्री अप्रचलित है और फ़ाइल को हटाना चाहते हैं, लेकिन आपने केवल फ़ाइल के नामों में से एक पाया है और दूसरों को हटाना चाहते हैं।
गाइल्स का SO- बुराई से रोकना '

2
बस उपयोग करें find / -inum <inode>। यह बहुत अधिक पोर्टेबल है debugfsऔर यह बहुत अधिक मज़बूती से काम करता है (यह पाथ पा सकता है जो हार्ड ड्राइव पर फ़ाइलों से संबंधित नहीं है, जैसे डिवाइस, उदाहरण के लिए)।
7heo.tk 16

जवाबों:


33

एक ext4 फाइलसिस्टम के लिए, आप debugfsनिम्न उदाहरण में उपयोग कर सकते हैं :

$ sudo debugfs -R 'ncheck 393094' /dev/sda2 2>/dev/null
Inode   Pathname
393094  /home/enzotib/examples.desktop

उत्तर तत्काल नहीं है, लेकिन लगता है कि बेहतर है find
प्राप्त उत्पादन आसानी से फ़ाइल नाम प्राप्त करने के लिए पार्स किया जा सकता है।


मुझे शायद फाइलसिस्टम प्रकार निर्दिष्ट करना चाहिए था। यह मेरे लिए नहीं था कि इन चीजों को करने का तरीका अलग-अलग फाइल सिस्टम के लिए अलग होगा। मैं XFS का उपयोग कर रहा हूं, इसलिए जब मुझे यकीन है कि आपका उत्तर सही है, तो यह मुझे विशेष रूप से मदद नहीं करेगा।
एलेक्स

6

btrfs

man btrfs-inspect-internal कहते हैं:

   inode-resolve [-v] <ino> <path>
       (needs root privileges)

       resolve paths to all files with given inode number ino in a given
       subvolume at path, ie. all hardlinks

       Options

       -v
           verbose mode, print count of returned paths and ioctl()
           return value

उदाहरण:

  • sudo btrfs inspect-internal inode-resolve 15380 /home

0

आप fsdb कमांड को देख सकते हैं, जो कि अधिकांश यूनियनों पर पाया गया है, और लिनक्स के लिए कहीं उपलब्ध है, मुझे यकीन है। यह एक शक्तिशाली कमांड है जो आपको फाइलों के इन-कोर इनकोड संरचना तक पहुंचने की अनुमति देता है, इसलिए सावधान रहें। वाक्य-विन्यास भी बहुत चर्चित है।

AIX के लिए fsdb

fsdb Solaris पर पुनः लिंक फ़ाइल

जबकि fsdb आपको वास्तव में इनोड के फ़ाइलनाम की खोज नहीं करने देगा , यह आपको इनकोड को सीधे एक्सेस करने की अनुमति देता है , जब आप इसे निर्दिष्ट करते हैं, तो संक्षेप में आपको फ़ाइल को "पोर्टिंग" करना (या कम से कम यह डेटा ब्लॉक पॉइंटर्स है) तो यह है खोज की तुलना में उस संबंध में तेज ;-)।
आपका प्रश्न निर्दिष्ट नहीं करता है कि आप फ़ाइल के साथ क्या करना चाहते हैं। क्या आप एनएफएस फाइलहैंडल को डिकोडिंग कर रहे हैं?

अनुसूचित जाति।


खैर, मुझे नहीं लगता था कि मैं जानकारी के साथ क्या करने जा रहा था, मेरे प्रश्न के लिए प्रासंगिक था, इसलिए मैंने इसे छोड़ दिया। मेरे मामले में, यह केवल एक जिज्ञासा का सवाल था; मेरे xfs_fsr डीफ़्रैग्मेन्टेशन से पता चलता है कि यह किस इनग्रेड्स को डीफ़्रेग्मेंट करता है, और एक बेहद खंडित (5000 से अधिक) था और मैं बस उत्सुक था कि यह कौन सी फाइल थी। findकाम करता है, यह सिर्फ इतना धीमा है।
एलेक्स

मैं एक समस्या को ठीक करने की कोशिश कर रहा हूं, जहां मेरे rhel vm एक पूर्ण (20 मिनट!) हर बूट को fsck करता है और मुझे बस इतना करना है कि इनोड नंबर / var / opt / संदेशों में दोषपूर्ण के रूप में सूचित किया गया है। (कहा जा रहा है कि, ढूँढें -inum वास्तव में यह नहीं मिला)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.