Tarjima byuromizdan bir necha so'z: odatda hamma eng so'nggi materiallar va nashrlarni tarjima qilishga intiladi va biz bundan mustasno emasmiz. Ammo terminallar haftada bir marta yangilanadigan narsa emas. Shuning uchun biz siz uchun 2018 yil bahorida nashr etilgan Antuan Boprning maqolasini tarjima qildik: zamonaviy standartlar bo'yicha katta "yoshi" ga qaramay, bizning fikrimizcha, material o'z ahamiyatini yo'qotmagan. Bundan tashqari, bu dastlab ikkita maqola seriyasi edi, lekin biz ularni bitta katta postga birlashtirishga qaror qildik.
Terminallar kompyuter tarixida alohida o'rin tutadi, ammo so'nggi o'n yilliklarda ular grafik interfeyslar hamma joyda paydo bo'lishi sababli buyruq qatori bilan birga omon qolishga majbur bo'ldi.
Ba'zi terminallarda mutlaqo hayratlanarli xavfsizlik teshiklari mavjud, shuningdek, ularning aksariyati yorliqli interfeysni qo'llab-quvvatlashdan tortib skriptga qadar butunlay boshqa funktsiyalar to'plamiga ega. Garchi biz
Mana men ko'rib chiqqan terminallar:
Bu eng so'nggi versiyalar bo'lmasligi mumkin, chunki men yozish paytida men Debian 9 yoki Fedora 27-da foydalanishga muvaffaq bo'lgan barqaror tuzilmalar bilan cheklangan edim. Faqat Alacritty bundan mustasno. Bu GPU tezlashtirilgan terminallarning avlodi va bu vazifa uchun noodatiy va yangi tilda - Rustda yozilgan. Men veb-terminallarni ko'rib chiqishimdan chiqarib tashladim (shu jumladan
Unicode qo'llab-quvvatlash
Men sinovlarni Unicode qo'llab-quvvatlashi bilan boshladim. Terminallarning birinchi sinovi Unicode qatorini ko'rsatish edi
Odatiy bo'lib, xterm klassik "qat'iy" shriftdan foydalanadi, bunga ko'ra
Ushbu skrinshotlar Fedora 27 da olingan, chunki u Debian 9 ga qaraganda yaxshiroq natijalar berdi, bunda terminallarning ba'zi eski versiyalari (xususan mlterm) shriftlarni to'g'ri ishlata olmadi. Yaxshiyamki, bu keyingi versiyalarda tuzatildi.
Endi chiziq xtermda qanday ko'rsatilishiga e'tibor bering. Ma'lum bo'lishicha, Mem ramzi va keyingi semit
“Ko'pgina kompyuter dasturlari ikki tomonlama matnni to'g'ri ko'rsata olmaydi. Misol uchun, ibroniycha "Sara" nomi sin (sh) (o'ngda ko'rsatiladi), keyin resh (r) va nihoyat u (h) (chapda paydo bo'lishi kerak) belgilaridan iborat.
Ko'pgina terminallar bu sinovdan o'ta olmaydi: Alacritty, VTE-dan olingan Gnome va XFCE terminallari, urxvt, st va xterm "Sara" ni teskari tartibda ko'rsatadi, go'yo biz nomni "Aras" deb yozganmiz.
Ikki tomonlama matnlarning yana bir muammosi shundaki, ular qandaydir tarzda tekislanishi kerak, ayniqsa RTL va LTR matnlarini aralashtirishda. RTL skriptlari terminal oynasining o'ng tomonidan ishga tushishi kerak, lekin LTR English standarti bo'lgan terminallar uchun nima bo'lishi kerak? Ularning aksariyatida hech qanday maxsus mexanizm yo'q va barcha matnni chapga tekislang (shu jumladan Konsolda). Istisnolar pterm va mlterm bo'lib, ular standartlarga mos keladi va bunday chiziqlarni o'ng tomonga tekislang.
Kiritishdan himoya qilish
Men aniqlagan keyingi muhim xususiyat - bu qo'yishga qarshi himoya. Ko'pchilikka ma'lum bo'lsa-da, afsunlar:
$ curl http://example.com/ | sh
Bu kodni bajarish bosish buyruqlari bo'lsa, maxfiy buyruqlar diqqat bilan tekshirilgandan keyin ham veb-brauzerdan nusxa ko'chirish va joylashtirishda konsolga yashirincha kirishi mumkinligini kam odam biladi.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
Horn veb-saytidan terminalga yopishtirilganda bunday noqulaylikka aylanadi:
git clone /dev/null;
clear;
echo -n "Hello ";
whoami|tr -d 'n';
echo -e '!nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust!
Here'"'"'s the first line of your /etc/passwd: ';
head -n1 /etc/passwd
git clone git://git.kernel.org/pub/scm/utils/kup/kup.git
U qanday ishlaydi? Zararli kod blokga kiritilgan , bu CSS yordamida foydalanuvchi ko'rinishidan olib tashlanadi.
set enable-bracketed-paste on
Afsuski, Hornning sinov sayti matn formatlash orqali ushbu himoyani qanday chetlab o'tish va unga Qavs rejimini muddatidan oldin qo'llashni ko'rsatadi. Bu ishlaydi, chunki ba'zi terminallar o'zlarini qo'shishdan oldin qochish ketma-ketliklarini to'g'ri filtrlamaydi. Masalan, men o'zimda Konsole testlarini to'g'ri konfiguratsiya bilan ham muvaffaqiyatli yakunlay olmadim .inputrc fayl. Bu shuni anglatadiki, qo'llab-quvvatlanmaydigan dastur yoki noto'g'ri tuzilgan qobiq tufayli tizim konfiguratsiyasini osongina buzishingiz mumkin. Bu, ayniqsa, uzoq serverlarga kirishda xavflidir, bu erda ehtiyotkorlik bilan sozlash ishlari kamroq uchraydi, ayniqsa sizda bunday masofaviy mashinalar ko'p bo'lsa.
Ushbu muammoning yaxshi yechimi terminal uchun joylashtirishni tasdiqlash plaginidir urxvt, bu shunchaki yangi qatorlarni o'z ichiga olgan har qanday matnni kiritish uchun ruxsat so'raydi. Men Horn tomonidan tasvirlangan matn hujumi uchun xavfsizroq variantni topmadim.
Yorliqlar va profillar
Hozirda mashhur xususiyat bu tabli interfeysni qo'llab-quvvatlash bo'lib, biz uni bir nechta boshqa terminallarni o'z ichiga olgan bitta terminal oynasi sifatida belgilaymiz. Bu funksiya turli terminallar uchun farq qiladi va garchi anʼanaviy xterm terminallari yorliqlarni umuman qoʻllab-quvvatlamasa ham, Xfce Terminal, GNOME Terminal va Konsole kabi zamonaviyroq terminallarda bu funksiya mavjud. Urxvt yorliqlarni ham qo'llab-quvvatlaydi, lekin faqat plagindan foydalansangiz. Ammo yorliqlarni qo'llab-quvvatlash nuqtai nazaridan, Terminator shubhasiz etakchi hisoblanadi: u nafaqat yorliqlarni qo'llab-quvvatlaydi, balki terminallarni istalgan tartibda tartibga solishi mumkin (quyidagi rasmga qarang).
Terminatorning yana bir xususiyati - bu yorliqlarni "guruhlash" va bir vaqtning o'zida bir nechta terminallarga bir xil tugmachalarni bosish qobiliyati, bu bir vaqtning o'zida bir nechta serverlarda ommaviy operatsiyalarni bajarish uchun qo'pol vositadir. Shunga o'xshash xususiyat Konsolda ham amalga oshiriladi. Ushbu xususiyatni boshqa terminallarda ishlatish uchun siz uchinchi tomon dasturlarini ishlatishingiz kerak, masalan
Yorliqlar, ayniqsa, profillar bilan bog'langanda yaxshi ishlaydi: masalan, sizda elektron pochta uchun bitta yorliq bo'lishi mumkin, suhbat uchun boshqasi va hokazo. Bu Konsole Terminal va GNOME Terminal tomonidan yaxshi qo'llab-quvvatlanadi. Ikkalasi ham har bir tabga o'z profilini avtomatik ravishda ishga tushirishga imkon beradi. Terminator profillarni ham qo'llab-quvvatlaydi, lekin men ma'lum bir yorliqni ochganingizda ma'lum dasturlarni avtomatik ravishda ishga tushirish usulini topa olmadim. Boshqa terminallarda "profil" tushunchasi umuman yo'q.
Ruffles
Ushbu maqolaning birinchi qismida men ko'rib chiqadigan oxirgi narsa - bu terminallarning ko'rinishi. Masalan, GNOME, Xfce va urxvt shaffoflikni qo'llab-quvvatlaydi, ammo yaqinda fon tasvirlarini qo'llab-quvvatlashni to'xtatib, ba'zi foydalanuvchilarni terminalga o'tishga majbur qildi.
Ba'zi terminallar havolalarni bosish mumkin bo'lishi uchun URL naqshlari uchun matnni ham tahlil qiladi. Bu VTE-dan olingan barcha terminallar uchun amal qiladi, urxvt esa URL-manzillarni bosish yoki klaviatura yorlig'i yordamida o'zgartiradigan maxsus plaginni talab qiladi. Men sinab ko'rgan boshqa terminallar URL manzillarini boshqa yo'llar bilan ko'rsatadi.
Nihoyat, terminallardagi yangi tendentsiya - aylantirish buferining ixtiyoriyligi. Masalan, st ning aylantirish buferi yo'q; foydalanuvchi tmux va kabi terminal multipleksoridan foydalanadi deb taxmin qilinadi
Alacritty, shuningdek, backscroll buferlari yo'q, lekin
Oraliq summalar
Materialning ikkinchi qismida (Asl nusxada bu ikki xil maqola edi - taxminan. qator) unumdorlikni, xotiradan foydalanishni va kechikishni solishtiramiz. Ammo ko'rib chiqilayotgan terminallarning ba'zilarida jiddiy kamchiliklar borligini allaqachon ko'rishimiz mumkin. Misol uchun, muntazam ravishda RTL skriptlari bilan ishlaydigan foydalanuvchilar mlterm va ptermni ko'rib chiqishlari mumkin, chunki ular shunga o'xshash vazifalarni boshqalarga qaraganda yaxshiroq hal qilishadi. Konsole ham yaxshi o‘ynadi. RTL skriptlari bilan ishlamaydigan foydalanuvchilar boshqa narsani tanlashlari mumkin.
Zararli kodni kiritishdan himoya qilish nuqtai nazaridan, urxvt ushbu turdagi hujumlardan himoyani maxsus amalga oshirishi bilan ajralib turadi, bu men uchun shubhasiz qulay ko'rinadi. Ba'zi qo'ng'iroqlar va hushtaklarni qidirayotganlar uchun Konsole qarashga arziydi. Va nihoyat, shuni ta'kidlash kerakki, VTE terminallar uchun ajoyib asos bo'lib, ranglarni qo'llab-quvvatlash, URL manzilini aniqlash va hokazolarni kafolatlaydi. Bir qarashda, sizning sevimli muhitingiz bilan birga keladigan standart terminal barcha talablarga javob berishi mumkin, ammo biz ishlashni tushunmagunimizcha, bu savolni ochiq qoldiraylik.
Keling, suhbatni davom ettiramiz
Umuman olganda, terminallarning ishlashi o'z-o'zidan qiyin muammo bo'lib tuyulishi mumkin, ammo ma'lum bo'lishicha, ularning ba'zilari bunday fundamental turdagi dasturiy ta'minot uchun hayratlanarli darajada yuqori kechikishlarni namoyish etadi. Bundan tashqari, biz an'anaviy ravishda "tezlik" deb ataladigan narsalarni (aslida bu aylanish tezligi) va terminalning xotira iste'molini ko'rib chiqamiz (bu bugungi kunda o'nlab yillar oldin bo'lgani kabi muhim emasligi haqida ogohlantirish bilan).
Kechiktirish
Terminal ishlashini to'liq o'rganib chiqqanimdan so'ng, men bu boradagi eng muhim parametr kechikish (ping) degan xulosaga keldim. Uning maqolasida
Ammo kechikish nima va u nima uchun juda muhim? Fatin o'z maqolasida buni "tugmachani bosish va mos keladigan ekranni yangilash o'rtasidagi kechikish" deb ta'riflagan va iqtibos keltirgan.
Fatinning ta'kidlashicha, bu ping shunchaki qoniqishdan ko'ra chuqurroq oqibatlarga olib keladi: "yozish sekinlashadi, xatolar ko'proq bo'ladi, ko'z va mushaklarning kuchlanishi kuchayadi". Boshqacha qilib aytadigan bo'lsak, katta kechikish matn terish xatolariga va shuningdek, kod sifatining pasayishiga olib kelishi mumkin, chunki bu miyaga qo'shimcha kognitiv yuk olib keladi. Ammo bundan ham yomoni shundaki, ping "ko'z va mushaklarning kuchlanishini oshiradi".
Ushbu ta'sirlarning ba'zilari uzoq vaqtdan beri ma'lum va natijalar
Fatin o'z testlarini matn muharrirlarida o'tkazdi; deb nomlangan ko'chma asbob yaratdi
Mening o'lchovlarim natijalari, shuningdek, Fatinning ba'zi natijalari, mening tajribam uning sinovlariga mos kelishini ko'rsatish uchun:
Meni hayratga solgan birinchi narsa xterm va mlterm kabi eski dasturlarning yaxshi javob berish vaqti edi. Eng yomon registrning kechikishi (2,4 ms) bilan ular eng tez zamonaviy terminaldan (st uchun 10,6 ms) yaxshiroq ishladilar. Hech bir zamonaviy terminal 10 millisekundlik chegaradan pastga tushmaydi. Xususan, Alacritty "eng tezkor terminal emulyatori" da'vosiga javob bera olmaydi, garchi uning ballari 2017 yilda birinchi ko'rib chiqilganidan beri yaxshilangan. Haqiqatan ham, loyiha mualliflari
Biroq, farqlar ko'zga sezilmasligi mumkin. Fatin tushuntirganidek, "uning sizga ta'sir qilishi uchun kechikishdan xabardor bo'lishingiz shart emas". Fatin, shuningdek, standart og'ish haqida ogohlantiradi: "kechikishdagi har qanday buzilishlar (jitter) oldindan aytib bo'lmaydiganligi sababli qo'shimcha stressni keltirib chiqaradi."
Yuqoridagi grafik sof Debian 9 (strech) da olingan
O'tkazish tezligi
Keyingi test an'anaviy "tezlik" yoki "o'tkazish qobiliyati" testi bo'lib, u ekranda katta hajmdagi matnni ko'rsatishda terminal sahifani qanchalik tez aylantirishi mumkinligini o'lchaydi. Sinovning mexanikasi har xil; original test seq buyrug'i yordamida bir xil matn qatorini yaratish edi. Boshqa testlar orasida Tomas E. Dikki (xterm saqlovchi) testi qayta-qayta takrorlanadi
Bu yerda biz raqobatdan oldinda rxvt va st pull, undan keyin esa ishlashga e'tibor qaratilgan holda ishlab chiqilgan ancha yangi Alacritty-ni ko'ramiz. Keyingi o'rinlarda Xfce (VTE oilasi) va Konsole, ular deyarli ikki barobar tezroq. Oxirgi xterm, bu rxvt dan besh marta sekinroq. Sinov paytida xterm ham juda ko'p to'lqinlanardi, bu esa matnni bir xil satr bo'lsa ham ko'rishni qiyinlashtirdi. Konsole tez edi, lekin ba'zida qiyin edi: displey vaqti-vaqti bilan muzlab qolar, qisman matnni ko'rsatadi yoki umuman ko'rsatmaydi. Boshqa terminallar st, Alacritty va rxvt kabi qatorlarni aniq ko'rsatdi.
Dikki, ishlash farqlari turli terminallarda aylantirish buferlarining dizayni bilan bog'liqligini tushuntiradi. Xususan, u rxvt va boshqa terminallarni "umumiy qoidalarga rioya qilmaslik"da ayblaydi:
"Xtermdan farqli o'laroq, rxvt barcha yangilanishlarni ko'rsatishga urinmadi. Agar u orqada qolsa, u ba'zi yangilanishlarni ushlash uchun rad etadi. Bu ichki xotirani tashkil qilishdan ko'ra ko'rinadigan aylanish tezligiga ko'proq ta'sir qildi. Bir kamchilik shundaki, ASCII animatsiyasi biroz noaniq edi."
Ushbu sezilgan xterm sustligini tuzatish uchun Dikki resursdan foydalanishni taklif qiladi
Resurs iste'moli
O'tkazish tezligini ishlash ko'rsatkichi sifatida ko'rib chiqish mantiqiy bo'lishidan qat'i nazar, bu test bizga terminallardagi yukni simulyatsiya qilish imkonini beradi, bu esa o'z navbatida xotira yoki diskdan foydalanish kabi boshqa parametrlarni o'lchash imkonini beradi. Ko'rsatkichlar belgilangan testni o'tkazish orqali olingan seq Python jarayoni monitoringi ostida. U hisoblagich ma'lumotlarini yig'di
Ushbu testda ST eng kam o'rtacha xotira iste'moli 8 MB bilan birinchi o'rinni egallaydi, bu dizaynning asosiy g'oyasi soddaligi ekanligini hisobga olsak ajablanarli emas. mlterm, xterm va rxvt biroz ko'proq iste'mol qiladi - taxminan 12 MB. Yana bir e'tiborga molik natija - Alacritty, uning ishlashi uchun 30 MB talab qilinadi. Keyin 40 dan 60 MB gacha bo'lgan VTE oilasining terminallari mavjud, bu juda ko'p. Ushbu iste'molni ushbu terminallar yuqori darajadagi kutubxonalardan foydalanishi bilan izohlash mumkin, masalan, GTK. Konsole sinovlar davomida 65 MB hajmdagi xotira iste'moli bilan oxirgi o'rinda turadi, garchi buni uning juda keng xususiyatlari bilan oqlash mumkin.
O'n yil oldin olingan oldingi natijalar bilan solishtirganda, barcha dasturlar sezilarli darajada ko'proq xotirani iste'mol qila boshladi. Ilgari Xterm 4 MB talab qilgan, endi esa ishga tushirilganda 15 MB talab qilinadi. Rxvt uchun iste'molning xuddi shunday o'sishi mavjud, bu endi qutidan 16 MB talab qiladi. Xfce Terminali 34 MB joyni egallaydi, bu avvalgidan uch baravar katta, lekin GNOME terminali uchun atigi 20 MB talab qilinadi. Albatta, oldingi barcha sinovlar 32-bitli arxitekturada o'tkazildi. LCA 2012 da Rusty Russell
Biroq, terminal kabi asosiy narsaga ko'proq xotira ajratish resurslarni isrof qilish ekanligini his qilolmayman. Ushbu dasturlar eng kichigi bo'lishi kerak, har qanday "qutida", hatto poyabzal qutisida ham ishlashi kerak, agar biz ularni Linux tizimlari bilan jihozlash kerak bo'lgan nuqtaga kelsak (va siz bilasizki, bu shunday bo'ladi). ). Ammo bu raqamlar bilan xotiradan foydalanish kelajakda eng engil va cheklangan imkoniyatlardan tashqari bir nechta terminallar bilan ishlaydigan har qanday muhitda muammoga aylanadi. Buning o'rnini qoplash uchun GNOME Terminal, Konsole, urxvt, Terminator va Xfce Terminalda bir nechta terminallarni bitta jarayon orqali boshqarish imkonini beruvchi, xotira sarfini cheklash imkonini beruvchi Daemon rejimi mavjud.
Sinovlar paytida men diskni o'qish-yozish bo'yicha yana bir kutilmagan natijaga keldim: men bu erda hech narsa ko'rmasligimni kutgan edim, ammo ma'lum bo'ldiki, ba'zi terminallar diskka eng katta hajmli ma'lumotlarni yozadilar. Shunday qilib, VTE kutubxonasi aslida diskda aylantirish buferini saqlaydi (bu xususiyat
xulosa
Maqolaning birinchi qismida biz VTE-ga asoslangan terminallarning yaxshi funktsiyalar to'plamiga ega ekanligini aniqladik, ammo endi biz bu ba'zi ishlash xarajatlari bilan kelishini ko'ramiz. Endi xotira muammo emas, chunki barcha VTE terminallarini Daemon jarayoni orqali boshqarish mumkin, bu ularning ishtahasini cheklaydi. Biroq, RAM va yadro buferlari miqdorida jismoniy cheklovlarga ega eski tizimlar hali ham terminallarning oldingi versiyalariga muhtoj bo'lishi mumkin, chunki ular sezilarli darajada kamroq resurslarni iste'mol qiladi. VTE terminallari o'tkazish (aylantirish) testlarida yaxshi natijalarga erishgan bo'lsa-da, ularning ko'rsatish kechikishi GNOME foydalanuvchi qo'llanmasida belgilangan chegaradan yuqori. VTE ishlab chiquvchilari buni hisobga olishlari kerak. Agar biz yangi Linux foydalanuvchilari uchun ham terminalga duch kelishi muqarrar ekanligini hisobga olsak, ular uni yanada qulayroq qilishlari mumkin. Tajribali geeks uchun standart terminaldan o'tish hatto kamroq ko'zni chalg'itishi va uzoq ish seanslari tufayli kelajakda ish bilan bog'liq jarohatlar va kasalliklarning oldini olish qobiliyatini anglatishi mumkin. Afsuski, faqat eski xterm va mlterm bizni 10 millisekundlik sehrli ping chegarasiga olib keladi, bu ko'pchilik uchun qabul qilinishi mumkin emas.
Benchmark o'lchovlari shuni ko'rsatdiki, Linux grafik muhitlarining rivojlanishi tufayli ishlab chiquvchilar bir qator murosaga kelishlari kerak edi. Ba'zi foydalanuvchilar oddiy oyna boshqaruvchilariga qarashni xohlashlari mumkin, chunki ular pingni sezilarli darajada kamaytiradi. Afsuski, Wayland uchun kechikish vaqtini o'lchashning iloji bo'lmadi: men ishlatgan Typometer dasturi Waylandning oldini olish uchun yaratilgan: boshqa oynalarda josuslik. Umid qilamanki, Wayland kompozitsiyasi X.org dan yaxshiroq ishlaydi va kelajakda kimdir bu muhitda kechikishni o'lchash yo'lini topadi deb umid qilaman.
Manba: www.habr.com