리눅스 부츠

알고 보니, 부팅 과정에 많은이 없다 :

1. 부트 로더를 메모리에로드하고 시작, 디스크에 커널 이미지를 찾습니다.
2. 커널은 장치와 STI 드라이버를 초기화합니다.
3. 커널은 루트 파일 시스템을 마운트합니다.
4. 커널은 일정을 호출 init에게 시작합니다.
5. 초기화 모션의 프로세스의 나머지 부분을 설정합니다.
6. 부팅 시퀀스의 일부로 초기화 시작하면 로그온 할 수 있도록하는 마지막 처리합니다.

부팅 프로세스의 각 단계를 식별하는 것은 부팅 문제를 해결하고 전체 시스템을 이해하는데 매우 중요한 것이다. 시작하려면 초기 화면이있는 부트 로더에 집중할 또는 컴퓨터가 실행되는 운영 체제를 묻는 자체 테스트에 전원 성병의 수행 후 당신이 얻을하라는 메시지를 표시합니다. 당신이 선택을 한 후, 부트 로더는 커널에 시스템을 제어 나눠, 리눅스 커널을 실행합니다.

다른 곳에서이 문서를 발췌되는이 책에서 커널에 대한 자세한 설명이 있습니다. 이 문서를 포함 커널 초기화 단계, 커널은 시스템의 하드웨어 존재에 대한 메시지의 무리를 출력 스테이지. 커널은 커널이 설치되었음을 선포하는 메시지를 표시 한 직후 초기화 시작 루트 파일 시스템:

VFS : 마운트 루트 (ext2 파일 시스템) 읽기 전용.

곧 후, 시스템 서비스 시작 메시지 다음에 초기화 시작에 대한 메시지를보고, 마지막으로 당신은 어떤 종류의 로그인 프롬프트를 얻을 것이다.

노트 :에 레드햇 리눅스는 "레드햇 리눅스가."모든 메시지는 그 후 화면의 오른쪽에 괄호 안에 성공 또는 실패를 보여주기 위해 당신을 "환영"때문에, 초기화 노트, 특히 분명하다.

당신이 가장 컨트롤이 부팅 순서의 WHERE 부분이기 때문에이 장의 대부분은 초기화와 함께 다룹니다.
INIT

INIT 특별한 것은 아무것도 없습니다. 그것은 리눅스 시스템의 다른 모든 같은 일정입니다, 당신은 다른 시스템 바이너리와 함께 / sbin에 그것을 찾을 수 있습니다. INIT의 주요 목적은 특정 시퀀스에서 다른 프로그램을 시작하고 중지하는 것입니다. 당신이 알아야 할 모든이 시퀀스가​​ 작동하는 방법이다.

거기에 몇 가지 변화가 있지만, 대부분의 리눅스 배포판은 여기에 설명 된 시스템 V 스타일을 사용합니다. 일부 배포판은 BSD 초기화와 유사한 간단한 버전을 사용하지만이 발생할 가능성이 있습니다.

런레벨

리눅스 시스템에서 주어진 시간에, 기본 특정 프로세스 집합이 실행 중입니다. 기계의이 상태는 ITS 런레벨이라고, 그것은을 통해 0 6에서 숫자로 표시된다. 시스템은 하나의 런레벨에서 성병의 대부분의 시간을 보낸다. 다른 런레벨로하지만, 당신은 컴퓨터를 종료, 초기화 스위치 질서 년 시스템 서비스 종료 및 중지를위한 커널에게 알리기 위해합니다. 또 다른 런레벨이 단일 사용자 모드이며, 나중에 논의했다.

실행 레벨에 대한 핸들을 얻을 수있는 가장 쉬운 방법은 초기화 설정 파일을 검사하는 것입니다은 / etc / inittab에. 다음과 같은 줄을 찾습니다 :

ID : 5 : initdefault :

이 줄은 시스템의 기본 런레벨은 5을 의미합니다. inittab 파일의 모든 라인은 다음과 같은 순서로 발생 콜론으로 구분 된 네 개의 필드로,이 양식을 가지고 :
# 고유 식별자 (짧은 문자열, 이러한 앞의 예에서 ID로)
# 해당 런레벨 번호 (들)
조치를 취해야 # 초기화 (앞의 예에서, 작업은 5에 기본 런레벨을 설정하는 것입니다)
실행하기 # 명령 (옵션)

명령은 기본 런레벨 설정의 맥락에서 이해가되지 않기 때문에 위의 initdefault 예에서 실행하는 명령은 없습니다. 이 같은 줄을 볼 때까지, 더 아래 inittab에있는 작은 봐 :

