Linux에서 "/etc/init.d"와 "/etc/rcX.d"디렉토리 사이의 연결은 무엇입니까?


25

" Linux Command Line and Shell Scripting Bible, Second Edition "이라는 책에서 명령 행을 배우고 있습니다. 이 책은 이렇게 말합니다.

일부 Linux 구현에는 부팅시 자동으로 시작되는 프로세스 테이블이 포함되어 있습니다. Linux 시스템에서이 테이블은 일반적으로 특수 파일 / etc / inittabs에 있습니다.

널리 사용되는 Ubuntu Linux 배포와 같은 다른 시스템은 부팅시 개별 응용 프로그램을 시작 및 중지하기위한 스크립트가 포함 된 /etc/init.d 폴더를 사용합니다. 스크립트는 /etc/rcX.d 폴더 아래의 항목을 통해 시작됩니다. 여기서 X는 실행 레벨입니다.

아마 리눅스를 처음 접했기 때문에 두 번째 단락의 의미를 이해하지 못했습니다. 누군가가 훨씬 더 평범한 언어로 똑같이 설명 할 수 있습니까?


이것은 여러 번 전에
bsd

@bdowning 이것은 다릅니다. 상황이 있습니다. 연결 한 페이지에 표시되는 질문은 IMO와 다릅니다.
its_me

@bdowning off,하지만 중복 된 플래그는 더 유익한 정보를 제공합니다.
n611x007

답변:


30

잊자 init.d 또는 rcx.d매우 간단하게하기. 다른 스크립트를 하나씩 실행하거나 종료하는 것이 전적으로 책임이있는 프로그램을 프로그래밍했다고 가정 해보십시오.

그러나 다음 문제는 순서대로 실행되도록하는 것입니다. 어떻게 그렇게 하시겠습니까?

이 프로그램이 scripts 스크립트를 실행하기 위해 폴더 해 봅시다. 스크립트의 우선 순위를 정하기 위해 이름을 지정할 수 있습니다. 이 순서는 관계 지시 무엇 init.drc

다른 말로 init.d 실행할 스크립트와 실행 rcX.d순서가 포함됩니다.

XrcX.d 은 실행 수준입니다. 이것은 OS 현재 상태로 느슨하게 변환 될 수 있습니다.

rcX.d스크립트 를 파면 다음 형식을 찾을 수 있습니다.

Xxxabcd
  • X스크립트로 또는 현재 실행 레벨 에 있는지 여부를 나타내는 K또는 로 대체 됩니다.Skilledstarted
  • xx 주문 번호입니다
  • abcd 스크립트 이름입니다 (이름은 관련이 없지만 해당 위치는 스크립트가 실행될 것입니다).

2
훌륭한 설명, 매우 명확합니다. 감사합니다 @whoami
its_me

9

Linux에는 여러 가지 init 시스템이 있습니다. 주요한 것은 SysVinit (전통적인 것), Upstart (우분투의 대체품) 및 SystemD (Fedora와 Gnome이 제공 한 것)입니다. 디렉토리 /etc/init.d/etc/rc?.d SysVinit에서 사용됩니다. 이 책은 정보가 약간 날짜가 났기 때문에 (우분투는 다른 사람처럼 SysVinit를 사용하는 데 사용됨) 또는 호환성을 위해 해당 디렉토리가 여전히 존재하기 때문에 우분투와 관련하여 언급 할 수 있습니다.

/etc/init.d서비스를 시작 및 중지하기위한 지침이 포함 된 여러 스크립트가 포함되어 있습니다. 이러한 서비스 중 일부는 부팅시 시작해야합니다. 다른 사용자는 다중 사용자 모드에서 시작해야하지만 단일 사용자 유지 관리 모드에서는 시작하지 않아야합니다. 다양한 원하는 서비스 세트로 다른 모드를 정의 할 수 있습니다. SysVinit는 runlevels를 통해이를 관리합니다 . 디렉토리 /etc/rc$N.d에는 런레벨 N ( /etc/rc$N.d/S*)을 입력 할 때 실행할 스크립트와 런레벨 N ( /etc/rc$N.d/K*)을 떠날 때 실행할 스크립트가 들어 있습니다 . 많은 런레벨에는 각 런레벨에 대한 스크립트 사본을 저장하지 않고 공통의 스크립트가 있으므로 스크립트는 모두 단일 위치 /etc/init.d및 런레벨 별 디렉토리에 저장됩니다./etc/rc?.d심볼릭 링크를 포함합니다. 또한 심볼릭 링크의 이름은 해당 런레벨에서 서비스를 시작 ( S*) 또는 중지 (킬 (kill)) 할지 여부를 나타내며 K*숫자 접두어를 사용하여 스크립트 실행 순서를 제어합니다.

