আমি কীভাবে নিম্নলিখিত প্রয়োজনীয়তার সাথে ইউনিক্সে একটি স্ক্রিপ্ট তৈরি করতে পারি? [বন্ধ]


-2

/root/backup.shডাব্লু 01 তে নামযুক্ত একটি স্ক্রিপ্ট যা / হোমের সামগ্রীর ব্যাকআপ নেবে

স্ক্রিপ্টটি করবে:

  • /share/<YYYY><MM><DD>_w01.tarযেখানে নামের একটি টার আর্কাইভ তৈরি করুন
    • YYYY বর্তমান বছরের প্রতিনিধিত্ব করে (যেমন ২০১৪)
    • এমএম বর্তমান মাসের প্রতিনিধিত্ব করে (যেমন ১১)
    • ডিডি মাসের বর্তমান দিনের প্রতিনিধিত্ব করে (যেমন 22)
  • সাফল্য এবং ত্রুটিগুলিতে লগ করুন /tmp/backup.log
  • কোনও ত্রুটির সম্মুখীন হলে একটি শূন্য-বিহীন রিটার্ন কোড সহ প্রস্থান করুন

2
এসইউতে আপনাকে স্বাগতম! আমরা কোনও স্ক্রিপ্ট লেখার পরিষেবা নই। আমরা আপনার স্ক্রিপ্টিং-এ নির্দিষ্ট সমস্যাগুলির সাথে আপনাকে সহায়তা করতে পারি এবং করব; তবে এটি করার জন্য আমাদের এখন পর্যন্ত কী পেয়েছে এবং স্ক্রিপ্টটি বাস্তবায়নের সময় আপনি কোথায় আটকে যাচ্ছেন তা জানতে হবে।
ʜιᴇcʜιᴇ007

তার জন্য ধন্যবাদ. আসলে মুল বক্তব্যটি হ'ল এটি আসলে যা চাইছে তা বোঝার জন্য আমার খুব কষ্ট হচ্ছে। এজন্য আমি এখানে আমাকে একটি স্ক্রিপ্ট লিখতে বলছিলাম যাতে আমি বুঝতে পারি এবং নিজে থেকে অন্য স্ক্রিপ্টগুলি লিখতে পারি। # Ƭᴇcʜιᴇ007
ধ্রুমিত প্যাটেল

"এটি আসলে কী চাচ্ছে তা বোঝার জন্য আমার খুব কষ্ট হচ্ছে" " আপনার প্রশ্নে আমারও একই সমস্যা হচ্ছে। :) এই বাক্যে "এটি" কী? কিভাবে স্ক্রিপ্ট লিখতে শেখার জন্য, সেখানে সম্পদের একটি টন অনলাইন যে জন্য মতো, এই এক , এবং এই এক , উদাহরণস্বরূপ।
ʜιᴇcʜιᴇ007

হ্যাঁ, আমি জানি ... তবে আমি এই বিশেষ স্ক্রিপ্টটি নিয়ে কথা বলছি। স্ক্রিপ্টটি ওয়ার্কস্টেশনে হোমের বিষয়বস্তুগুলি ব্যাক আপ করার বিষয়ে। সম্ভব হলে আপনি কি আমাকে একটি হেডস্টার্ট দিতে পারেন?
ধ্রুমিত প্যাটেল

উত্তর:


4