l5 : 5 : :/ 등 / 대기 시킬수있다 / RC 5

이 줄의 rc *을 통해 시스템 구성 및 서비스의 대부분을 트리거합니다. D 및 init.d 디렉토리에이. 당신은 INIT을 / etc / rc.d의 / RC 5 5 런레벨에서 호출 명령을 실행하도록 설정되어 볼 수 있습니다. 언제 어떻게 초기화 실행 명령 대기 작업을 알려줍니다 다른 아무것도하기 전에 완료하려면이 명령 기다립니다 번 런레벨 5 5를 입력 할 때 RC를 실행합니다.

이 initdefault 기다, 특히 전원 관리에 관한 이외에 몇 가지 다른 작업을하고, inittab 파일 (5) 매뉴얼 페이지 모든 그들에 대해 알려줍니다. 사람은 다음 절에 설명되어 그 만남이 가장 가능성이 높아집니다.

리스폰

부활 조치는 다음 명령을 실행 INIT 발생하고 명령이 완료되면 실행이 다시 실행할 수 있습니다. 당신은 inittab 파일에이 행과 비슷한 뭔가를 볼 가능성이있어 :

1 : 2345 : 부활 :/의 sbin / mingetty tty1

게티 프로그램은 로그인 프롬프트를 제공합니다. 앞의 줄은 첫 번째 가상 콘솔 (/ dev에 / tty1), 당신은 ALT 또는 CONTROL-ALT-F1 F1을 누르면 볼 하나입니다. 로그 아웃 한 후 리스폰 작업은 로그인 프롬프트를 다시 제공합니다.

ctrlaltdel 명령

당신은 가상 콘솔 CONTROL-ALT-DELETE 키를 누르면 시스템이 무엇 ctrlaltdel 명령 작업을 제어합니다. 대부분의 시스템에서이 shutdown 명령을 사용하여 reboot 명령의 일종이다.

내의 sysinit

내의 sysinit 작업은 시작 때 어떤 런레벨을 입력하기 전에 실행해야합니다 초기화 최초의 것입니다.

어떻게 실행 레벨의 프로세스가 시작

당신은 지금 당신이에 로그온 할 수 있습니다 바로 전에 어떻게 초기화는 시스템 서비스를 시작 배울 준비가되어 있습니다. 이전 버전에서이 inittab에 라인을 호출 :

l5 : 5 : :/ 등 / 대기 시킬수있다 / RC 5

이 작은 줄은 대부분의 다른 프로그램을 트리거합니다. RC는 실행 명령을 의미합니다, 당신은 사람들이 스크립트, 프로그램 또는 서비스로 명령을 참조하십시오 들립니다. 그래서,이 명령은 어쨌든 어디?

런레벨 5를 들어,이 예에서 명령을 / etc에 / rc.d의 / rc5.d 또는 / etc / rc5.d이든 아마. 런레벨 1는 rc1.d, 런레벨 2 rc2.d의 사용 등을 사용합니다. 당신은 rc5.d GMT 디렉토리에있는 항목을 찾을 수 있습니다 :

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

RC 5 명령은 GMT 명령을 실행하여이 런레벨 디렉토리에서 프로그램을 시작합니다 :

S10sysklogd 홈
S12kerneld 홈
S15netstd_init 홈
S18netbase 홈

S99sshd 홈

각 명령의 시작 인수를 확인할 수 있습니다. 순서 RC 명령을 시작 WHERE 시작 모드에서 명령을 실행해야하는 명령 이름을 의미하며, 수 (00 통해 99)에서 S를 결정합니다.

의 rc *. D 명령은 일반적으로 / sbin이나 / usr / sbin의 프로그램을 시작할 쉘 스크립트입니다. 일반적으로, 당신은 명령 중 하나가 실제로 작거나 호출기 다른 프로그램과 스크립트를보고 않으며하여 알아낼 수 있습니다.

당신은 손으로 이러한 서비스 중 하나를 시작할 수 있습니다. 수동으로 아파치 웹 서버 소프트웨어를 시작하려는 경우 예를 들어, S99httpd 시작을 실행합니다. 당신은 컴퓨터가 켜져있을 때 서비스 중 하나를 죽일 필요로하는 경우에 마찬가지로, 당신은 RC에서 명령을 실행할 수 있습니다 *. 정지 인수 (S99httpd 정지, 예를 들어)와 D 디렉토리입니다.

약간의 rc * 명령 (모드를 "죽일"또는 중지)를 K로 시작 포함되어 있습니다. D 디렉토리. 이 경우, RC 대신 가정의 정지 인수와 함께 명령을 실행합니다. 당신은 시스템을 종료 런레벨에서 K 명령을 발생할 가능성이 가장 높습니다.

