আমি কিভাবে ডিডি আউটপুট দমন করব?


35

আমার একটি বাশ স্ক্রিপ্ট রয়েছে যা ব্যবহার করে কিছু ফাইল তৈরি করে dd। সমস্যাটি হ'ল ডিপি একটি প্রচুর পরিমাণে আউটপুট ফেলে দেয় যা আমার স্ক্রিপ্টের আউটপুট নিয়ে গোলমেলে যাচ্ছে। চারপাশে অনুসন্ধান করে আমি একটি সমাধান পেয়েছি:

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

বিকল্প আছে, বা /dev/nullএকমাত্র পথে পুনর্নির্দেশ ?


3
আমি আপনার শেষ বাক্যে হারিয়েছি, "স্ক্রিপ্টটি সুবিধার জন্য অনুরোধ করা উচিত নয়"। এর পুনঃনির্দেশের সাথে কিছু করার নেই বলে মনে হচ্ছে /dev/null- আপনি মামলা করছেন কারণ এতে ddলেখার অ্যাক্সেস দরকার /dev/r$temp1(আমি ধরে নিই)। আপনার ddআউটপুটটি যেভাবে দমন করা যায় তা বিবেচনা না করেই আপনাকে এটি করতে হবে ; আউটপুটটিকে /dev/nullমূলের প্রয়োজন হয় না বলে পুনর্নির্দেশ করা হচ্ছে
মাইকেল মরোজেক

আমি বোকা। এটি / dev / r $ temp1 / ব্যবহারের কারণে অপারেশনটির অনুমতি দেওয়া হয়নি। আমি সত্যিই দুঃখিত। আমি এমন একটি স্ক্রিপ্ট সম্পাদনা করছি যা আমার নয় এবং এটি লক্ষ্য করে নি। আন্তরিকভাবে দুঃখিত.
dierre

সুতরাং সমস্যাটি হ'ল নিয়মিত ব্যবহারকারী / dev / r $ টেম 1 বা ডেভ / নাল
জেট

এটি সম্পর্কে চিন্তা করবেন না; বিভ্রান্তিকর অংশটি সরাতে আমি এটি কিছুটা সম্পাদনা করেছি
মাইকেল মরোজেক

1
আপনি ব্যবহার না করে থাকেন DD কোন উন্নত বৈশিষ্ট্য, ব্যবহার এর cat, headবা tailপরিবর্তে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

উত্তর:


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প্রস্থান করে, তাই কোনও ডাটা সিঙ্কে পুনর্নির্দেশ করা আপনার একমাত্র বিকল্প।


আমি ভীত ছিল।
dierre

আমি বিশ্বাস করি যে স্থিতি = নোসফার, 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.

@ রাইমা - শুধু কৌতূহলী, কেন ম্যান পৃষ্ঠা থেকে একটি উদ্ধৃতি সম্পাদনা করছেন?
don_crissti

@ don_crissti আমি ম্যান পৃষ্ঠা থেকে উদ্ধৃতিটি বের করার ক্ষেত্রে (অভাব) প্রসঙ্গে অনুভব করেছি এর অর্থ এটির জন্য কিছুটা ভিন্ন রূপের শব্দের প্রয়োজন। এটি যেমন ম্যান পৃষ্ঠাতে দাঁড়িয়ে আছে ঠিক আছে; এখানে এটি অদ্ভুত লাগছিল।
রোয়াইমা

@ রাইমা - ঠিক আছে - কৌতূহল সন্তুষ্ট :) - তবে মনে রাখবেন যে আপনি এর সাথে লিঙ্ক করেছেন info page; এখানে প্রাথমিক উত্তরটি থেকে সঠিক উদ্ধৃতি ছিল man page। পৃষ্ঠাটি অস্পষ্ট থাকলে তবে সত্য আপনি নিজেরাই infoপৃষ্ঠাটি থেকে সরাসরি অনুলিপি / আটকানো থাকতাম man... ওহ, বিটিডাব্লু, সপ্তাহের দিন অনুসারে বাছাইয়ের সাথে সম্পর্কিত আমার উত্তর সম্পর্কে আপনার অন্যান্য মন্তব্যের জন্য অনেক ধন্যবাদ।
don_crissti

@ don_crissti আমি এমন কোনও ম্যান পেজ অনলাইনে খুঁজে পাইনি যার উদ্ধৃতি ছিল; তার জন্য আপনাকে ধন্যবাদ (die.net পুরোনো হয়েছে ddছাড়া status=)
roaima

3
মনে হয় না ডিডি (কোর্টিলস) 8.13 তে পাওয়া যাচ্ছে: dd: invalid status flag: `none' Try `dd --help' for more information.
প্রতি লন্ডবার্গ

5

ভবিষ্যতের রেফারেন্সের জন্য:

ডিডি আউটপুট দমন করতে স্ট্যাডারকে সম্পূর্ণরূপে / dev / নাল এ পুনঃনির্দেশ করুন:

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

এটি খুব ভালভাবে কাজ করে যদি আপনি উদাহরণস্বরূপ, টাইমে কমান্ড ব্যাশ-এ ব্যবহার করে সময়টি প্রয়োগ করতে চান এবং ফলাফলকে একটি ভেরিয়েবলের কাছে নির্ধারণ করে, ডিডি উত্পাদন করে না এমন কোনও আউটপুট না পেয়ে।

তথ্যসূত্র: http://www.unix.com/shell-programming-and-scriptting/131624-hu-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 / নালটিতে পুনর্নির্দেশ করে। তবে আপনার দ্বিতীয় অংশটি প্রয়োজন ত্রুটি আউটপুট (ইউনিট সংখ্যা 2) একই সংখ্যার 1 হিসাবে একই জায়গায় পুনর্নির্দেশ করতে ALSO করতে।

ইউনিক্সে, 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

নাঃ। আমি যা করতে চাই না ঠিক তা-ই। আমি স্ক্রিপ্টটি কেবল রুট হিসাবে চালিত করতে চাই না কারণ আমি আউটপুটটি প্রদর্শন করতে ডিডি চাই না। আপনার স্ক্রিপ্টটি ঠিক হবে যদি আমি স্ক্রিপ্টটি সুপারভাইজার হিসাবে চালিত করি।
dierre

@ ডিয়েরে তাহলে sudoআপনার প্রথম স্থানের দরকার কেন ? সাধারণ ব্যবহারকারীদের জিনিসগুলি /dev/nullকেবল সূক্ষ্মে পুনর্নির্দেশ করতে সক্ষম হওয়া উচিত ।
ফুনেহে

আমি উবুন্টু ব্যবহার করছি এবং আমার অপারেশন প্রদান এর অনুমতি নেই ... UHM ...
Dierre

আমি দুঃখিত. আমি লক্ষ্য করিনি যে আমি / dev / এর অধীনে কিছু তৈরি করছি। স্ক্রিপ্টটি আমার নয়, আমি এটি সম্পাদনা করছিলাম। আমি সত্যিই দুঃখিত।
dierre

0

আপনি আউটপুটটিকে একটি নিয়মিত ফাইলে পুনঃনির্দেশ করতে পারেন অর্থাত:

 dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.