जवाबों:
दूसरा कमांड एक अलग मूल्य क्यों देता है?
ऐतिहासिक कारणों से, गुणक ऑपरेटर dd
माना जाता x
है। तो 0x3
0 होने का मूल्यांकन किया जाता है।
क्या हेक्साडेसिमल मान के रूप में dd से ऑफसेट को पास करना संभव है?
सीधे तौर पर नहीं, जहां तक मुझे पता है। ऑपरेटर का उपयोग करने के साथ-साथ गुणा x
भी, आप किसी भी संख्या b
को "512 गुणा (0x200) से K
गुणा और " 1024 से गुणा "(0x400) के साथ कर सकते हैं। जीएनयू आप भी प्रत्यय का उपयोग कर सकते डीडी के साथ M
, G
, T
, P
, E
, Z
और Y
गुणा 2 से 20 की शक्ति, 30, 40, 50, 60, 70, 80 या 90 में क्रमश: का मतलब है, और आप ऊपरी का उपयोग करें या छोड़कर मामले कम कर सकते हैं के लिए b
प्रत्यय। (कई अन्य संभावित प्रत्यय हैं। उदाहरण के लिए, EB
"10 18 से गुणा करें " और PiB
"2 50 से गुणा करें " का अर्थ है । info coreutils "block size"
अधिक जानकारी के लिए देखें , यदि आपके पास जीएनयू इंस्टॉलेशन है।)
आपको अनुपस्थित के बिंदु पर उपरोक्त आर्कन, एनाक्रोनॉस्टिक और जीकी मिल सकते हैं। चिंता न करने के लिए: आप अकेले नहीं हैं। सौभाग्य से, आप बस इसे अनदेखा कर सकते हैं और अपने शेल के अंकगणितीय प्रतिस्थापन का उपयोग कर सकते हैं (बैश और अन्य पॉज़िक्स आज्ञाकारी गोले काम करेंगे, साथ ही साथ कुछ गैर-पॉज़िक्स गोले भी)। शेल हेक्साडेसिमल संख्याओं को समझता है, और यह सामान्य तरीके से लिखे गए अंकगणित ऑपरेटरों की एक पूरी श्रृंखला की अनुमति देता है। आपको बस इसके साथ अभिव्यक्ति को घेरना है $((...))
:
# dd if=2013-Aug-uptime.csv bs=1 count=$((0x2B * 1024)) skip=$((0x37))
$((...))
कुछ भी नहीं बदलेगा चारों ओर उद्धरण डाल । केवल मामला मैं सोच सकता हूं कि उद्धरण कुछ भी करेंगे यदि आपके पास कुछ ऐसा था IFS=4
लेकिन यह सभी प्रकार के अन्य अराजकता का कारण होगा।
$((...))
। POSIX स्पष्ट है कि विस्तार $((...))
शब्द विभाजन के अधीन है । सूची के संदर्भ में अयोग्य घोषित किए गए किसी भी कमांड / अंकगणितीय / चर विस्तार को छोड़कर विभाजन + ग्लोब ऑपरेटर है। IFS = 4 को सेट करने पर सभी प्रकार की समस्याएँ उत्पन्न नहीं होंगी यदि आप विभाजन + ग्लोब ऑपरेटर का उपयोग नहीं करते हैं जहाँ इसकी आवश्यकता नहीं है / चाहते हैं, और हर बार आपको IFS को उस विभाजन + ग्लोब ऑपरेटर की आवश्यकता होती है।
IFS
किसी ऐसी चीज़ पर सेट करते हैं जिसमें अंक शामिल हैं, तो कुछ ऐसा नहीं है जो मुझे विश्वास है कि मैंने कभी किया है, तो आपको उद्धृत करने की आवश्यकता होगी। संभवतः, यदि कोई ऐसा कर रहा था, तो किसी को इसकी आवश्यकता होगी, क्योंकि यह शायद ही कोई ऐसा हो जो आकस्मिक रूप से करने की संभावना है। या, कम से कम, यह शायद ही कुछ है जो मुझे करने की संभावना है, अवधि। मुझे आपके लिए बोलने का मतलब नहीं है।
मुझे पता है कि यह एक पुराना धागा है, लेकिन यह मुद्दा अभी भी उतना ही उलटा है, जितना सच में, मेरे जैसे बेवकूफ जाने-अनजाने याद करते हैं और बैश इतिहास से एक 'cp fileA fileB' को निकालते हैं, जब fileB अभी तक चेक-इन नहीं किया गया है, तो वह समर्थित नहीं है अप-निफ्टर के बाद कई घंटे तक कोडिंग करना
इस थ्रेड में अवधारणाओं के लिए धन्यवाद मैं अपनी खोई हुई फ़ाइल को पूरी तरह से पुनर्प्राप्त करने में सक्षम था, हालांकि मैंने 32Gb डिस्क और बहुत कम रैम (उबंटू 18.04 चल रहा है) के साथ एक रिमोट वर्चुअल प्राइवेट सर्वर पर मेरा खो दिया, और मेरे सभी अटैचमेंट्स 'grep' का उपयोग करके ऊपर 'अपर्याप्त स्मृति' के साथ जल्दी मर जाएगा
मेरे मामले में यह hexdump -C /dev/sdX1 | grep 'shortString'
मेरे बचाव में आया था । Grep के विपरीत, यह केवल हेक्स का एक बहुत ही नैरो ट्रॉयल ASCII प्रतिनिधित्व प्रदर्शित करता है, इसलिए यह केवल एक छोटी सी अनोखी स्ट्रिंग की तलाश में महत्वपूर्ण है, और यह भी ध्यान रखें कि यहां तक कि लपेटा जा सकता है। एक बार जब यह कुछ हेक्स पते का उत्पादन करता था, जहां एक मैच होता था, तो मैं ऊपर दिए गए समान तरीके से 'dd' का उपयोग करने में सक्षम था, सिवाय इसके कि मुझे लगा कि यह 4096 के ब्लॉक आकार में डिफ़ॉल्ट होना चाहिए, इसलिए मुझे न केवल हेक्स बाइट्स पते को दशमलव में बदलें लेकिन इसे dd के स्किप पैरामीटर के लिए 4k ब्लॉकों में स्केल करने के लिए इसे 4096 से विभाजित करें - अनजाने में, यदि यह संख्या dd के लिए बहुत बड़ी है तो त्रुटि संदेश ऐसा लगता है कि यह skip=
अमान्य होने की शिकायत कर रहा है बजाय इसके पास किए नंबर के। ।
$((0xabcd))
कुदोस उन लोगों के लिए जिन्होंने ईएएसटी के साथ बैश का उपयोग करने के बारे में युक्तियों को जोड़ा है।
बस मेरा अंतिम शब्द - मेरे मामले में एक ही फ़ाइल की कई प्रतियां थीं जो सभी निकटता में थीं। लेकिन हेक्सडंप द्वारा बताए गए उच्चतम पते से सबसे कम पते को घटाकर मैं एक ~ 5 एमबी क्षेत्र को पहचानने में सक्षम था, जिसका मतलब था कि मैं सबसे कम एड्रेस पर dd को लक्षित कर सकता हूं और उस पूरे क्षेत्र को एक अस्थायी फ़ाइल में निकाल सकता हूं। विम एडिटर अब बाइनरी कंटेंट को काफी शालीनता से संभालता है ताकि आप उसके बाद टेंपफाइल की जांच कर सकें और आवश्यकतानुसार उसे रीशैप कर सकें।
$((...))
POSIX अंकगणितीय विस्तार है, यह बिल्कुल भी विशिष्ट नहीं है, आपको इसका उपयोगbash
करने के लिए उपयोग करने की आवश्यकता नहीं है , कोई भी POSIX शेल करेगा। हालांकि ध्यान दें कि सहित कई गोले मेंbash
, यह शब्द विभाजन से गुजरता है इसलिए उद्धृत किया जाना चाहिए।