คำถามติดแท็ก pty

3
เทอร์มินัลหลอกคืออะไร (pty / tty)?
นี่อาจเป็นคำถามพื้นฐานจริงๆ แต่ฉันต้องการที่จะเข้าใจอย่างละเอียด เทอร์มินัลเทียมคืออะไร (TTY / Pty) ทำไมเราต้องการพวกเขา พวกเขาได้รับการแนะนำอย่างไรและมีความต้องการอะไร? พวกเขาล้าสมัยหรือไม่ เราไม่ต้องการมันอีกแล้วเหรอ? มีอะไรบ้างที่แทนที่พวกเขา? มีประโยชน์ใช้กรณีใด? ฉันทำอะไรไป: อ่าน man pages - รับข้อมูล แต่ไม่ใช่ภาพที่แน่นอน พยายามอ่านจาก Unix Network Programming โดย Richard Stevens มีข้อมูล แต่ไม่ใช่why?ส่วนหนึ่ง
92 linux  terminal  pty 


4
อะไรคือความรับผิดชอบของแต่ละองค์ประกอบ Pseudo-Terminal (PTY) (ซอฟต์แวร์ด้านหลักด้านทาส)
ฉันพยายามคิดว่า tty ทำงานอย่างไร1 (กระบวนการทำงานและความรับผิดชอบของแต่ละองค์ประกอบ) ฉันได้อ่านบทความที่น่าสนใจหลายเรื่องเกี่ยวกับเรื่องนี้ แต่ยังมีบางพื้นที่ที่พร่ามัว นี่คือสิ่งที่ฉันเข้าใจ: เทอร์มินัลที่จำลองทำให้การเรียกใช้ระบบแตกต่างกันไป/dev/ptmxส่วนหลักของเทอร์มินัลหลอก ส่วนหลักของเทอร์มินัลหลอกหลอกจัดสรรไฟล์/dev/pts/[0-N]ให้สอดคล้องกับพอร์ตอนุกรมที่ล้าสมัยและ "แนบ" เทอร์มินัลหลอกหลอกไปที่มัน เทอร์มินัลหลอกหลอกเก็บข้อมูลเช่นรหัสเซสชันงานพื้นหน้าจอขนาด นี่คือคำถามของฉัน: ptmxมีจุดประสงค์อื่นนอกเหนือจากการจัดสรรส่วนทาสหรือไม่? มันจัดให้มี "ปัญญา" บางชนิดหรือเทอร์มินัลจำลอง (เช่น xterm) มีสติปัญญาทั้งหมดของการทำงานเหมือนเทอร์มินัลหรือไม่? ทำไม xtermจึงต้องโต้ตอบกับชิ้นส่วนหลักเพราะมันจะส่งต่อ stdout และ stdin ของส่วนทาสเท่านั้น ทำไมถึงไม่สามารถมัน โดยตรงเขียนและอ่านจากแฟ้มจุด ? ID เซสชันจะแนบกับไฟล์ pts หนึ่งไฟล์และในทางกลับกันหรือไม่ ฉันสามารถพิมพ์คำสั่ง ps และพบ2 sessionId สำหรับ / dev / pts / X เดียวกันได้หรือไม่ ข้อมูลอื่น ๆ ของptsร้านค้า? Xterm อัปเดตทุกฟิลด์ด้วยตัวเองหรือไม่หรือจะptmเพิ่ม …

