ฉันจะตรวจสอบว่าฉันใช้ tty ใดอยู่?


22

มี 7 อาคารที่สามารถใช้ในระบบของเรา tty7อิงตาม GUI

ฉันจะรู้ได้อย่างไรว่าฉันใช้ tty ใดอยู่

ชอบ tty1, tty2 .... tty6?


ทำไมคุณอ้างว่ามันเป็น "pts" ในความคิดเห็น นั่นต่างจากที่คุณถามอย่างสิ้นเชิง เซสชันใน GUI ไม่ใช่ tty
Rinzwind

1
ฉันสับสนเกี่ยวกับแนวคิดนี้นั่นเป็นเหตุผล
luv.preet

คำตอบ:


30

มีหลายวิธีในการค้นหาสิ่งนี้ ฉันจะไปกับคำสั่งwho am i(ไม่who):

$ who am i
ravexina    tty2        2017-04-10 11:19 (:0)

เมื่อฉันอยู่ในเทอร์มินัลกราฟิกมันจะคืนค่าดังนี้

ravexina    pts/0        2017-04-10 1:19 (:0)

ภายใต้เซสชัน ssh ที่ใช้ผลลัพธ์เทอร์มินัลกราฟิกเหมือนกัน แต่แทนที่จะเป็น (: 0) ฉันจะได้รับ IP ของเครื่อง (192.168.xx) คำสั่งอื่น ๆ ชอบw, who, pgrep, psฯลฯ ที่เป็นประโยชน์มากเกินไป

ตัวอย่างเช่นเพื่อค้นหาว่าttyส่วนต่อประสานกราฟิกของฉันทำงานอยู่:

ps $(pgrep Xorg)

ซึ่งในกรณีของฉันเพราะฉันไม่ได้ใช้เครื่องมือจัดการหน้าจอใด ๆ เช่น gdm หรือ slim มันจะผลิต:

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg

4
+1 แม้ว่าในคู่ขั้วwho am iผลตอบแทนอะไรและwhoamiผลตอบแทนzanna(ในขณะที่whoผลตอบแทนการประชุมทั้งหมด (ผมจำได้ว่าคำถามที่เกี่ยวข้อง (ที่พิสูจน์แล้วว่าตอบไม่ได้) ที่เราสังเกตเห็นว่าการเลียนแบบที่แตกต่างกันการผลิตการส่งออกที่แตกต่างจากwho))
Zanna

กราฟิกมักจะใช้ tty7 เป็นที่ 1 เท่านั้นซึ่งให้การสนับสนุนกราฟิก
luv.preet

1
@ ซานาฉันเจอสถานการณ์นี้ด้วยตัวเอง แต่ฉันคิดว่ามันควรค่าแก่การเอ่ยถึง
Ravexina

1
อย่างไรก็ตามwho am iจะทำงานได้ดีใน vt และpgrepฉลาดมาก (คุณอาจต้องการใช้$()ไวยากรณ์สำหรับคำสั่งย่อย backticks สามารถสับสนเล็กน้อยใน markdown) ดังนั้นคำตอบของคุณดีมากและใครก็ตามที่ downvoted ไม่ควรทำเช่นนั้น ...
Zanna

1
@ luv.preet ที่ออกจากขอบเขตของคำถามของคุณ แต่เห็นความแตกต่างระหว่างจุดและ TTY :) - โพสต์ของที่หนึ่งนี้เป็นที่ซ้ำกันมีคำตอบที่น่ากลัว
Zanna

14

ใช้ttyคำสั่ง

ถ้าฉันพูดถูกนี่เป็นข้อมูลอ้างอิง:

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6

มันเป็น showinng pts / 18
luv.preet

แต้มนี้อาจทำงานเป็นจำนวนมากใช่ไหม ฉันจะรู้ได้อย่างไร
luv.preet

5
@ luv.preet นั่นคือสถานีของคุณ ดู"ความแตกต่างระหว่างจุดและ TTY"
Chai T. Rex

