Якчанд сухан аз бюрои тарчимаи мо: одатан хар кас кушиш мекунад, ки материалу нашрхои навтаринро тарчима кунад ва мо низ истисно нестем. Аммо терминалҳо чизе нестанд, ки дар як ҳафта як маротиба нав карда шаванд. Аз ин рӯ, мо барои шумо мақолаи Антуан Бопреро, ки дар баҳори соли 2018 нашр шудааст, тарҷума кардем: сарфи назар аз "синну сол" аз рӯи меъёрҳои муосир, ба андешаи мо, мавод умуман аҳамияти худро гум накардааст. Илова бар ин, ин дар ибтидо як силсилаи ду мақола буд, аммо мо тасмим гирифтем, ки онҳоро дар як паёми калон муттаҳид кунем.
Терминалҳо дар таърихи компютер ҷои махсус доранд, аммо дар даҳсолаҳои охир онҳо маҷбур шуданд, ки дар баробари хати фармон зинда монад, зеро интерфейсҳои графикӣ дар ҳама ҷо паҳн мешаванд.
Баъзе терминалҳо сӯрохиҳои бехатарии ҳайратангез доранд, инчунин аксари онҳо маҷмӯи комилан гуногуни вазифаҳо доранд, аз дастгирии интерфейси ҷадвалбандӣ то скрипт. Гарчанде ки мо
Инҳоянд терминалҳое, ки ман дида будам:
Инҳо шояд версияҳои охирин набошанд, зеро ҳангоми навиштан ман бо сохтани устувор маҳдуд будам, ки ман тавонистам онро дар Debian 9 ё Fedora 27 паҳн кунам. Ягона истисно Alacritty аст. Он насли терминалҳои суръатбахши GPU аст ва бо забони ғайриоддӣ ва нав барои ин вазифа навишта шудааст - Rust. Ман веб терминалҳоро аз баррасии худ хориҷ кардам (аз ҷумла онҳое, ки дар
Дастгирии Юникод
Ман санҷишҳои худро бо дастгирии Юникод оғоз кардам. Санҷиши аввалини терминалҳо намоиш додани сатри Юникод аз
Бо нобаёнӣ, xterm шрифти классикии "собит" -ро истифода мебарад, ки мувофиқи он
Ин скриншотҳо дар Fedora 27 гирифта шудаанд, зеро он нисбат ба Debian 9 натиҷаҳои беҳтар дод, ки дар он баъзе версияҳои кӯҳнаи терминалҳо (махсусан mlterm) шрифтҳоро дуруст идора карда наметавонистанд. Хушбахтона, ин дар версияҳои баъдӣ ислоҳ карда шуд.
Акнун бубинед, ки хат дар xterm чӣ гуна нишон дода мешавад. Маълум мешавад, ки рамзи Mem ва семитии зерин
"Бисёр барномаҳои компютерӣ наметавонанд матни дуҷонибаро дуруст нишон диҳанд. Масалан, номи ибронии "Сара" аз аломатҳои sin (ש) (ки дар тарафи рост пайдо мешавад), сипас resh (ר) ва дар ниҳоят ӯ (ה) (ки бояд дар тарафи чап пайдо шавад) иборат аст."
Бисёр терминалҳо аз ин санҷиш ноком мешаванд: терминалҳои Alacritty, Gnome ва XFCE аз VTE гирифташуда, urxvt, st ва xterm "Sara"-ро бо тартиби баръакс нишон медиҳанд, гӯё ки мо номро ҳамчун "Арас" навиштаем.
Мушкилоти дигар бо матнҳои дуҷониба дар он аст, ки онҳо бояд бо ягон роҳ мувофиқ карда шаванд, хусусан вақте ки сухан дар бораи омехта кардани матнҳои RTL ва LTR меравад. Скриптҳои RTL бояд аз тарафи рости равзанаи терминал кор кунанд, аммо барои терминалҳое, ки ба забони LTR English пешфарз ҳастанд, чӣ мешавад? Аксарияти онҳо ягон механизми махсус надоранд ва ҳама матнро ба чап мувофиқат мекунанд (аз ҷумла дар Konsole). Истисноҳо pterm ва mlterm мебошанд, ки ба стандартҳо мувофиқат мекунанд ва чунин хатҳоро ба рост мувофиқ мекунанд.
Муҳофизати воридшавӣ
Хусусияти навбатии муҳиме, ки ман муайян кардам, муҳофизати зидди воридкунӣ мебошад. Гарчанде ки он ба таври васеъ маълум аст, ки имло чунин аст:
$ curl http://example.com/ | sh
фармонҳои пахшкунии коди иҷрошаванда мебошанд, кам одамон медонанд, ки фармонҳои пинҳонӣ ҳангоми нусхабардорӣ ва часбондан аз браузери веб ҳатто пас аз санҷиши дақиқ метавонанд ба консол ворид шаванд.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
Вақте ки аз вебсайти Horn ба терминал часбонед, ба чунин нороҳатӣ табдил меёбад:
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
Он чӣ гуна кор мекунад? Рамзи зараровар ба блок дохил карда шудааст , ки бо истифода аз CSS аз назари корбар хориҷ карда мешавад.
set enable-bracketed-paste on
Мутаассифона, сайти санҷишии Хорн инчунин нишон медиҳад, ки чӣ гуна ин муҳофизатро тавассути худи форматкунии матн гузарад ва бармаҳал ба кор бурдани режими қавсаро ба он анҷом диҳад. Ин кор мекунад, зеро баъзе терминалҳо пеш аз илова кардани худ, пайдарпайии фирорро дуруст филтр намекунанд. Масалан, ман ҳеҷ гоҳ натавонистам санҷишҳои Konsole-ро ҳатто бо конфигуратсияи дуруст бомуваффақият анҷом диҳам .inputrc файл. Ин маънои онро дорад, ки шумо метавонед ба осонӣ конфигуратсияи системаи худро бо сабаби барномаи дастгирӣнашаванда ё қабати нодуруст танзимшуда вайрон кунед. Ин махсусан ҳангоми ворид шудан ба серверҳои дурдаст хатарнок аст, ки дар он ҷо кори конфигуратсияи бодиққат камтар маъмул аст, хусусан агар шумо чунин мошинҳои дурдаст зиёд дошта бошед.
Ҳалли хуби ин мушкилот плагини тасдиқи часбонӣ барои терминал мебошад urxvt, ки танҳо барои ворид кардани ҳар як матне, ки дорои сатрҳои нав аст, иҷозат мепурсад. Ман барои ҳамлаи матние, ки Хорн тавсиф кардааст, як варианти бехатартаре наёфтам.
Ҷадвалҳо ва профилҳо
Ҳоло як хусусияти маъмул ин дастгирии интерфейси ҷадвалбандӣ мебошад, ки мо онро ҳамчун як равзанаи терминали дорои якчанд терминалҳои дигар муайян мекунем. Ин функсия барои терминалҳои гуногун фарқ мекунад ва гарчанде ки терминалҳои анъанавии xterm ҷадвалҳоро умуман дастгирӣ намекунанд, инкарнатсияҳои муосиртари терминал ба монанди Xfce Terminal, GNOME Terminal ва Konsole ин вазифаро доранд. Urxvt инчунин ҷадвалҳоро дастгирӣ мекунад, аммо танҳо агар шумо плагинро истифода баред. Аммо аз нуқтаи назари дастгирии ҷадвалҳо, Terminator пешвои бебаҳс аст: он на танҳо ҷадвалҳоро дастгирӣ мекунад, балки инчунин метавонад терминалҳоро бо ҳама гуна тартиб ҷойгир кунад (нигаред ба тасвири дар поён).
Хусусияти дигари Terminator ин қобилияти "гурӯҳ" кардани ин ҷадвалҳо ва фиристодани тугмаҳои якхела ба якчанд терминалҳо мебошад, ки асбоби хомро барои иҷрои амалиёти оммавӣ дар як вақт дар серверҳои сершумор таъмин мекунад. Хусусияти шабеҳ дар Konsole низ амалӣ карда мешавад. Барои истифодаи ин хусусият дар терминалҳои дигар, шумо бояд нармафзори тарафи сеюмро истифода баред, масалан
Ҷадвалҳо махсусан ҳангоми ҷуфт кардани профилҳо хуб кор мекунанд: масалан, шумо метавонед як ҷадвалро барои почтаи электронӣ, дигаре барои сӯҳбат ва ғайра дошта бошед. Ин аз ҷониби Terminal Konsole ва Terminal GNOME хуб дастгирӣ карда мешавад. Ҳарду имкон медиҳанд, ки ҳар як ҷадвал профили худро ба таври худкор оғоз кунад. Терминатор инчунин профилҳоро дастгирӣ мекунад, аммо ман роҳи ба таври худкор оғоз кардани барномаҳои муайянро ҳангоми кушодани ҷадвали мушаххас пайдо карда натавонистам. Дигар терминалҳо умуман мафҳуми “профил” надоранд.
Руфлҳо
Охирин чизе, ки ман дар қисми аввали ин мақола мефаҳмам, намуди терминалҳост. Масалан, GNOME, Xfce ва urxvt шаффофиятро дастгирӣ мекунанд, аммо ба наздикӣ дастгирии тасвирҳои пасзаминаро қатъ карданд ва баъзе корбаронро маҷбур карданд, ки ба терминал гузаранд
Баъзе терминалҳо инчунин матнро барои намунаҳои URL таҳлил мекунанд, то истинодҳоро клик карда тавонанд. Ин ба ҳама терминалҳои аз VTE гирифташуда дахл дорад, дар ҳоле ки urxvt плагини махсусро талаб мекунад, ки URL-ро бо як клик ё бо истифода аз миёнабурҳои клавиатура табдил медиҳад. Дигар терминалҳое, ки ман URL-ро бо роҳҳои дигар санҷидам.
Ниҳоят, тамоюли нав дар терминалҳо ихтиёрии буфери ҳаракаткунанда мебошад. Масалан, st буфери ҳаракаткунанда надорад; тахмин карда мешавад, ки корбар як мултиплекси терминалро ба монанди tmux ва
Alacritty низ намерасад буферҳои backscroll, аммо
Мобайнҳо
Дар қисми дуюми мавод (дар асл ин ду мақолаи гуногун буданд - тақрибан. хати) мо иҷрои кор, истифодаи хотира ва таъхирро муқоиса хоҳем кард. Аммо мо аллакай мебинем, ки баъзе терминалҳои мавриди назар камбудиҳои ҷиддӣ доранд. Масалан, корбароне, ки мунтазам бо скриптҳои RTL кор мекунанд, метавонанд мехоҳанд mlterm ва pterm-ро баррасӣ кунанд, зеро онҳо нисбат ба дигарон дар иҷрои вазифаҳои шабеҳ беҳтаранд. Консол хам нагз баромад кард. Истифодабарандагоне, ки бо скриптҳои RTL кор намекунанд, метавонанд чизи дигареро интихоб кунанд.
Дар робита ба муҳофизат аз ворид кардани коди зараровар, urxvt аз сабаби татбиқи махсуси муҳофизат аз ин намуди ҳамла, ки барои ман бешубҳа қулай аст, фарқ мекунад. Барои онҳое, ки зангӯла ва ҳуштакҳоро меҷӯянд, Консол сазовори дидан аст. Дар ниҳоят, бояд қайд кард, ки VTE як пойгоҳи аъло барои терминалҳо мебошад, ки дастгирии рангҳо, шинохти URL ва ғайраро кафолат медиҳад. Дар назари аввал, терминали пешфарз, ки бо муҳити дӯстдоштаи шумо меояд, метавонад ба ҳама талабот ҷавобгӯ бошад, аммо биёед ин саволро то он даме, ки мо иҷрои онро фаҳмем, кушода монем.
Биёед сӯҳбатро идома диҳем
Дар маҷмӯъ, иҷрои терминалҳо дар худ метавонад як мушкили дурдаст ба назар расад, аммо тавре маълум мешавад, баъзеи онҳо барои нармафзори чунин навъи бунёдӣ таъхири ҳайратангези баланд доранд. Инчунин дар оянда мо ба он чизе, ки ба таври анъанавӣ "суръат" номида мешавад (воқеан, ин суръати ҳаракат аст) ва истеъмоли хотираи терминалро дида мебароем (бо огоҳии он, ки ин имрӯз мисли даҳсолаҳои пеш муҳим нест).
Таъхир
Пас аз омӯзиши ҳамаҷонибаи иҷрои терминал, ман ба хулосае омадам, ки параметри муҳимтарин дар ин замина таъхир (ping) аст. Дар маколаи худ
Аммо таъхир чист ва чаро он ин қадар муҳим аст? Фатин дар мақолаи худ онро ҳамчун "таъхир байни пахш кардани тугма ва навсозии мувофиқи экран" муайян кард ва иқтибос овард.
Фатин мефаҳмонад, ки ин пинг на танҳо қаноатмандӣ оқибатҳои амиқтар дорад: "навиштан сусттар мешавад, хатогиҳо бештар рух медиҳанд ва шиддати чашм ва мушакҳо меафзояд." Ба ибораи дигар, таъхири калон метавонад ба хатогиҳо ва инчунин паст шудани сифати код оварда расонад, зеро он ба сарбории иловагии маърифатӣ ба майна оварда мерасонад. Аммо бадтараш он аст, ки пинг "шиддати чашм ва мушакҳоро зиёд мекунад", ки ба назар чунин менамояд
Баъзе аз ин таъсирот барои муддати тӯлонӣ маълуманд ва натиҷаҳо
Фатин санҷишҳои худро дар таҳриркунандагони матн гузаронд; ба ном асбоби сайёр офаридааст
Инҳоянд натиҷаҳои андозагирии ман, инчунин баъзе натиҷаҳои Фатин, то нишон диҳанд, ки таҷрибаи ман бо санҷишҳои ӯ мувофиқ аст:
Аввалин чизе, ки маро ба ҳайрат овард, вақти вокуниши беҳтари барномаҳои кӯҳна ба монанди xterm ва mlterm буд. Бо бадтарин таъхири сабти ном (2,4 мс), онҳо нисбат ба зудтаринтарин терминали муосир (10,6 мс барои st) беҳтар кор карданд. Ягон терминали муосир аз ҳадди 10 миллисония пасттар намеояд. Махсусан, Alacritty ба даъвои "тезтарин эмулятори терминали дастрас" ҷавобгӯ нест, гарчанде ки холҳои он пас аз баррасии аввалинаш дар соли 2017 беҳтар шудаанд. Дар хакикат, муаллифони лоиха
Аммо, фарқиятҳо метавонанд ба чашм намоён набошанд. Тавре Фатин мефаҳмонад, "ба шумо лозим нест, ки аз таъхир огоҳ бошед, то он ба шумо таъсир расонад." Фатин инчунин дар бораи инҳирофоти стандартӣ ҳушдор медиҳад: "ҳар гуна ихтилоли латентӣ (jitter) аз сабаби пешгӯинашавандаи худ стресси иловагиро ба вуҷуд меорад."
Графикаи дар боло овардашуда дар Debian 9 (дароз) бо тоза гирифта шудааст
Суръати ҳаракат
Санҷиши навбатӣ санҷиши анъанавии "суръат" ё "барои фарохмаҷро" мебошад, ки чен мекунад, ки терминал то чӣ андоза зуд метавонад саҳифаро ҳангоми намоиши миқдори зиёди матн дар экран ҳаракат кунад. Механикаи санҷиш гуногун аст; санҷиши аслӣ танҳо тавлиди як сатри матн бо истифода аз фармони seq буд. Санҷишҳои дигар санҷиши Томас Э. Дикки (мутахассиси xterm) -ро дар бар мегиранд, ки такроран
Дар ин ҷо мо rxvt ва st-ро пеш аз рақобат мебинем, пас аз он Alacritty хеле навтар аст, ки бо таваҷҷӯҳ ба иҷроиш тарҳрезӣ шудааст. Дар оянда Xfce (оилаи VTE) ва Konsole мебошанд, ки қариб ду маротиба тезтаранд. Охирин xterm аст, ки аз rxvt панҷ маротиба сусттар аст. Ҳангоми санҷиш, xterm низ хеле печида буд, ки гузариши матнро душвор мегардонад, ҳатто агар он як сатр бошад. Konsole зуд буд, аммо баъзан душвор буд: дисплей гоҳ-гоҳ ях карда, матнро қисман нишон медод ё тамоман нишон намедиҳад. Дигар терминалҳо сатрҳоро равшан нишон доданд, аз ҷумла st, Alacritty ва rxvt.
Дикки мефаҳмонад, ки фарқиятҳои кор аз тарҳрезии буферҳои ҳаракаткунанда дар терминалҳои гуногун вобастаанд. Аз чумла, вай rxvt ва дигар терминалхоро ба «риоя накардани коидахои умумй» айбдор мекунад:
"Баръакси xterm, rxvt кӯшиш накард, ки ҳама навсозиро намоиш диҳад. Агар он қафо афтад, он баъзе навсозиҳои навсозиро рад мекунад. Ин назар ба ташкили хотираи дохилӣ ба суръати ҳаракати намоён таъсири бештаре дошт. Як нуқсон ин буд, ки аниматсияи ASCII то андозае номуайян буд."
Барои ислоҳ кардани ин сустии даркшудаи xterm, Дикки истифодаи захираро пешниҳод мекунад
Истеъмоли захираҳо
Новобаста аз он, ки оё суръати ҳаракатро ҳамчун як метрикаи иҷроиш баррасӣ кардан маъно дорад, ин санҷиш ба мо имкон медиҳад, ки сарбориро дар терминалҳо тақлид кунем, ки дар навбати худ ба мо имкон медиҳад, ки параметрҳои дигарро ба монанди хотира ё истифодаи диск чен кунем. Метрикҳо тавассути гузаронидани санҷиши мушаххас ба даст оварда шуданд пайдарпай зери назорати раванди Python. Ӯ маълумоти ҳисобкунакҳоро ҷамъоварӣ кард
Дар ин санҷиш, ST бо камтарин истеъмоли хотираи миёнаи 8 МБ ҷои аввалро ишғол мекунад, ки ин тааҷҷубовар нест, зеро идеяи асосии тарроҳӣ содда аст. mlterm, xterm ва rxvt каме бештар истеъмол мекунанд - тақрибан 12 МБ. Натиҷаи дигари назаррас Alacritty аст, ки барои кор 30 МБ лозим аст. Сипас терминалҳои оилаи VTE бо рақамҳои аз 40 то 60 МБ мавҷуданд, ки ин хеле зиёд аст. Ин истеъмолро бо он шарҳ додан мумкин аст, ки ин терминалҳо аз китобхонаҳои сатҳи баландтар, масалан, GTK истифода мебаранд. Konsole бо истеъмоли зиёди хотираи 65 МБ ҳангоми санҷишҳо дар ҷои охир ҷойгир аст, гарчанде ки ин метавонад бо доираи васеи хусусиятҳои он асоснок карда шавад.
Дар муқоиса бо натиҷаҳои қаблии даҳ сол пеш, ҳама барномаҳо хотираи назаррасро бештар истеъмол карданд. Xterm пештар 4 МБ талаб мекард, аммо ҳоло танҳо ҳангоми оғозёбӣ 15 МБ талаб мекунад. Ҳамин гуна афзоиши истеъмол барои rxvt вуҷуд дорад, ки ҳоло 16 МБ аз қуттӣ талаб мекунад. Xfce Terminal 34 МБ-ро мегирад, ки нисбат ба пештара се маротиба калонтар аст, аммо GNOME Terminal ҳамагӣ 20 МБ талаб мекунад. Албатта, ҳама санҷишҳои қаблӣ дар меъмории 32-бит гузаронида шуданд. Дар LCA 2012 Rusty Russell
Бо вуҷуди ин, ман наметавонам ҳис кунам, ки ҷудо кардани хотираи бештар ба чизи асосӣ ба мисли терминал сарфи беҳудаи захираҳо аст. Ин барномаҳо бояд хурдтарин аз ҳама хурдтарин бошанд, бояд дар ҳама гуна "қуттӣ", ҳатто қуттии пойафзол кор кунанд, агар мо ба он ҷое расем, ки онҳо бояд бо системаҳои Linux муҷаҳҳаз карда шаванд (ва шумо медонед, ки ин чунин хоҳад буд. ). Аммо бо ин рақамҳо, истифодаи хотира дар оянда дар ҳама гуна муҳите, ки бо терминалҳои сершумор, ғайр аз чанде аз сабуктарин ва маҳдудтарин қобилиятҳо кор мекунанд, мушкил хоҳад шуд. Барои ҷуброни ин, GNOME Terminal, Konsole, urxvt, Terminator ва Xfce Terminal дорои реҷаи Демон мебошанд, ки ба шумо имкон медиҳад, ки терминалҳои сершуморро тавассути як раванд идора карда, истеъмоли хотираи онҳоро маҳдуд кунед.
Ҳангоми санҷишҳо ман ба як натиҷаи дигари ғайричашмдошт дар бораи хондан-навиштани диск омадам: Ман интизор будам, ки дар ин ҷо ҳеҷ чизро намебинам, аммо маълум шуд, ки баъзе терминалҳо маълумоти ҳаҷмтаринро ба диск менависанд. Ҳамин тавр, китобхонаи VTE воқеан буфери ҳаракатро дар диск нигоҳ медорад (ин хусусият
хулоса
Дар қисми аввали мақола, мо дарёфтем, ки терминалҳои VTE дар асоси маҷмӯи хуби хусусиятҳо доранд, аммо ҳоло мо мебинем, ки ин бо баъзе хароҷоти иҷроиш меояд. Ҳоло хотира мушкилот нест, зеро ҳама терминалҳои VTE метавонанд тавассути раванди Демон назорат карда шаванд, ки иштиҳои онҳоро маҳдуд мекунад. Бо вуҷуди ин, системаҳои кӯҳна, ки дар ҳаҷми RAM ва буферҳои ядро маҳдудиятҳои ҷисмонӣ доранд, метавонанд ба версияҳои қаблии терминалҳо ниёз дошта бошанд, зеро онҳо захираҳои хеле камтарро истеъмол мекунанд. Гарчанде ки терминалҳои VTE дар санҷишҳои гузаранда (пайравӣ) хуб кор карданд, таъхири намоиши онҳо аз ҳадди муқарраршуда дар Дастури корбари GNOME болотар аст. Эҳтимол, таҳиягарони VTE бояд инро ба назар гиранд. Агар мо ба назар гирем, ки ҳатто барои корбарони навгони Linux дучор шудан бо терминал ногузир аст, онҳо метавонанд онро ба корбарон осонтар созанд. Барои геикҳои ботаҷриба, гузариш аз терминали пешфарз метавонад ҳатто маънои камтар фишори чашм ва қобилияти пешгирӣ кардани ҷароҳатҳо ва бемориҳои вобаста ба кор бо сабаби ҷаласаҳои тӯлонии корӣ дошта бошад. Мутаассифона, танҳо xterm ва mlterm-и кӯҳна моро ба ҳадди пинги ҷодугарӣ 10 миллисония меорад, ки барои бисёриҳо қобили қабул нест.
Андозаҳои бенчмарк инчунин нишон доданд, ки аз сабаби таҳияи муҳити графикии Linux, таҳиягарон маҷбур шуданд як қатор созишҳо кунанд. Баъзе корбарон метавонанд ба менеҷерҳои муқаррарии тиреза назар андозанд, зеро онҳо коҳиши назарраси пингро таъмин мекунанд. Мутаассифона, чен кардани таъхир дар Wayland имконнопазир буд: барномаи Typometer, ки ман истифода мекардам, барои он сохта шудааст, ки Wayland барои пешгирӣ кардани он тарҳрезӣ шудааст: ҷосусӣ дар тирезаҳои дигар. Ман умедворам, ки Wayland compositing нисбат ба X.org беҳтар кор мекунад ва ман инчунин умедворам, ки дар оянда касе роҳи чен кардани таъхирро дар ин муҳит пайдо мекунад.
Манбаъ: will.com