การเปลี่ยนแปลง/etc/hostsไฟล์ดูเหมือนจะมีผลทันที ฉันอยากรู้เกี่ยวกับการใช้งาน เวทมนตร์อะไรที่ใช้เพื่อให้บรรลุคุณสมบัตินี้
การเปลี่ยนแปลง/etc/hostsไฟล์ดูเหมือนจะมีผลทันที ฉันอยากรู้เกี่ยวกับการใช้งาน เวทมนตร์อะไรที่ใช้เพื่อให้บรรลุคุณสมบัตินี้
คำตอบ:
เวทมนต์กำลังเปิด/etc/hostsไฟล์และอ่านมัน:
strace -e trace=file wget -O /dev/null http://www.google.com http://www.facebook.com http://unix.stackexchange.com 2>&1 | grep hosts
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 4
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 4
getaddrinfo(3)ฟังก์ชั่นซึ่งเป็นเพียงชื่ออินเตอร์เฟซการแก้ไขมาตรฐานก็จะเปิดและอ่าน/etc/hostsในแต่ละครั้งจะเรียกว่าเพื่อแก้ไขชื่อโฮสต์
แอปพลิเคชั่นที่มีความซับซ้อนมากขึ้นซึ่งไม่ได้ใช้มาตรฐานgetaddrinfo(3)แต่ยังคงมีการเพิ่ม/etc/hostsการผสมผสาน (เช่นdnsmasqเซิร์ฟเวอร์ DNS) อาจใช้inotify(7)เพื่อตรวจสอบการเปลี่ยนแปลง/etc/hostsไฟล์และอ่านใหม่หากจำเป็นเท่านั้น
เบราว์เซอร์และแอปพลิเคชั่นอื่น ๆ จะไม่ทำเช่นนั้น พวกเขาจะเปิดและอ่าน/etc/hostsแต่ละครั้งที่พวกเขาต้องการแก้ไขชื่อโฮสต์แม้ว่าพวกเขาจะไม่ได้ใช้ตัวแก้ไขของ libc โดยตรง แต่กำลังจำลองงานของมันด้วยวิธีอื่น
ชื่อความละเอียดในหมู่สิ่งอื่น ๆ /etc/nsswitch.confที่มีการจัดการโดย นี่คือข้อความที่ตัดตอนมา:
passwd: files sss
shadow: files sss
group: files sss
hosts: files dns myhostname
(...)
จดบันทึกhostsบรรทัด มันบอกว่า: "เมื่อแก้ไขชื่อโฮสต์ให้อ่าน/etc/hostsไฟล์ก่อนเพื่อค้นหาชื่อโฮสต์หากไม่พบจากนั้นเรียกใช้แบบสอบถาม DNS หากไม่พบจากนั้นลองใช้ชื่อโฮสต์ของระบบที่ตั้งค่าไว้ในเครื่อง"
ดังนั้นนี่คือเหตุผลที่รวดเร็ว โปรดทราบว่ามันไม่ได้ขึ้นอยู่กับบริการเครือข่ายบนเครื่องดังนั้นจึงไม่มีบริการให้รีสตาร์ทหรือโหลดซ้ำ
/etc/hostsรุ่นของแฟ้ม เหตุใดจึงไม่ใช้รุ่นแคช