บนระบบ Linux, สิ่งที่เป็นความแตกต่างระหว่าง/dev/console, /dev/ttyและ/dev/tty0?
การใช้งานของพวกเขาคืออะไรและเปรียบเทียบได้อย่างไร?
บนระบบ Linux, สิ่งที่เป็นความแตกต่างระหว่าง/dev/console, /dev/ttyและ/dev/tty0?
การใช้งานของพวกเขาคืออะไรและเปรียบเทียบได้อย่างไร?
คำตอบ:
จากเอกสาร :
/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
ในสมัยก่อน/dev/consoleเป็นคอนโซลผู้ดูแลระบบ และ TTY เป็นอุปกรณ์อนุกรมของผู้ใช้ที่เชื่อมต่อกับเซิร์ฟเวอร์ ตอนนี้/dev/consoleและ/dev/tty0แสดงการแสดงผลปัจจุบันและมักจะเหมือนกัน คุณสามารถแทนที่มันตัวอย่างเช่นโดยการเพิ่มการconsole=ttyS0 grub.confหลังจากนั้นของคุณ/dev/tty0คือการตรวจสอบและเป็น/dev/console/dev/ttyS0
แบบฝึกหัดเพื่อแสดงความแตกต่างระหว่าง/dev/ttyและ/dev/tty0:
สลับไปยังคอนโซลที่ 2 โดยการกดCtrl+ +Alt เข้าสู่ระบบเป็นF2 rootประเภทsleep 5; echo tty0 > /dev/tty0. กดEnterและสวิทช์ไปที่ 3 คอนโซลโดยการกด+Alt F3ตอนนี้เปลี่ยนกลับไปยังคอนโซลที่ 2 โดยการกด+Alt F2พิมพ์sleep 5; echo tty > /dev/ttyกดEnterและสลับไปที่คอนโซลที่ 3
คุณสามารถเห็นว่าttyเป็นคอนโซลที่กระบวนการเริ่มต้นและtty0เป็นคอนโซลปัจจุบันเสมอ
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -iและ voila - เปลือกหอย
sudo anycommandทำงานก็sudo -iไปรูตได้เหมือนกัน ไม่มีสิ่งเช่น Linux / BSD / Unix ที่คุณไม่สามารถรูทได้ (จากนั้นจะไม่เป็น Linux / BSD / Unix อีกต่อไป)
/dev/consoleเป็นชุดอุปกรณ์เสมือนซึ่งสามารถตั้งค่าเป็นพารามิเตอร์ในเวลาบูต /dev/tty0มันอาจจะมีการเปลี่ยนเส้นทางไปยังอุปกรณ์แบบอนุกรมหรือคอนโซลเสมือนและจากจุดเริ่มต้น เมื่อหลายconsole=ตัวเลือกถูกส่งผ่านไปยังเคอร์เนลเอาต์พุตคอนโซลจะไปยังอุปกรณ์มากกว่าหนึ่งเครื่อง
/dev/tty0 เป็นคอนโซลเสมือนปัจจุบัน
/dev/tty[1-x]เป็นหนึ่งในคอนโซลเสมือนที่คุณเปลี่ยนเป็นcontrol- alt- F1และต่อ ๆ ไป
/dev/ttyเป็นชนิดของนามแฝงในคอนโซล (อุปกรณ์ฟิสิคัลเสมือนหรืออุปกรณ์หลอกหากมี) ที่เกี่ยวข้องกับกระบวนการที่เปิด ไม่เหมือนกับอุปกรณ์อื่น ๆ คุณไม่จำเป็นต้องใช้สิทธิ์รูทในการเขียน โปรดทราบว่ากระบวนการต่างๆเช่นกระบวนการที่เปิดตัวโดยcronและกระบวนการแบทช์ที่คล้ายกันนั้นไม่สามารถใช้งานได้/dev/ttyเนื่องจากไม่มีการเชื่อมโยงใด ๆ กระบวนการเหล่านี้มี a ?ในTTYคอลัมน์ps -efผลลัพธ์
/dev/ttyสามารถเป็นอุปกรณ์ที่แตกต่างกันได้ถ้ามีขึ้นอยู่กับกระบวนการที่เปิด อัปเดตคำตอบแล้ว
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
บน Linux คอนโซลเคอร์เนลสามารถกำหนดค่าการใช้ตัวเลือกการบูตconsole= รหัสเคอร์เนลที่การโทรprintk()อาจเขียนข้อความถึงมันเช่นเมื่ออุปกรณ์ถูกโหลดหรือเกิดข้อผิดพลาด ข้อความเหล่านี้ถูกบัฟเฟอร์โดยเคอร์เนลด้วย (ดูเพิ่มเติมที่dmesg) เมื่อพบอุปกรณ์คอนโซลและเริ่มทำงานอุปกรณ์จะได้รับข้อความที่บัฟเฟอร์ก่อนหน้านี้ทั้งหมด
คุณสามารถผ่านconsole=หลาย ๆ ครั้งเพื่อกำหนดค่าคอนโซลที่หลากหลายและข้อความจะถูกเขียนไปยังพวกเขาทั้งหมด เห็นได้ชัดว่าคุณจะสามารถเลือกหนึ่งคอนโซลของแต่ละ "type": คุณไม่สามารถใช้ทั้งสองและconsole=ttyS0console=ttyS1
เอกสาร kernel ระบุเป็นอุปกรณ์ตัวอักษรหมายเลข/dev/console (5,1)การเปิดอุปกรณ์อักขระนี้จะเปิดคอนโซล "main" ซึ่งเป็น tty สุดท้ายในรายการคอนโซล กระบวนการที่ไม่ใช่เคอร์เนลแรกที่เรียกว่าinitหรือ "PID 1" เริ่มต้นด้วยการ/dev/consoleเชื่อมต่อกับเอาต์พุตมาตรฐานข้อผิดพลาดมาตรฐานและอินพุตมาตรฐาน
หากไม่มีคอนโซลใด ๆ เป็น tty ดังนั้นการเปิด/dev/consoleจะส่งกลับข้อผิดพลาดENODEV("ไม่มีอุปกรณ์ดังกล่าว") เคอร์เนลจะพิมพ์บันทึกข้อความและเริ่มต้นinitโดยไม่คำนึงถึง สำหรับตัวอย่างของคอนโซลเคอร์เนลซึ่งไม่ได้เป็นอุปกรณ์ tty หนึ่งดูnetconsoleหรือคอนโซลที่ชื่นชอบเครื่องพิมพ์บรรทัด
นอกจากนี้คุณยังสามารถดูรายชื่อ TTY /sys/class/tty/console/activeคอนโซลโดยการอ่าน เอกสาร systemdชี้ให้เห็นว่าอุปกรณ์แรกที่แสดงคือคอนโซลหลัก รายการเป็นจริงในลำดับย้อนกลับของบรรทัดคำสั่งเคอร์เนล เอกสาร kernel ปัจจุบันไม่ถูกต้องระบุว่าอุปกรณ์ที่ผ่านมาแสดงให้เห็นเป็นหลักหรือ "งาน" คอนโซล ด้วยเหตุผลบางอย่างมันเป็นไปได้ที่จะสำรวจความคิดเห็นของไฟล์นี้สำหรับการเปลี่ยนแปลง (ในกรณีที่อุปกรณ์คอนโซลถูกลบ?)
ภายในsystemd-nspawnคอนเทนเนอร์/dev/consoleไฟล์มาตรฐานจะถูกแทนที่ด้วยอุปกรณ์หลอก (PTY) สิ่งเหล่านี้จะอธิบายได้ดีที่สุดในฐานะอุปกรณ์ปลายทางเสมือน พวกเขาจะสร้างแบบไดนามิกและยังใช้ในการดำเนินการเลียนแบบขั้วกราฟิกเช่น GNOME Terminal sshและสำหรับการเข้าถึงระยะไกลเช่น
โหนดอุปกรณ์ Linux TTY tty1ผ่านtty63เป็นเทอร์มินัลเสมือน พวกเขาจะเรียกว่า VTs หรือเสมือนคอนโซล พวกเขาจำลองคอนโซลหลายตัวที่ด้านบนของไดรเวอร์อุปกรณ์คอนโซลทางกายภาพ จะแสดงและควบคุมคอนโซลเสมือนได้ครั้งละหนึ่งคอนโซลเท่านั้น เทอร์มินัลที่ใช้งานอยู่สามารถเปลี่ยนได้เช่นการใช้chvtหรือ Ctrl + Alt + F1 ถึงอย่างไรก็ตามมีปุ่มฟังก์ชั่นมากมายที่คุณมี
นอกจากนี้คุณยังสามารถอ่านและเขียนไปยัง VT /dev/tty0ปัจจุบันใช้ tty0เป็นเคอร์เนลคอนโซลปกติเช่นถ้าคุณไม่ได้เลือกหนึ่งอย่างชัดเจน "ระบบค้นหาการ์ด VGA เป็นลำดับแรก [ซึ่งคือสิ่งที่ VTs ทำงาน") และจากนั้นสำหรับพอร์ตอนุกรม " นอกจากนี้คุณยังสามารถตั้งค่าคอนโซลไปยัง VT console=tty1ที่เฉพาะเจาะจงเช่น
"หากคุณไม่มีการ์ด VGA ในระบบของคุณพอร์ตอนุกรมแรกจะกลายเป็นคอนโซลโดยอัตโนมัติ" A "คอนโซลอนุกรม" ชอบน่าจะเป็นอีกทางเลือกหนึ่งที่พบมากที่สุดttyS0 tty0ไม่สามารถใช้ระบบ VT ที่อยู่ด้านบนของคอนโซลอนุกรมได้
/dev/ttyเป็นหนึ่งในสามไฟล์อุปกรณ์มาตรฐานที่ระบุโดย POSIX ( /dev/เป็นหนึ่งในสามชื่อไดเรกทอรีที่ระบุโดย POSIX) การเปิดมันเทียบเท่ากับการเปิดเทอร์มินัลการควบคุมของกระบวนการปัจจุบัน สถานีควบคุมการตั้งค่าเมื่อกระบวนการเป็นครั้งแรกเปิดขั้ว, อย่างน้อยในลินุกซ์ ยกตัวอย่างเช่นในก็จะหมายถึงinit/dev/console
การพลัดพรากจากสถานีควบคุมเป็นหนึ่งในขั้นตอนที่จำเป็นประเพณีเพื่อเริ่มต้นกระบวนการพื้นหลังเช่นภูตระบบเข้าสู่ระบบ ขั้นตอนในการกลายเป็นกระบวนการพื้นหลังนั้นซับซ้อนอย่างน่ากลัว แต่จะเจาะจงขั้นตอนที่แยกออกจากเทอร์มินัลการควบคุมคือการเรียกระบบsetsid ในระบบที่ทันสมัยกว่านั้นระบบ init เช่น systemd จะเริ่มให้บริการโดยไม่มีสถานีควบคุมใด ๆ ในตอนแรก