ডিস্কে কোনও নতুন ফাইল তৈরি না করে কীভাবে স্বাক্ষরিত ফাইল থেকে জিপিজি স্বাক্ষর সরিয়ে ফেলবেন?


2

যদি আমার কাছে 100 এমবি স্বাক্ষরিত বাইনারি ফাইল থাকে যা আমি ইন্টারনেটে ডাউনলোড করি তবে এটি খুলতে আমার 200 এমবি ডিস্ক স্পেস প্রয়োজন need ফাইলটি সই করা হয়েছে, এনক্রিপ্ট করা হয়নি।

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

# gpg --verify filename.gpg

ডিস্কে একটি নতুন ফাইল তৈরি না করে। একটি নমুনা কর্মপ্রবাহ নীচে বর্ণিত:

# # Sample workflow
# cd /tmp/new
# wget http://someaddress/filename.gpg
# ls
filename.gpg
# du -h filename.gpg
100M filename.gpg
# gpg filename.gpg
gpg: Signature made Thu May 28 10:53:26 2015 UTC using RSA key ID XXXXXXXXX
gpg: Good signature from "Example <example@example.com>"
# ls
filename filename.gpg
# du -ch *
100M filename
100M filename.gpg
200M total
# rm filename.gpg

ডিস্কের স্থান কম হলে, gpg filename.gpg কমান্ড ব্যর্থ হবে।

উত্তর:


2

আপনি ডাউনলোড প্রক্রিয়াটি একত্রিত করতে পারেন এবং এইরকম একটি পাইপ প্রক্রিয়ায় স্বাক্ষরটি পরীক্ষা করতে পারেন:

wget -qO- http://someaddress/filename.gpg|gpg >filename

সুতরাং এটি কার্যকরভাবে হার্ডডিস্কের জায়গার পরিবর্তে স্টাডাউটে (র‌্যাম ব্যবহার করে) ফাইলে পুনঃনির্দেশ করে?
এলিসন নিভেন

এটি ছোট ফাইলগুলির জন্য কাজ করে তবে ফাইলগুলিতে ব্যর্থ হয়> 100 এমবি: কার্ল: (18) জিপিজি পড়ার জন্য 89839462 বাইট সহ স্থানান্তর বন্ধ হয়: অবৈধ চিহ্নিতকারী প্যাকেট জিপিজি: [জানেন না]: অবৈধ প্যাকেট (সিটিবি = 76)
এলিসন নিভেন

ঠিক নয়, এটি পাইপ তৈরি করে এবং পাইপে প্রেরণ করে উইজেট থেকে আউটপুট দেয় এবং একই সাথে জিপিজি-র জন্য ইনপুট হিসাবে এটি ব্যবহার করে। হ্যাঁ, কিছু পরিমাণ র‌্যাম রয়েছে, যা অপারেশনের জন্য ব্যবহৃত হয়, তবে 100MB নয়। অন্যান্য ত্রুটি সম্পর্কে আপনার সংযোগে সমস্যা রয়েছে। যদি সংযোগটি ভেঙে যায় তবে আপনাকে স্থানীয় ফাইলটি ব্যবহার করতে হবে এবং পুরো ফাইলটি পেতে কার্ল /
উইজেট

ধন্যবাদ তবে পাইপ ব্যবহারের কারণে এখনও কিছু সীমাতে চলে যাবে।
এলিসন নিভেন

1
@ এলিসননিভেন আমার মনে হয় না। একটি পাইপ বাইটের একটি সারি এবং পুরো ফাইলটি ধারণ করার প্রয়োজন হয় না। কিউর দৈর্ঘ্যের একটি সীমা রয়েছে, তবে যখন সারিটি পূর্ণ হয় প্রেরণ প্রক্রিয়াটি কেবল অবরুদ্ধ হয়।
নীল মেহেহে

1

হ্যাঁ, আপনি ডিস্কের বেশি জায়গা ব্যবহার না করে শুরু এবং শেষ থেকে বাইটগুলি সরিয়ে ফেলতে পারেন। তবে বেশিরভাগ ইউটিলিটিগুলি ফাইলটিকে একটি নতুন ফাইলে অনুলিপি করবে, পুরানোটি মুছে ফেলবে এবং তারপরে নতুনটির নাম পুরনোটির মতো হবে। আমি মনে করি এটি নিরাপদ এটি gpgএই বিভাগে। অবশ্যই এটি অবশ্যই ফাইলের দ্বিগুণ ডিস্ক স্পেস ব্যবহার করে।

আপনার যা করা দরকার তা হ'ল:

  1. পিজিপি শিরোলেখের আকার অনুসারে ইন-প্লেস "ডাউন" ফাইলটির বাইটগুলি সরান
  2. পিজিপি ট্রেলারটি সরানোর জন্য ফাইলের দৈর্ঘ্য সেট করুন

সঠিক উপযোগিতা সহ, এটি একক পদক্ষেপে এটি করাও সম্ভব হবে এবং কেবল এটি করার জন্য একটি সহজেই সি প্রোগ্রাম লিখতে পারে।

তবে, আমি ধরে নিলাম আপনি ইতিমধ্যে উপলব্ধ সরঞ্জামগুলি দিয়ে এটি করতে চান। বাস্তবে এটি করা সম্ভব dd:

dd if=filename.gpg of=filename.gpg bs=49 skip=1 conv=notrunc

এটি এই ধারণায় রয়েছে যে শিরোনামটি 49 বাইট দীর্ঘ। (YMMV)

এখন আপনার ফাইলটি সঠিক দৈর্ঘ্যে ছাঁটাই করতে হবে। সেখানে একটি ইউটিলিটি নামক truncateগনুহ মধ্যে coreutilsযে অনেক ইউনিক্স সিস্টেমে উপস্থিত থাকবে। যাইহোক, আপনি ট্রেলার বাইট অফসেট জানতে হবে। এটি জিএনইউ দিয়ে করা যেতে পারে grep:

grep -b '^-----BEGIN PGP SIGNATURE-----' filename.gpg

এটি এমন কিছু আউটপুট দেবে:

104857600:-----BEGIN PGP SIGNATURE-----

চূড়ান্ত পদক্ষেপটি এই মানটি এর সাথে ব্যবহার করা truncate:

truncate -s 104857600 filename.gpg

তবে, যদি আপনি ইতিমধ্যে ট্রেলার দৈর্ঘ্যটি জানেন, আপনি এড়িয়ে যেতে পারেন grepএবং কেবলমাত্র truncateসেই সংখ্যাটি বাইট দ্বারা ফাইলটি সংক্ষিপ্ত করতে বলতে পারেন:

truncate -s -103 filename.gpg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.