Câu trả lời:
Nói chung, một người sử dụng shutdown
lệnh . Nó cho phép trì hoãn thời gian và thông báo cảnh báo trước khi tắt hoặc khởi động lại, điều này rất quan trọng đối với việc quản trị hệ thống của các máy chủ shell nhiều người dùng; nó có thể cung cấp cho người dùng thông báo trước về thời gian chết.
Do đó, lệnh tắt máy phải được sử dụng như thế này để tạm dừng / tắt máy tính ngay lập tức (ít nhất là trên Linux và FreeBSD):
shutdown -h now
Hoặc để khởi động lại nó với một cảnh báo trước 30 phút tùy chỉnh:
shutdown -r +30 "Planned software upgrades"
Sau khi trì hoãn, shutdown
yêu init
cầu thay đổi thành runlevel 0 (tạm dừng) hoặc 6 (khởi động lại). (Lưu ý Không ghi rằng -h
hoặc -r
sẽ làm cho hệ thống đi vào chế độ single-user (runlevel 1), mà giết chết hầu hết các quy trình hệ thống nhưng không thực sự ngăn chặn hệ thống, nó vẫn cho phép người quản trị để vẫn đăng nhập bằng root.)
Khi các quy trình hệ thống đã bị hủy và các hệ thống tập tin đã bị ngắt kết nối, hệ thống sẽ dừng / tắt nguồn hoặc tự động khởi động lại. Điều này được thực hiện bằng cách sử dụng lệnh halt
hoặcreboot
, đồng bộ hóa các thay đổi thành đĩa và sau đó thực hiện tạm dừng / tắt nguồn hoặc khởi động lại thực tế.
Trên Linux, nếu halt
hoặc reboot
được chạy khi hệ thống chưa bắt đầu quá trình tắt máy, nó sẽ shutdown
tự động gọi lệnh thay vì thực hiện trực tiếp hành động dự định của nó. Tuy nhiên, trên các hệ thống như FreeBSD , các lệnh này trước tiên đăng nhập hành động wtmp
và sau đó sẽ ngay lập tức thực hiện tạm dừng / khởi động lại, mà không cần xử lý trước các quy trình hoặc ngắt kết nối hệ thống tập tin.
halt
, reboot
và shutdown
các chương trình gọi nhau. Có một chương trình duy nhất, với rất nhiều trình phân tích cú pháp dòng lệnh đi vào một đường dẫn mã bên trong. Cũng không có cấp chạy. Cũng không tắt máy đi vào một chế độ người dùng. Thật vậy, chế độ người dùng đơn lẻ đã được đổi tên. Để biết chi tiết, xem unix.stackexchange.com/a/196014/5132 .
Trong những năm 1980, các BSDs có halt
, reboot
và shutdown
. Hệ thống 5 UNIX có bộ công cụ tương thích BSD. Nhưng thực chất nó có shutdown
mệnh lệnh riêng, khác biệt ; và không có halt
hoặc có reboot
tất cả. (Một số biến thể của Hệ thống 5 có những thứ như SCO XENIX haltsys
.)
BSD halt
và reboot
các lệnh là cấp thấp, quyết liệt và ngay lập tức. Các chu đáo cách để đóng cửa một hệ thống BSD là shutdown
lệnh, mà đã làm tất cả những điều mà ai hy vọng sẽ xảy ra: wall
các thông điệp cho người dùng, dịch vụ một cách duyên dáng thiệt mạng, các mục văn bản đăng nhập, đăng nhập vô hiệu hóa, và vân vân.
Trong khi các BSD chủ yếu là nơi trí tuệ nhận được bắt nguồn từ " shutdown
execs halt
/ reboot
", và cái sau được sử dụng một cách cẩn thận; đó là thế giới Hệ thống 5 nơi mọi người học được thói quen trái ngược đó halt
/ reboot
chỉ là những tốc ký tiện dụng và không có gì khác : /usr/ucb/halt
, từ "Gói tương thích BSD", không có hiệu lực khác shutdown -h
. Cả hai cuối cùng đã làm init 0
.
halt
. 1982-05-11. Hướng dẫn sử dụng 4.2BSD.haltsys
. 2005-06-03. Hướng dẫn sử dụng SCO OpenServer.Ngày nay, chúng ta có một loạt các bộ công cụ quản lý hệ thống có thể. Các BSD vẫn có bộ công cụ của họ, mặc dù đã thanh trừng bất kỳ AT & Tism nào có thể trong những năm 1990. Miquel van Smoorenburg năm 1992 (lại) đã viết một Linux init
+ rc
và các công cụ liên quan của họ, mà bây giờ mọi người gọi là "System 5 init", mặc dù nó không thực sự là phần mềm từ UNIX System 5 (và không chỉ là init
). Ngoài ra còn có systemd , mới nổi , và quà vặt , mỗi trong số đó có việc triển khai của mình của halt
, reboot
, fasthalt
, fastboot
, và vân vân.
Các bộ công cụ cũng đã phát triển và thay đổi. Giờ đây đã có poweroff
lệnh, không có mặt trong các hệ điều hành những năm 1980 bởi vì Bộ xử lý trung tâm trên hầu hết các máy hiện đại không có cách nào kiểm soát nguồn cung cấp năng lượng của chúng. Các bộ công cụ Linux nói riêng đã thu hút các lệnh BSD; nhưng giống như các công cụ tương thích BSD trên Hệ thống UNIX 5, chúng không phải là công việc chính xác và mọi thứ hầu như đã bị san phẳng.
Phẳng này đã đưa chúng tôi đến điểm nơi halt
và shutdown
là chủ yếu là giống nhau. Nhưng các chi tiết chính xác khác nhau từ bộ công cụ đến bộ công cụ và cơ chế của mỗi bộ công cụ đều hơi khác nhau.
Nó cũng đã đưa chúng tôi đến vị trí hơi lúng túng nơi đặt lệnh này đã trở nên trang trí với các tùy chọn tương thích mà nó bây giờ cho phép người để cung cấp cho máy tính hướng dẫn tự mâu thuẫn như reboot --halt
và poweroff --reboot
, như tôi đã nêu trong trang hướng dẫn cho quà vặt halt
, fasthalt
, reboot
, fastboot
, và poweroff
các lệnh. ☺
halt
, reboot
, poweroff
, telinit
, Và shutdown
là tất cả một chương trình . Đó thực sự là systemctl
chương trình của systemd . Nó có một số trình phân tích cú pháp dòng lệnh cho các cú pháp dòng lệnh khác nhau của các lệnh đó, cũng như của chính nó, nhưng sau đó phần lớn chuyển vào một đường dẫn mã bên trong. Không có sự khác biệt giữa việc sử dụng halt
và các tùy chọn lệnh của nó để kích hoạt một hành động và sử dụng shutdown
và các tùy chọn lệnh của nó để kích hoạt cùng một hành động.
systemd không coi chế độ cứu hộ (đó là những gì mà người systemd đã đổi tên thành chế độ người dùng đơn ) thành trạng thái tắt hệ thống và không thể truy cập được với bất kỳ lệnh nào trong số này. Tùy chọn ít shutdown now
giống như poweroff
.
Các BSD phần lớn giữ lại ngữ nghĩa của thập niên 1980. halt
và shutdown
do đó rất nhiều không tương đương trong bộ công cụ của họ. halt
và reboot
là một chương trình duy nhất; và vẫn còn ở mức độ thấp, ngay lập tức và quyết liệt. Trong khi đó shutdown
, và poweroff
cũng là một chương trình duy nhất, thực hiện tất cả những việc quan tâm như tắt máy theo lịch trình, viết wall
tin nhắn, hành động đăng nhập, vô hiệu hóa đăng nhập, v.v.
Trong các bộ công cụ BSD, shutdown
/ poweroff
theo truyền thống cuối cùng đã gọi halt
/ reboot
để ban hành thay đổi trạng thái hệ thống cuối cùng. (Thường không chính xác ngày nay) đã nhận được sự khôn ngoan rằng " shutdown
execs halt
/ reboot
" trên thực tế vẫn còn giữ trên NetBSD và OpenBSD. Nhưng trên FreeBSD / TrueOS / DragonFlyBSD thì chỉ có trường hợp nếu -o
tùy chọn được sử dụng. Trên các BSDs, cả các chương trình này thường ban hành các thay đổi trạng thái hệ thống chính thức bằng cách gửi tín hiệu khác nhau ( INT
, USR1
và USR2
) để xử lý # 1. init
thực hiện tất cả các quản lý trạng thái hệ thống trên trên các hệ thống này.
Trên tất cả trong số họ, tùy chọn ít shutdown now
là không tương đương với bất kỳ halt
, reboot
hoặc poweroff
. Nó chuyển sang BSD chế độ người dùng đơn lẻ , từ đó người ta có thể chuyển trở lại để chế độ đa người dùng .
shutdown
. Hướng dẫn quản lý hệ thống . Các trang hướng dẫn NetBSD. 2011-11-04.reboot
,halt
. Các trang hướng dẫn OpenBSD. 2016-09-03.shutdown
. Trang hướng dẫn FreeBSD. 2016-09-21.reboot
, halt
, fastboot
,fasthalt
. Trang hướng dẫn FreeBSD. 2017/03/19.shutdown
. Hướng dẫn quản lý hệ thống . Các trang hướng dẫn DragonFlyBSD. 2016-09-29.reboot
, halt
, fastboot
,fasthalt
. Hướng dẫn quản lý hệ thống . Các trang hướng dẫn DragonFlyBSD. 2016-09-29.Trong quà vặt công cụ quản lý hệ thống, halt
, fasthalt
, poweroff
, fastpoweroff
, reboot
, và fastboot
là tất cả một chương trình. Đó là một sự tương thích ngược mà thường đơn giản là xiềng xích shutdown
, ngược lại với sự khôn ngoan nhận được. Các --force
tùy chọn làm cho nó chuỗi system-control
thay thế.
Vì vậy, không có sự khác biệt (vắng mặt --force
) giữa halt
lệnh và shutdown
lệnh (với tùy chọn tương đương) trong bộ công cụ này, vì bộ lệnh "tương thích BSD / Hệ thống 5" này chỉ đơn giản là một lớp shim mỏng trên đầu shutdown
.
shutdown
. trang hướng dẫn sử dụng bộ công cụ nosh. Phần mềm.telinit, init, reboot, halt, haltsys, powercycle, poweroff, … fastboot, fasthalt, fastpowercycle, fastpoweroff, …
trang hướng dẫn sử dụng bộ công cụ nosh. Phần mềm.Giống như với nosh, trong bộ công cụ quản lý hệ thống mới nhất, ngược lại với sự khôn ngoan của BSD được áp dụng. halt
, reboot
và poweroff
là tất cả một chương trình, mà thường chuỗi shutdown
; trừ khi --force
tùy chọn được sử dụng, làm cho nó làm cho reboot()
hệ thống tự gọi.
Vì vậy, một lần nữa, không có sự khác biệt (vắng mặt --force
) giữa halt
lệnh và shutdown
lệnh (với tùy chọn tương đương) trong bộ công cụ này. Ngoài ra, một lần nữa, tùy chọn ít hơn shutdown now
(mà không ai trong số halt
, reboot
hoặc poweroff
có thể kết thúc bằng cách gọi tất cả các tùy chọn đã đặt) đưa hệ thống vào chế độ người dùng duy nhất thay vì tắt nó.
shutdown
(8) . Các trang hướng dẫn Ubuntu.reboot
(8), halt
(8), poweroff
(8) . Các trang hướng dẫn Ubuntu.init
+rc
Một lần nữa, trong bộ công cụ này trái ngược với nhận sự khôn ngoan BSD áp dụng và halt
và reboot
chỉ đơn giản là chuỗi shutdown
- trừ khi hệ thống đã có trong poweroff hoặc dừng lại "run-cấp", trong trường hợp các lệnh này thực sự ban hành sự thay đổi trạng thái hệ thống chính thức. shutdown
trong lượt của nó chuỗi đến init
.
Vì vậy, một lần nữa, không có sự khác biệt (trừ khi hệ thống đã ngừng hoạt động phần lớn) giữa halt
và shutdown
bởi vì cái trước chỉ gọi cái sau. Và vâng, một lần nữa, không có tùy chọn shutdown now
(mà không ai trong số đó halt
, reboot
hoặc poweroff
có thể kết thúc bằng cách gọi tất cả các tùy chọn) đưa hệ thống vào chế độ người dùng duy nhất thay vì tắt nó.
Tôi nghi ngờ điều này phần nào phụ thuộc vào phiên bản UNIX / Linux mà bạn đang sử dụng. Trên Centos (và tôi triển khai các Linux hiện đại khác) tạm dừng cuộc gọi (với điều kiện bạn không ở runlevel 0 hoặc 6) để hệ thống của bạn sẽ được tắt sạch. Trên Solaris 10 tạm dừng tàn bạo hơn, nó chỉ xóa bộ nhớ cache và tắt nguồn hệ thống - không có nỗ lực nào để chạy bất kỳ tập lệnh hoặc tắt các thiết bị smf .
Đối với những người sử dụng AWS EC2: trên AWS shutdown
dừng một thể hiện, khi halt
chấm dứt nó.
Trong linux, "tạm dừng" và "khởi động lại" là bí danh của lệnh tắt máy - shutdown -h
và shutdown -r
tương ứng. Bareword tắt máy thường giả định -h.
aliases
là ý nghĩa của bí danh vỏ, nhưng vâng, halt
về cơ bản chỉ là các cuộc gọi shutdown -h
và reboot
chạy shutdown -r
. Lưu ý rằng nếu bạn vượt qua các -f
tùy chọn (có hiệu lực) để halt
hoặc reboot
, shutdown
là không gọi.
sendmail
lệnh tại thời điểm này - Giống như với MTA, thực sự không quan trọng bạn sử dụng hệ thống init nào vì tất cả chúng sẽ nhận ra cả hai shutdown
và halt
như vậy.
sendmail
lệnh. Nó giống như sendmail
mệnh lệnh, nhưng không phải theo cách bạn nghĩ.