/ ইত্যাদি / হোস্ট ফাইল অন্য কনফিগারেশন ফাইল পড়ুন


37

/etc/hostsএটির হোস্টগুলির তালিকার জন্য আমি অন্য কনফিগারেশন ফাইলটিকে রেফারেন্স করতে ফাইলটি কীভাবে পেতে পারি ?

উদাহরণ /etc/hosts:

 ## My Hosts
 127.0.0.1   localhost
 255.255.255.255 broadcasthost

 #Other Configurations
 <Link to /myPath/to/MyConfig/ConfigFile.txt>

 #Other Addresses
 3.3.3.3 MyAwesomeDomain.com
 4.4.4.4 SomeplaceIWantToGoTo.com

ConfigFile.txt

##My additional Hosts
1.1.1.1 SomeLocation.com
2.2.2.2 AnotherLocation.com

/etc/hostsকনফিগার ফাইল.টেক্সট লোড হবে এমন ফাইলটিতে আমি কীভাবে একটি লিঙ্ক / রেফারেন্স যুক্ত করব?

উত্তর:


39

আপনি পারবেন না। এর ফর্ম্যাটটি /etc/hostsবেশ সহজ এবং অতিরিক্ত ফাইলগুলি সহ সমর্থন করে না।

পরিবর্তে আপনি ব্যবহার করতে পারেন এমন একটি দম্পতি রয়েছে:

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

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

  • নিজেকে একটি /etc/hosts.dডিরেক্টরি বা অনুরূপ করুন এবং সেগুলি একত্রিত করার জন্য কিছু স্ক্রিপ্ট লিখুন (সবচেয়ে তুচ্ছ: cat /etc/hosts.d/*.conf > /etc/hostsযদিও আপনি সম্ভবত কিছুটা আরও ভাল চাইবেন, বর্তমান লোকেলের দ্বারা ডিফল্ট সাজানোর ওভাররাইড), এবং স্ক্রিপ্টটি বুটে চালনা করুন, বা ক্রোন থেকে, বা ম্যানুয়ালি যখনই আপনি ফাইল আপডেট করেন।

ব্যক্তিগতভাবে, বাড়িতে এবং কাজের উভয় ক্ষেত্রে, প্রতিটি ডিভাইস থেকে মেশিনের নামগুলি সমাধানযোগ্য, আমি BIND 9 চালাই That যদিও এটি শিখতে কয়েক ঘন্টা জড়িত না।


ধন্যবাদ! আমি ভাবছিলাম যে প্রতিটি চেষ্টা কেন ব্যর্থ হচ্ছে। এটি সম্ভব হলে এটি এত সহজ হত, তবে আমি /etc/hosts.d ব্যবহার করব
ডগএটডগ

8
@ ডগইটডগ আমি একটি স্থানীয় ডিএনএস সার্ভার চালানোর পরামর্শ দিচ্ছি। Dnsmasq সেট আপ করা খুব সহজ; ব্যবহারকারী-বান্ধব বিতরণগুলিতে, আপনি প্যাকেজটি ইনস্টল করেন এবং এটি ঠিক কাজ করে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ গিলস এর ঠিক আছে - ঘরের নেটওয়ার্কে ডান্সম্যাস্ক সম্ভবত আপনি যা চান তা করতে পারে। এটি আপনাকে ম্যাক ঠিকানার মাধ্যমে আপনার সমস্ত ল্যান সংস্থাগুলিতে স্থির আইপিগুলি বরাদ্দ করতে, তাদের হোস্টনাম দেওয়ার অনুমতি দেয় এবং তাদের জন্য অনুরোধগুলি সমাধান করতে দেয় - সমস্ত কিছু অজানা হোস্টকে একটি আপস্ট্রিম ডিএনএস সার্ভারের মধ্য দিয়ে যাওয়ার সময়।
মুডবুম

@ মুডবুম এবং গিলস পরামর্শ দেওয়ার জন্য আপনাকে ধন্যবাদ, আমি উত্তরে এটি উল্লেখ করেছি। আমি 2013 সালে dnsmasq ফিরে ব্যবহার করছি কিনা তা নিশ্চিত নয়, তবে আমি অবশ্যই এখন আছি।
ডারোবার্ট

গ্লোব বিস্তৃতি বাছাই করা হয় (কমপক্ষে বাশ ভাষায়, অনুযায়ী LC_COLLATE), সুতরাং আপনার উত্তরের ক্যাভিয়েট প্রযোজ্য নয়।
l0b0

2

এটি সম্ভব নয়, যেহেতু ফর্ম্যাটটি সাধারণত প্ল্যাটফর্মের 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

1

গতিশীল আইপি সহ বিভিন্ন অবস্থান থেকে নির্বিঘ্নে কাজ করার জন্য আমার একইরকম প্রয়োজন ছিল, বিশেষত যেহেতু আমি ভার্চুয়াল মেশিনগুলি ব্যবহার করি। এটির জন্য আমার সহজ সমাধানটি নিম্নরূপ:

  1. প্রতিটি সত্তার জন্য হোস্ট এন্ট্রি আপডেট করতে একটি স্ক্রিপ্ট তৈরি করুন। উদাহরণস্বরূপ, সাব-ডোমেনগুলি 'app.myhost.net' সহ আমার যদি 'myhost.net' নামে একটি হোস্ট থাকে তবে আমি সেই স্ক্রিপ্টটি উপস্থাপন করব এবং একটি আইপি ঠিকানা সরবরাহ করব যা প্রতিটি ডোমেনের জন্য লেখা থাকবে এবং একটি হোস্ট ফাইলে সংরক্ষণ করা হবে 'আমার নিমন্ত্রণকর্তা'. একক হোস্ট ফাইল মুছতে বা আপডেট করার জন্য একই স্ক্রিপ্টটিতে একটি পতাকা রয়েছে।

  2. এই ফাইলগুলিকে / ইত্যাদি / হোস্টে একীভূত করতে অন্য স্ক্রিপ্ট তৈরি করুন। এই স্ক্রিপ্টটি আপনার তৈরি করা সমস্ত হোস্ট ফাইলগুলি সন্ধান করবে এবং এগুলিকে / ইত্যাদি / হোস্টে একক হোস্ট ফাইলে একত্রিত করবে।

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

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