읽다"중지 명령과 종료 명령의 차이점은 무엇입니까?", 나는 일반적으로 -h/-r 옵션이 있든 없든 shutdown 명령이 수행하는 작업을 알고 있습니다.
"halt" 명령은 시스템 전원을 시스템 런레벨 0으로 종료합니다.
"shutdown" 명령은 -h 또는 -r 명령을 사용하지 않고 시스템 전원을 실행 수준 1로 종료합니다.
그렇다면 "poweroff" 명령은 런레벨 0 또는 1로 들어가나요? 이것이 이 세 명령의 유일한 주요 차이점입니까?
답변1
이제 systemd에 답이 있습니다.
질문의 태그에 따르면 Red Hat Enterprise Linux를 사용하고 계십니다. 버전 7부터는 systemd가 사용됩니다. systemd의 경우 다른 답변 중 어느 것도 정확하지 않으며 귀하의 질문에 대한 일부 가정도 아닙니다.
- 런레벨을 잊어버렸습니다;존재하지만 호환성 스페이서로만 존재합니다. systemd 문서에는 이 개념이 "구식"이라고 명시되어 있습니다. 시스템 운영 체제에서 이 내용을 배우기 시작했다면 거기에서 시작하지 마십시오.
- marcelm이 참조하는 매뉴얼 페이지는 올바른 도구 세트가 아니라 systemd에 잘못된 다른 도구 세트 명령에 대한 설명입니다. 이것은
halt
van Smoorenburg "System 5"init
유틸리티 회사의 주문입니다. /sbin/halt
기호 링크인 명령문은 무시됩니다/sbin/reboot
. systemd는 그렇지 않습니다.reboot
별도의 프로그램은 전혀 없습니다.- 명령줄 인수로 프로그램을 호출하는
halt
명령문 을 무시하십시오reboot
.shutdown
이는 systemd에도 올바르지 않습니다.shutdown
별도의 프로그램은 전혀 없습니다.
각 시스템 관리 도구 세트에는 이러한 유틸리티의 자체 버전이 있습니다. systemd, 신생 기업,간식, van Smoorenburg init
및 BSD에는 init
자체 halt
, poweroff
등이 있습니다. 그들의 역학은 약간 다릅니다. 맨 페이지도 마찬가지입니다.
systemd 도구 세트에서halt
, poweroff
,reboot
,telinit
, 그리고shutdown
예모두에 대한 심볼릭 링크는 /bin/systemctl
다음과 같습니다.모두이전 버전과 호환되는 shim은 systemd의 기본 명령줄 인터페이스를 호출하는 약어입니다: systemctl
. 그들은 모두 동일하게 매핑됩니다(실제로는).하나의프로그램. (관례적으로 쉘은 자신이 호출된 이름을 알려줍니다.)
런레벨이 아닌 타겟
이러한 명령의 대부분은 systemd에게 systemctl
다음의 약어를 사용하도록 지시합니다.격리특정한표적. 격리는 매뉴얼 페이지 (qv)에 설명되어 있지만 systemctl
이 답변의 목적에 따라 하나의 대상을 시작하고 다른 대상을 중지하는 것으로 생각하십시오. systemd에서 사용되는 표준 대상은 systemd.special
(8) 매뉴얼 페이지에 나열되어 있습니다.
bootup
systemd 도구 세트 (특히 마지막 다이어그램) 의 매뉴얼 페이지(7)에 있는 다이어그램은 여기에 관련된 세 가지 "궁극적" 목표를 보여줍니다.
halt.target
— 시스템이 대상이 완전히 격리된 상태에 도달하면reboot(RB_HALT_SYSTEM)
시스템 호출이 호출됩니다. 커널은 ROM 모니터에 들어가려고 시도하거나 단순히 CPU를 정지시킵니다(이를 수행하는 데 적합한 메커니즘을 사용하여).reboot.target
— 시스템이 대상이 완전히 격리된 상태에 도달하면reboot(RB_AUTOBOOT)
시스템 호출(또는 이에 상응하는 마법 명령줄)을 호출합니다. 커널은 재부팅을 시도합니다.poweroff.target
— 시스템이 대상이 완전히 격리된 상태에 도달하면reboot(RB_POWER_OFF)
시스템 호출이 호출됩니다. 커널은 가능하다면 시스템의 전원을 차단하려고 시도합니다.
이것들실행 수준이 아닌 최종 시스템 상태에서 고려해야 할 사항입니다. 다이어그램에서 systemd 대상 시스템 자체는 명시적인 것이 아니라 다른 시스템에 암시적으로 포함된 항목을 인코딩합니다. 예를 들어 각 최종 대상에는 대상의 개념이 포함되어 있으므로 shutdown.target
이를 소유한 서비스를 종료하기 전에 중지해야 하는 서비스를 설명합니다.갈등표적 shutdown.target
.
systemctl
다음으로 요청을 보내보세요.systemd-logind
호출 사용자가 슈퍼유저가 아닌 경우. 또한 지연된 종료를 전달합니다.systemd-shutdownd
. 일부 약어는 wall
알림을 트리거합니다. 이러한 복잡성을 제쳐두고 현재 수퍼유저이고 예약된 작업을 요청하지 않는다고 가정하면 이 답변이 몇 배 더 길어질 것입니다.
systemctl isolate halt.target
약어가 있습니다:shutdown -H now
systemctl halt
- 소박함
halt
systemctl isolate reboot.target
약어가 있습니다:shutdown -r now
telinit 6
systemctl reboot
- 소박함
reboot
systemctl isolate poweroff.target
약어가 있습니다:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- 소박함
poweroff
systemctl isolate rescue.target
약어가 있습니다:telinit 1
systemctl rescue
systemctl isolate multi-user.target
약어가 있습니다:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
약어가 있습니다:telinit 5
systemctl
다양한 명령줄 구문을 구문 분석한 후 모두 프로그램 내에서 동일한 코드 경로 로 종료됩니다 .
노트:
- 옵션이 없는 일반적인 행동은
shutdown now
방향을 바꾸는 것입니다.단일 사용자 모드. systemd에서는 그렇지 않습니다.rescue.target
— 단일 사용자 모드의 이름이 변경되었습니다.구조 모드systemd에서는shutdown
명령을 통해 액세스할 수 없습니다. telinit
물론매뉴얼 페이지에 설명된 대로 파일 시스템의 이러한 모든 항목과 심볼릭 링크를 완전히 무시하십시오. 위의 매핑은 프로그램 테이블에 내장되어 있습니다.runlevelN.target
default.target
systemctl
- systemd에는 개념이 없습니다.현재 런레벨. 이 명령의 작업은 "실행 수준에 있는 경우"에 따라 조건이 적용되지 않습니다.질소".
- , 및 명령 에 대한 옵션은
--force
, 및 명령에 대한 옵션과 동일합니다. 이렇게 하면 직접 전화를 걸게 됩니다. 일반적으로 대상을 격리하려고 시도합니다.halt
reboot
poweroff
--force --force
systemctl halt
systemctl reboot
systemctl poweroff
systemctl
reboot()
telinit
같지 않습니다 . 그들은 시스템 세계에서 다른 프로그램입니다. 후자는 프로그램의 이름 이 아니라 프로그램init
의 별명입니다 . 이 프로그램은 van Smoorenburg 호환성으로 컴파일할 필요가 전혀 없으며 일부 시스템 운영 체제에서는 시도할 경우 잘못 호출된다고 불평할 것입니다.systemd
systemctl
systemd
init N
추가 읽기
- 전원을 차단하지 않고 시스템을 정지시켜야 할 타당한 이유가 있습니까?
- Arch 설치 중에 `init 0`으로 인해 "초과 매개변수"가 나타나는 이유는 무엇입니까?
- 웨이들리, 스티븐 (2014). "8. systemd를 사용하여 서비스 관리" Red Hat Enterprise Linux 7 시스템 관리자 가이드. 빨간 모자.
- 레나트 페틀링(2013-10-07).
systemctl
. 시스템 매뉴얼 페이지. freedesktop.org. - 레나트 페틀링(2013-10-07).
systemd.special
. 시스템 매뉴얼 페이지. freedesktop.org. - 레나트 페틀링(2013-10-07).
bootup
. 시스템 매뉴얼 페이지. freedesktop.org. - 조나단 데보인 폴라드(2018).
init
.스낵 가이드. 소프트웨어.
답변2
halt
하드웨어 표시모든 CPU 기능 중지, 전원을 켜두세요. 이는 일반적으로 누군가가 전원 버튼을 눌러 시스템을 수동으로 다시 시작하거나 종료해야 함을 의미합니다. 이를 달성하는 정확한 방법은 아키텍처마다 다르지만 예를 들어 x86 명령어 세트는 다음을 제공합니다.HLT
다음 외부 인터럽트가 트리거될 때까지 중앙 처리 장치(CPU)를 정지시키는 명령입니다.poweroff
예를 들어halt
, CPU를 중지하는 동시에 다음과 같은 메시지도 보냅니다.ACPI하드웨어 신호는 시스템에 완전하고 즉각적인 종료를 시작하도록 지시합니다. 이는 일반적인 데스크탑 컴퓨터의 전원 버튼을 누르는 것과 거의 동일합니다.
halt
일반적 으로 poweroff
실행 파일에 대한 심볼릭 링크입니다 reboot
.shutdown
if , 또는 도구 호출에 사용되는 적절한 인수( -h
, -P
또는 r
) 가 있는 도구입니다. 그러나 옵션이 에 전달되거나 런레벨 0 또는 6에 있는 경우halt
poweroff
reboot
--force
reboot
reboot
reboot()
시스템 호출 자체에는 적절한 명령 코드가 함께 제공됩니다.
답변3
halt
, poweroff
및 shutdown -h
완전히 동일합니다. 실제로, 중지 및 전원 끄기는 을 호출하는 것 외에는 아무 작업도 수행하지 않습니다 shutdown -h
. 중지/전원 끄기 맨페이지에서:
시스템이 실행 레벨 0 또는 6이 아닐 때(즉, 시스템이 정상적으로 실행 중일 때) 정지 또는 재부팅이 호출되면 종료가 호출됩니다(-h 또는 -r 플래그 사용). 자세한 내용은 shutdown(8) 맨페이지를 참조하십시오.
그런 다음 Shutdown은 런레벨 0으로 전환하여 시스템을 종료합니다.
중지 및 전원 끄기(및 다시 시작)에는 두 가지 목적이 있습니다. 종료 중에(즉, 실행 수준 0 또는 6에서) 실행되면 다음과 같이 물리적으로 중지, 전원 끄기 또는 다시 시작하는 데 필요한 하위 수준 작업을 수행합니다. 그렇지 않으면 하나의 답변에 명시된 바와 같습니다.