मैं किस आकार की सीमा निर्धारित या निर्धारित कर सकता हूं /etc/hosts
? इसकी कितनी रेखाएँ हो सकती हैं?
मैं किस आकार की सीमा निर्धारित या निर्धारित कर सकता हूं /etc/hosts
? इसकी कितनी रेखाएँ हो सकती हैं?
जवाबों:
समसामयिक प्रभावों में धीमा होस्टनाम रिज़ॉल्यूशन शामिल है (जब तक कि ओएस किसी तरह रैखिक सूची को एक तेज-से-खोज तंत्र में परिवर्तित नहीं करता है?) और tabकिसी भी सार्थक फ़ाइल आकार तक पहुंचने से पहले शेल के साथ आश्चर्यजनक बातचीत की संभावना है।
उदाहरण के लिए! अगर एक जगह 500,000 होस्ट एंट्री होती हैं/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
विज्ञान के लिए, tabZSH में पूरा होने वाला डिफ़ॉल्ट होस्टनाम एक पूरा प्रॉम्प्ट वापस करने के लिए मेरे सिस्टम पर लगभग ~ 25 सेकंड लेता है (दी गई, यह 2008 से 5400 आरपीएम डिस्क के साथ लैपटॉप पर है, लेकिन अभी भी)।
मुझे नहीं लगता कि लाइनों की संख्या के संदर्भ में इसका आकार सीमा है।
DNS (जो 1985 में उपयोग में लाया गया था) से पहले, यह फाइल थी जो होस्ट नाम लुकअप करने के लिए एकमात्र साधन के रूप में सेवा की थी, इसलिए मैं मानता हूं कि इसका मतलब यह है कि फाइल में हजारों या कम से कम सैकड़ों प्रविष्टियां होनी चाहिए। सबसे अच्छी तरह से जुड़े पूर्व 1985 इंटरनेट नोड्स का समर्थन करने में सक्षम हो।
यहां 1985 से एक उदाहरण है (प्रारूप कुछ हद तक बदल गया है): http://jim.rees.org/apollo-archive/hosts.txt इस फ़ाइल में 1680 लाइनें हैं जिनमें से 1325 होस्ट लाइनें हैं। शेष 355 लाइनें रिक्त हैं, टिप्पणियाँ, नेटवर्क या गेटवे 1 ।
एकमात्र वास्तविक सीमा जो मुझे मिल सकती थी, वह यह थी कि कुछ प्रणालियों पर, व्यक्तिगत लाइनेंBUFSIZ
वर्णों से कम (मेरी ओपनबीएसडी मशीन पर 1024) तक सीमित हैं ।
यदि आपके पास कुछ मुट्ठी भर से अधिक प्रविष्टियाँ हैं /etc/hosts
, तो आपको इसके बजाय एक स्थानीय नाम सर्वर स्थापित करने पर विचार करना चाहिए, लेकिन यह मेरी व्यक्तिगत राय है।
1 इस खुदाई के लिए जेफ Schaller के लिए धन्यवाद।
/etc/hosts
प्रारूप में बदलना आम बात थी । अधिकांश यूनिक्स सिस्टम इंटरनेट पर भी नहीं थे, और यहां तक कि अगर एक मशीन थी, तो उसे एक पूर्ण मेजबान तालिका की आवश्यकता नहीं थी, बस मुट्ठी भर मशीनों की जरूरत थी। मुझे आश्चर्य होगा अगर 100 से अधिक प्रविष्टियों के साथ कई मशीनें थीं।
मैं / etc / मेजबानों की आकार सीमा कैसे निर्धारित कर सकता हूँ?
यह एक नियमित फ़ाइल है, इसलिए यह सीमा अंतर्निहित फाइल सिस्टम की सीमाओं के अनुरूप होगी (जो कि इसके पीछे डिस्क की संख्या से खुद को छाया हुआ होगा), उसी (संभवत: रूट ( /
)) फाइल सिस्टम में किसी भी अन्य फ़ाइलों द्वारा उपयोग किए जाने वाले स्थान को घटाता है:
मैं / etc / मेजबान की आकार सीमा कैसे निर्धारित कर सकता हूं?
चूंकि यह मैन्युअल रूप से संपादित की गई फ़ाइल है, केवल मैन्युअल रूप से:
sed -i '100,$d' /etc/hosts
(100 और उससे अधिक लाइनों को हटाने के लिए)।
स्थैतिक बफ़र आवंटित करते समय आकार सीमाएँ केवल लागू होती हैं। gethostbyname(3)
, जो प्रविष्टियों को पार्स /etc/hosts
करता है, स्थैतिक बफ़र आवंटित नहीं करता है - और कभी नहीं। बीएसडी 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
फ़ाइल पॉइंटर बंद करता है। जीएनयू सी लाइब्रेरी इन कार्यों पर गहन संदर्भ प्रदान करती है।
जैसा कि आप कार्यान्वयन से अनुमान लगा सकते हैं, फ़ाइल में पहले से दर्ज प्रविष्टियां तेजी से हल होती हैं। यदि आपका होस्ट फ़ाइल बहुत बड़ा है, तो यह प्ले में आता है।
इसलिए, कोई फर्क नहीं पड़ता कि फ़ाइल कितनी बड़ी है, ओएस इसका उपभोग करेगा। आखिरकार, हालांकि, आप फाइल सिस्टम सीमा (प्रति जेफ स्कॉलर के उत्तर ) से टकराएंगे । आपके पास अधिकतम लाइन आकार सीमाएँ ( कुसलानंद के उत्तर के अनुसार ) हैं। लेकिन, अंत में, आप इसे जितना चाहें उतना बड़ा बना सकते हैं। लेकिन कृपया, नहीं।
... मैंने अपना दिमाग रौंद दिया है और मेरे जीवन के लिए मैं एक भी ऐसी स्थिति या परिस्थिति के बारे में नहीं सोच सकता हूँ जहाँ आप किसी भी प्रकार की आकार सीमा के मुद्दे पर संपर्क करेंगे /etc/hosts
- आप गंभीर जैसी व्यावहारिक समस्याओं में भाग लेंगे getaddrinfo()
सिस्टम कॉल के परिवार में प्रदर्शन हिट है कि सभी को फ़ाइल का परामर्श करने से पहले यह निर्धारित करना होगा कि क्या एक DNS क्वेरी को बाहर भेजना है, यह कहने के लिए कि एक फ्लैट पाठ फ़ाइल को बनाए रखने में कोई समस्या नहीं है।
मुझे संदेह है कि हमारे यहां जो कुछ भी है वह उच्च स्तर पर संवाद करने में विफलता है। आप एक विशाल /etc/hosts
फ़ाइल के साथ क्या समस्या हल करने की कोशिश कर रहे हैं ? मुझे लगभग तय है कि इससे बेहतर समाधान है।
hosts
विज्ञापन / मालवेयर / ट्रैकिंग / आदि को ब्लैकलिस्ट करने के लिए एक फ़ाइल का उपयोग करते हैं । इंटरनेट पर क्यूरेट की गई सूची हैं, मैं जो उपयोग करता हूं वह 41k लाइनों और 1.1MB आकार का है।
dnsmasq
कि प्रदर्शन के लिए उपयोग करना बेहतर होगा - उदाहरण के लिए dnsgate देखें (जो मैंने कोशिश नहीं की है)।
/etc/hosts
फाइल को होस्ट्सफाइल.ऑर्ग