Câu trả lời:
Đó là một chút lịch sử.
haltđã được sử dụng trước ACPI (hôm nay sẽ tắt nguồn cho bạn) *. Nó sẽ tạm dừng hệ thống và sau đó in một thông báo tới hiệu ứng "bây giờ tắt nguồn rồi". Trước đó, có các công tắc bật / tắt vật lý, thay vì nút nguồn điều khiển ACPI kết hợp của các máy tính hiện đại.
poweroff, tự nhiên sẽ tạm dừng hệ thống và sau đó tắt nguồn ACPI.
* Những ngày haltnày đủ thông minh để tự động gọi poweroffnếu ACPI được bật. Trong thực tế, chúng là chức năng tương đương bây giờ.
/sbin/powerofflà một liên kết tượng trưng đến /sbin/halt.
shutdown. Là lệnh haltgiống như shutdown -H, và lệnh poweroffgiống như shutdown -P? @phunehehe cũng vậy.
haltđược sử dụng để làm điều đó. Không có trật tự tắt máy, chỉ cần dừng những gì máy đang làm ngay lúc đó và ở đó. Vấn đề thường gặp là sync;sync;sync;haltđảm bảo tất cả các bộ đệm đã được ghi ra đĩa.
Chúng không giống nhau, chỉ liên quan rất chặt chẽ. Trong thực tế, trừ khi bạn muốn chỉ định một thời gian cụ thể để tắt máy hoặc buộc khởi động lại / tạm dừng / tắt nguồn ngay lập tức, điều đó thực sự không quan trọng cho dù bạn chạy shutdown -hhay halt... hoặc shutdown -rso với reboot. Mọi thứ trước đây không thuận tiện lắm, nhưng đây là cách nó hoạt động (rất nhiều cơ hội cho sự mơ hồ hoặc lỗi người dùng đã bị xóa / xóa).
/sbin/shutdownthực hiện nhiều công việc "dọn dẹp" như thông báo cho người dùng, chặn thông tin đăng nhập mới trong khi hệ thống đang tắt. Nó cũng có thể được yêu cầu tắt hệ thống tại một thời điểm nhất định hoặc trong XX phút - cảnh báo người dùng đăng nhập thường xuyên bị tắt máy sắp xảy ra.
Nó cũng thay đổi runlevel thành 0( halt/ poweroff) hoặc 6( reboot) để kích hoạt hệ thống dừng các dịch vụ đang chạy, ngắt kết nối đĩa, v.v. để chuẩn bị cho việc dừng thực tế, tắt nguồn hoặc khởi động lại.
Khi tất cả đã được thực hiện, sau đó nó gọi /sbin/halt, /sbin/reboothoặc /sbin/poweroff( rebootvà poweroffthường là các liên kết tượng trưng halt, để diễn giải chúng như halt -rvà halt -Ptương ứng).
Tuy nhiên, lưu ý rằng nếu halt/ reboot/ poweroffđược gọi khi hệ thống KHÔNG ở runlevel 0hoặc 6sau đó họ sẽ gọi shutdownđể thực hiện công việc của mình trừ khi tùy chọn -fhoặc forceđược sử dụng.
(Chi tiết về cách chạy cấp được giải thích có thể thay đổi từ distro để distro, nhưng 0và 6được sử dụng như mô tả ở đây trong Debian và Debian các dẫn xuất như Ubuntu).
Xem các trang người đàn ông cho shutdownvà haltcho biết thêm.
Cuối cùng, điểm khác biệt giữa haltvà powerofftrạng thái là haltlàm mọi thứ thực sự tắt nguồn máy (trên một số loại phần cứng, điều này có nghĩa là nó rơi vào bộ tải khởi động ROM hoặc tương tự. Trên hầu hết phần cứng PC, nó chỉ dừng lại), trong khi poweroffhoàn thành bước cuối cùng và tắt. reboot, tất nhiên, được chuyển sang trạng thái dừng và sau đó khởi động lại máy tính.
BTW, mặc định thường là poweroffhoặc reboot, nhưng bạn có thể sử dụng -Hlàm đối số shutdownđể làm cho nó dừng lại thay thế. Điều này không hữu ích trên các hộp linux dựa trên PC (nhưng hữu ích trên các máy, như hộp sparc, có màn hình khởi động phần sụn. Có thể nó có thể trở nên hữu ích trên các máy mới hơn với dòng lệnh EFI).
shutdowncác lệnh đều có khái niệm về mức độ chạy. shutdownchủ yếu không gọi halt/ reboot/ poweroff; trớ trêu thay, đó là trên một vài hệ thống không phải là Linux mà sự khôn ngoan nhận được này vẫn còn đúng cho đến ngày nay. Và nơi mà các điểm liên kết tượng trưng là không nhất thiết halt; không chỉ vậy, trong một số bộ công cụ chúng không phải là liên kết tượng trưng nào cả. Xem unix.stackexchange.com/a/196471/5132 để biết thêm chi tiết.