मैं dd आउटपुट को कैसे दबाऊं?


35

मेरे पास एक बैश स्क्रिप्ट है जो कुछ फ़ाइल का उपयोग करके बनाता है dd। समस्या dd है, जो मेरी स्क्रिप्ट के आउटपुट के साथ गड़बड़ करने वाली है, बड़ी मात्रा में आउटपुट फेंकता है। आसपास खोज करने पर मुझे एक समाधान मिला है:

dd if=boot1h of="/dev/r$temp1" >& /dev/null

क्या कोई विकल्प है, या /dev/nullएकमात्र तरीके से पुनर्निर्देशित किया जा रहा है?


3
मैं आपके अंतिम वाक्य पर खो गया हूं, "स्क्रिप्ट को विशेषाधिकारों के लिए अनुरोध नहीं करना चाहिए"। ऐसा लगता नहीं है कि इसका पुनर्निर्देशन से कोई लेना /dev/null- देना है - आप सूदिंग कर रहे हैं क्योंकि मुझे (मुझे लगता है) ddतक पहुंच की आवश्यकता है /dev/r$temp1। आपको यह करने की आवश्यकता है कि कोई फर्क नहीं पड़ता कि आप कैसे ddआउटपुट को दबाते हैं ; आउटपुट को पुनर्निर्देशित करने के /dev/nullलिए रूट की आवश्यकता नहीं है
माइकल Mrozek

मैं बेवकूफ़ हूँ। यह / dev / r $ temp1 / के उपयोग के कारण अनुमति नहीं दी गई कार्रवाई दे रहा था। मैं वास्तव में माफी चाहता हूँ। मैं एक स्क्रिप्ट का संपादन कर रहा हूं जो मेरी नहीं है और इस पर ध्यान नहीं गया। हृदय से क्षमाप्रार्थी।
दिलेर

तो समस्या यह है कि नियमित रूप से उपयोगकर्ता / dev / r $ temp1 या dev / null को नहीं लिख सकता है
जेट

इसके बारे में चिंता मत करो; मैंने भ्रमित करने वाले हिस्से को हटाने के लिए इसे थोड़ा संपादित किया
माइकल मर्जेक

1
यदि आप dd की उन्नत सुविधाओं में से किसी का उपयोग नहीं कर रहे हैं, का उपयोग करें cat, headया tailइसके बजाय।
गाइल्स का SO- बुराई पर रोक '31

जवाबों:


16

से dd(1)आदमी पेज:

   status=noxfer
          suppress transfer statistics

इस प्रकार:

dd if=boot1h of="/dev/r$temp1" status=noxfer

यह अभी भी आउटपुट देता है

0+1 records in
0+1 records out

कचरा जब ddबाहर निकलता है, तो डेटा सिंक पर पुनर्निर्देशन वास्तव में आपका एकमात्र विकल्प है।


मुझे इससे डर लगता है।
दिनांक

मेरा मानना ​​है कि स्थिति = noxfer, SIGUSR1 सिग्नल से संबंधित हो सकती है, जो सामान्य रूप से स्थानांतरण आँकड़ा दिखाती है। फिर भी, मैं परीक्षण करने के लिए तैयार नहीं हूँ अगर यह सच है कि मैं क्या कह रहा हूँ।
मैक्सडामो

54

जोड़ें status=none:

dd if=boot1h of="/dev/r$temp1" status=none

से dd (coreutils) 8.21 डॉक्स :

'status=LEVEL'
     Transfer information is normally output to stderr upon receipt of
     the 'INFO' signal or when 'dd' exits.  Specifying LEVEL will adjust
     the amount of information printed, with the last LEVEL specified
     taking precedence.

     'none'
          Do not print any informational or warning messages to stderr.
          Error messages are output as normal.

     'noxfer'
          Do not print the final transfer rate and volume statistics
          that normally make up the last status line.

     'progress'
          Print the transfer rate and volume statistics on stderr, when
          processing each input block.  Statistics are output on a
          single line at most once every second, but updates can be
          delayed when waiting on I/O.

@roaima - बस उत्सुक, मैन पेज से एक उद्धरण क्यों संपादित कर रहा है?
don_crissti

@don_crissti मुझे मैन पेज से उद्धरण निकालने में संदर्भ की कमी महसूस हुई, इसका मतलब है कि इसके लिए कुछ अलग तरह के शब्दों की आवश्यकता थी। जैसा कि यह ठीक है आदमी पृष्ठ में खड़ा है; यहाँ यह अजीब लग रहा था।
रोइमा

@roaima - सब ठीक है - जिज्ञासा संतुष्ट :) - लेकिन ध्यान दें कि आप से लिंक करते हैं info page; यहाँ प्रारंभिक उत्तर से सटीक उद्धरण था man pageinfoयदि manपृष्ठ अस्पष्ट है, लेकिन मैं आपसे सीधे पेज पर कॉपी / पेस्ट करवाता हूं, तो आप ... ओह, btw, सप्ताह के दिनों के अनुसार छंटनी से संबंधित मेरे उत्तर पर आपकी अन्य टिप्पणी के लिए बहुत धन्यवाद।
don_crissti

