ไฟล์“ โฮสต์” ของ Mac OS X ฉันสามารถรวมไฟล์อื่นด้วยได้หรือไม่


10

ฉันกำลังทำงานกับสคริปต์อัตโนมัติบางตัวเพื่อกำหนดการตั้งค่าเครือข่ายเนื้อหาไฟล์โฮสต์และไฟล์ / etc / resolver เมื่อเข้าถึงเครือข่ายอื่นที่ฉันใช้บ่อย

มีชุดค่าผสมบางอย่างที่อาจเกิดขึ้นได้ว่าทุกอย่างต้องมีการเปลี่ยนแปลงไฟล์โฮสต์และฉันต้องการหลีกเลี่ยงการตั้งค่าเมทริกซ์ของชุดค่าผสมที่แตกต่างกันโดยทำซ้ำการตั้งค่าที่ใช้ร่วมกันทั่วสถานที่

ตัวอย่างเช่นฉันอาจอยู่ในเครือข่ายงานเช่น ในอาคารหรือฉันสามารถเข้าถึงได้ผ่าน VPN ในทั้งสองกรณีฉันต้องเพิ่มการตั้งค่าบางอย่างลงในไฟล์โฮสต์เพื่อให้ระบบเครือข่ายทำงานได้อย่างถูกต้องมีการแชร์บางอย่างไม่ได้ นอกจากนี้ถ้าฉันมากกว่า VPN ผมอาจจะเป็นที่บ้านซึ่งในกรณีที่มีบางส่วนตั้งค่าอื่น ๆ ในไฟล์โฮสต์ฉันยังต้องการที่จะเพิ่ม

ดังนั้นฉันหวังว่าแทนที่จะสร้างไฟล์หนึ่งไฟล์สำหรับ "บ้านเข้าถึงงานผ่าน VPN" กับ "บ้านไม่เข้าถึงงาน" ฯลฯ มีวิธีที่จะรวมไฟล์อื่น ๆ หรือไม่

ตัวอย่างเช่นสมมติว่าไวยากรณ์สมมุติฐานต่อไปนี้ใช้งานได้:

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

127.0.0.1 localhost
::1 localhost

ด้วยวิธีนี้ฉันสามารถลบเนื้อหาของไฟล์เสริมหนึ่งไฟล์หรือทั้งสองไฟล์จากนั้นก็เหลือ

หรือว่ามีวิธีที่ดีกว่าในการทำเช่นนี้เพียงแค่สร้างสคริปต์ขนาดเล็กที่เชื่อมไฟล์ต่าง ๆ เช่นไฟล์ลงในไฟล์โฮสต์ใหม่และเป็นส่วนหนึ่งของการตั้งค่าระบบอัตโนมัติของฉันฉันจะลบไฟล์เพิ่มเติมบางไฟล์ แล้วฉันจะเรียกใช้สคริปต์เพื่อสร้างไฟล์โฮสต์เดียวจากไฟล์พิเศษเหล่านั้นหรือไม่


คุณแน่ใจหรือไม่ว่าต้องการเปลี่ยนแปลงไฟล์โฮสต์เมื่อต้องการแก้ไขรายการโฮสต์ผ่านdsclโดยตรง
Daniel Beck

ฉันไม่ได้ตระหนักถึงdsclคำสั่งฉันจะต้องทำการวิจัยเกี่ยวกับเรื่องนั้นเช่นกัน
Lasse Vågsæther Karlsen

ดูเช่นที่นี่ ภายใน OS X ใช้บริการไดเรกทอรีซึ่งคุณสามารถควบคุมการใช้dsclงานได้ซึ่ง/etc/hostsเป็นเพียงหนึ่งในแหล่งข้อมูลที่มีอยู่โดยให้การแมปชื่อโฮสต์ / ที่อยู่ IP (แน่นอน) การตั้งค่าสคริปต์ที่เขียนdsclและล้างข้อมูลแคชอาจทำงานได้ดีขึ้นในสถานการณ์ของคุณมากกว่าการเก็บสำเนาไฟล์โฮสต์หลายชุดหรือเขียนใหม่ตลอดเวลา
Daniel Beck

@DanielBeck: จุดดี! ฉันไม่ได้ตระหนักถึงความสามารถทั้งหมดของ dscl
Karolos

แจ้งให้เราทราบว่ามันทำงานอย่างไรถ้าคุณต้องการลองทำอย่างนั้น ยังไม่ได้ลองด้วยตัวเองดังนั้นฉันจึงไม่โพสต์เป็นคำตอบ โชคดี!
Daniel Beck

คำตอบ:


7

ฉันไม่ได้ตระหนักถึงความเป็นไปได้ใด ๆ รวมถึง อย่างไรก็ตามสิ่งที่ฉันทำคือทำส่วนต่างๆในไฟล์ 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

นี่เป็นรุ่นพื้นฐานและจำเป็นต้องปรับเปลี่ยนตามความต้องการของคุณ


สวัสดี Karolos คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับคำสั่ง: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsและเกี่ยวกับส่วนในไฟล์โฮสต์ได้โปรด ฉันไม่เข้าใจจริงๆว่าทำไม :(
Toan Nguyen

@NNToan: เมื่อบรรทัดมีการบอกsedให้เพิ่มหรือลบ # ที่จุดเริ่มต้นของบรรทัดระหว่างสองบรรทัด # %%% นี่จะแสดงความคิดเห็นหรือยกเลิกการแสดงความคิดเห็นบรรทัด ตัวอย่างแสดงวิธีการคอมเม้นต์ส่วน HOME.HOSTS โดยใช้ # %%% HOME.HOSTS คุณควรใช้ # %%% WORK.HOSTS แทนในคำสั่ง sed เพื่อแสดงความคิดเห็นหรือเลิกแสดงความคิดเห็นในส่วน WORK.HOSTS
Karolos

0

เนื่องจาก dscl ไม่ทำงานอีกต่อไปเนื่องจากเปลี่ยนเป็น OpenDirectoryService หนึ่งตัวเลือกคือใช้ 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


0

ฉันมีกรณีการใช้งานที่คล้ายกันเมื่อฉันต้องการเข้าถึงบริการในสถานที่ต่าง ๆ สามแห่งโดยใช้การตั้งค่า LAN / WAN ที่แตกต่างกันในไฟล์โฮสต์ คำตอบของ Karolos ข้างต้นเป็นทางออกหนึ่งที่เป็นไปได้ แนวทางของฉันอยู่ที่นี่

1- อ้างอิงถึงhttp://apple.stackexchange.com/q/139267/74657

2- สร้างไฟล์โฮสต์สำหรับแต่ละสถานที่ (hosts.work, hosts.home, hosts.vendor)

3- ใช้สคริปต์ของ soloz ที่นี่ ( https://github.com/slozo/Network-listener ) เมื่อใดก็ตามที่ฉันเชื่อมต่อกับเครือข่ายในบ้านฉันใช้สคริปต์อย่างง่ายเพื่อสลับไฟล์โฮสต์

วิธีที่ง่ายที่สุดจะเป็น

mv hosts.home /etc/hosts

อีกวิธีหนึ่งคุณสามารถทำให้คำตอบของ Karolos โดยอัตโนมัติโดยใช้ sed เพื่ออัปเดตไฟล์ exiting ในการเชื่อมต่อกับ SSID ที่เฉพาะเจาะจงซึ่งคุณสามารถตรวจจับและทำงานได้อย่างง่ายดายโดยใช้สคริปต์ของ soloz ที่กล่าวถึงข้างต้น

หวังว่าจะช่วยให้ทุกคนสะดุดกับประเด็นปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.