इस बात को ध्यान में रखें कि dd
एक कच्चा इंटरफ़ेस है read()
, write()
और lseek()
सिस्टम कॉल के लिए। आप नियमित रूप से फ़ाइलों, ब्लॉक डिवाइसों और कुछ चरित्र उपकरणों (जैसे /dev/urandom
) से डेटा का हिस्सा निकालने के लिए इसे मज़बूती से उपयोग कर सकते हैं , यह वह फाइल है जिसके लिए फ़ाइल के अंत तक पहुंचने की read(buf, size)
गारंटी size
नहीं है।
पाइप, सॉकेट और अधिकांश चरित्र उपकरणों (जैसे ट्टी) के लिए, जब तक आप read()
आकार 1 नहीं करते, या GNU dd
एक्सटेंशन का उपयोग नहीं करते, तब तक आपके पास ऐसी कोई गारंटी नहीं है iflag=fullblock
।
तो या तो:
{
gdd < file1 bs=1M iflag=fullblock count=99 skip=1
gdd < file2 bs=1M iflag=fullblock count=10
} > final_output
या:
M=1048576
{
dd < file1 bs=1 count="$((99*M))" skip="$M"
dd < file2 bs=1 count="$((10*M))"
} > final_output
या सीक ऑपरेटर के लिए बिलिन समर्थन के साथ गोले के साथ ksh93
:
M=1048576
{
command /opt/ast/bin/head -c "$((99*M))" < file1 <#((M))
command /opt/ast/bin/head -c "$((10*M))" < file2
}
या zsh
( यहां आपके विकल्प का head
समर्थन करने पर -c
)
zmodload zsh/system &&
{
sysseek 1048576 && head -c 99M &&
head -c 10M < file2
} < file1 > final_output
oflag=append conv=notrunc
), इसलिए फाइलसिस्टम जो विलंबित आवंटन करते हैं (जैसे XFS) यह तय करने की संभावना कम से कम है कि फ़ाइल तब लिखी जा रही है जब वहाँ जाना अभी बाकी है।