sysctl.conf가 마지막 게임인가요?

sysctl.conf가 마지막 게임인가요?

sysctl.conf지난 게임에 관한 공식 문서는 어디서 찾을 수 있나요?

따라서 파일에는 두 개의 항목이 있습니다 /etc/sysctl.conf.

vm.swappiness=10
vm.swappiness=11

어느 쪽이 이길까요? 마지막 하나? 디렉토리에 파일이 있으면 어떻게 되나요 /etc/sysctl.d?

답변1

이런 공식적인 문서는 없는 것 같아요. sysctl항목은 다음에 의해 처리됩니다.procps및 시스템이지만 두 프로젝트의 문서에는 동일한 구성 파일의 항목을 처리하는 방법이 설명되어 있습니다.

즉, sysctl.conf다른 파일(해당 파일 또는 다른 위치)이 있더라도 /etc/sysctl.d어떤 시스템 로드 설정이 사용되는지에 관계없이 마지막 항목이 적용됩니다.

procps

항목을 처리하는 방법을 이해하려면 다음 사항 procps을 살펴봐야 합니다.소스 코드sysctl. 이는 이전 항목에 대한 지식 없이 나중 항목이 처리되므로 마지막 항목이 승리함을 나타냅니다(해당 Preload함수 참조). 여러 구성 파일이 명령줄에 제공되면 구성 파일은 다음에 설명된 대로 순차적으로 처리됩니다.매뉴얼 페이지:

이 옵션을 사용하면 인수가 sysctl지정된 순서대로 읽혀지는 파일임을 의미합니다.

이 옵션을 사용하면 상황이 조금 더 복잡해집니다 --system. 그러나 최소한 문서화되어 있습니다.

모든 시스템 구성 파일에서 설정을 로드합니다. 위에서 아래로 주어진 순서대로 다음 목록의 디렉터리에서 파일을 읽습니다. 지정된 파일 이름을 가진 파일이 로드되면 후속 디렉터리에 있는 동일한 이름을 가진 모든 파일은 무시됩니다.

  • /run/sysctl.d/*.conf
  • /etc/sysctl.d/*.conf
  • /usr/local/lib/sysctl.d/*.conf
  • /usr/lib/sysctl.d/*.conf
  • /lib/sysctl.d/*.conf
  • /etc/sysctl.conf

문서가 완전하지 않습니다. 위에서 언급했듯이 특정 파일의 항목은 순차적으로 적용되어 동일한 설정에 대해 이전에 지정된 모든 값을 재정의합니다. 추가적으로 PreloadSystem함수를 보면 파일이 이름순으로 처리되고, /etc/sysctl.conf무조건 (이전 디렉터리에 있는 동일한 이름의 파일은 덮어쓰지 않습니다.)

체계

systemd에는 자체 sysctl핸들러가 있으며 다음 문서에 설명되어 있습니다.sysctl.d도움말 페이지;우선순위에 관한 섹션이 있습니다:

/etc/구성 파일은 , /run/, 및 우선 순위에 따라 디렉터리에서 읽혀집니다 . /usr/lib/이러한 구성 디렉터리의 각 구성 파일은 다음 형식으로 이름이 지정됩니다.filename.conf. 의 파일은 /etc/와 동일한 이름의 파일을 덮어씁니다 . 의 파일을 덮어씁니다./run//usr/lib//run//usr/lib/

[...] 모든 구성 파일은 해당 파일이 위치한 디렉터리에 관계없이 파일 이름을 기준으로 사전순으로 정렬됩니다. 여러 파일이 동일한 옵션을 지정하는 경우 사전순으로 최신 이름을 가진 파일 항목이 우선합니다. 파일 정렬을 단순화하려면 모든 파일 이름 앞에 두 자리 숫자와 대시를 붙이는 것이 좋습니다.

마찬가지로 단일 구성 파일의 후속 항목은 이전 항목을 덮어씁니다.

답변2

이 주장을 하는 보다 실용적인 방법은 다음과 같습니다.

sysctl가장 먼저 해야 할 일: 단어 앞에 접두사를 붙이면 값이 적용되지 않습니다 sysctl.conf("맨페이지는 ㅋㅋㅋ"당신이 말한 대로지만 주의 깊게 읽지 않는 것 같습니다.) 그리고 이것을 테스트하는 것은 간단한 작업입니다./etc/sysctl.conf

vm.swappiness = 60
vm.swappiness = 61

나는 이것이 시스템 로드에 따라 작은 차이를 만드는 영향이 적은 sysctl이라는 것을 알고 있기 때문에 여기서 swappine을 사용하고 있습니다(기본값은 대부분의 배포판에서 60입니다). 다음을 입력하여 이 파일만 적용하세요.sysctl -p /etc/sysctl.conf(맨페이지). 값을 다시 확인하세요.sysctl -a

root@host:~# sysctl -a | grep "vm.swappiness"
vm.swappiness = 61

바라보다.

이제 하향식 접근 방식을 통해 파일을 읽는다는 것을 알았습니다. 단지 읽기만 하면 됩니다.sysctl.d맨페이지는 시스템에 sysctl 파일을 전파하는 우선 순위에 대한 정보를 제공합니다. @Stephen Kitt의 답변에서 이미 설명했듯이 여기서는 이 정보를 반복하지 않겠습니다.

또한 sysctl.d이 디렉토리의 우선순위는 사용 중인 배포판이 systemd를 기반으로 하는지 여부에 따라 달라집니다.

답변3

나중에 누군가 이것을 발견하고 시스템에 procps(RHEL, CentOS 등)가 없으면 "systemctl --system" 및 "systemd-sysctl.service"가 다른 순서로 디렉토리를 적용하는 것을 볼 수 있습니다. 이므로 파일명 파일 순서대로 덮어쓰는 것에 주의하세요. sysctl 재정의의 경우 마지막으로 읽은 값이 적용되므로 파일 이름 순서가그리고디렉토리의 순서가 중요합니다.

관련 정보