ทำไมเราต้องใช้ฟังก์ชั่นรีบูตในระบบไบนารีต่างกัน


12

ทำไมเราต้องใช้ฟังก์ชั่นรีบูตในระบบไบนารีต่างกัน

shutdown -r

และ

reboot

หรือพวกเขาแตกต่างกันในบางสิ่ง?


1
ดูunix.stackexchange.com/questions/8690/…สำหรับความแตกต่างคำสั่งสามารถทำงานแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการ (แต่โดยทั่วไปแล้วจะทำสิ่งเดียวกันใน Linux)
PleaseStand

ดังที่ระบุไว้ด้านล่างและอธิบายโดยละเอียดที่unix.stackexchange.com/a/196014/5132หลักฐานของคำถามนี้เป็นเท็จในระบบปฏิบัติการ Linux systemd เหล่านี้ไม่ได้เป็นไบนารีที่แตกต่างกันในระบบดังกล่าว
JdeBP

คำตอบ:


15

เราไม่จำเป็นต้องใช้ทั้งคู่ แต่เรามีทั้งคู่เพราะประวัติของ Unix และความหลากหลายของเวอร์ชัน

จากหน้าคนของพวกเขา:

  • ยูทิลิตี้การปิดระบบปรากฏใน 4.0BSD
  • ยูทิลิตี้รีบูตปรากฏในเวอร์ชัน 6 AT&T UNIX

การปิดเครื่องนั้นมีวัตถุประสงค์ทั่วไปมากกว่าและมีประสิทธิภาพมากกว่าในขณะที่การรีบูตนั้นเป็นมิตรและจดจำได้ง่าย

การปิดระบบช่วยให้คุณสามารถระบุอาร์กิวเมนต์ชั่วคราว (เช่นรีสตาร์ทใน 5 นาที) และช่วยให้คุณทำหลายสิ่งนอกเหนือจากรีบูตรวมถึง:

  • คุณสามารถเริ่มต้นผู้ใช้และไม่ปิดระบบจริง
  • คุณสามารถทำให้ระบบเข้าสู่โหมดสลีปแทนการปิดระบบ
  • คุณสามารถปิดเครื่องโดยไม่ต้องรีบูตเครื่อง (เช่นคำสั่ง halt)
  • คุณสามารถรวมข้อความเตือนที่กำหนดเองสำหรับผู้ใช้ในระบบ

แต่ถ้าคุณเพียงต้องการที่จะรีบูตระบบตอนนี้มันง่ายต่อการประเภทกว่าrebootshutdown -r now


1
ความจริงแล้วสนุก: การshutdownใช้งานบางรุ่นเป็นค่าเริ่มต้น อย่าพยายามขอความช่วยเหลือสำหรับการปิดระบบshutdown -hโดยเฉพาะอย่างยิ่งไม่ได้อยู่บนเซิร์ฟเวอร์ในศูนย์ข้อมูล
Residuum

6

ทั้งสองคำสั่งทำบางสิ่งบางอย่างที่แตกต่างกัน แต่พวกเขาสามารถจบลงเรียกแต่ละอื่น ๆ ซึ่งเป็นเหตุผลที่พวกเขาดูเหมือนจะทำสิ่งเดียวกัน!

rebootจะเรียกใช้เคอร์เนลเพื่อเรียกการรีบูตฮาร์ดแวร์ อย่างไรก็ตามมันจะทำเช่นนี้ก็ต่อเมื่อระบบพร้อมสำหรับการปิด - daemons และกระบวนการทั้งหมดของผู้ใช้ควรจะหยุดการทำงานระบบไฟล์ไม่ได้ต่อเชื่อม ฯลฯ ดังนั้นมันจะตรวจสอบ runlevel ของระบบและถ้าไม่ใช่ 0 หรือ 6 มันจะเรียกจริงshutdownคำสั่งสำหรับคุณ

shutdownทำให้ระบบ runlevel เปลี่ยนไป การเปลี่ยนแปลง runlevel (เป็น 0 สำหรับ halt หรือ 6 สำหรับ reboot) รันสคริปต์จำนวนมากใน /etc/rc0.d หรือ rc6.d ที่ปิดการทำงานของ daemons, unmount ระบบไฟล์ ฯลฯ ในที่สุดสคริปต์เหล่านี้จะเรียกใช้haltหรือreboot- คราวนี้ระบบอยู่ใน runlevel ที่ถูกต้องและพวกเขาแนะนำให้เคอร์เนลรีบูท (หรือหยุด)


6

นอกจากสิ่งที่ภาพพจน์เขียนมีความแตกต่างที่สำคัญระหว่างสองโปรแกรมshutdownอยู่ใน/sbinขณะที่อยู่ในreboot/usr/bin

ทำไมเรื่องนี้คุณถาม ฉันจะบอกคุณ.

สิ่งที่อยู่ภายใต้/usrคือสิ่งที่ไม่จำเป็นต้องพร้อมใช้งานจนกว่าระบบจะบูตขึ้นมาไกลพอที่ระบบจะทำงานได้น้อยที่สุด ไดเรกทอรีระดับบนสุดที่มีประเพณีที่ไม่เคยติดตั้งอยู่บนระบบไฟล์ที่แยกต่างหาก - /bin, /etc, /sbinฯลฯ - ที่คาดว่าจะสามารถใช้ได้ในขณะที่ระบบนี้เป็นถึงรัฐที่มีประโยชน์น้อยที่สุด มีความหมายต่าง ๆ ของการออกแบบนี้; เช่นมันเป็นรูปแบบที่ดีที่จะเขียน "หยุด" ประโยคของสคริปต์ init SysV ว่าโปรแกรมการใช้งานใน/usr/binกรณีที่มีทางเลือกในหรือ/bin/sbin

shutdownเป็นยูทิลิตีที่สำคัญซึ่งมีอยู่เสมอ rebootเป็นเครื่องมืออำนวยความสะดวกเท่านั้น


1
rebootอยู่ใน/sbinDebian (พร้อม SysVinit) และ Ubuntu (พร้อมพุ่งพรวด)
Gilles 'ดังนั้นหยุดความชั่วร้าย'

โอเคดังนั้น meta-answer: รู้ระบบของเจ้า :) ฉันใช้ CentOS บ่อยที่สุด
Warren Young

เหมือนกันสำหรับ Arch (systemd) ทั้งใน / sbin
daisy

ที่จริงแล้วในระบบปฏิบัติการ Linux systemd ทั้งสองไม่ได้เป็นยูทิลิตี้ที่สำคัญเช่นเดียวกับ systemd คำสั่งเหล่านี้ทั้งหมดเป็น (ตาม systemd doco มีมัน) คำสั่ง "ความเข้ากันได้" แน่นอนสถานที่ตั้งของคำถามเป็นเท็จ พวกเขาไม่ได้อยู่ในไบนารีที่แตกต่างกัน ดูรายละเอียดunix.stackexchange.com/a/196014/5132
JdeBP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.