บนระบบ 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=ttyS0
console=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 จะเริ่มให้บริการโดยไม่มีสถานีควบคุมใด ๆ ในตอนแรก