File “host” Mac OS X, dapatkah saya menyertakan file lain dengannya?


10

Saya sedang mengerjakan beberapa skrip otomatisasi untuk mengonfigurasi pengaturan jaringan saya, meng-host konten file, dan / etc / resolver file, ketika mengakses jaringan yang berbeda yang sering saya kunjungi.

Ada beberapa kombinasi yang dapat terjadi yang semuanya memerlukan perubahan pada file host, dan saya ingin menghindari mengatur matriks kombinasi yang berbeda, menduplikasi pengaturan bersama di semua tempat.

Misalnya, saya mungkin berada di jaringan kerja, yaitu. di gedung, atau saya dapat mengaksesnya melalui VPN. Dalam kedua kasus, saya perlu menambahkan beberapa pengaturan ke file host agar jaringan berfungsi dengan baik, beberapa dibagikan, beberapa tidak. Selain itu, jika saya menggunakan VPN, saya mungkin berada di rumah, dalam hal ini ada beberapa pengaturan lain dalam file host yang juga ingin saya tambahkan.

Karena itu, saya berharap bahwa alih-alih membuat satu file untuk "rumah, mengakses pekerjaan melalui VPN" vs. "rumah, tidak mengakses pekerjaan", dll., Apakah ada cara bagi saya untuk memasukkan file lain?

Misalnya, katakanlah sintaksis hipotetis berikut berfungsi:

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

127.0.0.1 localhost
::1 localhost

Dengan cara ini, saya bisa menghapus konten dari satu, atau keduanya, dari dua file tambahan tersebut, dan membiarkan sisanya.

Atau, kecuali itu, apakah ada cara yang lebih baik untuk melakukan ini daripada hanya membuat skrip kecil yang menggabungkan file seperti itu menjadi file host baru, dan sebagai bagian dari pengaturan otomatisasi saya, saya pertama-tama menghapus beberapa file tambahan itu, dan kemudian saya meminta script untuk membangun kembali file host tunggal dari file-file tambahan?


Apakah Anda yakin Anda memerlukan perubahan pada file host sebagai lawan dari misalnya memodifikasi entri host melalui dscllangsung?
Daniel Beck

Saya tidak mengetahui dsclperintah itu, saya harus meneliti itu juga.
Lasse V. Karlsen

Lihat misalnya di sini . Secara internal, OS X menggunakan layanan direktori, yang dapat Anda kontrol menggunakan dscl, yang /etc/hostsmerupakan salah satu sumber data yang tersedia, menyediakan (tentu saja) pemetaan nama host / alamat IP. Menyiapkan skrip yang menulis ke dscldan membersihkan cache mungkin berfungsi lebih baik dalam situasi Anda daripada menyimpan banyak salinan file host, atau menulis ulang sepanjang waktu.
Daniel Beck

@DanielBeck: Poin bagus! Saya tidak mengetahui semua kemampuan dscl.
Karolos

Biarkan saya tahu cara kerjanya, jika Anda ingin mencoba melakukannya dengan cara itu. Belum mencobanya sendiri, jadi saya tidak mempostingnya sebagai jawaban. Semoga berhasil!
Daniel Beck

Jawaban:


7

Saya tidak mengetahui adanya kemungkinan penyertaan. Apa yang akan saya lakukan adalah membuat bagian dalam file hosts saya, dan kemudian menggunakan script untuk mengomentari baris di setiap bagian menggunakan, misalnya, sed.

Dengan cara ini file Anda akan terlihat seperti

#%%%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

Sunting: Menambahkan dalam upaya cepat untuk mengubah bidang.

Menghapus komentar untuk HOME.HOSTS

 sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts

Mengembalikan komentar untuk HOME.HOSTS

 sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts

Ini adalah versi dasar, dan perlu disesuaikan dengan kebutuhan Anda.


Halo Karolos, bisakah Anda menjelaskan lebih lanjut tentang perintah: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsdan tentang bagian dalam file hosts silakan. Saya benar-benar tidak mengerti mengapa :(
Toan Nguyen

@NNToan: Yang dilakukan baris adalah memberi tahu seduntuk menambahkan atau menghapus # di awal baris antara dua baris # %%%. Ini akan mengomentari atau menghapus komentar garis. Contoh tersebut menunjukkan cara untuk mengomentari bagian HOME.HOSTS menggunakan # %%% HOME.HOSTS; Anda harus menggunakan # %%% WORK.HOSTS sebagai gantinya dalam perintah sed untuk mengomentari atau membatalkan komentar pada bagian WORK.HOSTS.
Karolos

0

Karena dscl tidak lagi berfungsi karena beralih ke OpenDirectoryService, salah satu opsi adalah menggunakan ghost:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... akan menambahkan bagian ini di / etc / hosts:

# ghost start
10.0.0.1 fw.start.se
# ghost end

Untuk menghapus bagian #ghost dari penggunaan file hosts (ini membuatnya mudah untuk mengganti daftar host dengan yang baru):

sudo ghost empty

Anda dapat menemukan informasi lebih lanjut tentang hantu di sini: https://github.com/bjeanes/ghost


0

Saya memiliki kasus penggunaan yang sama ketika saya perlu mengakses layanan di tiga tempat yang berbeda menggunakan pengaturan LAN / WAN yang berbeda dalam file hosts. Jawaban Karolos di atas adalah salah satu solusi yang memungkinkan. Pendekatan saya ada di sini.

1- ref ke http://apple.stackexchange.com/q/139267/74657

2- menciptakan file host untuk setiap lokasi (hosts.work, hosts.home, hosts.vendor)

3 - Menggunakan skrip soloz, di sini ( https://github.com/slozo/Network-listener ) setiap kali saya terhubung ke jaringan rumah, saya menjalankan skrip sederhana untuk mengganti file host.

Metode paling sederhana adalah

mv hosts.home /etc/hosts

secara bergantian Anda dapat mengotomatiskan jawaban Karolos di atas menggunakan sed untuk memperbarui file yang keluar saat terhubung ke SSID tertentu yang dapat Anda deteksi dan jalankan dengan mudah dengan menggunakan skrip soloz yang disebutkan di atas.

harapan yang membantu siapa pun tersandung pada masalah ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.