क्या `dd` के लिए विकल्प हैं?


14

ट्रंकेशन, डिमांडिंग और स्किपिंग के साथ फ़ाइलों को पढ़ने और लिखने के लिए मुझे किन अन्य टूल्स का उपयोग करना चाहिए। dd की कमांड लाइन विकल्प असुविधाजनक और विदेशी लगते हैं और मुझे धीमे, लेकिन सटीक मांग मोड ( bs=1) और तेज़, लेकिन अनम्य मोड ( bs=4kया जो भी) के बीच चयन करना पसंद नहीं है ।

क्या 31337 की स्थिति से एक फ़ाइल (या पाइप या सॉकेट या देव) से 555 बाइट्स पढ़ने के लिए और अधिक आधुनिक उपकरण हैं और उन्हें दूसरी फाइल पर स्थिति 128205 (ब्लॉक 512 + 43 का उपयोग करके), ट्रंकेशन के साथ या बिना लिखनी चाहिए?


2
मैं अभी भी नहीं देखता कि क्या गलत है dd। यदि आप इंटरफ़ेस पसंद नहीं करते हैं, तो आप हमेशा इसके चारों ओर एक शेल स्क्रिप्ट आवरण रख सकते हैं। ddPOSIX मानक में है , जो एक बहुत बड़ा धन है।
jw013

2
भिन्नात्मक ब्लॉक लेने या छोड़ने में मुख्य गलत बात अक्षमता है। दूसरी गलत चीज जो status=noxferडिफ़ॉल्ट नहीं है और टूटी हुई है और जिसकी मुझे आवश्यकता है iflag=fullblock(किसी स्क्रिप्ट में>> टूटे हुए डेटा को छोड़ें)।
वि।

4
1. bs=1=> पूरी पाइपलाइन धीमी है। उदाहरण के लिए, मैं कुछ सटीक फ्रेम से शुरू होने वाली वीडियो फ़ाइल को डंप करना चाहता हूं। 2. "यह कुछ अंकगणित लेता है" => ओनेलियर्स और रूटीन शेल कमांड के लिए बहुत उपयुक्त नहीं है।
वि।

1
PSA: बाइट प्रिसिजन के साथ काम dd conv=seek_bytesकरेगा seek
०३६__

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

जवाबों:


4

उपकरण है ddrescue(बाहर देखो, वहाँ भी है dd_rescueजो लगभग एक ही कार्यक्षमता के साथ एक अलग कार्यक्रम है)। यह लंबे विकल्पों के लिए छोटे या दोहरे डैश के लिए एकल डैश के साथ अधिक परिचित वाक्यविन्यास का उपयोग करता है। मैन पेज से:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]

1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.। कहानी की बुरी शुरुआत ...
वि.सं.

मैंने बस कोशिश की dd_rescue। यह एक चेतावनी फेंकता है कि फ़ाइल (स्टडिन) खोज योग्य नहीं है, लेकिन आय। आप इसे आजमा सकते हैं। हालांकि, ddrescueअधिक पूर्ण विशेषताओं और परिपक्व महसूस करता है।
मार्को

1
@ वी .: दूत को गोली मत मारो। ddrescueसही है, पाइप तलाशने योग्य नहीं हैं। यदि आप किसी फ़ाइल में किसी विशिष्ट बिंदु पर पढ़ना शुरू करना चाहते हैं, तो आपको इसे प्रश्न में फ़ाइल तक पहुंच प्रदान करने की आवश्यकता है, न कि किसी अन्य प्रोग्राम के लिए पाइप किए गए डेटा की। यह भी सावधान रहें कि परम गति के लिए आपकी इस इच्छा के खिलाफ पाइप के झगड़े का उपयोग करना, क्योंकि पाइप में मांगने का एकमात्र तरीका पढ़ने और उन हिस्सों को दूर फेंकना है जिन्हें आप संसाधित नहीं करना चाहते हैं। एक वास्तविक फ़ाइल के भीतर की खोज कहीं अधिक कुशल है।
वारेन यंग

दरअसल, चूंकि उपकरण टूटे हुए डेटा को बचाने के लिए डिज़ाइन किया गया है, इसलिए पाइप की क्षमता नहीं है। यह एक शर्म की बात है जब आप इनपुट फ़ाइल के माध्यम से मांगने का लचीलापन चाहते हैं, लेकिन परिणाम को रोकना चाहते हैं। अपने इच्छित उद्देश्य के लिए, हालांकि, यह बहुत अच्छा है।
ऑर्बिट

3

एक अच्छा विकल्प है pv। न केवल यह स्वचालित रूप से सबसे कुशल ब्लॉक आकार की गणना करता है, अनिवार्य रूप से चीजों को गति देता है, बल्कि यह अन्य चीजों के बीच भी प्रगति प्रदान करता है। यह सरल है:

pv < /dev/sda > sda.img

यह संपीड़न के साथ भी अच्छा खेलता है। एक कदम में एक डिस्क को बैकअप और संपीड़ित करने का एक तेज़ तरीका ऐसा है:

pv < /dev/sdb | pigz -9 > disk.img.gz

आप यहां और जान सकते हैं ।


1
मुख्य अपेक्षित सुविधा आउटपुट और इनपुट फ़ाइलों में मांग रही है, जो pv (पाइप दृश्य) प्रदान नहीं करता है, क्योंकि पाइप के लिए कोई तलाश नहीं है।
वि।

2

dcfldd एक और dd विकल्प है। यह इनपुट / आउटपुट के लचीलेपन के बारे में ओपी के सवाल को संबोधित नहीं करता है, लेकिन Google खोज के माध्यम से यहां पहुंचने वाले अन्य लोगों के लिए उपयोगी हो सकता है।

यह निम्नलिखित अतिरिक्त सुविधाओं के साथ gnu dd पर आधारित है:

  • ऑन-द-फ्लाई - dcfldd को हाश करना इनपुट डेटा को हैश कर सकता है क्योंकि यह डेटा अखंडता सुनिश्चित करने में मदद करता है।
  • स्टेटस आउटपुट - dcfldd ट्रांसफर किए गए डेटा की मात्रा और कितना अधिक समय लगेगा, इसकी प्रगति के उपयोगकर्ता को अपडेट कर सकता है।
  • लचीली डिस्क पोंछे - dcfldd का उपयोग डिस्क को जल्दी से पोंछने के लिए किया जा सकता है और यदि वांछित हो तो एक ज्ञात पैटर्न के साथ।
  • छवि / मिटाएं सत्यापित करें - dcfldd यह सत्यापित कर सकता है कि लक्ष्य ड्राइव निर्दिष्ट इनपुट फ़ाइल या पैटर्न का एक बिट-फॉर-बिट मैच है।
  • एकाधिक आउटपुट - dcfldd एक ही समय में कई फ़ाइलों या डिस्क पर आउटपुट कर सकता है।
  • स्प्लिट आउटपुट - dcfldd आउटपुट से कई फाइलों को स्प्लिट कमांड की तुलना में अधिक कॉन्फ़िगरेशन के साथ विभाजित कर सकता है।
  • पाइप्ड आउटपुट और लॉग - dcfldd अपने सभी लॉग डेटा और आउटपुट को कमांड के साथ-साथ मूल रूप से फ़ाइलों को भेज सकता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.