Sababaraha kecap ti biro panarjamahan Vérsi kami: biasana dulur narékahan pikeun narjamahkeun bahan panganyarna na publikasi, sarta kami henteu iwal. Tapi terminal henteu hal anu diropéa saminggu sakali. Ku alatan éta, kami geus ditarjamahkeun pikeun anjeun hiji artikel ku Antoine Beaupré, diterbitkeun di cinyusu 2018: sanajan considerable na "umur" ku standar modern, dina pamadegan urang, bahan teu leungit relevansi na. Sajaba ti éta, ieu asalna runtuyan dua artikel, tapi urang mutuskeun pikeun ngagabungkeun aranjeunna kana hiji pos badag.
Terminal boga tempat husus dina sajarah komputer, tapi dina dasawarsa panganyarna aranjeunna kapaksa salamet sapanjang garis paréntah sakumaha interfaces grafis jadi ubiquitous.
Sababaraha terminal boga downright héran liang kaamanan, tambah lolobana boga set lengkep beda fungsi, ti rojongan pikeun panganteur tabbed mun scripting. Sanajan urang
Ieu terminal anu kuring marios:
Ieu bisa jadi teu versi panganyarna, saprak kuring ieu dugi ka stabil ngawangun dina waktu tulisan, nu kuring bisa gulung kaluar on Debian 9 atanapi Fedora 27. Hijina iwal nyaéta Alacritty. Ieu mangrupakeun turunan tina GPU-gancangan terminal sarta ditulis dina basa mahiwal jeung anyar pikeun tugas ieu - Rust. Kuring ngaluarkeun terminal wéb tina ulasan kuring (kaasup anu aya dina
rojongan Unicode
Kuring ngamimitian tés kuring kalayan dukungan Unicode. Tes mimiti tina terminal éta pikeun mintonkeun string Unicode ti
Sacara standar, xterm nganggo font klasik "dibereskeun", anu, numutkeun
Potret layar ieu dicandak dina Fedora 27, sabab masihan hasil anu langkung saé tibatan Debian 9, dimana sababaraha versi terminal anu langkung lami (khususna mlterm) henteu tiasa ngadamel fon kalayan leres. Kabeneran ieu dibereskeun dina versi engké.
Ayeuna perhatikeun kumaha garisna dipintonkeun dina xterm. Tétéla éta simbol Mem jeung Semit handap
"Seueur program komputer teu tiasa ningalikeun téks dua arah kalayan leres. Contona, ngaran Ibrani "Sarah" diwangun ku hurup dosa (ש) (anu nembongan di katuhu), lajeng resh (ר) jeung tungtungna anjeunna (ה) (anu nembongan di kénca)."
Loba terminal gagal test ieu: Alacritty, VTE-turunan Gnome na XFCE terminal, urxvt, st na xterm tampilan "Sara" dina urutan sabalikna, saolah-olah urang geus ditulis ngaran salaku "Aras".
Masalah sanésna sareng téks bidirectional nyaéta yén aranjeunna kedah dijajarkeun kumaha waé, khususna nalika nyampur téks RTL sareng LTR. Aksara RTL kedah dijalankeun ti sisi katuhu jandela terminal, tapi naon anu kudu lumangsung pikeun terminal nu standar LTR Inggris? Kaseueuran aranjeunna henteu ngagaduhan mékanisme khusus sareng align sadaya téks ka kénca (kalebet dina Konsole). Pangecualian nyaéta pterm sareng mlterm, anu patuh kana standar sareng leres-leres garis sapertos kitu.
Perlindungan sisipan
Fitur kritis salajengna anu ku kuring parantos dikenalkeun nyaéta panyalindungan anti-insertion. Sanajan geus dipikawanoh lega yén mantra kawas:
$ curl http://example.com/ | sh
Éta paréntah push eksekusi kode, sababaraha urang terang yén paréntah disumputkeun tiasa sneak kana konsol nalika nyalin sareng nempelkeun tina browser wéb, bahkan saatos pamariksaan ati-ati.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
janten gangguan sapertos nalika ditempelkeun tina situs wéb Horn kana terminal:
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
Kumaha gawéna? Kodeu jahat kaasup kana blok , nu dipindahkeun kaluar tina panempoan pamaké ngagunakeun CSS.
set enable-bracketed-paste on
Hanjakalna, situs uji Horn ogé nunjukkeun kumaha cara ngaliwat panyalindungan ieu ku pormat téks sorangan sareng sateuacanna parantos nerapkeun mode Bracketed kana éta. Ieu jalan sabab sababaraha terminal teu bener nyaring urutan kabur saméméh nambahkeun sorangan. Salaku conto, di tambang kuring henteu pernah tiasa ngabéréskeun tés Konsole sanaos konfigurasi anu leres .inputrc berkas. Ieu ngandung harti yén anjeun bisa kalayan gampang meunang konfigurasi sistem Anjeun ruksak alatan hiji aplikasi unsupported atawa cangkang salah ngonpigurasi. Ieu hususna bahaya nalika log in kana server jauh, dimana karya konfigurasi ati-ati kirang umum, utamana lamun anjeun boga loba mesin jauh sapertos.
Solusi anu hadé pikeun masalah ieu nyaéta plugin konfirmasi témpél pikeun terminal urxvt, anu ngan saukur menta idin pikeun nyelapkeun téks naon waé anu ngandung baris anyar. Kuring henteu mendakan pilihan anu langkung aman pikeun serangan téks anu dijelaskeun ku Horn.
Tab sareng propil
Fitur anu populer ayeuna nyaéta dukungan pikeun antarmuka tab, anu bakal kami definisikeun salaku hiji jandela terminal anu ngandung sababaraha terminal deui. Pungsi ieu béda pikeun terminal béda, sarta sanajan terminal xterm tradisional teu ngarojong tab pisan, inkarnasi terminal leuwih modern kayaning Xfce Terminal, GNOME Terminal jeung Konsole boga fungsi ieu. Urxvt ogé ngarojong tab, tapi ngan lamun make plugin a. Tapi dina watesan rojongan tab sorangan, Terminator pamimpin undisputed: teu ukur ngarojong tab, tapi ogé bisa ngatur terminal dina urutan wae (tingali gambar di handap).
Fitur séjén tina Terminator nyaéta kamampuhan pikeun "grup" tab ieu babarengan jeung ngirim keystrokes sarua ka sababaraha terminal dina waktos anu sareng, nyadiakeun alat atah pikeun ngajalankeun operasi bulk dina sababaraha server sakaligus. Fitur anu sami ogé dilaksanakeun dina Konsole. Pikeun ngagunakeun fitur ieu di terminal sejen, Anjeun kudu make software pihak katilu kayaning
Tab tiasa dianggo saé pisan nalika dipasangkeun sareng propil: contona, anjeun tiasa gaduh hiji tab pikeun email, anu sanés pikeun obrolan, sareng saterasna. Ieu dirojong ku Terminal Konsole sareng Terminal GNOME. Duanana ngidinan unggal tab pikeun otomatis ngajalankeun profil sorangan. Terminator ogé ngadukung propil, tapi kuring henteu mendakan cara pikeun ngaluncurkeun program anu tangtu sacara otomatis nalika anjeun muka tab khusus. terminal séjén teu boga konsep "profil" pisan.
Ruffles
Hal anu terakhir anu bakal kuring bahas dina bagian mimiti tulisan ieu nyaéta penampilan terminal. Salaku conto GNOME, Xfce sareng urxvt ngadukung transparansi, tapi nembe parantos ngirangan dukungan pikeun gambar latar, maksa sababaraha pangguna pikeun ngalih ka terminal.
Sababaraha terminal ogé nganalisis téks pikeun pola URL pikeun ngajantenkeun tautan tiasa diklik. Ieu lumaku pikeun sakabéh terminal VTE-turunan, bari urxvt merlukeun plugin husus anu bakal transformasi URL on klik atawa maké potong kompas keyboard. terminal séjén Kuring geus diuji URL tampilan ku cara nu sejen.
Tungtungna, tren anyar dina terminal nyaéta pilihan tina panyangga ngagugulung. Contona, st euweuh panyangga ngagugulung; eta dianggap yén pamaké bakal ngagunakeun terminal multiplexer kawas tmux na
Alacritty ogé lacks backscroll buffers, tapi
Subtotal
Dina bagian kadua bahan (dina aslina ieu dua artikel béda - approx. jalur) urang bakal ngabandingkeun kinerja, pamakéan memori sareng latency. Tapi urang parantos ningali yén sababaraha terminal anu ditaroskeun ngagaduhan kakurangan anu serius. Contona, pamaké nu rutin gawé bareng Aksara RTL meureun hoyong mertimbangkeun mlterm na pterm, sabab hadé dina nanganan tugas sarupa ti batur. Konsole ogé tampil saé. Pamaké anu henteu dianggo sareng skrip RTL tiasa milih anu sanés.
Dina watesan panyalindungan ngalawan sisipan kode jahat, urxvt nangtung kaluar kusabab palaksanaan husus na panyalindungan ngalawan jenis ieu serangan, nu sigana pasti merenah pikeun kuring. Pikeun maranéhanana néangan sababaraha lonceng jeung whistles, Konsole patut katingal a. Tungtungna, éta sia noting yén VTE mangrupa basa alus teuing pikeun terminal, nu ngajamin rojongan warna, pangakuan URL, jeung saterusna. Dina glance kahiji, terminal standar nu hadir kalawan lingkungan paporit Anjeun bisa minuhan sagala sarat, tapi hayu urang ninggalkeun patarosan ieu kabuka nepi ka urang ngarti kinerja.
Hayu urang neruskeun obrolan
Sacara umum, kinerja terminal sorangan sigana kawas masalah jauh-fetched, tapi tétéla, sababaraha di antarana némbongkeun latency héran tinggi pikeun software tipe dasar. Ogé salajengna urang bakal kasampak di naon tradisional disebut "speed" (kanyataanna, ieu speed ngagulung) jeung konsumsi memori terminal (kalawan caveat yén ieu teu jadi kritis kiwari sakumaha sababaraha dekade ka tukang).
Reureuh
Saatos ulikan lengkep ngeunaan kinerja terminal, kuring sumping ka kacindekan yén parameter pangpentingna dina hal ieu latency (ping). Dina artikelna
Tapi naon latency, sareng naha éta penting pisan? Dina artikelna, Fatin ngahartikeunana salaku "reureuh antara mencét konci sareng apdet layar anu saluyu" sareng dicutat.
Fatin ngécéskeun yén ping ieu ngagaduhan akibat anu langkung jero tibatan ngan ukur kapuasan: "ngetik janten langkung laun, langkung seueur kasalahan, sareng tegangan panon sareng otot ningkat." Dina basa sejen, reureuh badag bisa ngakibatkeun typos sarta ogé nurunkeun kualitas kode, sabab ngabalukarkeun beban kognitif tambahan dina uteuk. Tapi anu langkung parah nyaéta ping "ngaronjatkeun galur panon sareng otot," anu sigana nunjukkeun
Sababaraha épék ieu geus dipikawanoh pikeun lila, sarta hasilna
Fatin ngalaksanakeun tés dina éditor téks; anjeunna nyiptakeun alat portabel anu disebut
Ieu hasil pangukuran kuring, kitu ogé sababaraha hasil Fatin, pikeun nunjukkeun yén percobaan kuring satuju sareng tés na:
Hal kahiji anu struck kuring éta waktu respon hadé tina program heubeul kayaning xterm na mlterm. Kalawan latency register awon (2,4 mdet), aranjeunna dipigawé hadé ti terminal modern panggancangna (10,6 mdet pikeun st). Taya terminal modern ragrag handap ambang 10 milidetik. Khususna, Alacritty gagal nyumponan klaim "émulator terminal panggancangna anu sayogi", sanaos skorna parantos ningkat ti saprak ulasan munggaran taun 2017. Mémang, pangarang proyék
Sanajan kitu, bédana bisa jadi teu noticeable ku panon. Sakumaha anu dijelaskeun Fatin, "Anjeun henteu kedah sadar kana telatna pikeun pangaruhna ka anjeun." Fatin ogé ngingetkeun ngeunaan simpangan baku: "sagala gangguan dina latency (jitter) nyiptakeun setrés tambahan alatan unpredictability maranéhanana."
Grafik di luhur dicokot dina murni Debian 9 (stretch) kalawan
Laju ngagulung
Tés salajengna nyaéta tés "laju" atanapi "bandwidth" tradisional, anu ngukur sabaraha gancang terminal tiasa ngagulung halaman bari ningalikeun téks anu ageung dina layar. Mékanika tés rupa-rupa; test aslina éta saukur ngahasilkeun string téks sarua maké paréntah seq. tés séjén kaasup Thomas E. Dickey urang (xterm maintainer) test, nu sababaraha kali
Di dieu urang tingali rxvt na st narik payun kompetisi, dituturkeun ku Alacritty teuing anyar, nu dirancang kalayan fokus kana kinerja. Salajengna nyaéta Xfce (kulawarga VTE) sareng Konsole, anu ampir dua kali gancang. Panungtungan nyaéta xterm, anu lima kali langkung laun tibatan rxvt. Salila tés, xterm ogé rippled pisan, sahingga ngalirkeun téks hésé ningali sanajan éta garis sarua. Konsole gancang, tapi kadang-kadang hésé: tampilanna bakal beku ti waktos ka waktos, nunjukkeun téks parsial atanapi henteu nunjukkeun pisan. terminal séjén ditampilkeun string jelas, kaasup st, Alacritty, sarta rxvt.
Dickey ngécéskeun yén bédana kinerja disababkeun ku desain panyangga ngagugulung dina terminal anu béda. Khususna, anjeunna nuduh rxvt sareng terminal sanésna "henteu nuturkeun aturan umum":
"Teu sapertos xterm, rxvt henteu nyobian nampilkeun sadaya apdet. Lamun ragrag balik, éta bakal nolak sababaraha apdet pikeun nyekel up. Ieu ngagaduhan dampak anu langkung ageung kana laju ngagulung anu katingali tibatan organisasi mémori internal. Hiji kalemahan nyaéta animasi ASCII rada teu tepat.
Pikeun ngalereskeun xterm sluggishness ditanggap ieu, Dickey nyarankeun ngagunakeun sumberdaya
Konsumsi sumberdaya
Henteu paduli naha éta masuk akal pikeun nganggap kacepetan ngagulung salaku métrik kinerja, tés ieu ngamungkinkeun urang pikeun simulasi beban dina terminal, anu ngamungkinkeun urang pikeun ngukur parameter sanés sapertos mémori atanapi pamakean disk. Métrik dicandak ku ngajalankeun tés anu ditangtukeun seq handapeun Python prosés monitoring. Anjeunna ngumpulkeun data meter
Dina tés ieu, ST lumangsung kahiji kalayan konsumsi mémori rata-rata panghandapna tina 8 MB, anu teu héran mertimbangkeun yén ide utama desain nyaéta kesederhanaan. mlterm, xterm na rxvt meakeun saeutik leuwih - ngeunaan 12 MB. Hasil anu kasohor sanésna nyaéta Alacritty, anu peryogi 30 MB pikeun ngajalankeun. Teras aya terminal kulawarga VTE kalayan angka ti 40 dugi ka 60 MB, anu lumayan seueur. Konsumsi ieu tiasa dijelaskeun ku kanyataan yén terminal ieu nganggo perpustakaan tingkat luhur, contona, GTK. Konsole datang dina panungtungan kalawan 65MB whopping konsumsi memori salila tés, sanajan ieu bisa diyakinkeun ku rentang pisan lega fitur na.
Dibandingkeun jeung hasil saméméhna diala sapuluh taun ka pengker, sadaya program mimiti meakeun memori noticeably langkung. Xterm dipaké pikeun merlukeun 4 MB, tapi ayeuna merlukeun 15 MB ngan dina ngamimitian. Aya kanaékan sarupa dina konsumsi pikeun rxvt, nu ayeuna merlukeun 16 MB out of the box. Xfce Terminal nyokot 34 MB, nu tilu kali leuwih badag batan saméméhna, tapi GNOME Terminal merlukeun ngan 20 MB. Tangtosna, sadaya tés sateuacana dilaksanakeun dina arsitektur 32-bit. Dina LCA 2012 Rusty Russell
Nanging, kuring henteu tiasa ngaraos yén alokasi langkung seueur mémori kana hal anu dasar sapertos terminal mangrupikeun runtah sumber. Program-program ieu kedah pangleutikna tina pangleutikna, kedah tiasa dijalankeun dina "kotak" mana waé, bahkan kotak sapatu, upami urang kantos dugi ka titik dimana aranjeunna kedah dilengkepan sistem Linux (sareng anjeun terang yén éta bakal kitu. ). Tapi kalayan nomer ieu, pamakean mémori bakal janten masalah di masa depan di lingkungan mana waé anu ngajalankeun sababaraha terminal sanés tina sababaraha kamampuan anu paling hampang sareng paling terbatas. Pikeun ngimbangan ieu, GNOME Terminal, Konsole, urxvt, Terminator na Xfce Terminal boga mode Daemon nu ngidinan Anjeun pikeun ngadalikeun sababaraha terminal ngaliwatan hiji prosés tunggal, ngawatesan konsumsi memori maranéhanana.
Salila tés kuring, kuring sumping ka hasil anu teu kaduga ngeunaan disk read-write: Abdi ngarepkeun teu aya nanaon di dieu, tapi tétéla yén sababaraha terminal nyerat data anu paling ageung kana disk. Janten, perpustakaan VTE saleresna ngajaga panyangga gulung dina disk (fitur ieu
kacindekan
Dina bagian mimiti artikel, urang manggihan yén terminal basis VTE boga set alus fitur, tapi ayeuna urang nempo yén ieu hadir kalawan sababaraha waragad kinerja. Ayeuna mémori henteu janten masalah sabab sadaya terminal VTE tiasa dikontrol ngaliwatan prosés Daemon, anu ngabatesan napsu. Sanajan kitu, sistem heubeul nu boga watesan fisik dina jumlah RAM na kernel buffers masih bisa merlukeun versi saméméhna tina terminal, sabab meakeun sumberdaya nyata pangsaeutikna. Sanajan terminal VTE dipigawé ogé dina throughput (ngagulung) tés, latency tampilan maranéhanana luhur ambang nu diatur dina Panungtun pamaké GNOME. Pangembang VTE sigana kedah tumut kana akun ieu. Upami urang tumut kana akun yén bahkan pikeun pangguna Linux novice anu mendakan terminal henteu tiasa dihindari, aranjeunna tiasa ngajantenkeun langkung ramah pangguna. Pikeun geeks ngalaman, pindah ti terminal standar malah bisa hartosna kirang galur panon jeung kamampuhan pikeun nyingkahan tatu nu patali jeung karya hareup jeung alatan sési gawé panjang. Hanjakal, ngan xterm heubeul na mlterm mawa kami ka bangbarung ping magic 10 milliseconds, nu unacceptable keur loba.
Pangukuran patokan ogé nunjukkeun yén kusabab pamekaran lingkungan grafis Linux, pamekar kedah ngadamel sababaraha kompromi. Sababaraha pamaké meureun hoyong ningali manajer jandela biasa sabab nyadiakeun réduksi ping signifikan. Hanjakal, teu mungkin pikeun ngukur latency pikeun Wayland: program Typometer I dipaké dijieun pikeun naon Wayland dirancang pikeun nyegah: spionase dina jandéla séjén. Kuring miharep éta Wayland compositing ngalakukeun hadé ti X.org, sarta kuring miharep ogé yén dina mangsa nu bakal datang batur bakal manggihan cara pikeun ngukur latency di lingkungan ieu.
sumber: www.habr.com