ทำไมจึงมีจำนวนมาก / dev / tty ใน Linux


27

ใน ubuntu 10.04 ถ้าฉันตรวจสอบภายใต้ / dev มีมากกว่า 50 ttys tty0, tty1, tty2 ....

ฉันเข้าใจว่า tty เป็นอุปกรณ์ตัวอักษรสำหรับอินพุต / เอาต์พุตของคอนโซล

  1. แต่ทำไมถึงมีจำนวนมาก? มันเป็นสระว่ายน้ำไหม?

  2. และอะไรคือความแตกต่างระหว่าง / dev / pts / 0, 1, 2 ... , / dev / tty?

  3. ถ้าฉันเปิดเทอร์มินัลหมายเลขใหม่จะถูกสร้างขึ้นภายใต้ / dev / pts แต่ฉันไม่รู้ว่าเมื่อไหร่ / dev / tty? ถูกนำมาใช้.

    แม้ว่าฉันจะสร้างการเชื่อมต่อ SSH จำนวนของ / dev / tty s ก็เหมือนกัน

    และถ้าฉันทำ

    cat /dev/tty0
    

    และพิมพ์บางสิ่งในแป้นพิมพ์ฉันจะได้ผลลัพธ์ที่สอดคล้องกัน ทำไมสิ่งนี้จึงเกิดขึ้น


คำตอบ:


25

ttys ไม่ได้เป็นเพียงอุปกรณ์อินพุต / เอาท์พุต พวกเขายังทำหน้าที่พิเศษในการทำหน้าที่เป็นเทอร์มินัลการควบคุมสำหรับเซสชันเช่นการส่งสัญญาณ (Ctrl + C) / dev / ttyNN เป็นคอนโซลเสมือนซึ่งแสดงแบบเต็มหน้าจอบนจอภาพ

เทอร์มินัลเริ่มต้นจาก / dev / tty1 คุณสามารถเปลี่ยนไปใช้คอนโซลเหล่านี้ได้โดยกดปุ่ม Ctrl + Alt + Fn

เช่น Ctrl + Alt + F1 จะนำคุณไปยังเทอร์มินัลเสมือนแรก ทุกวันนี้ลีนุกซ์ส่วนใหญ่ใช้งาน X server จาก tty1 ดังนั้นการกด Ctrl + Alt + F1 อาจไม่มีผลกระทบ

$ ps ax | grep Xorg | grep -v grep
 1504 tty1     Ss+   44:57 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-rfsWyA/database -nolisten tcp vt1

Ctrl + Alt + F2 จะนำคุณไปยังสถานีที่สอง โดยปกติแล้วดิสทริบิวชันจะเรียกใช้โปรแกรมเข้าสู่ระบบ (agetty) บนเทอร์มินัลเสมือน

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400

โปรแกรมล็อกอินให้พรอมต์การเข้าสู่ระบบและให้คุณเข้าสู่ระบบด้วยชื่อผู้ใช้ / รหัสผ่าน สคริปต์ init ตัดสินใจที่ซึ่งโปรแกรมล็อกอินทั้งหมดจะถูกเรียกใช้ ดังนั้นขึ้นอยู่กับว่าคุณอาจเห็นหรือไม่เห็นพร้อมต์การล็อกอินให้พูด tty9 หากต้องการกลับไปที่อินเทอร์เฟซ GUI ของคุณกด Ctrl + Alt + F1 (เช่นในตัวอย่างด้านบน)

/ dev / tty0 เป็นอุปกรณ์พิเศษซึ่งชี้ไปยังเทอร์มินัลปัจจุบัน ดังนั้นไม่ว่าคุณจะเรียกใช้จากที่ใด (คอนโซลเสมือนใด ๆ ) อะไรก็ตามที่อ่าน / เขียนไปยัง tty0 จะไปที่เทอร์มินัลปัจจุบันของคุณ

คอลัมน์ที่สองใน 'ps ax' ยังให้เทอร์มินัลการควบคุมของโปรแกรม สำหรับบางโปรแกรมเช่น daemons คุณอาจเห็นว่าคอลัมน์นั้นคือ '?' ซึ่งหมายความว่าพวกเขาจะไม่ผูกพันกับเทอร์มินัล