@don_crissti मैं ऑनलाइन एक आदमी पृष्ठ नहीं ढूँढ सका जिसमें बोली थी; उस एक के लिए धन्यवाद। (die.net के ddबिना पुराने है status=)
रोआमा

3
Dd (कोरुटिल्स) 8.13 में उपलब्ध नहीं लगता है: dd: invalid status flag: `none' Try `dd --help' for more information.
प्रति लंडबर्ग

5

आगामी संदर्भ के लिए:

Dd आउटपुट को पूरी तरह से पुनर्निर्देशित करने के लिए / dev / null जैसे stderr:

dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null

यह अच्छी तरह से काम करता है यदि आप चाहते हैं, उदाहरण के लिए, समय कमांड का उपयोग करने की प्रक्रिया को समय पर उपयोग करें और किसी भी आउटपुट को प्राप्त किए बिना चर को परिणाम असाइन करें, जो कि dd का उत्पादन करता है।

संदर्भ: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html


2

कुछ ऐसा होना चाहिए जो आपके लिए BASH और ZSH के हाल के संस्करणों के साथ भी काम करे:

dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null

पुनश्च यह सिर्फ एक उदाहरण है जो मैंने चलाया ...


2

किसी भी यूनिक्स एप्लिकेशन या कमांड के साथ, आप सभी आउटपुट को दबा सकते हैं

cmd >/dev/null 2>&1

पहला बिट मानक आउटपुट (यूनिट नंबर 1) को / dev / null में रीडायरेक्ट करता है। लेकिन आपको ALSO के दूसरे भाग को त्रुटि आउटपुट (यूनिट नंबर 2) को उसी स्थान पर नंबर 1 के रूप में रीडायरेक्ट करना होगा।

UNIX में, STDIN = 0, STDOUT = 1 और STDERR = 2



1
दरअसल, stderrफाइल डिस्क्रिप्टर 2 है । (मुझे लगता है कि "STDERR = 3" सिर्फ एक टाइपो है।)
n .st

1
सभी आउटपुट को दबाने के लिए यह अवांछनीय है। यदि कोई त्रुटि होती है, तो हम त्रुटि संदेश देखना चाहेंगे।
सैम वॉटकिंस

cmd 2>logfile.txtअधिक अनुकूलित लगता है
TheSola10

0

अगर मुझे सही ढंग से समझ में आ गया है कि आप क्या करने की कोशिश कर रहे हैं, तो क्या आप उस sudoकमांड को स्क्रिप्ट में डाल रहे हैं और स्क्रिप्ट की उम्मीद कर रहे हैं कि जब वह वहां से चले तो आपके पासवर्ड के लिए संकेत दें? उस स्थिति में आप चीजों को जटिल तरीके से कर रहे हैं।

एक क्लीनर समाधान सामान्य तरीके से स्क्रिप्ट लिखना है (अर्थात बिना sudo) और इसे सुपरसुसर के रूप में चलाना । इसके पीछे कारण यह है कि यदि स्क्रिप्ट को सुपरयूज़र एक्सेस की आवश्यकता है, तो बस इसे एक्सेस दें (एक निश्चित कमांड तक प्रतीक्षा क्यों करें?)। स्क्रिप्ट में, यह जांचने के लिए कि क्या इसे रूट के रूप में चलाया जा रहा है:

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

नहीं। ठीक यही मैं करना चाहता हूं। मैं नहीं चाहता कि स्क्रिप्ट को केवल रूट के रूप में चलाया जाए क्योंकि मैं dd को आउटपुट प्रदर्शित नहीं करना चाहता। अगर मैं स्क्रिप्ट को सुपरसुसर के रूप में चलाना चाहता हूं तो आपका चेक सही होगा।
दिनांक

@ डिएरे तो आपको sudoपहली जगह की आवश्यकता क्यों थी ? सामान्य उपयोगकर्ताओं को /dev/nullसिर्फ ठीक करने के लिए चीजों को पुनर्निर्देशित करने में सक्षम होना चाहिए ।
फुनेहे

मैं उबंटू का उपयोग कर रहा हूं और यह मुझे ऑपरेशन की अनुमति नहीं दे रहा है ... उम्म ...
dierre

मुझे माफ कर दो। मैंने ध्यान नहीं दिया कि मैं / देव / के तहत कुछ बना रहा था। स्क्रिप्ट मेरी नहीं है, मैं इसे एडिट कर रहा था। मैं वास्तव में माफी चाहता हूँ।
दिलेर

0

आप आउटपुट को एक नियमित फ़ाइल पर पुनर्निर्देशित कर सकते हैं:

 dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.