Betalingsmåter Abuse

Linux-terminalens farger

26.09.2021, 22:47

Fordelen med Linux er at du kan tilpasse hva som helst hvis du vil. Dette er fordelen med projektive systemer fremfor prosedurale systemer. Det er en slags konstruktør som består av individuelle blokker som hver for seg kan tilpasses etter eget ønske.

Det er spesielt interessant hvis du ikke bare kopierer ferdige løsninger, men prøver å forstå hva og hvordan det fungerer. Og selv når du løser en useriøs oppgave, lærer du noe nytt.

Fargelegging av fargene på utdataene

Du ønsker for eksempel å justere linux-terminalfargene i utdataene fra ls-kommandoen.

Av ls-dokumentasjonen kan du forstå at fargene på utdataene settes ved hjelp av dircolors-verktøyet, som enten setter fargeparametrene fra sin egen database eller henter dem fra filen ~/.dircolors. Det ble også nevnt at initialiseringen av fargebruken gjøres via ~/.bashrc, shell-innstillingsfilen, og at selve parameterne defineres via variabelen LC_COLORS.

Følgende skript ble funnet i .bashrc:

Det går ut på å sjekke om dircolors-verktøyet finnes på systemet, tilordne en verdi til variabelen og, hvis det lykkes, bruke parameteren --color=auto hver gang ls kalles.

Hvis du kjører dircolors-verktøyet, skriver det ut verdien til variabelen LC_COLOR.

Det er også mulig å skrive ut verdien av variabelen LC_COLORS i strukturert form ved å spesifisere nøkkelen:

$ dircolors -p

Siden utdataene er lange, vil jeg ikke gi dem her.

Hvis du omdirigerer utdataene dircolors -p > ~/.dircolors, vil det bli opprettet en strukturert fil som fargeinnstillingene hentes fra. Ved å redigere denne filen og angi fargeinnstillingene for ls-utdataene.

I den opprettede .dircolors-filen finnes det et hint:

Ved å sette sekvensen med semikolon får du den fargen vi trenger i linux-konsollen, i henhold til den oppførte. Linux-terminalfargene er fra 30 til 37 for skriftfarge, og fra 40 til 47 for bakgrunn. For eksempel

DIR 01;34 innebærer at katalognavn vil være fete og blå.

Men på denne måten får du bare åtte farger, og moderne terminalemulatorer kan vise minst 256 farger.

Det finnes andre måter å angi fargen på. For eksempel gir EXEC 38;5;208;1 oransje tykk skrift for kjørbare filer.

For at du skal slippe å gå gjennom linux-fargene manuelt, finnes det en ferdig fargetabell

Ved å sette inn fargeverdien 38;5;x - der x er fargen fra tabellen, får vi det nødvendige resultatet. Du får noe sånt som dette:

Hvordan fungerer det? Poenget er at fargene på informasjonen som skrives ut i terminalemulatoren, stilles inn ved hjelp av ANSI escape-koder. Dette er en bestemt sekvens av tegn som ikke skrives ut på skjermen, men som påvirker utdataene. Den kalles slik fordi den starter med [ - koden "Esc". Siden det finnes mange terminaler og terminalemulatorer, er disse kontrollkodene standardiserte. Fargekontroll gjennom sekvensen fra 30 til 37 er ECMA-48-standarden. Du finner mer informasjon om dette i avsnittet om konsollkoder.

Fargelegging av invitasjonslinjen

Når du har forstått hvordan du stiller inn linux-farger via esc-koder, er det enkelt å redesigne og fargelegge ledeteksten. PS1-variabelen, som er definert i ~/.bashrc-filen, er ansvarlig for utdataene

I Linux Mint ser skriptet for å initialisere den slik ut:

Det vil si at det først avgjøres om skriptet ble kjørt av root eller en vanlig bruker. Siden det i de aller fleste tilfeller er det andre alternativet, bør linjen etter det første "else" redigeres. Formatet på linjen er dechiffrert i bash-dokumentasjonen, i avsnittet "Promting". Det innebærer at esc-sekvensen skal starte med "[" og slutte med "]". Det vil si

  • [[01;32m] - setter fargen grønn;
  • u - skriver ut brukernavnet;
  • h - skriver ut vertsnavnet;
  • [[00m] - sletter de innstilte attributtene;
  • [[01;34m] - angir fargen blå;
  • w - skriver ut navnet på arbeidskatalogen;
  • Hei - et eksempel på at hvilken som helst avledet tekst kan skrives ut.

Hva annet kan skrives ut i ledeteksten:

  • d - dato, i formatet "Wed Dec 28";
  • A - klokkeslett, i 24-timers format;
  • ! - nummeret på den gjeldende kommandoen i historikken;
  • - overføring av utdata til en annen linje;

La oss introdusere noe mer interessant:

PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '

Og ledeteksten vil se slik ut: