나는 웹사이트 인터셉터를 작성하려고 하는데 내가 찾은 가장 쉬운 방법은 /etc/hosts의 끝에 해당 줄을 넣는 것입니다. 백만 개의 웹사이트가 localhost로 리디렉션되어 인터넷 검색이나 정상적인 운영 체제 작동 속도가 느려지는 것을 차단하고 싶지 않다면 어떻게 해야 할까요?
답변1
다른 플랫 파일 데이터베이스와 동일합니다.
이것은 실제로 일반적인 현상입니다.
이 문제는 파일 형식에 내재된 문제이며 /etc/passwd
, /etc/group
, 에도 동일하게 적용됩니다 /etc/shells
. /etc/phones
,,,,및 기타. /etc/ttys
이러한 파일은 색인화되거나 정렬되지 않으므로 모든 조회는 가능하면 전체 파일에 대한 순차적 스캔이어야 합니다. 존재하지 않는 항목 찾기/etc/services
/etc/fstab
/etc/hosts
~ 해야 하다파일의 각 레코드를 읽습니다. 삽입과 삭제는 반드시 읽어야 합니다.쓰기파일의 각 기록.
BSD가 사용자 계정 데이터베이스를 이 플랫 파일 형식에서 Berkeley DB로 변환한 이유 /etc/pwd.db
가 있습니다 /etc/spwd.db
. 그게 전부입니다. 버클리 데이터베이스예index로 검색되며, 파일의 처음부터 순차적으로 검색되지 않습니다. 이것은하나DNS가 작동합니다(플랫 파일 액세스 방법이 HOSTS.TXT
문제의 원인 중 하나이며, 이 파일을 네트워크를 통해 복제하는 것도 또 다른 원인입니다).
그렇기 때문에 이메일 시스템에는 CDB, Berkeley DB 및 기타 형식의 데이터베이스가 포함되어 도메인 목록 및 가상 사용자 계정과 같은 항목을 설정합니다. 대조적으로, C 라이브러리는 대신 다른 데이터베이스 형식을 사용하도록 제안하지 않습니다 /etc/hosts
.
또한 쉘의 특수 명령 매개변수 완성부터 네트워크 도구 및 시스템 모니터링/관리 유틸리티, 인쇄, WWW 브라우저 및 이메일 시스템에 이르기까지 이 테이블에서 조회를 수행하는 것과 관련된 많은 작업이 있습니다.
수백만 개의 레코드가 포함된 플랫 파일 데이터베이스는 이에 대한 나쁜 생각입니다.
파일이 부분적으로 덮어쓴 상태(매우 바람직하지 않은 결과를 초래할 수 있음)에 있다는 것을 시스템이 인식하지 않도록 삽입과 삭제가 원자적으로 수행되어야 한다는 사실도 다루지 않았습니다. 이것그런 일은 없을 거야귀하의 접근 방식이 텍스트 편집기에서 파일을 순진하게 여는 것이라면. 기본적으로 대부분의 텍스트 편집기는 기본적으로 원자 파일 업데이트를 수행하지 않습니다. 플랫 파일 데이터베이스, 특히 대규모 데이터베이스는 순진하게 상상하는 것보다 더 신중한 처리가 필요합니다. 아니, 바로 그 사람들이야아니요"단순한 텍스트 파일"입니다.
물론 이름 조회를 사용하여 WWW 서버에 대한 액세스를 필터링하는 것도 좋지 않은 메커니즘입니다.