यहाँ कुछ dd ट्रिक्स हैं जो मैं वर्षों से देख रहा हूँ।
कट-एंड-पेस्ट को अमित्र ट्टी या गैर-संवादात्मक मोड बैश पर
यदि आप ऐसी स्थिति में हैं जहाँ EOF / ^ D / ^ F का पता नहीं लगा है तो आप dd का उपयोग पाठ फ़ाइलों को होस्ट में स्थानांतरित करने के लिए कर सकते हैं। चूंकि यह निर्दिष्ट बाइट्स के बाद स्वचालित रूप से पढ़ना बंद कर देगा।
मैंने इसे पिछले साल की तरह एक सुरक्षा अभ्यास के दौरान इस्तेमाल किया था, जहां हम एक दूरस्थ होस्ट पर गैर-टटी के गोले प्राप्त करने में सक्षम थे और इसमें फ़ाइलों को स्थानांतरित करने की आवश्यकता थी।
वास्तव में, मैं भी आधारभूत एन्कोडिंग और धीमी, लेकिन विश्वसनीय शुद्ध- bash base64 डिकोडिंग स्क्रिप्ट का उपयोग करके कुछ द्विआधारी फ़ाइलों को किया।
dd of=textfile.txt bs=1 count=<size_of_data_in_paste_buffer>
एक सुपर कूल ट्रिक यह है कि जब dd चल रहा होता है, यदि आप इसे USR1 सिग्नल भेजते हैं, तो यह वर्तमान स्थिति (बाइट्स रीड, बाइट्स प्रति सेकंड ..) का उत्सर्जन करेगा।
यूनिवर्सल थ्रूपुट स्टेट फिल्टर
मैंने इसे किसी भी प्रोग्राम के लिए शुद्ध बैश प्रगति फिल्टर के रूप में कार्य करने के लिए लिखा है जो डेटा को स्टैडआउट के माध्यम से उत्सर्जित करता है। (नोट: बहुत कुछ भी डेटा stdout के माध्यम से उत्सर्जित करेगा - ऐसे कार्यक्रमों के लिए जो आप नहीं कर सकते हैं, अगर वे आपके साथ एक फ़ाइल नाम के रूप में / dev / stdout का उपयोग करते हुए बारफ नहीं करते हैं, लेकिन विचार मूल रूप से है, हर बार जब आप X प्राप्त करते हैं। बाइट्स की राशि, हैश मार्क प्रिंट करें (जैसे पुराने स्कूल एफ़टीपी जब आपके पास हैश मोड था)
(नोट) प्रगति फ़ाइल बात लंगड़ा है, यह ज्यादातर अवधारणा का प्रमाण था। अगर मैं इसे रिड्यूस करता हूं, तो मैं सिर्फ एक वेरिएबल का उपयोग करूंगा।
dd bs=$BLKSZ of=${TMPFILE} 2>&1 \
| grep --line-buffered -E '[[:digit:]]* bytes' \
| awk '{ print $1 }' >> ${PROGRESS} &
while [[ $(pidof dd) -gt 1 ]]; do
# PROTIP: You can sleep partial seconds
sleep .5
# Force dd to update us on it's progress (which gets
# redirected to $PROGRESS file.
pkill -USR1 dd
local BYTES_THIS_CYCLE=$(tail -1 $PROGRESS)
local XFER_BLKS=$(((BYTES_THIS_CYCLE-BYTES_LAST_CYCLE)/BLKSZ))
if [ $XFER_BLKS -gt 0 ]; then
printf "#%0.s" $(seq 0 $XFER_BLKS)
BYTES_LAST_CYCLE=$BYTES_THIS_CYCLE
fi
done
गुमनाम शेल फ़ाइलहैंडल्स का उपयोग करके स्लाइस-एंड-डाइस फाइलें
यहाँ एक अत्यंत छद्म कोड उदाहरण है कि कैसे आपके पास एक हस्ताक्षरित टार फ़ाइल हो सकती है जिसे आप बिना किसी अनौपचारिक फ़ाइलहैंडल के माध्यम से टार इनपुट प्रदान करके त्रुटियों के बिना निकाल सकते हैं - आंशिक फ़ाइल डेटा को संग्रहीत करने के लिए किसी भी tmp फ़ाइलों का उपयोग किए बिना।
generate_hash() {
echo "yay!"
}
# Create a tar file, generate a hash, append it to the end
tar -cf log.tar /var/log/* 2>/dev/null
TARFILE_SIZE=$(stat -f "%z" log.tar)
SIGNATURE=$(generate_hash log.tar)
echo $SIGNATURE >>log.tar
# Then, later, extract without getting an error..
tar xvf <(dd if=$OLDPWD/log.tar bs=1 count=${TARFILE_SIZE})
Tl; dr है: मुझे dd अविश्वसनीय रूप से उपयोगी लगता है। और ये सिर्फ तीन उदाहरण हैं जो मैं अपने सिर के ऊपर से सोच सकता हूं।