কীভাবে নির্দিষ্ট অফসেট থেকে ফাইল আউটপুট করা যায়, তবে "ডিডি বিএস = 1 এড়িয়ে যান = এন" নয়?


28

কীভাবে কীভাবে করবেন dd if=somefile bs=1 skip=1337 count=31337000তবে দক্ষতার সাথে, 1-বাইট না পড়ে এবং না লিখে ব্যবহার করেন?

সমাধান আশা করা হয়:

  1. সহজ হতে (অ-সরলর জন্য আমি কিছু পার্ল অনিলাইনার লিখতে পারি যা এটি করবে)
  2. বড় অফসেট এবং দৈর্ঘ্য সমর্থন করতে (সুতরাং ডিডিতে ব্লক আকারের হ্যাকগুলি সাহায্য করবে না)

আংশিক সমাধান (যথেষ্ট সহজ নয়, দৈর্ঘ্যের সাথে একই চেষ্টা করা আরও জটিল করে তুলবে):

dd if=somefile bs=1000 skip=1 count=31337 | { dd bs=337 count=1 of=/dev/null; rest_of_pipeline; }
# 1337 div 1000 and 1337 mod 1000

আপনি ডিডি যে ব্লকসাইজটি ব্যবহার করছেন তা পরিবর্তন করার চেষ্টা করছেন?
20'12

স্কিপ এবং কাউন্টের জন্য পরিবর্তিত ব্লকসাইজ => ইউনিট পরিবর্তিত হয়েছে
vi।

উত্তর:


37

এটি করা উচিত (gnu dd তে):

dd if=somefile bs=4096 skip=1337 count=31337000 iflag=skip_bytes,count_bytes

আপনি seek=যেমন ব্যবহার করছেন সে ক্ষেত্রেও আপনি বিবেচনা করতে পারেন oflag=seek_bytes

থেকে info dd:

`count_bytes'
      Interpret the `count=' operand as a byte count, rather than a
      block count, which allows specifying a length that is not a
      multiple of the I/O block size.  This flag can be used only
      with `iflag'.

`skip_bytes'
      Interpret the `skip=' operand as a byte count, rather than a
      block count, which allows specifying an offset that is not a
      multiple of the I/O block size.  This flag can be used only
      with `iflag'.

`seek_bytes'
      Interpret the `seek=' operand as a byte count, rather than a
      block count, which allows specifying an offset that is not a
      multiple of the I/O block size.  This flag can be used only
      with `oflag'.

পিএস: আমি বুঝতে পেরেছি যে এই প্রশ্নটি পুরানো এবং মনে হচ্ছে এই পতাকাগুলি মূলত প্রশ্নটি জিজ্ঞাসা করার পরে প্রয়োগ করা হয়েছিল, তবে যেহেতু এটি সম্পর্কিত কোনও ডিডি অনুসন্ধানের জন্য প্রথম গুগলের ফলাফলগুলির মধ্যে একটি, তবে আমি নতুনটির সাথে আপডেট করা ভাল লাগবে যদিও বৈশিষ্ট্য।


2

সমস্ত প্রারম্ভিক বাইট খনন করতে একটি প্রক্রিয়া ব্যবহার করুন, তারপরে প্রকৃত বাইটগুলি পড়ার জন্য একটি দ্বিতীয়

echo Hello, World\! | ( dd of=/dev/null bs=7 count=1 ; dd bs=5 count=1 )

দ্বিতীয়টি ddআপনাকে দক্ষ বলে মনে করে যাই হোক না কেন ব্লকযুক্তের সাথে ইনপুটটি পড়তে পারে। নোট করুন যে এটি তৈরি করার জন্য একটি অতিরিক্ত প্রক্রিয়া প্রয়োজন; আপনার ওএসের উপর নির্ভর করে যা ব্যয় করতে পারে, তবে এটি সম্ভবত এক-এক-এক বাইট ফাইলগুলি পড়ার চেয়ে ছোট (যদি আপনার খুব ছোট ফাইল না থাকে তবে এক্ষেত্রে সমস্যা হবে না)।


এটি বড় অফসেট এবং গণনাগুলির জন্য কী ভাল কাজ করবে (অর্থাত্ খুব বেশি মেমোরি রাখবে না)? dd if=/dev/sda bs=10000000001 | dd bs=255 count=1 | hd-> "ডিডি: অবৈধ সংখ্যা` 10000000001 '"
vi।

