Du kan lägga till färg i din Linux-terminal med hjälp av särskilda ANSI-kodningsinställningar, antingen dynamiskt i ett terminalkommando eller i konfigurationsfiler, eller så kan du använda färdiga teman i din terminalemulator. Hur som helst är den nostalgiska gröna eller bärnstensfärgade texten på en svart skärm helt valfri. Den här artikeln visar hur du kan göra Linux så färgglatt (eller monokromatiskt) som du vill.
Terminalfunktioner
Moderna system har vanligtvis minst xterm-256color som standard, men om du försöker lägga till färg i din terminal utan att lyckas bör du kontrollera din TERM-inställning.
Historiskt sett var Unix-terminaler bokstavligen just det: fysiska punkter vid den bokstavliga slutpunkten (termineringen) av ett delat datorsystem där användare kunde skriva in kommandon. De var unika jämfört med fjärrskrivare (vilket är anledningen till att vi fortfarande har /dev/tty-enheter i Linux idag) som ofta användes för att utfärda kommandon på distans. Terminaler hade inbyggda CRT-skärmar, så användarna kunde sitta vid en terminal på sitt kontor för att interagera direkt med stordatorn. CRT-skärmar var dyra – både att tillverka och kontrollera; det var lättare att låta en dator spotta ut grov ASCII-text än att oroa sig för anti-aliasing och andra finesser som moderna datorister tar för givet. Den tekniska utvecklingen gick dock snabbt redan då, och det blev snabbt uppenbart att när nya terminaler för videovisning utformades, behövde de nya funktioner som var tillgängliga som tillval.
Till exempel stödde den nya fina VT100, som släpptes 1978, ANSI-färg, så om en användare identifierade terminaltypen som vt100, kunde en dator leverera färgåtergivning, medan en grundläggande seriell enhet kanske inte hade ett sådant alternativ. Samma princip gäller idag, och den ställs in av miljövariabeln TERM. Du kan kontrollera din TERM-definition med echo:
$ echo $TERM
xterm-256color
Den föråldrade filen /etc/termcap (som dock fortfarande upprätthålls på vissa system av hänsyn till bakåtkompatibilitet) definierade terminalers och skrivares kapacitet. Den moderna versionen av den är terminfo, som finns i antingen /etc eller /usr/share, beroende på din distribution. Dessa filer listar funktioner som är tillgängliga i olika typer av terminaler, varav många definieras av historisk hårdvara: det finns definitioner för vt100 till vt220, samt för moderna mjukvaruemulatorer som xterm och Xfce. De flesta programvaror bryr sig inte om vilken terminaltyp du använder; i sällsynta fall kan du få en varning eller ett fel om en felaktig terminaltyp när du loggar in på en server som kontrollerar kompatibla funktioner. Om din terminal är inställd på en profil med mycket få funktioner, men du vet att emulatorn du använder klarar mer, kan du ändra inställningen genom att definiera miljövariabeln TERM. Detta gör du genom att exportera variabeln TERM i din konfigurationsfil ~/.bashrc:
export TERM=xterm-256color
Spara filen och ladda om dina inställningar:
$ source ~/.bashrc
ANSI-färgkoder
Moderna terminaler har ärvt ANSI-utryckningssekvenser för “meta”-funktioner. Dessa är särskilda teckensekvenser som terminalen tolkar som åtgärder i stället för tecken. Den här sekvensen rensar till exempel skärmen till nästa prompt:
$ printf `3
Or you can use dircolors directly:
$ dircolors --print-database
# image formats
.jpg 01;35
.jpeg 01;35
.mjpg 01;35
.mjpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.tif 01;35
.tiff 01;35
If that looks cryptic, it’s because it is. The first digit after a file type is the attribute code, and it has six options:
- 00 none
- 01 bold
- 04 underscore
- 05 blink
- 07 reverse
- 08 concealed
The next digit is the color code in a simplified form. You can get the color code by taking the final digit of the ANSII code (32 for green foreground, 42 for green background; 31 or 41 for red, and so on).
Your distribution probably sets LS_COLORS globally, so all users on your system inherit the same colors. If you want a customized set of colors, you can use dircolors for that. First, generate a local copy of your color settings:
$ dircolors --print-database > ~/.dircolors
Redigera din lokala lista som du vill. När du är nöjd med dina val sparar du filen. Dina färginställningar är bara en databas och kan inte användas direkt av ls, men du kan använda dircolors för att få fram shellcode som du kan använda för att ställa in LS_COLORS:
$ dircolors --bourne-shell ~/.dircolors
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:
pi=40;33:so=01;35:do=01;35:bd=40;33;01:
cd=40;33;01:or=40;31;01:mi=00:su=37;41:
sg=30;43:ca=30;41:tw=30;42:ow=34;
export LS_COLORS
Kopiera och klistra in denna utdata i din ~/.bashrc-fil och ladda om. Alternativt kan du dumpa utmatningen direkt i din .bashrc-fil och ladda om.
$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc
$ source ~/.bashrc
Du kan också se till att Bash löser .dircolors vid start istället för att göra konverteringen manuellt. Realistiskt sett kommer du förmodligen inte att byta färger ofta, så detta kan vara överdrivet aggressivt, men det är ett alternativ om du planerar att ändra ditt färgschema ofta. I din .bashrc-fil lägger du till den här regeln:
] && eval "`dircolors --sh $HOME/.dircolors`"
Om du har en .dircolors-fil i din hemkatalog utvärderar Bash den vid start och ställer in LS_COLORS i enlighet med detta.
Color
Färger i terminalen är ett enkelt sätt att ge dig själv en snabb visuell referens för specifik information. Du kanske dock inte vill luta dig alltför mycket mot dem. Färger är trots allt inte universella, så om någon annan använder ditt system kanske de inte ser färgerna på samma sätt som du. Om du dessutom använder en mängd olika verktyg för att interagera med datorer kan du också upptäcka att vissa terminaler eller fjärranslutningar inte ger de färger du förväntar dig (eller färger överhuvudtaget).
Till skillnad från dessa varningar kan färger vara användbara och roliga i vissa arbetsflöden, så skapa en .dircolor-databas och anpassa den efter eget tycke och smak.