서비스를 추가 및 제거

당신은 RC *. D 디렉토리에 서비스를 추가, 삭제 또는 수정하려는 경우, 당신은 내부의 파일에서 자세히 살펴볼 필요가있다. 긴 목록은 다음과 같은 구조를 보여준다 :

lrwxrwxrwx. . . S10sysklogd -> .. / init.d에 / 위해서는 sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d에 / kerneld가
lrwxrwxrwx. . . S15netstd_init -> .. / init.d에 / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d에 / 위해 netbase

올해의 명령 RC *. D 디렉토리는 실제로 년 init.d를 디렉토리에있는 파일에 대한 심볼릭 링크이다 보통 / 등 또는 / etc / rc.d.에 리눅스 배포판에 대한 이러한 링크는 그들은 모두 실행 레벨에 같은 시작 스크립트를 사용할 수 포함되어 있습니다. 이 협약은 요구 사항의 어떠한 의미하는 것입니다,하지만 종종 좀 더 쉽게 조직 만듭니다.

특정 런레벨에서 실행 init.d에 디렉토리에있는 명령 중 하나를 방지하기 위해, 당신은 적절한 RC *. D 디렉토리에 심볼릭 링크를 제거하는 생각할 수 있습니다. 이 작업을 수행,하지만 당신이 실수를하고도 다시 제자리에있는 링크를 둘 필요가있는 경우에, 당신은 링크의 정확한 이름을 기억하는 문제가있을 수 있습니다. . 따라서 RC에 * D 디렉토리를 링크를 제거하지 말고 오히려이 같은 링크 이름의 시작 부분에 밑줄 (_)을 추가합니다 :

MV의 S99httpd의 _S99httpd

그것은 또한 S 또는 K.로 시작하지 않기 때문에 부팅시에 RC는 _S99httpd 무시, 원래 이름은 아직 분명하다, 그리고 당신이 핀치에있어 손으로 그것을 시작해야하는 경우 명령에 빠르게 액세스 할 수 있습니다.

서비스를 추가하려면, 당신은 init.d를 디렉토리에있는 다른 사람과 같은 스크립트를 만든 다음 올바른 RC *. D 디렉토리에 심볼릭 링크를 만들어야합니다. 스크립트를 작성하는 가장 쉬운 방법은 이미 init.d에있는 스크립트를 검사하는 것입니다, 당신이 이해하는 하나의 복사본을 만들고, 복사본을 수정합니다.

서비스를 추가 할 때, 당신은 서비스를 시작하기 위해 부팅 순서에 적절한 장소를 선택해야합니다. 서비스가 너무 빨리 시작하면, 그것은 다른 어떤 서비스에 대한 종속성으로 인해 작동하지 않을 수 있습니다. 중요하지 않은 서비스의 경우, 대부분의 시스템 관리자는 시스템과 그 캠 대부분의 서비스 후, 90s에 숫자를 선호합니다.

일반적으로 리눅스 배포판의 rc *에서 서비스를 사용하거나 사용하지 않도록 설정하는 명령 이용하실 수 있습니다. D 디렉토리는. 예를 들어, 데비안, 명령이 갱신 시킬수있다, 그리고 레드햇 리눅스에서,이 명령은 chkconfig에 있습니다. 그래픽 사용자 인터페이스도 사용할 수 있습니다. 이 프로그램을 사용하면 시작 디렉토리가 일관성을 유지하는 데 도움이 업그레이드를하는 데 도움이됩니다.

: 가장 일반적인 리눅스 설치 문제 중 하나는 올해 부적절하게 구성된 서버 XFree86 즉에 제스처 및 해제, 콘솔 시스템을 사용할 수 없게. 단일 사용자 모드로이 동작, 부팅을 중단하고 런레벨 또는 런레벨 서비스를 변경할 수 있습니다. XDM 당신의 RC *에있는 GDM이나 KDM. D 디렉토리, 또는을 / etc / inittab 파일을 포함하는 무언가를 찾습니다.

초기화 제어

때때로, 당신은 inittab 파일을 다시 읽기, 또는 시스템을 종료하기 위해 실행 레벨을 전환 할 말을 초기화 조금 킥를 제공해야합니다. 초기화는 항상 시스템의 첫 번째 프로세스이므로, STI 프로세스 ID는 항상 1입니다.

당신은 telinit init에 제어 할 수 있습니다. 당신이 런레벨 3로 전환하려는 경우 예를 들어, 다음 명령을 사용합니다 :