순회를 담당하는 스크립트 /etc/rc$N.d/etc/init.d/rc(Upstart 이전 우분투 및 데비안에서, 위치는 다른 Linux 배포판에 따라 다를 수 있습니다).


그래서, 우분투는 사용하지 않는 /etc/init.d/etc/rc?.d더 이상, 대신 갑자기 출세이있다?
its_me

1
@ KrishD'Souza 확실하지 않습니다. 우분투 대신 SysVinit에서의 무례한를 사용하지만, 많은 패키지가 여전히 스크립트 제공 /etc/init.d(대신 갑자기 출세의의 .conf의 파일을 /etc/init) 갑자기 출세 여전히 지원하므로 /etc/init.d/etc/rc?.d호환성을 위해.
Gilles 'SO- 악마 그만해'

Ubuntu는 15.04 이후 Upstart에서 systemd로 전환했습니다. 따라서 현재 (16.04) Ubuntu에는 SysVinit, Upstart 및 systemd의 세 가지 init 시스템이 있습니다. 첫 번째와 두 번째는 이전 버전과의 호환성을 위해 남겨졌습니다.
PetroCliff

4

/etc/init.d init 스크립트가 속하는 디렉토리입니다.

etc/rcX.d어디 서비스가 사망하거나 실행 레벨을 입력 할 때 시작되는 제어 링크 X. rcX.dK 로 시작하는 파일 은 매개 변수 로 실행되고로 stop시작하는 파일 S은 매개 변수로 실행됩니다 start. K또는 뒤에 두 자리 숫자를 사용하여 순서를 시작하고 순서를 정하는 것이 일반적 S입니다. 올바른 시작 및 중지 순서를 보장하기 위해 두 시퀀스가 ​​최대 100을 추가하는 것이 일반적입니다.

프로그램은 링크를 제거하거나의 경우 변경하여 실행 수준에서 비활성화 할 수 있습니다 K또는 Sk또는 s.

편집 : 관리자는 일반적으로 /etc/init.d배포에 따라 다른 디렉토리에 대한 심볼릭 링크 일 수있는 스크립트를 실행합니다 . (다른 배포판은 표준이 다릅니다.)

rcX.d실행 레벨을 변경하려면 초기화 코드에 의해 사용됩니다.


대부분의 시스템에서 /etc/init.d디렉토리 아래의 심볼릭 링크입니다/etc/rc.d/init.d
Nikhil Mulley

1
따라서 기본적으로 /etc/init.d는 쓸모가 /etc/rcX.d없습니까? 그리고 /etc/rcX.d시작시 시작되는 프로그램의 컨트롤러 이기 때문에 기능이 비슷 /etc/init.d합니까?
its_me

이것은 시스템에 따라 다릅니다. 예를 들어, 젠투는 init 파일에 대해 /etc/init.d만을 사용합니다. /etc/rc*.d 디렉토리가 없습니다. 마찬가지로 아치 리눅스는 /etc/init.d 대신 /etc/rc.d 만 가지고 있습니다.
laebshade

1

@BillThor 아주 잘 anwered했지만, 여기에 대한 이해의 /etc/rcX.d/etc/init.d:

  • /etc/init.d 부팅시 개별 응용 프로그램을 시작 및 중지하기위한 스크립트가 들어 있습니다.
  • /etc/rc?.d디렉토리는 다양한 실행 레벨을 나타내며 그 안에 포함 된 스크립트는 /etc/init.d디렉토리 의 실제 스크립트에 대한 상징적 인 링크 일뿐입니다 . 실행 레벨을 변경하면 매우 기본적인 단일 사용자 모드에서 콘솔 전용 모드로, 고급 그래픽 인터페이스로 시스템 모드가 변경됩니다.

따라서 자체가 /etc/rc?.d없는 디렉토리 는 사용하지 않습니다 /etc/init.d(물론 그 반대도 마찬가지입니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.