/ dev / pts / 0 etc เป็นอุปกรณ์ psuedo-terminal ซึ่งไม่ได้ต่ออยู่กับจอแสดงผลระบบ เช่นเทอร์มินัลที่คุณได้รับเมื่อคุณเปิด gnome-terminal หรือเทอร์มินัล GUI อื่น ๆ นี่คือวิธีการแบบไคลเอ็นต์ - เซิร์ฟเวอร์โดยที่ฝั่งไคลเอ็นต์จะถูกส่งออกไปยังโปรแกรมเช่นทุบตี ข้อมูลที่ส่งโดยโปรแกรมไปยังเทอร์มินัลหลอกจะถูกส่งไปยังด้าน 'เซิร์ฟเวอร์' (ซึ่งมักจะถูกตรวจสอบโดยโปรแกรมอื่นเช่น gnome-terminal) กระบวนการควบคุม (ฝั่งเซิร์ฟเวอร์) กำหนดสิ่งที่ต้องส่งไปยังเทอร์มินัลซึ่งลูกค้าจะเห็นในที่สุด อุปกรณ์เหล่านี้ช่วยให้คุณเปิด 'เทอร์มินัล GUI' หลายตัวโดยไม่ จำกัด ในระบบของคุณยังคงให้เทอร์มินัลเก่าเช่นตัวควบคุม (ioctl (), การตั้งค่าสี, การส่งสัญญาณ [Ctrl + C] เป็นต้น)


2
เราควรจะรู้สิ่งนี้ได้อย่างไรนอกจากถามที่นี่? หน้าคนบางคน?
n611x007

1
@ n611x007 - man /dev/ptsเป็นการเริ่มต้นที่ดีเช่นman termiosกันโปรดทราบว่าไคลเอนต์ / เซิร์ฟเวอร์เป็นแบบสองทิศทางในหมู่ ptys - ptmและpts - โดยที่เทอร์มินัลเสมือนเช่น gnome-terminal หรือ xterm มักเชื่อมต่อกับต้นแบบและเชลล์เช่น bash ทาส .
wulfgarpro

ในระบบของฉัน/dev/ttyเป็นเทอร์มินัลการควบคุมปัจจุบัน แต่ฉันไม่รู้ว่าอะไร/dev/tty0แต่/dev/tty1เป็น KMSCON Linux และ/dev/tty7เป็นเซิร์ฟเวอร์ X
CMCDragonkai

นี่ไม่ได้ตอบคำถาม ตามที่ Daehee ตั้งข้อสังเกตมีอุปกรณ์ 64 / dev / ttyN 1-8 เป็นคอนโซลเสมือน ptys แยกจากกันภายใต้ / dev / pts ระบบใช้อะไรได้บ้างพูด / dev / tty30 เคยใช้และอย่างไร
Andrew McGuinness

1

ฉันแค่ต้องการอธิบายความสัมพันธ์ของสิ่งต่าง ๆ นี้

อันดับแรก/ dev / ttyอยู่ที่ระดับกระบวนการสามารถเป็นttyn (tty1, tty2, ... ), ttySn (ttyS0, ttyS1), pty (pts / 0, pts / 1) และอย่างอื่น

/ dev / tty0เป็นนามแฝงของคอนโซลเสมือนปัจจุบัน (เบื้องหน้า) ดังนั้นจึงอาจเป็น tty1, tty2 และอื่น ๆ โปรดสังเกตว่า ttyS0 ไม่ใช่นามแฝง มันเป็นพอร์ตอนุกรมแรก

/ dev / consoleเป็นคอนโซลระบบโดยชี้ไปที่ / dev / tty0 เป็นค่าเริ่มต้น มันสามารถเป็น ttyn, ttySn, ttyUSBn, lpn และอื่น ๆ

ประมาณ / dev / tty> / dev / cosole> / dev / tty0


นั่นคือการอ้างอิงจากที่อื่นมีการอ้างอิงหรือไม่ อาจทำการอ่านที่น่าสนใจ
Xen2050

@ Xen2050 ไม่ แต่หวังว่าสิ่งนี้จะเป็นประโยชน์tldp.org/HOWTO/Remote-Serial-Console-HOWTO/…
firo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.