Tại sao chúng ta cần chức năng khởi động lại trong các nhị phân khác nhau?
shutdown -r
và
reboot
Hay họ khác nhau ở một cái gì đó?
Tại sao chúng ta cần chức năng khởi động lại trong các nhị phân khác nhau?
shutdown -r
và
reboot
Hay họ khác nhau ở một cái gì đó?
Câu trả lời:
Chúng tôi không nhất thiết cần cả hai, nhưng chúng tôi có cả hai vì lịch sử của Unix và tính đa dạng của các phiên bản.
Từ trang người đàn ông tương ứng của họ:
Tắt máy có mục đích chung hơn và mạnh mẽ hơn, trong khi khởi động lại thân thiện và dễ nhớ hơn.
tắt máy cho phép bạn chỉ định một đối số tạm thời (ví dụ để khởi động lại sau 5 phút) và cho phép bạn thực hiện nhiều việc ngoài việc khởi động lại, bao gồm:
Tuy nhiên, nếu bạn chỉ muốn khởi động lại hệ thống ngay bây giờ, việc nhập sẽ dễ dàng reboot
hơn shutdown -r now
.
shutdown
sử dụng bây giờ là mặc định. Đừng cố gắng nhận trợ giúp để tắt máy shutdown -h
bao giờ, đặc biệt là không phải trên máy chủ ở đâu đó trong trung tâm dữ liệu.
Hai lệnh làm một cái gì đó khác nhau, tuy nhiên cuối cùng chúng có thể gọi nhau, đó là lý do tại sao chúng dường như làm điều tương tự!
reboot
sẽ gọi kernel để thực sự kích hoạt khởi động lại phần cứng. Tuy nhiên, nó sẽ chỉ làm điều này nếu hệ thống đã sẵn sàng để tắt - tất cả các trình tiện ích và quy trình người dùng nên được dừng lại, hệ thống tệp không được kết nối, v.v. Vì vậy, nó sẽ kiểm tra runlevel của hệ thống và nếu không phải là 0 hoặc 6, thì nó sẽ thực sự gọi các shutdown
lệnh cho bạn.
shutdown
làm cho hệ thống runlevel bị thay đổi. Sự thay đổi runlevel (thành 0 khi tạm dừng hoặc 6 để khởi động lại) chạy rất nhiều tập lệnh trong /etc/rc0.d hoặc rc6.d để tắt trình tiện ích, ngắt kết nối hệ thống tập tin, v.v. Cuối cùng, các tập lệnh này gọi halt
hoặc reboot
- lần này hệ thống đang ở trong runlevel chính xác và họ hướng dẫn kernel khởi động lại (hoặc tạm dừng).
Ngoài những gì iconoclast đã viết, có một sự khác biệt quan trọng giữa hai chương trình: shutdown
là trong /sbin
, trong khi reboot
là trong /usr/bin
.
Tại sao điều này lại quan trọng, bạn hỏi? Tôi sẽ nói cho bạn.
Những thứ bên dưới /usr
là những thứ không phải có sẵn cho đến khi hệ thống được khởi động đủ xa để hệ thống hoạt động tối thiểu. Thư mục cấp cao nhất được truyền thống không bao giờ được gắn trên hệ thống tập tin riêng biệt - /bin
, /etc
, /sbin
, vv - được kỳ vọng sẽ có sẵn khi hệ thống đang đạt trạng thái này ít hữu ích. Có nhiều ý nghĩa khác nhau của thiết kế này; chẳng hạn, việc viết mệnh đề "dừng" của tập lệnh init SysV là sử dụng các chương trình /usr/bin
nếu có một sự thay thế trong /bin
hoặc /sbin
.
shutdown
là tiện ích chính, luôn luôn có sẵn. reboot
chỉ là một tiện ích tiện lợi.
reboot
có trong /sbin
Debian (với SysVinit) và Ubuntu (mới bắt đầu).