বেসিক শেল স্ক্রিপ্টিং এবং লিনাক্স ফাইল সিস্টেমের সমস্যা সমাধানের বিষয়টি বোঝা এবং শেখা - পার্ট 10


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

নিম্নলিখিত ভিডিওটি দেখুন যা আপনাকে লিনাক্স ফাউন্ডেশন শংসাপত্র প্রোগ্রামের একটি ভূমিকা গাইড করে।

এটি বর্তমান 10 টি টিউটোরিয়াল দীর্ঘ সিরিজের শেষ নিবন্ধ (পর্ব 10)। এই নিবন্ধে আমরা লিনাক্স ফাইল সিস্টেমের বেসিক শেল স্ক্রিপ্টিং এবং সমস্যা সমাধানের দিকে মনোনিবেশ করব। দুটি বিষয়ই এলএফসিএসের শংসাপত্র পরীক্ষার জন্য প্রয়োজনীয়।

টার্মিনাল এবং শেলগুলি বোঝা

প্রথমে কয়েকটি ধারণাটি পরিষ্কার করা যাক।

  1. শেল হ'ল এমন একটি প্রোগ্রাম যা কমান্ড নেয় এবং অপারেটিং সিস্টেমটি কার্যকর করতে দেয়
  2. একটি টার্মিনাল এমন একটি প্রোগ্রাম যা শেষ ব্যবহারকারী হিসাবে শেলের সাথে ইন্টারঅ্যাক্ট করতে দেয়। টার্মিনালের একটি উদাহরণ হ'ল জিনোম টার্মিনাল, যা নীচের চিত্রে প্রদর্শিত হয়েছে

যখন আমরা প্রথম শেল শুরু করি, এটি একটি কমান্ড প্রম্পট উপস্থাপন করে (কমান্ড লাইন নামে পরিচিত), যা আমাদের জানায় যে শেলটি তার স্ট্যান্ডার্ড ইনপুট ডিভাইস, যা সাধারণত কীবোর্ড থেকে কমান্ড গ্রহণ করতে শুরু করে।

আপনি এই সিরিজের আরও একটি নিবন্ধ পড়তে চাইতে পারেন (কিছু কার্যকর কমান্ড পর্যালোচনা করার জন্য ফাইলগুলি তৈরি করতে, সম্পাদনা করতে এবং পরিচালনা করতে কমান্ডটি ব্যবহার করুন - পার্ট 1)।

লিনাক্স শেলগুলির জন্য বিভিন্ন ধরণের বিকল্প সরবরাহ করে, নিম্নলিখিতটি সর্বাধিক সাধারণ:

বাশ এর অর্থ হ'ল বোর্ন অইগেন শেল এবং এটি GNU প্রকল্পের ডিফল্ট শেল। এটি কর্ন শেল (কেএসএস) এবং সি শেল (সিএসএস) থেকে দরকারী বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে, একই সাথে বেশ কয়েকটি উন্নতি সরবরাহ করে। এটি এলএফসিএসের শংসাপত্রের আওতায় দেওয়া ডিস্ট্রিবিউশনগুলির দ্বারা ব্যবহৃত ডিফল্ট শেল এবং এটি এই শেল যা আমরা এই টিউটোরিয়ালে ব্যবহার করব।

বোর্ন শেল হ'ল প্রাচীনতম শেল এবং তাই বহু বছর ধরে অনেকগুলি ইউনিক্স-এর মতো অপারেটিং সিস্টেমের ডিফল্ট শেল।

কর্ন শেল একটি ইউনিক্স শেল যা 1980 এর দশকের গোড়ার দিকে বেল ল্যাবসে ডেভিড কর্ন দ্বারা বিকাশ করা হয়েছিল। এটি বোর্ন শেলটির সাথে পিছনে সামঞ্জস্যপূর্ণ এবং সি শেলের অনেকগুলি বৈশিষ্ট্য অন্তর্ভুক্ত করে।

শেল স্ক্রিপ্ট আর কিছুই নয় এবং পাঠ্য ফাইলের পরিবর্তে এক্সিকিউটেবল প্রোগ্রামে রূপান্তরিত হয় যা শেলের দ্বারা একের পর এক সম্পাদিত কমান্ডগুলিকে একত্রিত করে।

বেসিক শেল স্ক্রিপ্টিং

