Możesz dodać kolor do terminala Linux używając specjalnych ustawień kodowania ANSI, albo dynamicznie w poleceniu terminala lub w plikach konfiguracyjnych, albo możesz użyć gotowych motywów w emulatorze terminala. Tak czy inaczej, nostalgiczny zielony lub bursztynowy tekst na czarnym ekranie jest całkowicie opcjonalny. Ten artykuł demonstruje jak możesz uczynić Linuksa tak kolorowym (lub monochromatycznym) jak tylko chcesz.
Możliwości terminala
Nowoczesne systemy zazwyczaj domyślnie ustawiają przynajmniej xterm-256color, ale jeśli próbujesz dodać kolor do terminala bez powodzenia, powinieneś sprawdzić ustawienia TERM.
Historycznie, terminale uniksowe były dosłownie tym: fizycznymi punktami w dosłownym punkcie końcowym (zakończenie) współdzielonego systemu komputerowego, gdzie użytkownicy mogli wpisywać polecenia. Były one unikalne od dalekopisów (dlatego wciąż mamy urządzenia /dev/tty w Linuksie), które były często używane do wydawania poleceń na odległość. Terminale miały wbudowane monitory CRT, więc użytkownicy mogli usiąść przy terminalu w swoim biurze, aby wejść w bezpośrednią interakcję z mainframe. Monitory CRT były drogie – zarówno w produkcji, jak i w sterowaniu; łatwiej było zlecić komputerowi wypluwanie surowego tekstu ASCII, niż martwić się o antyaliasing i inne udogodnienia, które współcześni informatycy uważają za oczywiste. Jednak rozwój technologii następował szybko nawet wtedy, i szybko stało się jasne, że jak nowe terminale wyświetlające wideo zostały zaprojektowane, potrzebowały nowych możliwości, aby być dostępne na zasadzie opcjonalnej.
Na przykład, fantazyjny nowy VT100 wydany w 1978 roku obsługiwał kolor ANSI, więc jeśli użytkownik zidentyfikował typ terminala jako vt100, to komputer mógł dostarczyć kolorowe wyjście, podczas gdy podstawowe urządzenie szeregowe może nie mieć takiej opcji. Ta sama zasada obowiązuje dzisiaj i jest ustawiana przez zmienną środowiskową TERM. Możesz sprawdzić swoją definicję TERM za pomocą echo:
$ echo $TERM
xterm-256color
Przestarzały (ale wciąż utrzymywany w niektórych systemach w interesie kompatybilności wstecznej) plik /etc/termcap określał możliwości terminali i drukarek. Współczesną wersją tego jest terminfo, znajdujący się w /etc lub /usr/share, zależnie od twojej dystrybucji. Pliki te zawierają listę funkcji dostępnych w różnych rodzajach terminali, z których wiele jest zdefiniowanych przez historyczny sprzęt: istnieją definicje dla vt100 do vt220, jak również dla nowoczesnych emulatorów programowych jak xterm i Xfce. Większość oprogramowania nie dba o typ terminala, którego używasz; w rzadkich przypadkach, możesz otrzymać ostrzeżenie lub błąd o nieprawidłowym typie terminala podczas logowania do serwera, który sprawdza kompatybilność. Jeśli twój terminal jest ustawiony na profil z bardzo małą liczbą funkcji, ale wiesz, że emulator, którego używasz ma więcej możliwości, to możesz zmienić ustawienia definiując zmienną środowiskową TERM. Możesz to zrobić przez wyeksportowanie zmiennej TERM do pliku konfiguracyjnego ~/.bashrc:
export TERM=xterm-256color
Zapisz plik i załaduj ponownie swoje ustawienia:
$ source ~/.bashrc
Kody kolorów ANSI
Nowoczesne terminale odziedziczyły sekwencje ucieczki ANSI dla funkcji “meta”. Są to specjalne sekwencje znaków, które terminal interpretuje jako akcje, a nie znaki. Na przykład, ta sekwencja czyści ekran do następnego znaku zachęty:
$ 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
Edytuj swoją listę lokalną jak chcesz. Gdy będziesz zadowolony ze swoich wyborów, zapisz plik. Twoje ustawienia kolorów są tylko bazą danych i nie mogą być użyte bezpośrednio przez ls, ale możesz użyć dircolors do uzyskania kodu powłoki, którego możesz użyć do ustawienia 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
Kopiuj i wklej to wyjście do swojego pliku ~/.bashrc i załaduj ponownie. Alternatywnie, możesz wyrzucić to wyjście prosto do pliku .bashrc i załadować ponownie.
$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc
$ source ~/.bashrc
Możesz także sprawić, by Bash rozwiązywał .dircolors przy starcie, zamiast robić konwersję ręcznie. Realistycznie rzecz biorąc, prawdopodobnie nie będziesz często zmieniał kolorów, więc może to być zbyt agresywne, ale jest to opcja, jeśli planujesz często zmieniać swój schemat kolorów. W swoim pliku .bashrc, dodaj następującą regułę:
] && eval "`dircolors --sh $HOME/.dircolors`"
Jeśli masz plik .dircolors w katalogu domowym, Bash oceni go przy uruchomieniu i odpowiednio ustawi LS_COLORS.
Color
Kolory w terminalu są łatwym sposobem na szybkie wizualne odniesienie się do konkretnych informacji. Jednakże, możesz nie chcieć opierać się na nich zbyt mocno. Po tym wszystkim, kolory nie są uniwersalne, więc jeśli ktoś inny używa twojego systemu, może nie widzieć kolorów tak samo jak ty. Co więcej, jeśli używasz różnych narzędzi do interakcji z komputerami, może się okazać, że niektóre terminale lub połączenia zdalne nie zapewniają kolorów, których oczekujesz (lub kolorów w ogóle).
Ostrzeżenia te pomijając, kolory mogą być użyteczne i zabawne w niektórych przepływach pracy, więc stwórz bazę danych .dircolor i dostosuj ją do swoich potrzeb.