6
วิธีหลอกให้คำสั่งคิดว่าเอาต์พุตกำลังไปที่เทอร์มินัล
เมื่อได้รับคำสั่งที่เปลี่ยนพฤติกรรมเมื่อเอาต์พุตกำลังส่งไปยังเทอร์มินัล (เช่นสร้างเอาต์พุตสี) เอาต์พุตนั้นสามารถเปลี่ยนเส้นทางในไพพ์ไลน์ได้อย่างไรในขณะที่รักษาพฤติกรรมที่เปลี่ยนไป จะต้องมียูทิลิตี้สำหรับสิ่งที่ฉันไม่ทราบ คำสั่งบางคำสั่งเช่นgrep --color=alwaysมีแฟล็กตัวเลือกเพื่อบังคับให้ทำงาน แต่คำถามคือวิธีการแก้ไขโปรแกรมที่ต้องอาศัยการทดสอบ descriptor ไฟล์เอาต์พุตเพียงอย่างเดียว ถ้ามันเป็นเรื่องสำคัญเปลือกของฉันอยู่bashบน Linux
38 shell  pipe  utilities  stdout  pty 

2
เทอร์มินัล Linux ทำงานอย่างไร
หากคุณเรียกใช้งานเทอร์มินัลและเรียกใช้งานโปรแกรมที่เรียกใช้งานได้ (สมมติว่าเป็นส่วนหนึ่งของสายที่เน้นความเรียบง่าย) คุณจะได้รับคำตอบจากคำสั่งของโปรแกรมที่ใช้งานได้ สิ่งนี้จะพิมพ์ให้คุณ (ผู้ใช้) ได้อย่างไร? เครื่องเทอร์มินัลทำอะไรเช่นนี้pexpect? (แบบสำรวจรอการส่งออก) หรืออะไร จะทราบวิธีการพิมพ์ออกมาได้อย่างไร? และเทอร์มินัลเริ่มโปรแกรมอย่างไร? (มันเป็นสิ่งที่คล้ายกับ os.fork ของ python ()?) ฉันงงว่าเทอร์มินัลทำงานอย่างไรฉันเล่นกับเทอร์มินัลอีมูเลเตอร์และฉันก็ยังไม่เข้าใจว่าเวทย์มนตร์นี้ทำงานอย่างไร ฉันกำลังดูที่แหล่งของ konsole (kde) และ yakuake (อาจใช้ konsole) และฉันไม่สามารถรับสิ่งที่เวทมนตร์นั้นเกิดขึ้นได้

3
เราจะรู้ได้อย่างไรว่าใครอยู่ที่ปลายอีกด้านของอุปกรณ์ปลายทางหลอก?
ถ้าฉันทำ: echo foo > /dev/pts/12 บางกระบวนการจะอ่านสิ่งนั้นfoo\nจากตัวให้คำอธิบายไฟล์ไปยังด้านต้นแบบ มีวิธีที่จะค้นหาว่ากระบวนการ (เหล่านั้น) คืออะไร? หรือในคำอื่น ๆ ฉันจะรู้ได้อย่างไรว่า xterm / sshd / script / screen / tmux / expect / socat ... อยู่ที่ปลายด้านหนึ่งของ/dev/pts/12? lsof /dev/ptmxจะบอกกระบวนการที่มีตัวอธิบายไฟล์ที่ด้านหลักของ pty ใด ๆ กระบวนการสามารถใช้ptsname()( TIOCGPTNioctl) เพื่อค้นหาอุปกรณ์ทาสตาม fd ของตัวเองไปยังด้านต้นแบบดังนั้นฉันสามารถใช้: gdb --batch --pid "$the_pid" -ex "print ptsname($the_fd)" สำหรับแต่ละ pid / fd ที่ส่งกลับโดยlsofสร้างการแมปนั้น แต่มีวิธีที่เชื่อถือได้และน่ารำคาญน้อยกว่าในการรับข้อมูลนั้นหรือไม่

1
'script / dev / null' ทำอะไร
ทุกครั้งที่ฉันล็อกอินเข้าสู่ VM ด้วยรูทsuเข้าสู่บัญชีผู้ใช้และลองใช้screenมันจะมีข้อผิดพลาดเกิดขึ้น: Cannot open your terminal '/dev/pts/0' - please check. กองล้นโพสต์บอกว่าผมจำเป็นต้องใช้script /dev/nullในการแก้ไขปัญหาและมันทำงาน script /dev/nullแต่ก็ยังไม่ได้อธิบายว่าทำไมฉันต้องพิมพ์ ฉันต้องการที่จะเข้าใจว่ามันทำอะไรและทำไมฉันต้องพิมพ์มัน
21 terminal  gnu-screen  su  pty 

