나는 "라는 책을 통해 이 작업을 하고 있습니다.Linux 명령줄 및 쉘 스크립팅 성경, 제2판"책에는 다음과 같은 내용이 있습니다.
일부 Linux 구현에는 부팅 시 자동으로 시작되는 프로세스 테이블이 포함되어 있습니다. Linux 시스템에서 이 테이블은 일반적으로 특수 파일 /etc/inittabs에 있습니다.
널리 사용되는 Ubuntu Linux 배포판과 같은 다른 시스템에서는 부팅 시 개별 응용 프로그램을 시작하고 중지하기 위한 스크립트가 포함된 /etc/init.d 폴더를 사용합니다. 이러한 스크립트는 /etc/rcX.d 폴더의 항목을 통해 시작됩니다. 여기서 X는 실행 수준입니다.
어쩌면 제가 리눅스를 처음 접하고 인용된 두 번째 문단의 의미를 이해하지 못하기 때문일 수도 있습니다. 누군가 더 간단한 언어로 설명할 수 있나요?
답변1
init.d
or 에 대해서는 잊어버리고 rcx.d
일을 매우 단순하게 유지합시다. 다른 스크립트를 하나씩 실행하거나 종료하는 것만 담당하는 프로그램을 작성한다고 상상해 보십시오.
그러나 다음 질문은 순서대로 실행되는지 확인하는 것입니다. 어떻게 실행할 것인가?
scripts
스크립트를 실행하기 위해 폴더를 조사하는 이 프로그램을 상상해 봅시다 . 스크립트의 우선순위를 지정하려면 번호순으로 이름을 지정할 수 있습니다. 이 순서는 init.d
과 사이의 관계를 결정합니다.rc
즉, init.d
실행할 스크립트와 rcX.d
실행해야 하는 순서를 포함합니다.
X
의 값은 rcX.d
런레벨입니다. 이는 운영 체제의 현재 상태로 느슨하게 변환됩니다.
스크립트를 자세히 살펴보면 rcX.d
다음 형식을 찾을 수 있습니다.
Xxxabcd
X
스크립트가 현재 런레벨 에 있어야 하는지 여부를 나타내는K
또는 로 대체됩니다 .S
killed
started
xx
주문번호입니다abcd
스크립트 이름입니다(이름은 중요하지 않지만 실행할 스크립트를 가리킵니다).
답변2
Linux에는 여러 가지 초기화 시스템이 있습니다. 있다시스템 초기화(전통적인),갑자기 나타나다(우분투의 대안)시스템 D(Fedora와 Gnome으로 구동) 디렉터리 /etc/init.d
이며 /etc/rc?.d
SysVinit에서 사용됩니다. 이 책에서는 정보가 약간 오래되었거나(Ubuntu는 다른 사람들처럼 SysVinit을 사용했습니다) 호환성을 위해 디렉토리가 여전히 존재하기 때문에 Ubuntu에서 해당 내용을 언급할 수 있습니다.
/etc/init.d
서비스를 시작하고 중지하기 위한 지침이 포함된 여러 스크립트가 포함되어 있습니다. 이러한 서비스 중 일부는 부팅 시 시작해야 하고, 다른 서비스는 다중 사용자 모드에서 시작해야 하지만 단일 사용자 유지 관리 모드에서는 시작하지 않아야 하며, 다양한 필수 서비스 세트를 사용하여 다양한 모드를 정의할 수 있습니다. SysVinit은 다음을 통해 이 작업을 관리합니다.런레벨. 이 디렉토리에는 /etc/rc$N.d
실행 수준 N( )에 들어갈 때 실행되는 스크립트 /etc/rc$N.d/S*
와 실행 수준 N( )에서 나갈 때 실행되는 스크립트가 포함되어 있습니다 /etc/rc$N.d/K*
. 많은 런레벨에는 공통된 스크립트가 있기 때문에 각 런레벨에 대한 스크립트 사본을 저장하는 대신 스크립트가 한 위치에 저장되고 /etc/init.d
런레벨별 디렉토리에는 /etc/rc?.d
기호 링크가 포함됩니다. 또한 심볼릭 링크의 이름은 해당 런레벨에서 서비스가 시작( S*
)되는지 중지(종료 )되는지를 나타내며 K*
숫자 접두어는 스크립트가 실행되는 순서를 제어하는 데 사용됩니다.
순회를 담당하는 스크립트 는 (Upstart Ubuntu 및 Debian에서, 위치는 다른 Linux 배포판에 따라 다를 수 있음) /etc/rc$N.d
입니다 /etc/init.d/rc
.
답변3
/etc/init.d
초기화 스크립트가 속한 디렉터리입니다.
이것은 etc/rcX.d
런레벨에 들어갈 때 어떤 서비스가 종료되거나 시작되는지 제어하는 링크입니다 X
. K로 시작하는 파일은 rcX.d
매개변수로 실행되고 stop
, K로 시작하는 파일은 S
매개변수로 실행됩니다 start
. 시작 및 중지 시퀀스는 일반적으로 K
또는 뒤에 오는 두 자리 숫자를 사용하여 순서가 지정 됩니다 S
. 올바른 시작 및 중지 시퀀스를 보장하기 위해 두 시퀀스의 합은 일반적으로 100입니다.
링크를 제거하거나 또는 대소문자를 또는 로 변경하여 K
런레벨에서 프로그램을 비활성화할 수 있습니다 .S
k
s
편집: 관리자는 일반적으로 /etc/init.d
배포판에 따라 다른 디렉토리에 대한 심볼릭 링크가 될 수 있는 스크립트를 실행합니다. (배포판마다 표준이 다릅니다.)
rcX.d
실행 레벨을 변경하기 위해 초기화 코드에서 사용됩니다.
답변4
@BillThor가 이미 이 질문에 매우 잘 답변했지만 /etc/rcX.d
및 에 대한 나의 이해는 다음과 같습니다 /etc/init.d
.
/etc/init.d
부팅 시 개별 응용 프로그램을 시작하고 중지하기 위한 스크립트가 포함되어 있습니다./etc/rc?.d
/etc/init.d
디렉토리는 다양한 실행 수준을 나타내며 그 안에 포함된 스크립트는 디렉토리의 실제 스크립트에 대한 기호 링크 에 지나지 않습니다 . 런레벨을 변경하면 매우 기본적인 단일 사용자 모드에서 콘솔 전용 모드, 고급 그래픽 인터페이스 등 시스템 모드가 변경됩니다.
따라서 디렉터리 자체 없이 /etc/rc?.d
디렉터리를 사용할 수 없습니다 /etc/init.d
(물론 그 반대도 마찬가지).