4
ptsหมายความว่าคุณกำลังใช้เทอร์มินัลจาก GUI หรือผ่าน SSH
lithium_js

3
คุณจะต้องถามคำถามใหม่
Chai T. Rex

6

ลองย้อนกลับไปและเริ่มด้วยความสับสน: tty คืออะไร? แต่เดิม tty เป็นตัวย่อของโทรพิมพ์ซึ่งกลายเป็นโทรพิมพ์แก้วซึ่งกลายเป็นสถานีใด ๆ หรือการเชื่อมต่อกับหนึ่งโดยเฉพาะพอร์ตอนุกรม (เหล่านี้ยังคงอยู่รอบ ๆ ส่วนใหญ่ / dev / ttyS0, / dev / ttyUSB0 และบางครั้ง / dev / ttyacm0) จากนั้นคุณได้หลอก ttys และ ttys เสมือน มือยูนิกซ์เก่าคุ้นเคยกับ pseudo ttys สิ่งเหล่านี้ใช้สำหรับรีโมตเทอร์มินัล (ssh และ telnet), เทอร์มินัลเสมือน (xterm และอื่น ๆ ), และ multiplexers เทอร์มินัล (หน้าจอและ tmux) Pseudo ttys มีรูปแบบการตั้งชื่อที่หลากหลายในช่วงเวลาหนึ่ง แต่ปัจจุบันใช้ชื่อเช่น / dev / pts / 0 ttys เสมือนจริงในทางกลับกันจะเชื่อมโยงกับคอนโซลเสมือนโดยเฉพาะเมื่อคุณใช้ปุ่มฟังก์ชันควบคุม alt คุณกำลังสลับคอนโซลเสมือนซึ่งแต่ละคู่จะถูกจับคู่กับ tty เสมือน

ดังนั้นหากคุณต้องการที่จะหา TTY หลอกคุณ (หรือ TTY เสมือนเมื่อใช้โหมดข้อความ) มีทุกประเภทของการแก้ปัญหาเหมือนwho am iหรือps ax|grep $$นี้ค่อนข้างง่ายที่จะทำตามที่มีหลายวิธีที่จะหานี้เช่นหลอก TTY เปิดบน io มาตรฐาน ในกรณีส่วนใหญ่และมีวิธีการอื่น ๆ ที่ใช้งานได้แม้ในขณะที่เปลี่ยนเส้นทาง io สิ่งนี้ยังมีข้อดีของการทำสิ่งที่ถูกต้องเมื่อใช้พอร์ตอนุกรมและ ttys เสมือนตราบใดที่คุณไม่ได้ใช้ตัวจำลองเทอร์มินัลกราฟิกหรือเทอร์มินัลมัลติเพล็กเซอร์

แต่ถ้าคุณต้องการระบุคอนโซลเสมือนล่ะ sudo fgconsoleอาจมีประโยชน์สำหรับกรณีโต้ตอบ หรือสิ่งที่ฉันทำก็แค่เดินไปที่คอนโซลเนื่องจากการเปลี่ยนโดยทั่วไปนั้นเร็วพอ ฉันไม่ได้ตระหนักถึงวิธีการเขียนโปรแกรมที่ทำงานได้อย่างน่าเชื่อถือในกรณีที่ไม่มีปฏิกิริยาหรือไม่มาก่อน

