私は、頻繁に利用するさまざまなネットワークにアクセスするときに、ネットワーク設定、hosts ファイルの内容、および /etc/resolver ファイルを構成するための自動化スクリプトを作成しています。
発生する可能性のある組み合わせの中には、すべて hosts ファイルの変更を必要とするものがあり、さまざまな組み合わせのマトリックスを設定して、共有設定をあちこちに複製する必要がないようにしたいと考えています。
例えば私はの上職場のネットワーク、つまり建物内、またはVPN経由でアクセスすることもあります。どちらの場合も、ネットワークが適切に機能するためには、hostsファイルにいくつかの設定を追加する必要があります。一部は共有され、一部は共有されません。さらに、VPN経由でアクセスする場合は、自宅にいる可能性があり、その場合はhostsファイルに他の設定があります。また追加したい。
そのため、「自宅、VPN 経由で仕事にアクセス」と「自宅、仕事にアクセスしていない」などのために 1 つのファイルを作成するのではなく、他のファイルを含める方法はあるでしょうか?
たとえば、次の仮想構文が機能するとします。
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
この方法により、2 つの追加ファイルのうちの 1 つまたは両方の内容を削除し、残りはそのままにしておくことができます。
または、それができない場合は、これらのファイルを新しいホスト ファイルに連結する小さなスクリプトを作成し、自動化設定の一部として、最初にそれらの余分なファイルの一部をクリアしてから、スクリプトを呼び出してそれらの余分なファイルから単一のホスト ファイルを再構築するよりも良い方法はありますか?
答え1
include の可能性については知りません。ただし、hosts ファイルにセクションを作成し、たとえば sed を使用して各セクションの行をコメント化するスクリプトを使用することをお勧めします。
この場合、ファイルは次のようになります
#%%%HOME.HOSTS%%%
#Put here the contents of home.hosts
#%%%WORK.HOSTS%%%
#Put here the contents of work.hosts
#%%%ALWAYS_ON%%%
127.0.0.1 localhost
::1 localhost
編集:フィールドを変更する簡単な試みを追加します。
HOME.HOSTS のコメントを削除する
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
HOME.HOSTS のコメントを戻す
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts
これは基本バージョンであり、ニーズに合わせて調整する必要があります。
答え2
OpenDirectoryService への切り替えにより dscl が機能しなくなったため、1 つのオプションとして ghost を使用します。
sudo gem install ghost
sudo ghost add fw.test.se 10.0.0.1
.../etc/hosts にこのセクションを追加します:
# ghost start
10.0.0.1 fw.start.se
# ghost end
ホスト ファイルの #ghost セクションをクリアするには、次を使用します (これにより、ホストのリストを新しいものに簡単に置き換えることができます)。
sudo ghost empty
ゴーストに関する詳しい情報は、こちらをご覧ください: https://github.com/bjeanes/ghost
答え3
同様のユースケースで、hosts ファイル内の異なる LAN / WAN 設定を使用して 3 つの異なる場所にあるサービスにアクセスする必要がありました。上記の Karolos の回答は 1 つの解決策です。私のアプローチはここにあります。
1-参照http://apple.stackexchange.com/q/139267/74657
2 - 各場所のホスト ファイルを作成しました (hosts.work、hosts.home、hosts.vendor)
3- ここで、solozのスクリプトを使用します(https://github.com/slozo/ネットワークリスナー) ホーム ネットワークに接続するたびに、ホスト ファイルを切り替える簡単なスクリプトを実行します。
最も簡単な方法は
mv hosts.home /etc/hosts
あるいは、上記の Karolos の回答を sed を使用して自動化し、特定の SSID への接続時に既存のファイルを更新することもできます。これは、上記の soloz のスクリプトを使用して簡単に検出して実行できます。
この問題に遭遇した人の役に立つことを願っています。