ฉันจะกำหนดหรือกำหนดขนาด จำกัด ได้/etc/hosts
อย่างไร สามารถมีได้กี่บรรทัด
ฉันจะกำหนดหรือกำหนดขนาด จำกัด ได้/etc/hosts
อย่างไร สามารถมีได้กี่บรรทัด
คำตอบ:
ผลกระทบเชิงปัญหารวมถึงการแก้ปัญหาชื่อโฮสต์ช้า (เว้นแต่ว่าระบบปฏิบัติการจะแปลงรายการเชิงเส้นเป็นโครงสร้างที่เร็วกว่าการค้นหา?) และความเป็นไปได้ที่จะเกิดปฏิสัมพันธ์ที่น่าประหลาดใจกับการtabทำเชลล์ให้เสร็จสมบูรณ์ก่อนถึงขนาดไฟล์ที่มีความหมาย
ตัวอย่างเช่น! ถ้าหนึ่งในนั้นใส่ 500,000 รายการโฮสต์/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
สำหรับวิทยาศาสตร์แล้วความtabสมบูรณ์ของชื่อโฮสต์เริ่มต้นใน ZSH ใช้เวลาประมาณ 25 วินาทีในระบบของฉันเพื่อส่งคืนพรอมต์การดำเนินการเสร็จสมบูรณ์
ฉันไม่คิดว่ามันมีขนาด จำกัด ในแง่ของจำนวนบรรทัด
ก่อนที่ DNS (ซึ่งถูกนำมาใช้ในปี 1985) มันเป็นไฟล์ที่ทำหน้าที่เป็นวิธีเดียวในการทำการค้นหาชื่อโฮสต์ดังนั้นฉันจึงเชื่อว่านี่หมายความว่าไฟล์นั้นควรจะมีรายการนับพันหรืออย่างน้อยนับร้อยรายการ สามารถรองรับโหนดอินเทอร์เน็ต pre-1985 ที่เชื่อมต่อได้ดีที่สุด
นี่คือตัวอย่างจากปี 1985 (รูปแบบที่มีการเปลี่ยนแปลงบ้าง): http://jim.rees.org/apollo-archive/hosts.txt ไฟล์นี้มี 1680 บรรทัดซึ่ง 1325 เป็นสายโฮสต์ ส่วนที่เหลืออีก 355 สายว่างเปล่าความคิดเห็นเครือข่ายหรือเกตเวย์1
ข้อ จำกัด ที่แท้จริงที่ฉันพบได้คือในบางระบบแต่ละบรรทัดจะถูก จำกัด ให้น้อยกว่าBUFSIZ
อักขระ (1024 บนเครื่อง OpenBSD ของฉัน)
หากคุณมีรายการมากกว่าสองสามรายการ/etc/hosts
คุณควรพิจารณาตั้งค่าเซิร์ฟเวอร์ชื่อท้องถิ่นแทน แต่นั่นเป็นความเห็นส่วนตัวของฉัน
1 ขอบคุณ Jeff Schaller ที่ขุดสิ่งนี้
/etc/hosts
รูปแบบเพื่อจัดรูปแบบ ระบบ Unix ส่วนใหญ่ไม่ได้อยู่บนอินเทอร์เน็ตและแม้ว่าจะเป็นเครื่อง แต่ก็ไม่จำเป็นต้องมีโต๊ะโฮสต์ที่สมบูรณ์เพียงแค่หยิบเครื่องที่ต้องการคุยด้วย ฉันจะแปลกใจถ้ามีเครื่องจักรจำนวนมากที่มีมากกว่า 100 รายการ
ฉันจะกำหนดขนาด จำกัด ของ / etc / hosts ได้อย่างไร
เป็นไฟล์ปกติดังนั้นขีด จำกัด จะสอดคล้องกับขีด จำกัด ของระบบไฟล์พื้นฐาน (ซึ่งตัวมันเองจะถูก จำกัด ด้วยจำนวนดิสก์ที่อยู่ด้านหลัง) ลบด้วยพื้นที่ที่ใช้โดยไฟล์อื่น ๆ ในระบบไฟล์เดียวกัน (อาจเป็นรูท ( /
)):
ฉันจะกำหนดขนาด จำกัด ของ / etc / hosts ได้อย่างไร
เนื่องจากเป็นไฟล์ที่แก้ไขด้วยตนเองเพียงด้วยตนเอง:
sed -i '100,$d' /etc/hosts
(เพื่อลบบรรทัด 100 และเกิน)
ขนาด จำกัด ใช้เฉพาะเมื่อจัดสรรบัฟเฟอร์คงที่ gethostbyname(3)
ซึ่งแยกวิเคราะห์รายการใน/etc/hosts
ไม่ได้จัดสรรบัฟเฟอร์คงที่ - และไม่เคยมี BSD 4.3 ของอัลกอริทึมรุ่น 1983 แสดงการเปิดไฟล์ขณะแยกวิเคราะห์รูปแบบไฟล์แบบปิด:
sethostent(0);
while (p = gethostent()) {
if (strcmp(p->h_name, name) == 0)
break;
for (cp = p->h_aliases; *cp != 0; cp++)
if (strcmp(*cp, name) == 0)
goto found;
}
found:
endhostent();
การใช้งานที่ทันสมัยรักษามรดกนี้ในทุกสิ่งที่จำเป็น
อย่างไรก็ตามภายใน*hostent
ตระกูลของฟังก์ชั่นจัดเก็บตัวชี้ไฟล์ไปยังบรรทัดปัจจุบันในไฟล์ sethostent
เปิดไฟล์และตั้งตำแหน่งตัวชี้ไฟล์ gethostent
รับข้อมูลและเลื่อนตัวชี้ไป endhostent
ปิดตัวชี้ไฟล์ ไลบรารี GNU C มีการอ้างอิงอย่างละเอียดเกี่ยวกับฟังก์ชันเหล่านี้
ตามที่คุณอาจคาดเดาจากการนำไปใช้รายการที่เกิดขึ้นก่อนหน้านี้ในการแก้ไขไฟล์จะเร็วขึ้น หากไฟล์โฮสต์ของคุณมีขนาดใหญ่สิ่งนี้จะเข้ามาเล่น
ดังนั้นไม่ว่าไฟล์จะใหญ่แค่ไหน OS ก็จะใช้งานมัน อย่างไรก็ตามในที่สุดคุณจะถึงขีด จำกัด ของระบบไฟล์ (ตามคำตอบของ Jeff Schaller ) คุณมีขีด จำกัด ขนาดบรรทัดสูงสุด (ต่อคำตอบของ Kusalananda ) แต่ในที่สุดคุณสามารถทำให้มันใหญ่เท่าที่คุณต้องการ แต่ได้โปรดอย่า
... ฉันใช้สมองและชีวิตของฉันฉันไม่สามารถนึกถึงสถานการณ์หรือสถานการณ์ที่คุณจะเข้าใกล้ปัญหาขีด จำกัด ขนาดใด ๆ ใน/etc/hosts
- คุณจะพบกับปัญหาในทางปฏิบัติเช่นความรุนแรง ประสิทธิภาพการทำงานที่ถูกเรียกไปยังgetaddrinfo()
ตระกูลของการเรียกระบบที่ทุกคนต้องปรึกษาไฟล์ก่อนที่จะตัดสินใจว่าจะส่งเคียวรี DNS ออกไปเพื่อพูดว่าไม่มีปัญหาใด ๆ ในการรักษาไฟล์ข้อความแบบแบนขนาดนั้น
ฉันสงสัยว่าสิ่งที่เรามีที่นี่คือความล้มเหลวในการสื่อสารในระดับที่สูงขึ้น คุณกำลังพยายามแก้ไขปัญหาอะไรด้วย/etc/hosts
ไฟล์ขนาดมหึมา? ฉันเกือบจะแน่ใจว่ามีทางออกที่ดีกว่านี้
hosts
ไฟล์เพื่อขึ้นบัญชีดำโฆษณา / มัลแวร์ / การติดตาม / ฯลฯ มีรายการที่รวบรวมไว้บนอินเทอร์เน็ตรายการที่ฉันใช้คือ 41k บรรทัดและ 1.1MB ในขนาด
dnsmasq
นั้น - ดูเช่นdnsgate (ซึ่งฉันไม่ได้ลอง)
/etc/hosts
ไฟล์ขนาดใหญ่ได้จากhostsfile.org