Mac OS X, lưu trữ tập tin, tôi có thể bao gồm các tệp khác với nó không?


10

Tôi đang làm việc trên một số tập lệnh tự động hóa để định cấu hình cài đặt mạng của mình, lưu trữ nội dung tệp và / etc / tệp giải quyết, khi truy cập các mạng khác nhau mà tôi thường gặp giữa.

Có một số kết hợp có thể xảy ra mà tất cả đều yêu cầu thay đổi tệp máy chủ và tôi muốn tránh phải thiết lập ma trận kết hợp khác nhau, sao chép các cài đặt được chia sẻ ở mọi nơi.

Ví dụ, tôi có thể trên mạng làm việc, tức là. trong tòa nhà, hoặc tôi có thể truy cập nó qua VPN. Trong cả hai trường hợp, tôi cần thêm một số cài đặt vào tệp máy chủ để mạng hoạt động chính xác, một số được chia sẻ, một số thì không. Ngoài ra, nếu tôi qua VPN, tôi có thể ở nhà, trong trường hợp đó có một số cài đặt khác trong tệp máy chủ tôi cũng muốn thêm.

Như vậy, tôi đã hy vọng rằng thay vì tạo một tệp cho "home, truy cập công việc qua VPN" so với "home, không truy cập công việc", v.v., có cách nào để tôi đưa vào các tệp khác không?

Chẳng hạn, giả sử cú pháp giả định sau hoạt động:

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

127.0.0.1 localhost
::1 localhost

Bằng cách này, tôi có thể chỉ cần xóa nội dung của một hoặc cả hai, của hai tệp bổ sung đó và để phần còn lại là.

Hoặc, chặn lại, có cách nào tốt hơn để làm điều này hơn là chỉ xây dựng một tập lệnh nhỏ nối các tệp như tập tin vào một tệp lưu trữ mới và là một phần trong thiết lập tự động hóa của tôi, trước tiên tôi xóa một số tệp bổ sung đó, và sau đó tôi gọi tập lệnh để xây dựng lại tập tin máy chủ duy nhất từ ​​những tập tin bổ sung đó?


Bạn có chắc chắn yêu cầu thay đổi tệp máy chủ thay vì ví dụ sửa đổi dscltrực tiếp các mục nhập máy chủ không?
Daniel Beck

Tôi đã không nhận thức được dscllệnh, tôi cũng sẽ phải nghiên cứu về điều đó.
Lasse V. Karlsen

Xem ví dụ ở đây . Trong nội bộ, OS X sử dụng các dịch vụ thư mục của nó, mà bạn có thể kiểm soát bằng cách sử dụng dscl, /etc/hostsđơn giản là một trong những nguồn dữ liệu có sẵn, cung cấp (tất nhiên) ánh xạ tên máy chủ / địa chỉ IP. Thiết lập một tập lệnh ghi dsclvà xóa bộ đệm có thể hoạt động tốt hơn trong tình huống của bạn hơn là giữ nhiều bản sao của tệp máy chủ hoặc viết lại nó mọi lúc.
Daniel Beck

@DanielBeck: Điểm tốt! Tôi đã không nhận thức được tất cả các khả năng của dscl.
Karolos

Hãy cho tôi biết làm thế nào nó hoạt động, nếu bạn muốn thử làm theo cách đó. Không thử bản thân mình, vì vậy tôi không đăng nó như một câu trả lời. Chúc may mắn!
Daniel Beck

Câu trả lời:


7

Tôi không nhận thức được bất kỳ khả năng bao gồm. Tuy nhiên, những gì tôi sẽ làm là tạo các phần trong tệp máy chủ của mình và sau đó sử dụng tập lệnh để nhận xét các dòng trong mỗi phần bằng cách sử dụng, ví dụ: sed.

Bằng cách này, tập tin của bạn sẽ trông như thế nào

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

Chỉnh sửa: Thêm một nỗ lực nhanh chóng để sửa đổi các trường.

Xóa bình luận cho HOME.HOSTS

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

Đưa lại các ý kiến ​​cho HOME.HOSTS

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

Đây là phiên bản cơ bản, và cần được điều chỉnh theo nhu cầu của bạn.


Xin chào Karolos, bạn có thể mô tả thêm về lệnh: sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hostsvà về phần trong tệp máy chủ xin vui lòng. Tôi thực sự không hiểu tại sao :(
Toàn Nguyễn

@NNToan: Dòng nào được yêu sedcầu thêm hoặc xóa # ở đầu dòng giữa hai dòng # %%%. Điều này sẽ bình luận hoặc bỏ bình luận các dòng. Ví dụ cho thấy cách nhận xét phần HOME.HOSTS bằng cách sử dụng # %%% HOME.HOSTS; thay vào đó, bạn nên sử dụng # %%% WORK.HOSTS trong lệnh sed để bình luận hoặc bỏ bình luận phần WORK.HOSTS.
Karolos

0

Vì dscl không còn hoạt động do chuyển sang OpenDirectoryService, nên một tùy chọn là sử dụng ghost:

sudo gem install ghost

sudo ghost add fw.test.se 10.0.0.1

... sẽ thêm phần này vào / etc / hosts:

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

Để xóa phần #ghost của tệp máy chủ sử dụng (điều này giúp dễ dàng thay thế danh sách máy chủ bằng một máy chủ mới):

sudo ghost empty

Bạn có thể tìm thêm thông tin về ma tại đây: https://github.com/bjeanes/ghost


0

Tôi đã gặp trường hợp sử dụng tương tự khi tôi cần truy cập dịch vụ ở ba nơi khác nhau bằng các cài đặt LAN / WAN khác nhau trong tệp máy chủ. Câu trả lời của Karolos ở trên là một giải pháp khả thi. Cách tiếp cận của tôi là ở đây.

1- tham khảo http://apple.stackexchange.com/q/139267/74657

2- tạo các tệp lưu trữ cho từng vị trí (hosts.work, hosts.home, hosts.vendor)

3- Sử dụng tập lệnh của soloz, tại đây ( https://github.com/slozo/Network-listener ) bất cứ khi nào tôi kết nối với mạng gia đình, tôi thực thi tập lệnh đơn giản để chuyển tập tin máy chủ.

phương pháp đơn giản nhất sẽ là

mv hosts.home /etc/hosts

cách khác, bạn có thể tự động hóa câu trả lời của Karolos ở trên bằng cách sử dụng sed để cập nhật tệp thoát khi kết nối với SSID cụ thể mà bạn có thể phát hiện và chạy dễ dàng bằng cách sử dụng tập lệnh của soloz đã đề cập ở trên.

Hy vọng rằng sẽ giúp bất cứ ai vấp phải vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.