যেমন আগেই উল্লেখ করা হয়েছে, একটি শেল স্ক্রিপ্ট প্লেইন টেক্সট ফাইল হিসাবে জন্মগ্রহণ করে। সুতরাং, আমাদের পছন্দসই পাঠ্য সম্পাদক ব্যবহার করে তৈরি এবং সম্পাদনা করা যেতে পারে। আপনি vi/m (ভিআই সম্পাদক এর ব্যবহার - এই সিরিজের অংশ 2) ব্যবহার করে বিবেচনা করতে পারেন, যা আপনার সুবিধার জন্য সিনট্যাক্স হাইলাইট করে features

Myscript.sh নামে একটি ফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি টাইপ করুন এবং এন্টার টিপুন।

# vim myscript.sh

শেল স্ক্রিপ্টের একেবারে প্রথম লাইনটি অবশ্যই নীচে থাকতে হবে (এটি শেবাং নামেও পরিচিত)।

#!/bin/bash

এটি অপারেটিং সিস্টেমটিকে "দোআ " দোভাষীর নাম দেয় যা নিম্নলিখিত পাঠ্যটি চালাতে ব্যবহার করা উচিত।

এখন আমাদের আদেশগুলি যুক্ত করার সময় এসেছে। আমরা প্রতিটি কমান্ডের উদ্দেশ্য বা পুরো স্ক্রিপ্টটিও মন্তব্য যুক্ত করে স্পষ্ট করতে পারি। নোট করুন যে শেলটি সেই পাথরের চিহ্ন # (ব্যাখ্যামূলক মন্তব্য) দিয়ে শুরু করে সেই লাইনগুলিকে উপেক্ষা করে।

#!/bin/bash
echo This is Part 10 of the 10-article series about the LFCS certification
echo Today is $(date +%Y-%m-%d)

স্ক্রিপ্টটি একবার লেখা এবং সংরক্ষণ করা হয়ে গেলে, আমাদের এটি কার্যকর করা দরকার।

# chmod 755 myscript.sh

আমাদের স্ক্রিপ্টটি চালানোর আগে, আমাদের প্যাট পরিবেশ পরিবর্তনশীল সম্পর্কে কয়েকটি কথা বলতে হবে। যদি আমরা দৌড়ে যাই,

echo $PATH

কমান্ড লাইন থেকে, আমরা $PATH: এর সামগ্রীগুলি কোলোন দ্বারা পৃথক করা ডিরেক্টরিগুলির তালিকা দেখতে পাব যেগুলি আমরা যখন এক্সিকিউটেবল প্রোগ্রামের নাম লিখি তখন অনুসন্ধান করা হয়। এটিকে এনভায়রনমেন্ট ভেরিয়েবল বলা হয় কারণ এটি শেল পরিবেশের অংশ - শেল এবং তার শিশু প্রক্রিয়া শেলটি প্রথম শুরু হওয়ার পরে এটির জন্য একটি তথ্য সেট হয়ে যায়।

যখন আমরা একটি কমান্ড টাইপ করি এবং এন্টার টিপুন, শেলটি AT PATH ভেরিয়েবলের তালিকাভুক্ত সমস্ত ডিরেক্টরিতে অনুসন্ধান করে এবং পাওয়া প্রথম উদাহরণটি কার্যকর করে। আসুন একটি উদাহরণ দেখুন,

যদি একই নামের সাথে দুটি নির্বাহযোগ্য ফাইল থাকে তবে একটি /usr/স্থানীয়/বিন এবং অন্যটি /usr/বিন তে, প্রথম ডিরেক্টরিতে একটি কার্যকর করা হবে প্রথমে, অন্যটি অবহেলা করা হবে।

যদি আমরা আমাদের স্ক্রিপ্টটি $पथ ভেরিয়েবলের তালিকাভুক্ত ডিরেক্টরিগুলির মধ্যে একটিতে না সঞ্চয় করে থাকি তবে এটি কার্যকর করতে আমাদের ফাইলের নাম ./ যোগ করতে হবে। অন্যথায়, আমরা এটি নিয়মিত কমান্ডের মতোই চালাতে পারি।

# pwd
# ./myscript.sh
# cp myscript.sh ../bin
# cd ../bin
# pwd
# myscript.sh

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

if CONDITION; then 
	COMMANDS;
else
	OTHER-COMMANDS 
fi

