এটি সম্ভব নয়, যেহেতু ফর্ম্যাটটি সাধারণত প্ল্যাটফর্মের libc তে গভীরভাবে কোড করা হয়। তবে এটি হল একটি OS এই বৈশিষ্ট্যটি যোগ করে, এটি একটি অ ক্রস-প্ল্যাটফর্ম সমাধান উপার্জন চিন্তনীয়।
বিকল্পভাবে, আপনি স্বয়ংক্রিয়ভাবে আপনার হোস্ট ফাইলটিতে একটি নির্দিষ্ট ব্লক আপডেট করতে পারেন। এটি বিশেষত সহায়ক যদি আপনার কোনও স্ক্রিপ্ট থাকে যা কোনও নির্দিষ্ট প্রকল্পের জন্য হোস্ট এন্ট্রিগুলিকে গতিশীলভাবে আউটপুট করে দেয় (সম্ভবত আইপি পরিবর্তন করে)।
এখানে একটি উদাহরণ রয়েছে: আপনি Terrafor রাজ্য থেকে হোস্ট তৈরি করতে চান terraform-inventory
।
প্রাসঙ্গিক ইনভেন্টরি আউটপুট (উদাহরণস্বরূপ, প্রতিটি হোস্টের গ্রুপগুলিতে একটি ইসি 2 "নাম" ট্যাগ ম্যাপিং):
$ terraform-inventory --list | jq 'with_entries(select(.key | match("^name_")))'
{
"name_myhost-a": [
"10.101.118.131"
],
"name_myhost-b": [
"10.101.111.189"
]
}
print-updated-hosts-entries.sh
#!/bin/sh
exec terraform-inventory --list | \
jq -r 'to_entries |
map(select(.key | match("^name_"))) |
map(.value[0] + " " + .key[5:]) |
join("\n")'
স্ক্রিপ্ট আউটপুট:
./print-updated-hosts-entries.sh
10.101.118.131 myhost-a
10.101.111.189 myhost-b
আর কমান্ড লাইনে একটি চিহ্নিত ব্লক আপডেট করার জন্য /etc/hosts
স্ক্রিপ্ট আউটপুট :
sudo cp /etc/hosts "/etc/hosts.bak.$(date +%Y%m%d%H%M%S)" && \
(
sed -n '1,/^# MYMARKER BEGIN/{/^# MYMARKER BEGIN/!p;}' /etc/hosts; \
echo "# MYMARKER BEGIN"; \
./print-updated-hosts-entries.sh; \
echo "# MYMARKER END"; \
sed -n '/^# MYMARKER END/,${/^# MYMARKER END/!p;}' /etc/hosts; \
) | \
sudo tee /etc/hosts.new | \
sed -n '/^# MYMARKER BEGIN/,/^# MYMARKER END/p' && \
sudo mv /etc/hosts.new /etc/hosts
ব্যাখ্যা:
- প্রথম লাইন স্পষ্টতই একটি ব্যাকআপ তৈরি করে
- প্রথম বন্ধনীর
sed
শুরুতে এবং শেষের পরে যথাক্রমে প্রথম লাইনের মুদ্রণের জন্য প্রথম বন্ধনীগুলিতে সাবশেলের দুটি কল রয়েছে । স্ক্রিপ্ট আউটপুট those লাইনের মধ্যে রেখে আমরা যে কোনও ক্ষেত্রেই মার্কারগুলি সন্নিবেশ করি। এমনকি স্ক্রিপ্টটি ব্যর্থ হলেও আমাদের এখনও সামগ্রিক সামগ্রী /etc/hosts
(এবং একটি বিপর্যয়কর দৃশ্যে ব্যাকআপ) রাখতে হবে।
sudo tee /etc/hosts.new
পাইপযুক্ত সামগ্রীটি একটি নতুন ফাইলে লেখায়
sed -n '/^# MYMARKER BEGIN/,/^# MYMARKER END/p'
সুবিধার জন্য আপডেট ব্লক মুদ্রণ
sudo mv /etc/hosts.new /etc/hosts
নতুন ফাইলটি জায়গায় স্থানান্তরিত করে। এটি অবশ্যই একটি পৃথক পদক্ষেপে করা উচিত কারণ পাইপ বাফারটি যদি স্থানের বাইরে চলে যায় tee /etc/hosts
তবে বিদ্যমান সামগ্রীটি এখনও পড়া অবস্থায় ফাইলটি লেখা শুরু করবে writing