প্রফেশনাল ডেভঅপস ইঞ্জিনিয়ারিং রোডম্যাপ
লিনাক্স এবং অটোমেশন
উন্নত ফাইল পারমিশন এবং ম্যানেজমেন্ট
লিনাক্সে ফাইলের পারমিশন শুধু rwx (read, write, execute) এর মধ্যে সীমাবদ্ধ নয়। কিছু বিশেষ পারমিশন রয়েছে যা সিস্টেম অ্যাডমিনিস্ট্রেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলো ফাইলের আচরণ পরিবর্তন করে দেয় এবং নির্দিষ্ট পরিস্থিতিতে অতিরিক্ত ক্ষমতা প্রদান করে।
এই বিশেষ পারমিশনগুলো হলো
setuid,setgid, এবংsticky bit। এগুলো ব্যবহার করে আপনি সাধারণ ব্যবহারকারীকে সাময়িকভাবে ফাইলের মালিকের ক্ষমতা দিতে পারেন।
| পারমিশন | অক্টাল মান | বর্ণনা |
|---|---|---|
setuid | 4000 | যখন কোনো ব্যবহারকারী এই পারমিশনযুক্ত ফাইলটি এক্সিকিউট করে, তখন ফাইলটি মালিকের (owner) পারমিশন নিয়ে রান হয়, ব্যবহারকারীর নিজের পারমিশন নিয়ে নয়। যেমন, passwd কমান্ড। |
setgid | 2000 | এটি setuid-এর মতোই, তবে ফাইলটি গ্রুপের (group) পারমিশন নিয়ে রান হয়। ডিরেক্টরিতে প্রয়োগ করলে, সেই ডিরেক্টরিতে তৈরি হওয়া সব নতুন ফাইল ও সাব-ডিরেক্টরি প্যারেন্ট ডিরেক্টরির গ্রুপ মালিকানা পায়। |
sticky bit | 1000 | যখন একটি ডিরেক্টরিতে sticky bit সেট করা থাকে, তখন শুধুমাত্র ফাইলের মালিক, ডিরেক্টরীর মালিক অথবা রুট (root) ব্যবহারকারী সেই ফাইলটি ডিলিট বা রিনেম করতে পারে। /tmp ডিরেক্টরিটি এর একটি ভালো উদাহরণ। |
এই পারমিশনগুলো সেট করার জন্য chmod কমান্ড ব্যবহার করা হয়। যেমন, একটি ফাইলে setuid সেট করতে হলে কমান্ডটি হবে:
chmod u+s filename
অথবা অক্টাল নোটেশন ব্যবহার করে:
chmod 4755 filename
এখানে 4 হলো setuid বিট, এবং 755 হলো সাধারণ rwx পারমিশন।
অ্যাডভান্সড ব্যাশ স্ক্রিপ্টিং
সাধারণ কমান্ড চালানোর বাইরেও ব্যাশ স্ক্রিপ্টিং অনেক শক্তিশালী। ভেরিয়েবল, লুপ এবং ফাংশন ব্যবহার করে জটিল এবং পুনরাবৃত্তিমূলক কাজগুলোকে স্বয়ংক্রিয় করা যায়। একটি ভালো স্ক্রিপ্ট আপনার ঘণ্টার পর ঘণ্টা সময় বাঁচাতে পারে।
ফাংশন ব্যবহার করলে কোড পুনরায় ব্যবহার করা যায় এবং স্ক্রিপ্টটি আরও পরিচ্ছন্ন ও পাঠযোগ্য হয়। ভেরিয়েবল ডেটা সংরক্ষণ করে এবং লুপ একটি নির্দিষ্ট কাজ বারবার করতে সাহায্য করে।
#!/bin/bash
# ডিরেক্টরির পাথ একটি ভেরিয়েবলে সংরক্ষণ করা
BACKUP_DIR="/mnt/backups/"
SOURCE_DIR="/var/www/html"
# একটি ফাংশন যা ব্যাকআপের বার্তা দেখাবে
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] - $1"
}
log_message "ব্যাকআপ প্রক্রিয়া শুরু হচ্ছে..."
# নির্দিষ্ট ডিরেক্টরিতে থাকা প্রতিটি ফাইলের জন্য লুপ চালানো
for file in $(ls $SOURCE_DIR); do
if [ -f "$SOURCE_DIR/$file" ]; then
log_message "'$file' ফাইলটি কপি করা হচ্ছে..."
cp "$SOURCE_DIR/$file" "$BACKUP_DIR"
fi
done
log_message "ব্যাকআপ সম্পন্ন হয়েছে।"
এই স্ক্রিপ্টটি /var/www/html ডিরেক্টরির সব ফাইল /mnt/backups/-এ কপি করে। এখানে log_message নামে একটি ফাংশন তৈরি করা হয়েছে যা সময়সহ বার্তা দেখায়। for লুপ ব্যবহার করে প্রতিটি ফাইল কপি করা হয়েছে।
টেক্সট প্রসেসিং টুলস: sed এবং awk
সার্ভার ম্যানেজমেন্টের একটি বড় অংশ হলো লগ ফাইল বা কনফিগারেশন ফাইল নিয়ে কাজ করা। sed (Stream Editor) এবং awk দুটি শক্তিশালী কমান্ড-লাইন টুল যা টেক্সট ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
sed
other
একটি শক্তিশালী কমান্ড-লাইন ইউটিলিটি যা টেক্সট ফাইলের উপর বিভিন্ন অপারেশন যেমন সার্চ, রিপ্লেস, ইনসার্ট এবং ডিলিট করতে পারে। এটি মূলত ফাইল এডিট না করে ডেটা স্ট্রিমের উপর কাজ করে।
sed-এর সবচেয়ে সাধারণ ব্যবহার হলো টেক্সট প্রতিস্থাপন করা। যেমন, একটি কনফিগারেশন ফাইলে DEBUG=true-কে DEBUG=false-এ পরিবর্তন করতে:
sed -i 's/DEBUG=true/DEBUG=false/g' /etc/app/config.conf
অন্যদিকে, awk কলামভিত্তিক ডেটা প্রসেস করার জন্য অসাধারণ। এটি প্রতিটি লাইনকে ফিল্ডে বিভক্ত করে এবং সেই ফিল্ডগুলোর উপর ভিত্তি করে কাজ করতে পারে। যেমন, একটি লগ ফাইল থেকে শুধুমাত্র আইপি অ্যাড্রেস এবং HTTP স্ট্যাটাস কোড বের করতে awk ব্যবহার করা যেতে পারে।
# access.log ফাইল থেকে প্রথম (IP) এবং নবম (Status Code) কলাম প্রিন্ট করা
awk '{print $1, $9}' /var/log/apache2/access.log
ক্রন জব দিয়ে অটোমেশন
ক্রন (Cron) একটি টাইম-বেসড জব শিডিউলার। এর মাধ্যমে নির্দিষ্ট সময়ে বা নির্দিষ্ট বিরতিতে কমান্ড বা স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে চালানো যায়। সিস্টেম অ্যাডমিনিস্ট্রেটররা নিয়মিত কাজগুলো, যেমন—ব্যাকআপ, সিস্টেম আপডেট বা লগ ফাইল পরিষ্কার করার জন্য ক্রন ব্যবহার করেন।
প্রতিটি ব্যবহারকারীর নিজস্ব ক্রনট্যাব (Crontab) বা ক্রন টেবিল থাকে, যেখানে তারা তাদের কাজগুলো শিডিউল করে। crontab -e কমান্ড দিয়ে এই ফাইলটি এডিট করা যায়।
| ফিল্ড | অনুমোদিত মান | বর্ণনা |
|---|---|---|
| মিনিট | 0-59 | কোন মিনিটে কমান্ডটি রান হবে। |
| ঘণ্টা | 0-23 | কোন ঘণ্টায় (24-ঘণ্টার ফরম্যাটে) রান হবে। |
| দিনের তারিখ | 1-31 | মাসের কোন তারিখে রান হবে। |
| মাস | 1-12 | কোন মাসে রান হবে। |
| সপ্তাহের দিন | 0-7 (0 এবং 7 উভয়ই রবিবার) | সপ্তাহের কোন দিনে রান হবে। |
| কমান্ড | যেকোনো কমান্ড বা স্ক্রিপ্টের পাথ | যে কমান্ডটি রান করতে হবে। |
উদাহরণস্বরূপ, প্রতিদিন রাত ২:৩০ মিনিটে একটি ব্যাকআপ স্ক্রিপ্ট চালানোর জন্য ক্রনট্যাবে নিচের লাইনটি যোগ করতে হবে:
30 2 * * * /home/user/scripts/backup.sh
এখানে * মানে "প্রতি"। তাই * * * মানে প্রতি মাসের প্রতি দিনের প্রতি ঘণ্টায়।
স্ক্রিপ্টে এরর হ্যান্ডলিং ও লগিং
প্রোডাকশন এনভায়রনমেন্টে চালানো স্ক্রিপ্টগুলোতে এরর হ্যান্ডলিং এবং লগিং থাকা আবশ্যক। যদি কোনো কমান্ড ফেইল করে, তাহলে স্ক্রিপ্টটি যাতে থেমে যায় এবং ভুল বার্তা লগ করে, তা নিশ্চিত করা জরুরি।
set -e কমান্ডটি ব্যাশ স্ক্রিপ্টের শুরুতে ব্যবহার করলে, যেকোনো কমান্ড নন-জিরো এক্সিট কোড দিয়ে ফেইল করার সাথে সাথেই স্ক্রিপ্টটি বন্ধ হয়ে যাবে। এটি অপ্রত্যাশিত আচরণ থেকে সিস্টেমকে রক্ষা করে।
set -o pipefailব্যবহার করলে পাইপলাইনের যেকোনো কমান্ড ফেইল করলেই পুরো পাইপলাইনটি ফেইল হিসেবে গণ্য হবে।
লগিংয়ের জন্য, স্ক্রিপ্টের আউটপুট একটি ফাইলে রিডাইরেক্ট করা একটি ভালো অভ্যাস। এটি ডিবাগিং এবং অডিটিংয়ের জন্য সাহায্য করে। >> অপারেটর ব্যবহার করে আউটপুট একটি ফাইলের শেষে যোগ করা হয়, এবং 2>&1 দিয়ে স্ট্যান্ডার্ড এরর (stderr) এবং স্ট্যান্ডার্ড আউটপুট (stdout) উভয়কেই একই ফাইলে রিডাইরেক্ট করা হয়।
নিচে একটি স্বয়ংক্রিয় ডিস্ক ইউসেজ অ্যালার্ট স্ক্রিপ্টের উদাহরণ দেওয়া হলো, যেখানে এরর হ্যান্ডলিং এবং লগিং ব্যবহার করা হয়েছে:
#!/bin/bash
# কোনো কমান্ড ফেইল করলে স্ক্রিপ্ট বন্ধ করে দাও
set -e
# লগ ফাইল এবং অন্যান্য ভেরিয়েবল
LOG_FILE="/var/log/disk_usage_alert.log"
THRESHOLD=90 # পার্সেন্টেজ
ADMIN_EMAIL="admin@example.com"
# লগ করার জন্য ফাংশন
log() {
echo "$(date '+%F %T') - $1" >> "$LOG_FILE"
}
# মূল পার্টিশনের ব্যবহার চেক করা
usage=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
log "বর্তমান ডিস্কের ব্যবহার: $usage%"
if [ "$usage" -gt "$THRESHOLD" ]; then
log "সতর্কবার্তা: ডিস্কের ব্যবহার থ্রেশহোল্ড অতিক্রম করেছে!"
# অ্যাডমিনকে ইমেল পাঠানোর কমান্ড
echo "ডিস্কের ব্যবহার $usage% এ পৌঁছেছে।" | mail -s "ডিস্ক ইউসেজ অ্যালার্ট" "$ADMIN_EMAIL"
fi
log "চেক সম্পন্ন হয়েছে।"
এই স্ক্রিপ্টটি ক্রন জবের মাধ্যমে প্রতিদিন একবার চালানো যেতে পারে। এটি ডিস্কের ব্যবহার পরীক্ষা করে এবং একটি নির্দিষ্ট সীমার বেশি হলে অ্যাডমিনকে ইমেল পাঠায়। প্রতিটি ধাপের তথ্য একটি লগ ফাইলে রেকর্ড করা হয়।
এখন কিছু প্রশ্ন সমাধান করে আপনার জ্ঞান পরীক্ষা করা যাক।
chmod 4755 filename কমান্ডটি কী কাজ করে?
ব্যাশ স্ক্রিপ্টিংয়ে ফাংশন ব্যবহার করার প্রধান সুবিধা কী?
এই উন্নত ধারণাগুলো আয়ত্ত করার মাধ্যমে আপনি লিনাক্স সিস্টেমকে আরও কার্যকরভাবে পরিচালনা করতে এবং জটিল কাজগুলোকে স্বয়ংক্রিয় করতে পারবেন।