2
วิธีรันบิลด์ในคอนเทนเนอร์ Docker จาก Jenkins
ฉันพยายามใช้ Jenkins เพื่อสร้างโครงการ C ++ ในคอนเทนเนอร์ Docker ฉันไม่มีปัญหาในการสร้างเจนกินส์หรือสร้างในภาชนะนอกเจนกินส์ ด้านล่างเป็นสิ่งที่ฉันพยายาม ฉันกำลังข้ามการทำแผนที่ปริมาณเพื่อความชัดเจน กรณีที่ 1 คำสั่งต่อไปนี้รันบิลด์ในเชลล์ได้สำเร็จ docker run --rm --interactive=true --tty=true $IMAGE make อย่างไรก็ตามเมื่อทำงานใน Jenkins เป็นขั้นตอน "execute shell" Docker จะส่งคืนข้อผิดพลาดต่อไปนี้ cannot enable tty mode on non tty input กรณีที่ 2 คำสั่งต่อไปนี้คล้ายกับคำสั่งก่อนหน้า แต่ปิดใช้งานการโต้ตอบ docker run --rm $IMAGE make เจนกินส์สามารถเรียกใช้งานบิลด์ได้สำเร็จ อย่างไรก็ตามมีปัญหาร้ายแรงเมื่อยกเลิกการสร้าง บิลด์จะถูกทำเครื่องหมายทันทีว่าถูกยกเลิก แต่คอนเทนเนอร์ยังคงทำงานอยู่จนกว่าบิลด์จะเสร็จสิ้น นอกจากนี้ภาชนะจะไม่ถูกลบออกหลังจากออกจาก เมื่อรันในเชลล์คำสั่งจะสร้างสำเร็จ …
18 tty  docker  pty  jenkins 

3
เหตุใด sshd จึงไม่ใช้เทอร์มินัลเทียมหลอกเมื่ออาร์กิวเมนต์ของลูกค้า ssh ตามมาด้วยโปรแกรมแบบโต้ตอบ
วิธีปกติในการเชื่อมต่อกับเซิร์ฟเวอร์ SSH ssh username@ip_addressคือ แต่ผู้ใช้อาจต้องการเรียกใช้โปรแกรมบนเครื่องระยะไกลเท่านั้น ssh username@ip_address <program_name>ดังนั้นชื่อโปรแกรมดังต่อไปนี้หลังจากอาร์กิวเมนต์ปกติซึ่งเป็น ตัวอย่างเช่นssh username@ip_address ls. อาร์กิวเมนต์นั่นคือดียกเว้นสำหรับโปรแกรมโต้ตอบ (ที่ยังยอมรับการป้อนข้อมูลของผู้ใช้เช่นเดียวกับการส่งออก) topเช่น ผลลัพธ์คือ ไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม TERM ซึ่งหมายความว่าไม่มีเทอร์มินัล (หลอก) ติดอยู่ระหว่างโปรแกรม sshd และโปรแกรมยอดนิยม การแก้ปัญหาคือการเพิ่มการโต้แย้งที่คำสั่งทั้งตอนนี้กลายเป็น-tssh -t username@ip_address top คำถามของฉันคือทำไมไม่สามารถใช้ sshd เป็นค่าเริ่มต้นใช้เทอร์มินัลหลอกเพื่อสื่อสารกับโปรแกรมที่ไม่ต้องมีการโต้ตอบดังนั้นจึงไม่จำเป็นต้องเพิ่ม-tอาร์กิวเมนต์สำหรับโปรแกรมเชิงโต้ตอบ
11 ssh  pty 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.