যেখানে শর্ত নিম্নলিখিতগুলির মধ্যে একটি হতে পারে (কেবলমাত্র সর্বাধিক ঘন শর্তগুলি এখানে উদ্ধৃত করা হয়) এবং সত্যায় মূল্যায়ন যখন:

  1. [-a ফাইল] → ফাইলটি বিদ্যমান
  2. [-d ফাইল] → ফাইলটি বিদ্যমান এবং এটি একটি ডিরেক্টরি
  3. [-f ফাইল] exists ফাইলটি বিদ্যমান এবং এটি একটি নিয়মিত ফাইল
  4. [-u ফাইল] exists ফাইল বিদ্যমান এবং এর এসইউডি (সেট ব্যবহারকারী আইডি) সেট করা আছে
  5. [-g ফাইল] → ফাইলটি বিদ্যমান এবং এর এসজিআইডি বিট সেট হয়েছে
  6. [-k ফাইল] → ফাইলটি বিদ্যমান এবং এটির স্টিকি বিট সেট আছে
  7. [-r ফাইল] → ফাইলটি বিদ্যমান এবং পঠনযোগ্য
  8. [-s ফাইল] → ফাইলটি বিদ্যমান এবং খালি নেই
  9. [-w ফাইল] → ফাইলটি বিদ্যমান এবং লিখনযোগ্য
  10. [-x ফাইল] সত্য যদি ফাইল বিদ্যমান থাকে এবং কার্যকর হয়
  11. [স্ট্রিং 1 = স্ট্রিং 2] ings স্ট্রিংগুলি সমান
  12. [স্ট্রিং 1! = স্ট্রিং 2] ings স্ট্রিংগুলি সমান নয়

[ইন্ট 1 অপ্ট ইন 2] পূর্ববর্তী তালিকার অংশ হওয়া উচিত, তবে যে আইটেমগুলি অনুসরণ করে (উদাহরণস্বরূপ, -ইক -> অন্তঃ 1 ইনট 2 এর সমান হয় [) সেখানে একটি <<< শিশু "তালিকা থাকা উচিত [ ইনট 1 ইন 2 ] নিম্নলিখিত তুলনা অপারেটরগুলির মধ্যে একটি।

  1. -eq -> সত্য হয় যদি int1 int2 এর সমান হয়
  2. - এক -> সত্য যদি int1 int2 এর সমান হয় না
  3. - সমাপ্ত -> সত্য যদি int1 int2 এর চেয়ে কম হয়
  4. -le -> সত্য যদি int1 int2 এর চেয়ে কম বা সমান হয়
  5. -gt -> সত্য যদি int1 int2 এর চেয়ে বড় হয়
  6. -ge -> সত্য যদি int1 int2 এর চেয়ে বড় বা সমান হয়

এই লুপটি মানগুলির তালিকায় প্রতিটি মানের জন্য এক বা একাধিক কমান্ড কার্যকর করতে দেয়। এর বেসিক সিনট্যাক্সটি হ'ল:

for item in SEQUENCE; do 
		COMMANDS; 
done

আইটেম হ'ল একটি জেনেরিক ভেরিয়েবল যা প্রতিটি পুনরাবৃত্তির সময় SEQUENCE এ প্রতিটি মান উপস্থাপন করে।

এই লুপটি যতক্ষণ না কমান্ড কমান্ড শূন্যের (সাফল্যের সাথে) সমান একটি প্রস্থান স্থিতি দিয়ে কার্যকর করবে ততক্ষণ পুনরাবৃত্তিমূলক কমান্ডগুলির একটি সিরিজ চালানোর অনুমতি দেয়। এর বেসিক সিনট্যাক্সটি হ'ল:

while EVALUATION_COMMAND; do 
		EXECUTE_COMMANDS; 
done

যেখানে EVALUATION_COMMAND এমন কোনও কমান্ড (গুলি) হতে পারে যা কোনও সাফল্য ( 0 ) বা ব্যর্থতা ( 0) স্থিতি এবং EXECUTE_COMMANDS সহ প্রস্থান করতে পারে can অন্যান্য নেস্টেড লুপগুলি সহ যে কোনও প্রোগ্রাম, স্ক্রিপ্ট বা শেল কনস্ট্রাক্ট হতে পারে।

আমরা নীচের উদাহরণ সহ ইফ কনস্ট্রাক্ট এবং লুপের ব্যবহার প্রদর্শন করব rate

আসুন সে পরিষেবাগুলির তালিকা সহ একটি ফাইল তৈরি করি যা আমরা এক নজরে পর্যবেক্ষণ করতে চাই।

# cat myservices.txt

sshd
mariadb
httpd
crond
firewalld

আমাদের শেল স্ক্রিপ্টটি দেখতে হবে।

#!/bin/bash

# This script iterates over a list of services and
# is used to determine whether they are running or not.

for service in $(cat myservices.txt); do
    	systemctl status $service | grep --quiet "running"
    	if [ $? -eq 0 ]; then
            	echo $service "is [ACTIVE]"
    	else
            	echo $service "is [INACTIVE or NOT INSTALLED]"
    	fi
done

1)। লুপটি একবারে myservices.txt লিস্টের একটি উপাদান ফাইল পড়ে। এই একক উপাদানটি জেনেরিক ভেরিয়েবল নামের পরিষেবা দ্বারা চিহ্নিত করা হয়। তালিকাটি আউটপুট দিয়ে পপুলেশন করা হয়,

