বাইনারি ডেটা সহ স্ট্যান্ডার্ড ইনপুট এবং আউটপুট ব্যবহার করা কি নিরাপদ?


14

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


1
splitকমান্ডটি একবার দেখুন ।
উদাহরণস্বরূপ

উত্তর:


19

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


6
কোন ক্ষেত্রে আপনি টাইপ করতে পারেন resetএবং এটি ঠিক করতে এন্টার টিপুন।
বার্ড কোপ্পেরুদ

4
@ বার্ডকপার্পুড আমি ভেবেছিলাম যে আমি কোথাও এমন কোনও কোণার বিষয়ে পড়েছি যেখানে টিএসটি / রিসেট কাজ করবে না
Xen2050

1
@ Xen2050- আমি জানি না। কেবলমাত্র যদি ঘটতে পারে তবে কিছু পালানোর ক্রম কীবোর্ড বিন্যাস / এনকোডিং পরিবর্তন করে, যাতে reset<enter>
টাইপিংটি

3
বাইনারি ফাইল প্রদর্শন করার পরে ফিক্স টার্মিনালটি দেখুন এবং কেন কনসোলকে মাঝে মাঝে সিটিআরএল + সি-এর পরে পুনরায় সেট করা প্রয়োজন । প্রথম লিঙ্কে প্রস্তাবিত হিসাবে, stty sane; tput rs1কমান্ডের ক্রম যখন resetকাজ না করার কোণায় আছে তখন তার কৌশলটি সম্পাদন করবে । বাকুরিয়ু উল্লেখ করা ছাড়াও এই জাতীয় ক্ষেত্রে, টার্মিনাল লাইন / কলামগুলির প্রস্থ অন্তর্ভুক্ত থাকতে পারে বা আমি সিরিয়াল যোগাযোগ (বাউড্রেট / প্যারিটি) সম্পর্কিত সেটিংস অনুমান করছি।
সের্গেই কোলোডিয়াজহনি

1

headবা এর মতো কমান্ড ব্যবহার করার ক্ষেত্রে প্রধান সমস্যাটি tailহ'ল তারা লাইন-ভিত্তিক এবং বাইনারি ফাইলগুলি নয়। যদি তাদের মধ্যে নতুন লাইন থাকে তবে এগুলি প্রায়শই একটি লাইনের শেষ উপস্থাপন করতে ব্যবহৃত হয় না এবং যদি হয় তবে তারা প্রোগ্রাম বার্তাগুলি বা ডেটা ফিল্ডের মতো স্ট্রিংয়ের অংশ হতে পারে।

যদি কোনও উপায়ে ডেটা কাঠামোগত হয় তবে বিভক্ত পয়েন্টগুলি বেছে নেওয়ার ক্ষেত্রে আপনাকে এটিকে বিবেচনায় নিতে হবে যাতে আপনি মাঝখানে কাঠামো ভাঙেন না।

আপনি যদি ফাইলটির কাঠামো জানেন তবে আপনি যেমন একটি কমান্ড ব্যবহার করতে পারেন

dd -if input-file -of output-file ...

বিকল্পগুলিতে কেবলমাত্র নির্দিষ্ট আকারের এতগুলি ব্লকের ডেটা ফাইলটিতে অফসেট করে নির্দিষ্ট (বর্ধিত) থেকে অনুলিপি করা যায়।

দেখে মনে হচ্ছে split@egmont দ্বারা উল্লিখিত কমান্ডটি আপনার জন্য এই প্রক্রিয়াটি স্বয়ংক্রিয় করবে, তবে এটি ডিফল্টরূপে লাইন-ওরিয়েন্টেড বলে মনে হচ্ছে, সুতরাং আপনাকে অতিরিক্ত বিকল্পগুলি নির্দিষ্ট করতে হবে যেমন --bytes countফাইলের প্রতিটি টুকরা কত বড় হওয়া উচিত তা তা জানাতে হবে থাকা.


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

strings -n 6 file | less

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

আপনার যদি পরে বাইনারি সম্পাদকের মতো আরও বিশদে ফাইলটি অন্বেষণ hexeditকরতে হয় তবে আপনার কাছে এমন কয়েকটি ল্যান্ডমার্ক থাকবে যেখানে উল্লেখ করা হবে আকর্ষণীয় কিছু পাওয়া যাবে।

stringsএকটি বিকল্প রয়েছে - t x যা প্রতিটি মুদ্রিত স্ট্রিংটি হেক্সাডেসিমালে (ওষুধের জন্য / দশমিকের জন্য ডি) এর অফসেটের সাথে ফাইলের মধ্যে আগে চলে যাবে যাতে আপনি এটি কোথায় খুঁজে পাবেন তা জানেন। এমনকি খুব ছোট ফাইলগুলি যখন আপনাকে চরিত্র অনুসারে চরিত্রের দিকে তাকাতে হয় তখন তা মোকাবিলা করার জন্য অনেক কিছুই।

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