ลองดูตัวอย่างที่รับประกันได้ว่าจะไม่สามารถตอบคอนโซลเสมือนได้อย่างน่าเชื่อถือ คอมพิวเตอร์ที่ฉันนั่งอยู่หน้า (อัลฟา) มี Xserver ที่ทำงานบน tty2 (: 1) ฉันมีสามหน้าต่างเปิดสอง xterms และ vncviewer (เชื่อมต่อกับ bravo: 2) xterm หนึ่งกำลังรันหน้าจอส่วนอีกอันกำลังเรียกใช้ ssh charley หน้าจอมีหน้าต่างสองบานเปิดอยู่, ssh delta และใคร (ที่ระบุ pseudo tty ในคอลัมน์สองอย่างถูกต้องและให้คำแนะนำ(:1:S0)ในคอลัมน์ห้าที่บอกเราว่า pseudo tty เชื่อมต่อกับเซสชันหน้าจอแรกซึ่งเชื่อมต่อกับเซิร์ฟเวอร์ X ตัวที่สอง แต่ไม่ได้ให้ข้อมูลคอนโซลเสมือนใด ๆ ) การทำงานระหว่างเซสชัน ssh จะให้คำใบ้(alpha)ซึ่งระบุเครื่องที่เซสชัน ssh มาจากซึ่งค่อนข้างดีสำหรับเซสชันระยะไกล แม้ว่าจะมีข้อมูลเล็กน้อยเกี่ยวกับสิ่งที่เชื่อมต่อกับหลอก tty (และไม่มีคอนโซลเสมือนหรือแม้กระทั่งข้อมูล tty ระยะไกลก็มีให้) อย่างน้อยโฮสต์ระยะไกลจะถูกระบุ ข้อมูลเกี่ยวกับหน้าจออาจผิดเนื่องจากหน้าจอเซสชันสามารถถอดออกได้และ vnc ไม่ให้ข้อมูลที่เป็นประโยชน์เลยเนื่องจากความแตกต่างเพียงอย่างเดียวระหว่างเซสชัน vnc และเซสชันโลคัลคือหมายเลขที่แสดง ในหลายกรณีคุณสามารถสันนิษฐานได้ว่า: 0 อยู่ใน tty7 แต่ไม่เสมอไปและไม่เคยอยู่ในเหมืองเนื่องจาก bravo ไม่มีการ์ดกราฟิกเลยและ: 0 เป็นเซสชัน vnc (ซึ่งทำให้สับสนเพราะคิดว่าเป็นคอนโซลท้องถิ่น) และไม่มีเครื่องใดที่ใช้ tty7 เป็นเซสชั่นกราฟิกเพราะฉัน (ไม่เพียง แต่จะตรงกันข้าม) บันทึกการถ่ายโอนข้อมูลไปยัง tty7 (และ tty5) tty6 และ tty8 เช่นกัน) สร้างเซสชั่นกราฟิกที่อื่น แต่หน้าจอรอยังสามารถทำหน้าที่เป็นโปรแกรมเทอร์มินัลเพื่อให้คุณสร้างเซสชันผ่านสายเคเบิลอนุกรม เซสชั่นดังกล่าวรายงานอะไรเมื่อผู้ที่ทำงาน? ทำไมไม่มี แต่พอร์ตอนุกรมไม่ว่าจะเป็นผ่าน vnc, xterm, ssh, หน้าจอและอะแดปเตอร์ usb อนุกรมทั้งหมดในครั้งเดียวหรือเชื่อมต่อกับโทรทัศน์ของฉัน


6

เมื่อคุณเข้าสู่ระบบ tty จะแสดงว่าคุณใช้ tty ในบรรทัดแรกโดยอัตโนมัติ