# cat myservices.txt

2)। উপরের কমান্ডটি বন্ধনীগুলিতে আবদ্ধ এবং ডলারের চিহ্ন দ্বারা এর আগে এটি চিহ্নিত করা যায় যে আমরা যে তালিকাটি পুনরাবৃত্তি করব তার তালিকা তৈরি করার জন্য এটি মূল্যায়ন করা উচিত।

3)। তালিকাভুক্ত প্রতিটি উপাদানের জন্য (যার অর্থ পরিষেবার পরিবর্তনশীল প্রতিটি উদাহরণ), নিম্নলিখিত কমান্ডটি কার্যকর করা হবে।

# systemctl status $service | grep --quiet "running"

এবার আমাদের জেনেরিক ভেরিয়েবলের আগে যা ডাবল চিহ্নের সাহায্যে তালিকা র প্রতিটি উপাদানকে উপস্থাপন করতে হবে এটি ভেরিয়েবল হিসাবে চিহ্নিত করতে হবে এবং সুতরাং প্রতিটি পুনরুক্তিতে এর মান ব্যবহার করা উচিত। আউটপুটটি তখন গ্রেপ-এ পাইপ করা হয়।

গ্রেট পতাকাটি গ্রেপ স্ক্রিনে লাইনটি যেখানে চলমান শব্দটি প্রদর্শিত হবে সেখানে প্রদর্শিত হতে বাধা দিতে ব্যবহৃত হয়। যখন এটি ঘটে, উপরের কমান্ডটি 0 (যদি কনস্ট্রাক্টে by? উপস্থাপন করে) এর একটি প্রস্থান স্থিতি ফিরে আসে, সুতরাং পরিষেবাটি চলছে কিনা তা যাচাই করে।

0 এর চেয়ে আলাদা একটি প্রস্থান স্থিতি ( শব্দ চলমান অর্থ সিস্টেমটেক্ট স্ট্যাটাস $পরিষেবা এর আউটপুটে পাওয়া যায়নি) ইঙ্গিত দেয় যে পরিষেবাটি নেই চলমান

এমনকি লুপের জন্য প্রবেশ করার চেষ্টা করার আগে আমরা আরও এক ধাপ এগিয়ে গিয়ে myservices.txt এর অস্তিত্ব পরীক্ষা করতে পারি।

#!/bin/bash

# This script iterates over a list of services and
# is used to determine whether they are running or not.

if [ -f myservices.txt ]; then
    	for service in $(cat myservices.txt); do
            	systemctl status $service | grep --quiet "running"
            	if [ $? -eq 0 ]; then
                    	echo $service "is [ACTIVE]"
            	else
                    	echo $service "is [INACTIVE or NOT INSTALLED]"
            	fi
    	done
else
    	echo "myservices.txt is missing"
fi

আপনি কোনও পাঠ্য ফাইলে হোস্টের একটি তালিকা বজায় রাখতে পারেন এবং এখনই নির্ধারণ করতে স্ক্রিপ্ট ব্যবহার করতে পারেন এবং সেগুলি পিঙ্গযোগ্য কিনা তা ( মাইহোস্ট এর বিষয়বস্তুগুলি প্রতিস্থাপনের জন্য নির্দ্বিধায় এবং নিজের জন্য চেষ্টা করতে পারেন) )।

পঠিত শেল অন্তর্নির্মিত কমান্ডটি লুপটি লাইন দ্বারা মাইহোস্ট লাইন পড়তে বলে এবং প্রতিটি লাইনের সামগ্রীটি ভেরিয়েবল হোস্টকে বরাদ্দ করে, যা পিং কমান্ডে প্রেরণ করা হয়।

#!/bin/bash

# This script is used to demonstrate the use of a while loop

while read host; do
    	ping -c 2 $host
done < myhosts

আরও পড়ুন :

  1. শেল স্ক্রিপ্টিং শিখুন: Newbies থেকে সিস্টেম প্রশাসকের কাছে একটি গাইড
  2. শেল প্রোগ্রামিং শেখার জন্য 5 টি শেল স্ক্রিপ্ট