@Vi। যদি আপনি একটি বিশাল অফসেটটি ছেড়ে যেতে চান তবে আপনার প্রাথমিক পড়াটি "আদর্শভাবে" (আপনার উত্সের উপর নির্ভর করে) আকারের ব্লকগুলি (16 এম) হিসাবে করা উচিত, তারপরে কম আকারের ব্লকগুলির একটি সিরিজ (512) ড্রপ করুন যা স্মৃতিতে থাকবে , আপনার ডেটাতে "জুম" করতে, কোনও ব্লকের আকারের (বিএস = 1 নীচে) ফিট করে না এমন একটি বিজোড় অংশটি ফেলে দেওয়ার আগে এবং তারপরে আপনার পছন্দসই ব্লকটি পড়ুন। যেমন আপনি অফসেট 10000000001 থেকে 255 বাইট পড়তে চান: dd if=/dev/sda bs=16M skip=596 count=1 | dd bs=512 skip=1522 count=1 | (dd bs=1 count=1 of=/dev/null ; dd bs=255 count=1)
রোলকাউ

অবশ্যই read -nএড়িয়ে যাওয়া ব্যবহার করা সহজ হবে ? এবং তারপর head -cগণনা? উদাহরণস্বরূপ cat somefile | (read -n 1337; head -c 31337000)বা কোনও অতিরিক্ত প্রক্রিয়া তৈরি না করে আপনি এটি করতে পারেন:exec 3<somefile; read -n 1337 -u 3; head -c 31337000 <&3
গ্যানেট

1

পরিবর্তে bs=1ব্যবহার bs=4096বা আরও কিছু।


2
তারপরে এটি 1337
vi এর

1
আহা, আমি দেখতে, তাহলে এটি সম্ভবত সহজ হবে এই উদাহরণে মত সরল পাইথন স্ক্রিপ্ট, যেমন লিখতে stackoverflow.com/questions/1035340/... সঙ্গে f.seek(1337)আগে ব্যবহারread(MY_CHUNK_SIZE)
ccpizza

এটি মনে হয় সবচেয়ে নির্ভরযোগ্য উপায় সম্ভবত একটি কাস্টম এক্সিকিউটেবল লিখুন। কিছু সিস্টেমে পাইথন বা রুবি বা পার্ল নেই don't : |
ট্রেজকাজ

1

আপনি হেক্সডাম্প কমান্ড চেষ্টা করতে পারেন:

hexdump  -v <File Path> -c -n <No of bytes to read> -s <Start Offset>

আপনি যদি কেবল বিষয়গুলি দেখতে চান:

#/usr/bin/hexdump -v -C mycorefile -n 100 -s 100
00000064 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 
00000074 00 00 00 00 01 00 00 00 05 00 00 00 00 10 03 00 |................| 
00000084 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 |......@.........| 
00000094 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 03 00 |................| 
000000a4 00 00 00 00 00 10 00 00 00 00 00 00 01 00 00 00 |................| 
000000b4 06 00 00 00 00 10 03 00 00 00 00 00 00 90 63 00 |..............c.| 
000000c4 00 00 00 00 |....| 
000000c8 #

এটি হেক্স হিসাবে ফাইল দেখার কথা নয়। এটি কোনও ফাইলের বিষয়বস্তু বের করার বিষয়ে (এটি কোথাও অনুলিপি করার জন্য, উদাহরণস্বরূপ) বাইটগুলিতে নির্দিষ্ট অফসেট থেকে।
vi।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.