การเปลี่ยนแปลง/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
รุ่นของแฟ้ม เหตุใดจึงไม่ใช้รุ่นแคช