স্ক্রিপ্টটি আপনার একসাথে রাখার যে প্রধান কারণগুলি হবেন তা হ'ল:

  • ফাইল নামকরণ (যেমন আপনার টার্বল নামে বর্তমান তারিখটি ব্যবহার করা):
    অন্য উত্তরে যেমন বলা হয়েছে, man dateআপনাকে কিছুটা সহায়তা দেবে, ফর্ম্যাট বিভাগটিতে ফোকাস করুন (যেমন date +%Y%m...)

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

    • echo "here's a command" > /tmp/backup.log /tmp/backup.log এর সামগ্রীতে ওভাররাইট করা হবে এবং তার জায়গায় স্ট্রিং "এখানে একটি আদেশ আছে" লাগিয়ে দেবে।
    • echo "here's a command" >> /tmp/backup.log যে কোনও বিদ্যমান ডেটা /tmp/backup.log এ রাখবে এবং এর শেষে "এখানে একটি আদেশ আছে" যুক্ত করবে।
    • tar -cvf /share/foo.tar /home > /tmp/backup.log লগ-এ কেবল স্টটআউট (যেমন স্বাভাবিক 'আমি এই ফাইলগুলি আটকিয়ে রেখেছি) রাখব তবে কোনও ত্রুটি ধরা পড়বে না।
    • tar -cvf /share/foo.tar /home 2> /tmp/backup.log লগটিতে কেবল এসটিডিআরআর (কেবলমাত্র ত্রুটিগুলি) লাগিয়ে দেবে।
    • tar -cvf /share/foo.tar /home > /tmp/backup.log 2>&1 লগটিতে STDOUT এবং STDERR উভয়ই রাখবে।

    আপনার লগ ইন তথ্য সঠিক সেট তৈরি করতে এগুলি একত্রিত করুন।

  • ত্রুটি পরিচালনার ক্ষেত্রে (উদাহরণস্বরূপ, যদি টার একটি ত্রুটি ফিরিয়ে দেয় তবে কী করবেন:
    কমান্ডের ত্রুটিগুলির প্রতিক্রিয়া জানানোর দ্রুত এবং নোংরা উপায়টি || command_to_run_if_errorআপনার কমান্ডের পরে যুক্ত করা This এটি মূলত "এই কমান্ডটি চালিয়ে যাওয়া পর্যন্ত ক্রমানুসারে চালানো হয়"), আপনি এটি করতে পারেন ব্যবহার করুন && command_to_run_if_successযা বলার মতো হয় "এই বিধিগুলি কার্যকর না হওয়া পর্যন্ত এই আদেশগুলি চালান"।

    • command1 || command2 কমান্ড 1 চালাবে এবং এটি ব্যর্থ হলে (শূন্য-বহির্গমন কোড) কমান্ড 2 চালাবে। এটি সফল হলে কমান্ড 2 চালানো হবে না।
    • command1 && command2 কমান্ড 1 চালাবে এবং এটি ব্যর্থ হলে, বন্ধ হয়ে যাবে এবং কমান্ড 2 চালাবে না। কমান্ড 1 সফল হলে কেবল কমান্ড 2 চালানো হবে।
    • ত্রুটিগুলির আরও একটি সম্পূর্ণ হ্যান্ডলার ব্যবহার করে তৈরি করা যেতে পারে if .. then .. else .. fi

    যেমন
    echo "About to run command1" >> logfile.log
    if command1 >> logfile.log
    then
    echo "All went well" >> logfile.log
    else
    echo "Something went wrong! ABORTING" >> logfile.log
    run_some_cleanup_command
    exit 1
    fi

    প্রতিটি স্ক্রিনের ব্যর্থতার ক্ষেত্রে কী করা উচিত তা আপনার স্ক্রিপ্টটি শিখাতে এইগুলিকে একত্রিত করুন।

মনে রাখতে হবে অন্য কিছু বিষয়:

  • আপনি নিজের টার্বল তৈরির আগে ফিট করার জন্য / ভাগ করার জায়গা আছে কিনা তা পরীক্ষা করতে চান? এটিতে কত কেবি ব্যাকআপ নিতে হবে তা দেখার জন্য
    বিবেচনা করুন du -sk /homeএবং এটিকে ফাঁকা জায়গার পরিমাণের সাথে তুলনা করুন df -k /share। আপনি শেল কমান্ডগুলি [ $space_on_share -lt $data_in_home ] || exit 1আপনার সমস্ত ফাঁকা জায়গা ব্যবহার না করে বাতিল করতে চান (আপনি সম্ভবত এটি বাইরে বেরিয়ে আসার পরিবর্তে কোনও সহায়ক কিছুতে লগ করতে চান)।

  • আপনি কি / বাড়িতে সমস্ত কিছু ব্যাক আপ করতে চান ?
    স্থান বাঁচাতে বা গোপনীয়তা রক্ষার জন্য বিষয়গুলির একটি তালিকা থাকার কথা বিবেচনা করুন।

  • আপনি স্থান বাঁচাতে সংক্ষেপণ ব্যবহার বিবেচনা করেছেন?
    টারের কয়েকটি সংস্করণ -z জিজিপ সংক্ষেপণের জন্য পতাকাটি গ্রহণ করে অথবা আপনি STDOUT ফাইলের নাম হিসাবে নির্দিষ্ট করতে পারেন তারপরে gzip ( tar -cf - /home | gzip -c > /share/foo.tar.gz) এর মাধ্যমে আউটপুটটি পাইপ করতে পারেন


2

যে কোনও স্ক্রিপ্টিং সমস্যা শুরু করার মূল চাবিকাঠিটি এটি ছোট ছোট টুকরো টুকরো করা। আরও ফাংশন যুক্ত করার আগে প্রথম ছোট ছোট টুকরা কোড এবং পরীক্ষা করুন।

উদাহরণ স্বরূপ

ধাপ 1

আপনি কোনও স্ক্রিপ্টের কব্জি করে শুরু করতে পারেন যা "ব্যাকআপ শুরু করা" মুদ্রণ করে এবং অন্য কিছুই করে না।

ধাপ ২

একবার এটি dateশেল ভেরিয়েবলের (যেমন $today) কমান্ডের আউটপুট বরাদ্দ করার জন্য এটি সংশোধন করে এবং সেই ভেরিয়েবলের বিষয়বস্তু মুদ্রণ করে।

ধাপ 3

যখন পদক্ষেপ 2 সম্পূর্ণরূপে পরীক্ষিত এবং কাজ করা হচ্ছে, ব্রাউজ করুন man dateএবং দেখুন "<YYYY> <mm> <DD>" আউটপুট ফর্ম্যাটটি পেতে আউটপুটটি কীভাবে পরিবর্তন করবেন।

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

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