Unix 패러다임 중 하나가 구성 파일에 구성 이름(속성 이름이라고도 함)과 구성 값을 모두 저장하는 이유는 무엇입니까?
또 다른 접근 방식은 KISS(Keep It Simple and Stupid) 원칙에 따라 파일 이름에 속성 이름을 저장하고 파일 내부에 구성 값만 저장하는 것입니다. 프로필은 여전히 폴더를 사용하여 정렬할 수 있습니다. 내가 아는 한, 비슷한 것이 이미 Linux의 /proc 내의 일부 파일에 구현되어 있지만 다른 곳에서는 본 적이 없습니다.
내가 아는 한, 유닉스 철학은 "모든 것은 파일이다"라는 것이다. 왜 여기가 아니지?
답변1
구성 파일이 옵션별로 다음과 같은 형식으로 분류되지 않는 이유에 대한 몇 가지 생각은 다음과 같습니다.
config
default
key
key
...
key
other
key
key
...
첫 번째 하위 디렉터리는 구성 유형이며, 그 안의 각 파일(여기서 "키")은 각각 파일의 내용인 값을 갖는 별도의 구성 옵션입니다. 물론 많은 예외를 제외하고 이 모든 것은 제가 그동안 배운 것입니다.
일반적으로 대부분의 UNIX/Linux 유틸리티는 한 번에 하나의 파일에서 작동합니다.한 줄씩, 여러 파일 대신. 왜? 여러 가지 이유가 있지만 이것이 입력을 처리하는 가장 쉬운 방법인 것 같습니다. 프로그래밍 인터페이스에서 볼 때 대부분의 파일은 일련의 줄입니다. 라인(일부 텍스트 뒤에
\n
ASCII 개행 문자가 붙음)은 실제로 파일이 아닌 대부분의 응용 프로그램에서 가장 기본적인 데이터 단위입니다.옆에:터미널은 사용자가 작업할 때 종이에 한 줄씩 인쇄하도록 설계되었습니다. 솔직히 말해서,tty
여전히 직렬 인터페이스로 간주되기 때문에 현대에도 별로 변한 것이 없습니다 .소켓 서버나 기타 데몬과 같은 복잡한 프로그램에 대한 구성 옵션이 매우 많은 상황을 생각해 보십시오. 기본값을 검색하기 위해 수백 개의 파일을 열어야 하는 잠재적으로 파생된 프로그램의 경우 열린 파일 설명자 제한(쉽게 우회됨)과 파일당 몇 가지 시스템 호출이라는 두 가지 처벌이 있습니다. 프로그램이 커널에 파일 읽기 및 열기에 대한 도움을 요청해야 하기 때문에 시스템 호출이 누적될 수 있습니다.
ed
기존 편집기(분명히 승자입니다 :D)sed
나awk
. 수많은 파일 기반 구성 옵션에서 기존 편집 도구를 사용하는 것은 정말 불편합니다. 더욱이, 많은 수의 옵션을 검색하는 것은 편집자에게 실제로 가능한 작업이라기보다는 사용자 쉘에 대한 연습이 될 것입니다. 대부분의 구성 옵션이 단순한 값이라면echo
일부 쉘 IO 리디렉션은 편집기 선택이 될 것입니다(사용자의 선호도를 알고 있다면 나쁘지 않을 수도 있습니다).논평. 구성 파일에는 옵션보다 더 많은 설명이 있을 수 있습니다.진짜댓글처럼요. 구성 파일을 구성 디렉토리로 바꾸다가 갑자기 거기에 불쾌한 라인 기반 파일이 있으면 사람들은 readme 파일을 만드는 데 익숙해지는 것이 좋습니다.
전반적으로 파일 기반 구성은 UNIX/Linux 시스템의 핵심이라고 말하고 싶습니다. 다르게 할 수 있나요? 틀림없이. 현재 패러다임이 최선의 접근 방식인가? UNIX/Linux 시스템에서는 작동할 수 있지만 디렉터리 대체 파일이 입력 인터페이스 지점인 다른 환경에서는 작동하지 않습니다.
답변2
널리 사용되는 텍스트 편집기 Vim을 생각해 보세요. Vim에는 360개 이상의 옵션이 있습니다.추가하다다른 많은 기능은 다양한 방법으로 구성할 수 있습니다. Vim이 시작되면 시스템 전체 초기화 파일, 한두 개의 사용자별 초기화 파일, 그리고 구문 강조, 메뉴 등을 설정하는 몇 가지 초기화 파일 등 몇 가지 초기화 파일을 읽습니다. 제안된 설정에 따라 Vim은 360개가 넘는 시스템 전체 옵션 설정 파일을 찾은 다음(즉, 열려고 시도하고) 360개의 사용자별 옵션 설정 파일을 찾아야 합니다.아직Vim은 스크립트가 가능하고 가장 흥미로운 기능은 스크립트 언어를 사용하여 구성되므로 일반 구성 파일을 읽어야 합니다. 단지 텍스트 편집기를 실행하기 위해 수백 개의 파일을 열려고 하는 것은 꽤 비효율적입니다.
이제 진짜 질문이 나옵니다. 일부 옵션은 다른 옵션에 따라 달라지는 값으로 설정할 수 있습니다. 일반 구성 파일에서는 이것이 간단합니다. 올바른 순서로 설정했는지 확인하세요. 예를 들어, 제안된 설정으로는 "백스페이스" 앞에 "호환 가능" 옵션이 설정되어 있는지 확인할 수 있는 방법이 없습니다. 일반 구성 파일에서 사용자는 스크립트 언어를 사용하여 특정 옵션의 값을 운영 환경에 맞게 조정할 수 있습니다.
당신이 설명하는 것은 실제로 Windows 레지스트리입니다. 레지스트리가 작은 파일 묶음이 아닌 일종의 데이터베이스로 저장되는 이유가 있습니다.