ব্যাশে ট্যার ফাইলের অখণ্ডতা


25

আমার কাছে বাশ স্ক্রিপ্ট রয়েছে যা একটি '.tar' ফাইল তৈরি করে। একবার ফাইলটি তৈরি হয়ে গেলে, আমি এর অখণ্ডতা পরীক্ষা করতে চাইছি এবং অখণ্ডতা খারাপ হলে মূল ব্যবহারকারীকে ইমেল পাঠাতে চাই send

আমি জানি tar -tf /root/archive.tarফাইলটির অখণ্ডতা পরীক্ষা করতে আমার কমান্ডটি ব্যবহার করতে হবে, তবে বিবৃতিতে এবং ত্রুটিগুলি পরীক্ষা করার জন্য আমি কীভাবে এটিকে প্রয়োগ করব?

উত্তর:


33

যদি এর tarইনপুটটিতে ত্রুটিগুলি খুঁজে পাওয়া যায় তবে এটি exit(3)শূন্য-বহির্গমন প্রস্থান সহ। এটি - বেশিরভাগ tarবাস্তবায়ন সহ - সহ সংরক্ষণাগারগুলির লিঙ্ক তালিকাবদ্ধ করার সময়ও সম্পন্ন হয় t। সুতরাং আপনি tarকিছু ভুল হয়েছে কিনা তা নির্ধারণের জন্য কেবল প্রস্থানের মান পরীক্ষা করতে পারেন:

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

আপনি যদি এর tarসাথে সমস্ত ত্রুটি খুঁজে না পান তবে tআপনি এখনও সংরক্ষণাগারটি এখানে সরিয়ে নিতে stdoutএবং পুনঃনির্দেশ stdoutকরতে পারেন /dev/null, এটি ধীর তবে আরও নির্ভরযোগ্য পদ্ধতির হবে:

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

Not এই স্বরলিপিটি ম্যানপেজটিকে বোঝায়, আসল কলকে নয়। দেখুন man 3 exit


1
আপনি সম্ভবত tarআউটপুটটিকে পুনর্নির্দেশ করতে চাইবেন /dev/null, কারণ আপনি সম্ভবত এটি দেখতে চান না want
কেভিন

1
সমস্ত tarবাস্তবায়নগুলি সমস্ত ত্রুটি সনাক্ত করে বা এর সাথে রিপোর্ট করে না t( bsdtarএটি আপনি ব্যবহার করতে পারবেন tar xOf file.tar > /dev/nullনা)। সমস্ত tarবাস্তবায়ন প্রস্থান স্থিতি 2, star(255) ও bsdtar(1) এর সাথে প্রস্থান করবে না তবে কী প্রস্থান করবে তা প্রস্থান স্থিতি এখানে শূন্য নয়।
স্টাফেন চেজেলাস

1
আমি সেই অনুযায়ী আমার পোস্ট সম্পাদনা করেছি। সঙ্গে exit(2)আমি উপযুক্ত র manpage না সঠিক প্রস্থান মান সংক্রান্ত হয়েছিল (যার কারণে আমার কাছে তা থাকত »নন-জিরো« স্পষ্টভাবে নিচের বাক্যটি উল্লেখ)। এটি টিকে আছে (এবং বিভাগটি ডান এক -.-- এ পরিবর্তন করেছে)।
Andreas Wiese

আপনার উত্তরটি কেবল তালিকা এবং নিষ্কাশন করার সক্ষমতা সম্পর্কে, যদি আমি কোনও সম্পাদক দিয়ে টর সংরক্ষণাগারটি খুলি এবং কিছু পরিবর্তন করি তবে আপনার সমাধানটি কোনও ধরণের ত্রুটি ধরা পড়বে না ... দুঃখিত
THESorcerer

0

দুঃখিত, তবে আপনি পারবেন না বলে মনে হচ্ছে পরীক্ষার ক্ষমতার অভাব রয়েছে (উদাহরণস্বরূপ যদি আপনি * নিক্স সম্পর্কে ভুলে যান এবং এটি উইনর দিয়ে পরীক্ষা করার চেষ্টা করেন, ফলাফলটি হবে: "এই ধরণের সংরক্ষণাগারের জন্য কমান্ড সমর্থিত নয়")

আমি কীভাবে উপরের মন্তব্যে ইঙ্গিত করেছি, টার আক্ষরিক অর্থে অভ্যন্তরীণ সিআরসি তুলনা করার একটি শর্ত রয়েছে, অতএব আপনি যদি কোনও সম্পাদকের সাথে একটি টার সংরক্ষণাগারটি পরিবর্তন করেন তবে তালিকাভুক্তি এবং নিষ্কাশন কোনও ত্রুটি ছাড়াই নির্দোষ কাজ করতে পারে, তবে দূষিত ডেটা উত্তোলন করতে পারে

উপসংহারে, আমি এখানে সমাধানের আশা করে শেষ করেছি, তবে একটিও নেই, ভাগ্যক্রমে দুটি ভাল খবর রয়েছে:

খুব, খুব, খুব দুর্লভ টার আর্কাইভ রয়েছে যা অন্য প্রোগ্রামের সাথে সংকুচিত হয় না (যেমন gzip, bzip2, ইত্যাদি) সুতরাং সেই প্রোগ্রামটির একটি পরীক্ষার সমাধান হবে এবং যে লোকেরা সেগুলি সংকোচন করে না তারা বিন্দু খোঁড়া, সত্যিই ল্যাম্প

আমার ব্যক্তিগত সমস্যার জন্য, আমি ভাগ্যবান, এটি বের করার পরে, আমি কেবলমাত্র ভিতরে থাকা সমস্ত ফাইলের সিআরসি সহ একটি এমডি 5সাম ফাইল খুঁজে পেয়েছি (এমনকি যে ব্যক্তি নেটটিতে আর্কাইভ টার লাগিয়েছিলেন এবং এটি সংকোচ করতে চাননি, তিনি এখনও হতে চেয়েছিলেন যাচাই করতে সক্ষম)


-5

আপনি নিম্নলিখিত আর্গুমেন্টগুলি এখানে পাঠিয়ে এটি করতে পারেন tar:

$ tar -cvzf test.tar test_file

2
এক-লাইনের উত্তরগুলি প্রায়শই তেমন সহায়ক হয় না। আপনার উত্সকে সমর্থন করে এমন কিছু উত্স উপাদান (যেমন ডকুমেন্টেশন) অন্তর্ভুক্ত করতে আপনার পোস্টকে প্রসারিত করার বিষয়ে বিবেচনা করুন।
HalosGhost

6
-c-f('test.tar') এর মাধ্যমে ফাইল তৈরি করে । -zআর্কাইভ gzips। -vএটি ক্রিয়াপদ তৈরি করে। আমি নিশ্চিত যে এটি কোনও সঠিক সমাধান নয়।
এপিকভয়েজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.