Några ord från vår översättningsbyrå: vanligtvis strävar alla efter att översätta det senaste materialet och publikationerna, och vi är inget undantag. Men terminaler är inget som uppdateras en gång i veckan. Därför har vi översatt för dig en artikel av Antoine Beaupré, publicerad våren 2018: trots sin avsevärda "ålder" med moderna mått mätt har materialet enligt vår mening inte förlorat sin relevans alls. Dessutom var detta ursprungligen en serie på två artiklar, men vi bestämde oss för att kombinera dem till ett stort inlägg.
Terminaler har en speciell plats i datorhistorien, men de senaste decennierna har de tvingats överleva vid sidan av kommandoraden eftersom grafiska gränssnitt blir allestädes närvarande.
Vissa terminaler har rent överraskande säkerhetshål, plus att de flesta har en helt annan uppsättning funktioner, från stöd för ett flikgränssnitt till skript. Även om vi
Här är terminalerna jag granskade:
Dessa kanske inte är de senaste versionerna, eftersom jag var begränsad till stabila versioner när jag skrev, som jag kunde rulla ut på Debian 9 eller Fedora 27. Det enda undantaget är Alacritty. Det är en ättling till GPU-accelererade terminaler och är skriven på ett ovanligt och nytt språk för denna uppgift - Rust. Jag uteslöt webbterminaler från min recension (inklusive de på
Unicode-stöd
Jag började mina tester med Unicode-stöd. Det första testet av terminalerna var att visa Unicode-strängen från
Som standard använder xterm det klassiska "fasta" typsnittet, som enl
Dessa skärmdumpar togs i Fedora 27, eftersom det gav bättre resultat än Debian 9, där vissa äldre versioner av terminaler (särskilt mlterm) inte kunde hantera teckensnitt ordentligt. Lyckligtvis fixades detta i senare versioner.
Lägg nu märke till hur linjen visas i xterm. Det visar sig att symbolen Mem och följande semitiska
"Många datorprogram kan inte visa dubbelriktad text korrekt. Till exempel består det hebreiska namnet "Sarah" av tecknen sin (ש) (som visas till höger), sedan resh (ר) och slutligen han (ה) (som ska visas till vänster)."
Många terminaler misslyckas med detta test: Alacritty, VTE-härledda Gnome och XFCE terminaler, urxvt, st och xterm visar "Sara" i omvänd ordning, som om vi hade skrivit namnet som "Aras".
Ett annat problem med dubbelriktade texter är att de måste anpassas på något sätt, speciellt när det gäller att blanda RTL- och LTR-texter. RTL-skript bör köras från höger sida av terminalfönstret, men vad ska hända för terminaler som har LTR engelska som standard? De flesta av dem har inga speciella mekanismer och justerar all text till vänster (inklusive i Konsole). Undantagen är pterm och mlterm, som följer standarderna och högerjusterar sådana linjer.
Insticksskydd
Nästa kritiska funktion jag har identifierat är skydd mot införing. Även om det är allmänt känt att trollformler som:
$ curl http://example.com/ | sh
är push-kommandon för kodexekvering, få människor vet att dolda kommandon kan smyga sig in i konsolen när du kopierar och klistrar in från en webbläsare, även efter noggrann inspektion.
git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git
blir till en sådan olägenhet när den klistras in från Horns webbplats i terminalen:
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
Hur det fungerar? Skadlig kod ingår i blocket , som flyttas ur användarens vy med CSS.
set enable-bracketed-paste on
Tyvärr visar Horns testsajt också hur man kan kringgå detta skydd genom själva textformateringen och i förtid sluta med att använda bracketed-läge på det. Detta fungerar eftersom vissa terminaler inte korrekt filtrerar escape-sekvenser innan de lägger till sina egna. Till exempel, i min kunde jag aldrig slutföra Konsole-testerna ens med rätt konfiguration .inputrc fil. Detta innebär att du lätt kan få din systemkonfiguration skadad på grund av en applikation som inte stöds eller ett felaktigt konfigurerat skal. Detta är särskilt farligt när du loggar in på fjärrservrar, där noggrant konfigurationsarbete är mindre vanligt, särskilt om du har många sådana fjärrmaskiner.
En bra lösning på detta problem är insticksprogrammet för inklistringsbekräftelse för terminalen urxvt, som helt enkelt ber om tillåtelse att infoga all text som innehåller nyrader. Jag har inte hittat ett säkrare alternativ för textattacken som beskrivits av Horn.
Flikar och profiler
En populär funktion just nu är stöd för ett flikgränssnitt, som vi kommer att definiera som ett terminalfönster som innehåller flera andra terminaler. Denna funktion skiljer sig för olika terminaler, och även om traditionella xterm-terminaler inte stöder flikar alls, har modernare terminalinkarnationer som Xfce Terminal, GNOME Terminal och Konsole denna funktion. Urxvt stöder också flikar, men bara om du använder ett plugin. Men när det gäller flikstöd i sig är Terminator den obestridda ledaren: den stöder inte bara flikar, utan kan också ordna terminaler i valfri ordning (se bilden nedan).
En annan funktion hos Terminator är möjligheten att "gruppera" dessa flikar tillsammans och skicka samma tangenttryckningar till flera terminaler samtidigt, vilket ger ett grovt verktyg för att utföra bulkoperationer på flera servrar samtidigt. En liknande funktion är också implementerad i Konsole. För att använda denna funktion i andra terminaler måste du använda programvara från tredje part som t.ex
Flikar fungerar särskilt bra när de är ihopparade med profiler: du kan till exempel ha en flik för e-post, en annan för chatt och så vidare. Detta stöds väl av Konsole Terminal och GNOME Terminal. Båda låter varje flik automatiskt starta sin egen profil. Terminator stöder också profiler, men jag kunde inte hitta ett sätt att automatiskt starta vissa program när du öppnar en specifik flik. Andra terminaler har inte begreppet "profil" alls.
Volanger
Det sista jag kommer att ta upp i den första delen av den här artikeln är terminalernas utseende. Till exempel GNOME, Xfce och urxvt stöder transparens, men har nyligen tappat stödet för bakgrundsbilder, vilket tvingar vissa användare att byta till terminalen
Vissa terminaler analyserar också text för URL-mönster för att göra länkar klickbara. Detta gäller alla VTE-härledda terminaler, medan urxvt kräver en speciell plugin som skulle transformera webbadresser vid ett klick eller med ett kortkommando. Andra terminaler Jag har testat visningsadresser på andra sätt.
Slutligen, en ny trend inom terminaler är valbarheten av rullningsbufferten. Till exempel har st ingen rullningsbuffert; det antas att användaren kommer att använda en terminal multiplexer som tmux och
Alacritty saknar också backscroll-buffertar, men
delsummor
I den andra delen av materialet (i originalet var det två olika artiklar - ca. körfält) kommer vi att jämföra prestanda, minnesanvändning och latens. Men vi kan redan nu se att några av terminalerna i fråga har allvarliga brister. Till exempel kan användare som regelbundet arbetar med RTL-skript vilja överväga mlterm och pterm, eftersom de är bättre på att hantera liknande uppgifter än andra. Konsole presterade också bra. Användare som inte arbetar med RTL-skript kan välja något annat.
När det gäller skydd mot skadlig kodinsättning, sticker urxvt ut på grund av dess speciella implementering av skydd mot denna typ av attack, vilket verkar definitivt bekvämt för mig. För den som letar efter lite klockor och visselpipor är Konsole värt en titt. Slutligen är det värt att notera att VTE är en utmärkt bas för terminaler, vilket garanterar färgstöd, URL-igenkänning och så vidare. Vid första anblicken kan standardterminalen som följer med din favoritmiljö uppfylla alla krav, men låt oss lämna denna fråga öppen tills vi förstår prestandan.
Vi fortsätter samtalet
Generellt sett kan prestandan hos terminaler i sig verka som ett långsökt problem, men som det visar sig uppvisar vissa av dem förvånansvärt hög latens för mjukvara av en så grundläggande typ. Härnäst kommer vi också att titta på vad som traditionellt kallas "hastighet" (i själva verket är detta rullningshastigheten) och minnesförbrukning för terminalen (med förbehållet att detta inte är lika kritiskt idag som det var för decennier sedan).
Fördröjning
Efter en grundlig studie av terminalprestanda kom jag till slutsatsen att den viktigaste parametern i detta avseende är latensen (ping). I hans artikel
Men vad är latens, och varför är det så viktigt? I sin artikel definierade Fatin det som "fördröjningen mellan att trycka på en tangent och motsvarande skärmuppdatering" och citerade
Fatin förklarar att denna ping har djupare konsekvenser än bara tillfredsställelse: "att skriva blir långsammare, fler fel uppstår och ögon- och muskelspänningar ökar." En stor fördröjning kan med andra ord leda till stavfel och även lägre kodkvalitet, eftersom det leder till ytterligare kognitiv belastning på hjärnan. Men vad värre är att ping "ökar ögon- och muskelansträngning", vilket verkar antyda
Vissa av dessa effekter har varit kända under lång tid, och resultaten
Fatin genomförde sina tester på textredigerare; han skapade ett bärbart instrument som heter
Här är resultaten av mina mätningar, såväl som några av Fatins resultat, för att visa att mitt experiment stämmer överens med hans tester:
Det första som slog mig var den bättre svarstiden för äldre program som xterm och mlterm. Med den sämsta registerlatensen (2,4 ms) presterade de bättre än den snabbaste moderna terminalen (10,6 ms för st). Ingen modern terminal faller under tröskeln på 10 millisekunder. I synnerhet misslyckas Alacritty med att uppfylla kravet om "snabbaste terminalemulatorn som finns tillgänglig", även om dess poäng har förbättrats sedan den första granskningen 2017. Ja, författarna till projektet
Men skillnaderna kanske inte är märkbara för ögat. Som Fatin förklarar, "du behöver inte vara medveten om förseningen för att det ska ha en effekt på dig." Fatin varnar också för standardavvikelse: "alla störningar i latens (jitter) skapar ytterligare stress på grund av deras oförutsägbarhet."
Grafen ovan är tagen på ren Debian 9 (stretch) med
Scrollhastighet
Nästa test är ett traditionellt "hastighet" eller "bandbredd"-test, som mäter hur snabbt terminalen kan scrolla en sida samtidigt som den visar stora mängder text på skärmen. Mekaniken i testet varierar; det ursprungliga testet var att helt enkelt generera samma textsträng med kommandot seq. Andra tester inkluderar Thomas E. Dickeys (xterm underhållare) test, som upprepade gånger
Här ser vi rxvt och st dra före konkurrenterna, följt av den betydligt nyare Alacritty, som är designad med fokus på prestanda. Nästa är Xfce (VTE-familjen) och Konsole, som är nästan dubbelt så snabba. Sist är xterm, som är fem gånger långsammare än rxvt. Under testet krusade xterm också mycket, vilket gjorde det svårt att se att skicka text även om det var samma rad. Konsole var snabb, men det var knepigt ibland: displayen frös då och då, visade en del text eller visade den inte alls. Andra terminaler visade strängar tydligt, inklusive st, Alacritty och rxvt.
Dickey förklarar att prestandaskillnaderna beror på utformningen av rullningsbuffertar i olika terminaler. I synnerhet anklagar han rxvt och andra terminaler för att "inte följa de allmänna reglerna":
"Till skillnad från xterm försökte rxvt inte visa alla uppdateringar. Om det hamnar på efterkälken kommer det att vägra några uppdateringar att komma ikapp. Detta hade en större inverkan på skenbar rullningshastighet än på internminnets organisation. En nackdel var att ASCII-animationen var något oprecis."
För att åtgärda denna upplevda tröghet föreslår Dickey att du använder resursen
Resursförbrukning
Oavsett om det är vettigt att betrakta rullningshastighet som ett prestandamått, tillåter detta test oss att simulera belastningen på terminalerna, vilket i sin tur låter oss mäta andra parametrar som minne eller diskanvändning. Mätvärdena erhölls genom att köra det angivna testet seq under Python-processövervakning. Han samlade mätardata
I det här testet tar ST förstaplatsen med den lägsta genomsnittliga minnesförbrukningen på 8 MB, vilket inte är förvånande med tanke på att huvudidén med designen är enkelhet. mlterm, xterm och rxvt förbrukar lite mer - cirka 12 MB. Ett annat anmärkningsvärt resultat är Alacritty, som kräver 30 MB för att köras. Sedan finns det terminaler i VTE-familjen med siffror från 40 till 60 MB, vilket är ganska mycket. Denna förbrukning kan förklaras av det faktum att dessa terminaler använder bibliotek på högre nivå, till exempel GTK. Konsole kommer sist med hela 65 MB minnesförbrukning under tester, även om detta kan motiveras av dess mycket breda utbud av funktioner.
Jämfört med tidigare resultat som erhölls för tio år sedan började alla program förbruka märkbart mer minne. Xterm brukade kräva 4 MB, men nu kräver det 15 MB precis vid uppstart. Det finns en liknande ökning av förbrukningen för rxvt, som nu kräver 16 MB ur lådan. Xfce Terminal tar upp 34 MB, vilket är tre gånger större än tidigare, men GNOME Terminal kräver bara 20 MB. Naturligtvis utfördes alla tidigare tester på 32-bitars arkitektur. På LCA 2012 Rusty Russell
Jag kan dock inte låta bli att känna att det är ett slöseri med resurser att allokera mer minne till något så grundläggande som terminalen. Dessa program borde vara de minsta av de minsta, borde kunna köras på vilken "låda" som helst, till och med en skokartong, om vi någonsin kommer till den punkt där de behöver utrustas med Linux-system (och du vet att det kommer att vara så ) . Men med dessa siffror kommer minnesanvändning att bli ett problem i framtiden i alla miljöer som kör flera terminaler förutom några av de lättaste och mest begränsade i kapacitet. För att kompensera för detta har GNOME Terminal, Konsole, urxvt, Terminator och Xfce Terminal ett Daemon-läge som låter dig styra flera terminaler genom en enda process, vilket begränsar deras minnesförbrukning.
Under mina tester kom jag till ett annat oväntat resultat angående diskläsa-skriva: Jag förväntade mig att inte se något alls här, men det visade sig att vissa terminaler skriver de mest omfattande data till disken. Så, VTE-biblioteket håller faktiskt en rullningsbuffert på disken (denna funktion
Slutsats
I den första delen av artikeln fann vi att VTE-baserade terminaler har en bra uppsättning funktioner, men nu ser vi att detta kommer med vissa prestandakostnader. Nu är minnet inget problem eftersom alla VTE-terminaler kan styras genom en Daemon-process, vilket begränsar deras aptit. Äldre system som har fysiska begränsningar för mängden RAM och kärnbuffertar kan dock fortfarande behöva tidigare versioner av terminaler, eftersom de förbrukar betydligt färre resurser. Även om VTE-terminaler presterade bra i genomströmningstest (rullning) är deras visningslatens över tröskeln som ställts in i GNOME Användarhandbok. VTE-utvecklare bör nog ta hänsyn till detta. Om vi tar hänsyn till att även för nybörjare av Linux-användare att stöta på en terminal är oundvikligt, kan de göra den mer användarvänlig. För erfarna nördar kan byte från standardterminalen till och med innebära mindre ansträngda ögon och möjligheten att undvika framtida arbetsrelaterade skador och sjukdomar på grund av långa arbetspass. Tyvärr är det bara den gamla xterm och mlterm som tar oss till den magiska pingtröskeln på 10 millisekunder, vilket är oacceptabelt för många.
Benchmarkmätningar visade också att på grund av utvecklingen av Linux grafiska miljöer var utvecklarna tvungna att göra ett antal kompromisser. Vissa användare kanske vill titta på vanliga fönsterhanterare eftersom de ger betydande ping-reduktion. Tyvärr gick det inte att mäta latens för Wayland: Typometer-programmet jag använde skapades för vad Wayland är designat för att förhindra: spionera på andra fönster. Jag hoppas att Wayland compositing presterar bättre än X.org, och jag hoppas också att någon i framtiden kommer att hitta ett sätt att mäta latens i den här miljön.
Källa: will.com