Mac OS Xの「hosts」ファイル。他のファイルを含めることはできますか?


10

私が頻繁に使用するさまざまなネットワークにアクセスするときに、ネットワーク設定、hostsファイルの内容、および/ etc / resolverファイルを構成するためのいくつかの自動化スクリプトに取り組んでいます。

いくつかの組み合わせが発生する可能性がありますが、すべてhostsファイルに変更を加える必要があります。さまざまな組み合わせのマトリックスを設定して、共有設定をあちこちに複製する必要がないようにしたいと思います。

例えば、私はかもしれすなわち、作業ネットワーク。建物内、またはVPN経由でアクセスできます。どちらの場合も、ネットワーキングが正しく機能するように、hostsファイルにいくつかの設定を追加する必要があります。共有されているものとされていないものがあります。私はVPN上だ場合また、私はhostsファイルにいくつかの他の設定があり、その場合には、自宅にあってもよいまた、追加したいが。

そのため、「ホーム、VPN経由で仕事にアクセスする」などのファイルを1つ作成する代わりに、「ホーム、仕事にアクセスしない」などのファイルを作成する代わりに、他のファイルを含める方法はありますか?

たとえば、次の架空の構文が機能するとします。

#!include home.hosts
#!include work.hosts

127.0.0.1 localhost
::1 localhost

この方法では、これら2つの追加ファイルの一方または両方のコンテンツを消去し、残りはそのままにすることができます。

または、それを除けば、これらのファイルを新しいhostsファイルに連結する小さなスクリプトを作成するよりも、これを行うより良い方法があります。そして、自動化セットアップの一部として、最初にこれらの余分なファイルのいくつかをクリアします。次に、スクリプトを呼び出して、これらの追加ファイルから単一のhostsファイルを再構築しますか?


たとえば、dscl直接ホストエントリを変更するのではなく、hostsファイルを変更する必要がありますか?
ダニエルベック

私はそのdsclコマンドを知らなかったので、それについても調査する必要があります。
Lasse V. Karlsen

たとえば、こちらをご覧ください。内部的には、OS Xはディレクトリサービスを使用します。これは、使用可能なデータソースの1つでdsclあるを使用して制御でき、/etc/hostsホスト名/ IPアドレスマッピングを提供します。dsclキャッシュに書き込み、キャッシュをフラッシュするスクリプトを設定すると、hostsファイルの複数のコピーを保持したり、常に書き直したりするよりも、状況によってはうまくいく場合があります。
ダニエルベック

@DanielBeck:良い点!私はdsclのすべての機能を認識していませんでした。
Karolos 2012年

その方法で試してみたい場合は、その仕組みを教えてください。自分で試したことがないので、回答として投稿しません。幸運を!
ダニエルベック

回答:


7

インクルードの可能性については知りません。ただし、ホストファイルにセクションを作成し、スクリプトを使用して、たとえば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

これは基本バージョンであり、ニーズに合わせて調整する必要があります。


こんにちはカロロス、コマンドsed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsについて、そしてホストファイルのセクションについて詳しく説明してください。理由がわかりません:(
Toan Nguyen

@NNToan:行が行うのはsed、2つの#%%%行の間の行頭に#を追加または削除することです。これにより、行がコメント化またはコメント解除されます。この例は、#%%% HOME.HOSTSを使用してHOME.HOSTSセクションにコメントを付ける方法を示しています。代わりにsedコマンドで#%%% WORK.HOSTSを使用して、WORK.HOSTSセクションをコメント化またはコメント解除してください。
Karolos

0

OpenDirectoryServiceへの切り替えによりdsclが機能しなくなったため、1つのオプションはゴーストを使用することです。

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

hostsファイルの#ghostセクションをクリアするには(これにより、ホストのリストを新しいリストに簡単に置き換えることができます):

sudo ghost empty

ここでゴーストについての詳細情報を見つけることができます:https : //github.com/bjeanes/ghost


0

hostsファイルの異なるLAN / WAN設定を使用して、3つの異なる場所のサービスにアクセスする必要があるときにも、同様の使用例がありました。上記のKarolosの答えは、1つの可能な解決策です。私のアプローチはこちらです。

1- http://apple.stackexchange.com/q/139267/74657を参照

2ロケーションごとに作成されたhostsファイル(hosts.work、hosts.home、hosts.vendor)

3- solozのスクリプトを使用して、ここ(https://github.com/slozo/Network-listener)でホームネットワークに接続するたびに、簡単なスクリプトを実行してホストファイルを切り替えます。

最も簡単な方法は

mv hosts.home /etc/hosts

または、sedを使用して上記のKarolosの回答を自動化し、特定のSSIDへの接続時に既存のファイルを更新して、上記のsolozのスクリプトを使用して簡単に検出および実行できます。

それが主題の問題につまずく人を助けることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.