telinit 3

실행 레벨을 전환 할 때, 초기화는 aren'ta을 죽일 시도하는 새로운 런레벨 inittab 파일에서 처리합니다.에게 따라서 런레벨 변경에주의해야한다.

당신은 추가하거나 제거 리스폰 작업을하거나 inittab 파일에 다른 변경을해야하는 경우, 당신은 변화를 초기화 이야기하고 파일을 다시 읽어 원인이 있어야합니다. 어떤 사람들은이 작업을 수행하기 위해 초기화 알려 죽일-HUP 1를 사용합니다. 이 전통적인 방법을 사용하면 올바르게 입력 한, 유닉스의 대부분 버전에서 작동합니다. 그러나, 당신은 또한이 telinit 명령을 실행할 수 있습니다 :

telinit q를

당신은 또한 단일 사용자 모드로 전환 telinit의를 사용할 수 있습니다.

종료

또한 초기화 시스템이 종료 방법을 제어하고 재부팅됩니다. 리눅스 시스템을 종료하는 적절한 방법은 shutdown 명령을 사용하는 것입니다.

종료를 사용하는 두 가지 기본 방법이 있습니다. 시스템을 중지하면 컴퓨터를 종료하고 아래로 유지합니다. 즉시 기계를 정지하려면 다음 명령을 사용합니다 :

종료 - H 기업

리눅스 합리적으로 최신 버전의 가장 현대적인 기계에서 정지는 시스템의 전원을 잘라냅니다. 당신은 또한 컴퓨터를 재부팅 할 수 있습니다. 재부팅, INSTEAD OF-R-H를 사용합니다.

종료 프로세스는 몇 초 정도 걸립니다. 이 단계에서 기계 떨어져 재설정하거나 전원을해서는 안됩니다.

앞의 예에서, 지금 종료 시간입니다. 이 인수는 필수입니다 만, 지정의 방법은 여러 가지가 있습니다. 당신은 미래에 언젠가는 내려 가서 기계를 원한다면, 한 가지 방법은 사용하기 + n은 그 일을해야하기 전에 분 종료 대기의 수 N을 수 있습니다. 다른 옵션, 종료 (8) 매뉴얼 페이지를 봐주세요.

시스템이 10 분을 재부팅하려면 다음 명령을 실행합니다 :

종료 - R + 10

리눅스에서 종료 컴퓨터가 다운되는 로그온 한 사람에게 알려,하지만 약간의 실제 작업을 수행합니다. 지금이 아닌 다른 시간을 지정하면 호출 종료는 / etc / nologin 파일을 만듭니다. 이 파일이 존재하면, 시스템은 수퍼 유저를 제외한 모든 사용자가 로그인을 금지합니다.

시스템 종료 시간이 드디어 도착하면, 종료 재부팅 중단하고 런레벨을 위해 실행 레벨 0 6로 전환 init을 알려줍니다. : 당신은 rc0.d 및 rc6.d 내부의 스크립트를 보면 확인 할 수 런레벨 초기화 또는 0 6, 다음의 모든이 이루어지는를 입력하면

1. 초기화는 그것이 (다른 실행 레벨로 전환 할 때와는 것입니다) 수있는 모든 프로세스를 죽인다.

# 초기 rc0.d / rc6.d 명령은 위치에 시스템 파일을 잠금 및 종료에 대한 다른 준비를 실행합니다.
# 다음 rc0.d / rc6.d 명령은 루트 이외의 모든 파일 시스템을 마운트 해제합니다.
# 추가 rc0.d / rc6.d 명령은 루트 파일 시스템을 읽기 전용으로 다시 마운트합니다.
# 아직 더 rc0.d / rc6.d 명령은 모든 동기화 프로그램을 파일 시스템에 버퍼 아웃 쓴다.
# 마지막 rc0.d / rc6.d 명령은 부팅, 정지 또는 전원 끄기 프로그램을 재부팅하거나 중지 할 커널을 알려줍니다.

재부팅 정지 프로그램은 잠재적으로 혼란을 일으키는 각각의 런레벨에 따라 다르게 동작합니다. 기본적으로이 프로그램은-r 또는-H 옵션으로 종료 호출하지만, 시스템이 정지 또는 재부팅 런레벨에 이미있는 경우, 프로그램은 즉시 자체 차단 커널을 말한다. 당신이 정말로 급한 (무질서한 종료로부터의 손상을 무시)에 컴퓨터를 종료 할 경우,-f 옵션을 사용합니다.

코멘트를 남겨

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터 처리 방법 알아보기.