หากการกดแป้นพิมพ์ร่วมกันCtrl+ Alt+ F3แสดงเฉพาะหน้าจอสีดำตามที่คุณเขียนไว้ในความคิดเห็นมีทางเลือกอื่นในการเข้าถึงรูทเชลล์เมื่อบู๊ตเครื่องคอมพิวเตอร์โดยไม่ต้องกดCtrl+ Alt+ F3เพื่อเพิ่ม tty

  1. ทันทีหลังจากหน้าจอสแปลช BIOS / UEFI ในระหว่างการบู๊ตด้วย BIOS ให้กดปุ่มค้างไว้อย่างรวดเร็วShiftซึ่งจะทำให้เมนู GNU GRUB ปรากฏขึ้น (ถ้าคุณเห็นโลโก้อูบุนตูคุณพลาดจุดที่คุณสามารถเข้าสู่เมนูด้วง) ด้วยการกด UEFI (อาจจะหลายครั้ง) Escปุ่มเพื่อเข้าสู่เมนูด้วง บางครั้งหน้าจอสแปลชของผู้ผลิตเป็นส่วนหนึ่งของ bootloader ของ Windows ดังนั้นเมื่อคุณเปิดเครื่องมันจะตรงไปที่หน้าจอ GRUB จากนั้นกดShiftไม่จำเป็น

  2. จากหน้าจอ GNU ด้วงแรกสีม่วงเลือกตัวเลือกขั้นสูงสำหรับอูบุนตูEnterด้วยปุ่ม↑และ↓และกด จากนั้นคุณจะได้รับแจ้งจากเมนูเมนู GNU GRUB สีม่วงอื่นที่มีรายการตัวเลือกเคอร์เนลอยู่

  3. กดปุ่มลูกศรชี้จนกว่าคุณจะเลือกรายการที่สองจากด้านบน (หนึ่งกับที่โหมดการกู้คืนในคำอธิบาย) Enterและกด

    ตอนนี้คุณควรเห็นเมนูการกู้คืนนี้:

    เมนูการกู้คืน

  4. ใช้ปุ่มลูกศรเลื่อนลงไปที่รากEnterและกด

    ตอนนี้คุณควรเห็นรูทพรอมต์ดังนี้:

    root@ubuntu:~#
    
  5. ในขั้นตอนนี้คุณควรมีระบบไฟล์แบบอ่านอย่างเดียว คุณต้องติดตั้งใหม่พร้อมสิทธิ์การเขียน:

    mount -o rw,remount /  
    

    ตอนนี้คุณสามารถรันคำสั่งเหมือนกับในเทอร์มินัล


สิ่งนี้เปิด tty1 เสมอหรือไม่
luv.preet

ไม่ไม่เปิด tty ใด ๆ แต่มันจะติดตั้งระบบไฟล์รูทของอูบุนตูที่คุณติดตั้งไว้ในฮาร์ดไดรฟ์ของคุณในฐานะเชลล์เชิงโต้ตอบที่มีสิทธิ์ในการเขียนช่วยให้คุณสามารถรันคำสั่งได้
karel

3

ฉันเดาว่าคุณกำลังดูแลสิ่งอื่นนอกเหนือจากคำตอบอื่น ๆ เรียกใช้sudo fgconsole เพื่อค้นหาว่า tty จริงใดที่ทำงานอยู่ในขณะนี้


@karel เป็นเรื่องง่ายที่จะจินตนาการถึงสถานการณ์ที่คุณพลาดการประกาศ TTY ปัจจุบัน เช่นโปรไฟล์ทุบตีของคุณล้างหน้าจอ ฉันเสนอคำสั่งที่สามารถใช้งานได้ทุกเวลาไม่เพียง แต่ทันทีหลังจากเข้าสู่ระบบ WRT Ctrl + Alt + F1 ไม่ทำงาน - มีวิธีแก้ไขปัญหาด่วน: ใช้ chvt หรือ openvt
marian adam

และ BTW เรียกใช้ด้วย sudo นั่นเป็นเหตุผลที่คุณได้รับข้อผิดพลาด
marian adam

1

ใช้คำสั่ง tty มันทำงานบน Linux และ macOS และให้เอาต์พุตที่ค่อนข้างง่ายต่อการอ่านเฉพาะชื่อ tty ที่คุณอยู่

ตัวอย่าง:

$ tty
/dev/pts/0

มันง่ายที่จะเขียนสคริปต์นี้หรือรวมไว้ในพรอมต์ตัวอย่าง:

$ PS1='`tty`: '
/dev/pts/0: _

วิธีนี้คุณจะรู้ได้เสมอว่าเทอร์มินัลใดอยู่


1

ยกเว้น GUI ซึ่งในกรณีที่คุณได้รับ pts สิ่งนี้จะแสดงผลลัพธ์ที่คุณต้องการ:

ls -l `tty` | awk '{print $10}'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.