PTY — fizik terminalning xatti-harakatini dasturiy tarzda taqdim etadigan pseudo-terminal juftligi. Uning to‘liq nomi Pseudo-Terminal hisoblanadi.
PTY ikki qismdan iborat:
- master;
- slave.
Slave tomoni application uchun oddiy TTYga o‘xshaydi. Master tomoni terminal emulator, SSH server yoki boshqa boshqaruvchi dastur tomonidan ishlatiladi.
Master va slave
Terminal emulator klaviatura inputini masterga yozadi.
Kernel uni slave tomondagi shell yoki dasturga yetkazadi.
Application slave’ga output yozadi. Kernel outputni masterga beradi, terminal emulator esa ekranda ko‘rsatadi.
Terminal emulator
↕ master PTY
Kernel TTY layer
↕ slave PTY
Shell yoki application
Device nomlari
Unix tizimlarda slave PTY:
/dev/pts/0
/dev/pts/1
kabi ko‘rinishi mumkin.
Master odatda application tomonidan maxsus API orqali ochiladi va oddiy nom bilan ishlatilmasligi mumkin.
devpts virtual filesystem slave qurilmalarni taqdim etadi.
Terminal emulator
Grafik terminal dasturi:
- window;
- font;
- keyboard;
- clipboard;
- color;
- scrollback
ni boshqaradi.
Shell esa slave PTYga ulangan oddiy text process.
Terminal emulator shellning o‘zi emas.
SSH
SSH client serverdan PTY so‘rashi mumkin.
Server remote shellni slave PTYga ulaydi. SSH daemon master tomon orqali input va outputni shifrlangan kanalga uzatadi.
Interaktiv login uchun PTY kerak.
Bitta non-interactive command uchun PTY ajratilmasligi mumkin.
ssh -t
-t PTY ajratishni so‘raydi.
Bu:
uchun kerak bo‘lishi mumkin.
Binary data yoki file transfer PTY orqali yuborilsa, line discipline va control characterlar data’ni o‘zgartirishi mumkin.
Shell job control
Slave PTY controlling terminal sifatida ishlaydi.
ni boshqaradi.
PTY bo‘lmasa job control cheklanishi mumkin.
Window size
Terminal emulator window satr va ustun sonini PTYga bildiradi.
O‘lcham o‘zgarsa foreground process SIGWINCH signal olishi mumkin.
Text editor va pager ekranni qayta chizadi.
Line discipline
PTY slave odatiy TTY line discipline’idan foydalanadi.
Canonical mode’da satr, raw mode’da belgilar tez uzatiladi.
Master tomon byte oqimini oladi, ammo slave settinglari output va inputga ta’sir qiladi.
Terminal control sequence
Application ANSI escape sequence yuboradi.
- cursor;
- rang;
- ekran tozalash;
- alternate screen;
- mouse;
- title
amallarini bajaradi.
PTY sequence’ni tushunmaydi; u baytlarni tashiydi. Talqin terminal emulator tomonidan bajariladi.
Script va recording
script kabi vosita yangi PTY yaratib, shell sessiyasini yozib oladi.
U input va outputni logga saqlashi mumkin.
Session recordingda:
- parol;
- token;
- shaxsiy ma’lumot
chiqishi mumkin. Access va retention cheklanadi.
Terminal multiplexer
tmux yoki screen PTYlardan foydalanadi.
Arxitektura:
- multiplexer server shelllar uchun PTY yaratadi;
- client terminalga ulanadi;
- session client uzilganda davom etadi;
- keyin qayta attach qilinadi.
Bu uzoq SSH sessiyalar uchun qulay.
Automation
Ba’zi command faqat TTY ko‘rsa interaktiv ishlaydi.
expect kabi vosita PTY yaratib:
- prompt kutadi;
- javob yuboradi;
- dialogni avtomatlashtiradi.
Prompt matniga qattiq bog‘langan automation mo‘rt bo‘lishi mumkin. API yoki non-interactive flag afzal.
Container
Containerga interactive shell ochishda runtime PTY ajratishi mumkin.
Masalan, -t terminal, -i stdin ochiqligini boshqaradi.
CI muhitida TTY bo‘lmagani uchun rang, buffering va prompt xatti-harakati farq qiladi.
PTY va pipe
| Jihat | PTY | Pipe |
|---|---|---|
| TTY semantikasi | Bor | Yo‘q |
| Job control | Bor | Yo‘q |
| Echo va canonical mode | Bor | Yo‘q |
| Message turi | Byte oqimi | Byte oqimi |
| Interactive dastur | Mos | Ba’zan mos emas |
| Binary data | Line discipline zarar qilishi mumkin | Qulayroq |
PTY allocation xavfi
PTY soni va file descriptorlar cheklangan.
Ko‘p ochilgan, yopilmagan session resource exhaustionga sabab bo‘ladi.
SSH server user yoki connection bo‘yicha limit qo‘yadi.
Xavfsizlik
PTY slave permission bilan himoyalanadi.
Boshqa user terminalga yozishi yoki inputni o‘qishi cheklanadi.
Privileged session recording va PTY hijacking xavfsizlik siyosatiga tegishli.
Diagnostika
PTY muammosida:
- master va slave descriptor;
/dev/ptsmount;- permission;
- controlling terminal;
- window size;
- raw mode;
- echo;
- SSH PTY request;
- file descriptor limit;
- terminal type
tekshiriladi.
TERM noto‘g‘ri bo‘lsa, application mavjud bo‘lmagan control sequence ishlatishi mumkin.
PTY yaratish
Dastur PTY masterini ochadi, slave nomini oladi va child process yaratadi. Child yangi session ochib, slave’ni controlling terminal qiladi hamda stdin, stdout va stderrni unga bog‘laydi.
Parent master orqali dialogni boshqaradi.
Bu jarayon terminal emulator, SSH daemon va test vositalarining asosiy arxitekturasidir.
EOF va yopilish
Master yopilsa slave tomondagi process hangup signal olishi mumkin. Slave process tugasa master o‘qishda EOF yoki platformaga xos xato oladi.
Descriptorlar keraksiz processlarda ochiq qolsa, session tugashi kechikadi.
PTY va test
CLI dastur TTY mavjudligiga qarab boshqa output chiqarishi mumkin. Avtomatik test PTY orqali interactive prompt, rang va signal xatti-harakatini tekshiradi.
Test terminal o‘lchami va TERM qiymatini aniq belgilaydi.
Bog‘liq tushunchalar
TTY, Terminal emulator, Master PTY, Slave PTY, SSH, Job control, tmux, Line discipline, Controlling terminal