ফাইল সিস্টেম সমস্যা সমাধান

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

তদ্ব্যতীত, প্রতিটি সময় সিস্টেম বুটের সময় বুট হয়, এটি সর্বদা ফাইল সিস্টেমগুলির মাউন্ট করার আগে অখণ্ডতা পরীক্ষা করে। উভয় ক্ষেত্রেই fsck (" ফাইল সিস্টেম চেক ") নামের একটি সরঞ্জাম ব্যবহার করে এটি করা হয়।

fsck কেবল ফাইল সিস্টেমের অখণ্ডতা পরীক্ষা করবে না, তবে এটি করার নির্দেশ দিলে দুর্নীতিগ্রস্থ ফাইল সিস্টেমগুলি মেরামত করারও চেষ্টা করবে। ক্ষতির তীব্রতার উপর নির্ভর করে, fsck সফল হতে পারে বা নাও পারে; এটি হয়ে গেলে, ফাইলগুলির উদ্ধারকৃত অংশগুলি প্রতিটি ফাইল সিস্টেমের মূলের মধ্যে অবস্থিত হারিয়ে যাওয়া + পাওয়া ডিরেক্টরিতে স্থাপন করা হয়।

সর্বশেষে তবে কমপক্ষে, আমাদের অবশ্যই লক্ষ্য রাখতে হবে যে অপারেটিং সিস্টেমটি যখন এখনও লিখছে তখন আমরা কোনও USB ড্রাইভ সরিয়ে দেওয়ার চেষ্টা করি এবং এমনকি হার্ডওয়্যার ক্ষতি হতে পারে।

Fsck এর মূল সিনট্যাক্সটি নিম্নরূপ:

# fsck [options] filesystem

Fsck সহ একটি ফাইল সিস্টেম পরীক্ষা করার জন্য, আমাদের প্রথমে এটি আনমাউন্ট করতে হবে।

# mount | grep sdg1
# umount /mnt
# fsck -y /dev/sdg1

-y পতাকা ছাড়াও, আমরা কোনও প্রশ্ন জিজ্ঞাসা না করে স্বয়ংক্রিয়ভাবে ফাইল সিস্টেমগুলি মেরামত করতে -a বিকল্পটি ব্যবহার করতে পারি এবং ফাইল সিস্টেমটি পরিষ্কার দেখা গেলেও চেকটিকে বাধ্য করতে পারি।

# fsck -af /dev/sdg1

আমরা যদি কেবলমাত্র কী ভুল তা অনুসন্ধান করতে আগ্রহী (যদি কিছু সময়ের জন্য কিছু ঠিক করার চেষ্টা না করে) এনএস বিকল্পটি দিয়ে আমরা fsck চালাতে পারি, যা ফাইল সিস্টেমকে স্ট্যান্ডার্ড আউটপুট হিসাবে আউটপুট দেবে will

# fsck -n /dev/sdg1

Fsck এর আউটপুটে ত্রুটি বার্তাগুলির উপর নির্ভর করে আমরা জানব যে আমরা নিজেরাই সমস্যাটি সমাধান করার চেষ্টা করতে পারি বা হার্ডওয়্যারটিতে আরও চেক করার জন্য ইঞ্জিনিয়ারিং দলগুলিতে এটি বাড়িয়ে তুলতে পারি কিনা।

সারসংক্ষেপ

আমরা এই 10 টি আর্টিকেল সিরিজের শেষে এসে পৌঁছেছি যেখানে এলএফসিএস পরীক্ষায় পাস করার জন্য প্রয়োজনীয় ডোমেন দক্ষতাগুলি কভার করার চেষ্টা করেছি।

সুস্পষ্ট কারণে, এই বিষয়গুলির প্রতিটি একক দিক কোনও একক টিউটোরিয়ালে আবরণ করা সম্ভব নয় এবং সে কারণেই আমরা আশা করি যে এই নিবন্ধগুলি আপনাকে নতুন জিনিস নিজেই চেষ্টা করতে এবং শেখা চালিয়ে যাওয়ার জন্য আপনাকে সঠিক ট্র্যাকের উপরে ফেলেছে।

আপনার যদি কোনও প্রশ্ন বা মন্তব্য থাকে তবে সেগুলি সর্বদা স্বাগত - তাই নীচের ফর্মের মাধ্যমে আমাদের একটি লাইন ফেলে দিতে দ্বিধা করবেন না!