Como posso determinar ou definir o limite de tamanho de /etc/hosts
? Quantas linhas ele pode ter?
Como posso determinar ou definir o limite de tamanho de /etc/hosts
? Quantas linhas ele pode ter?
Respostas:
Os efeitos problemáticos incluem uma resolução lenta do nome do host (a menos que o SO converta de alguma forma a lista linear em uma estrutura de pesquisa mais rápida?) E o potencial para uma interação surpreendente com a tabconclusão do shell bem antes que qualquer tamanho de arquivo significativo seja atingido.
Por exemplo! Se colocar 500.000 entradas de host em/etc/hosts
# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts
para ciência, a tabconclusão padrão do nome do host no ZSH leva cerca de 25 segundos no meu sistema para retornar um prompt de conclusão (concedido, este é um laptop de 2008 com um disco de 5400 RPM, mas ainda assim).
Eu não acho que tenha um limite de tamanho em termos de número de linhas.
Antes do DNS (que foi colocado em uso em 1985), era esse arquivo que servia como o único meio para realizar pesquisas de nome de host, portanto, presumo que isso significa que o arquivo deve ter milhares ou pelo menos centenas de entradas para ser capaz de suportar os nós da Internet pré-1985 mais bem conectados.
Aqui está um exemplo de 1985 (o formato mudou um pouco): http://jim.rees.org/apollo-archive/hosts.txt Este arquivo tem 1680 linhas das quais 1325 são linhas de host. As 355 linhas restantes estão em branco, comentários, redes ou gateways 1 .
O único limite real que eu pude encontrar foi que, em alguns sistemas, as linhas individuais são limitadas a menos de BUFSIZ
caracteres (1024 na minha máquina OpenBSD).
Se você tiver mais do que algumas entradas /etc/hosts
, considere a criação de um servidor de nomes local, mas essa é minha opinião pessoal.
1 Obrigado a Jeff Schaller por desenterrar isso.
/etc/hosts
formato. A maioria dos sistemas Unix nem estava na Internet e, mesmo que houvesse uma máquina, ela não precisava de uma tabela host completa, apenas o punhado de máquinas com as quais precisava conversar. Eu ficaria surpreso se houvesse muitas máquinas com mais de 100 entradas.
Como posso determinar o limite de tamanho de / etc / hosts?
Como é um arquivo comum, o limite corresponderia aos limites do sistema de arquivos subjacente (que seria limitado pelo número de discos atrás dele), menos o espaço usado por quaisquer outros arquivos no mesmo /
sistema de arquivos (provavelmente raiz ( )):
Como posso definir o limite de tamanho de / etc / hosts?
Como é um arquivo editado manualmente, apenas manualmente:
sed -i '100,$d' /etc/hosts
(para remover as linhas 100 e além).
Os limites de tamanho se aplicam apenas ao alocar buffers estáticos. gethostbyname(3)
, que analisa as entradas /etc/hosts
, não aloca buffers estáticos - e nunca o possui. A versão original do algoritmo BSD 4.3 de 1983 mostra um padrão de arquivo aberto, enquanto linha de análise, de fechamento de arquivo:
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();
As implementações modernas mantêm essa herança em todos os aspectos essenciais.
De qualquer forma, internamente, a *hostent
família de funções armazena um ponteiro de arquivo para a linha atual no arquivo. sethostent
abre o arquivo e define a posição do ponteiro do arquivo. gethostent
obtém dados e avança o ponteiro. endhostent
fecha o ponteiro do arquivo. A Biblioteca GNU C oferece uma referência completa sobre essas funções.
Como você pode imaginar na implementação, as entradas que ocorrem no início do arquivo são resolvidas mais rapidamente. Se o seu arquivo hosts for enorme, isso entra em jogo.
Portanto, não importa o tamanho do arquivo, o sistema operacional o consumirá. Eventualmente, porém, você atingirá os limites do sistema de arquivos (de acordo com a resposta de Jeff Schaller ). Você também tem limites máximos de tamanho de linha (de acordo com a resposta de Kusalananda ). Mas, no final, você pode fazer o tamanho que quiser. Mas por favor, não.
... Eu estraguei meu cérebro e, para a minha vida, não consigo pensar em uma única situação ou circunstância em que você abordasse qualquer tipo de problema de limite de tamanho /etc/hosts
- você enfrentaria problemas práticos como os o desempenho atingido na getaddrinfo()
família de chamadas do sistema que todos precisam consultar o arquivo antes de decidir se devem enviar uma consulta DNS, para não falar dos problemas em manter um arquivo de texto simples desse tamanho.
Suspeito que o que temos aqui seja uma falha na comunicação em um nível superior. Que problema você está tentando resolver com um /etc/hosts
arquivo gigantesco ? Estou quase certo de que existe uma solução melhor que essa.
hosts
arquivo para colocar na lista negra anúncios / malware / rastreamento / etc. Existem listas selecionadas na internet, a que eu uso tem 41 mil linhas e 1,1 MB de tamanho.
dnsmasq
para isso - veja, por exemplo, dnsgate (que eu não tentei).
/etc/hosts
arquivo enorme em hostsfile.org