Powłoka Bash – łatwiej i przyjemniej 21


Nowi użytkownicy Linuksa dostają bólu głowy na samą myśl o konsoli i długich komendach. Jednak każdy, wcześniej czy później, zaczyna wklepywać komendy (chociażby kopiując je z poradników), a następnie przekonuje się do tego typu rozmowy z systemem. Celem mojego artykułu jest przybliżenie możliwości konfiguracyjnych i ułatwienia pracy z powłoką Bash.

Pliki konfiguracyjne

Podczas uruchamiania Basha wczytywane są konfiguracje z plików: /etc/profile oraz /etc/bash.bashrc, a następnie z katalogu domowego użytkownika: .bash_profile i .bashrc – te pliki możemy dowolnie zmieniać. Pierwszy z nich zawiera właściwie tylko instrukcję wczytującą .bashrc:

if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Pokrótce tłumacząc, powyższy kod wczytuje zawartość pliku .bashrc z katalogu domowego, pod warunkiem, że on istnieje. Zatem całą konfigurację można umieścić w tym drugim pliku.

Aliasy

Aliasy to pewnego rodzaju skróty. Ich idea jest prosta – gdy często wpisujemy długą komendę z wieloma opcjami, czemu nie mielibyśmy tego skrócić do jednego słowa. Do tworzenia aliasów korzystamy z komendy alias, oto przykład jej użycia:

alias l='ls --color -lh'
alias instalka='sudo apt-get install'

Od teraz możemy zamiast pełnych komend użyć ich aliasów:

l ~/Dokumenty
instalka mplayer

Prawda, że szybciej?
Aliasy możemy wykorzystywać na stałe – wtedy tworzymy je w pliku .bashrc lub tymczasowo, kiedy na przykład w jednej sesji często korzystamy z jakieś długiej komendy tworząc go bezpośrednio w powłoce. Możemy także sprawdzić czy jakieś słowo jest aliasem i jakiej komendy.
alias l
Czasem zdarza się, że utworzony alias nie jest nam potrzebny, wręcz jest przeszkadzający. Usunąć go możemy komendą unalias, np.

unalias l instalka

Autouzupełnianie

Każdy kto czasem korzysta z Basha używa choć czasem magicznego przycisku <TAB>. Jednak nic nie jest doskonałe. Powłoka inteligentnie dokończy komendy cd, ls ale już sudo apt-get inst jest dla niego nie lada wyzwaniem. Rozwiązaniem tej niedogodności jest pakiet bash-completion, który domyślnie w Ubuntu powinien być zainstalowany. Aby sprawdzić czy rzeczywiście tak jest wpisujemy:

ls /etc/bash_completion

Jeśli powyższa komenda nie zakończy się błędem – wszystko mamy zainstalowane, w przeciwnym razie wystarczy ten pakiet doinstalować

sudo apt-get install bash-completion

Teraz wystarczy tylko do pliku .bashrc dopisać:

. /etc/bash_completion

I możemy cieszyć się doskonalszym uzupełnianiem komend przez Basha.

Kolorowanie komendy ls

Domyślnie (dzięki aliasowi) wynik komendy ls jest już kolorowany. Jednak czasem używając w Gnome’ie przezroczystego terminala domyślna konfiguracja tej funkcji zamiast ułatwiać korzystanie z terminala, utrudnia je. Z pomocą przychodzi narzędzie dircolor. Wywołując je bez argumentów wyświetli na terminalu zmienną LS_COLORS a następnie ją wyeksportuje.
Za pomocą komendy

dircolors -p > .ls_colors

zapiszemy do powyższego pliku konfigurację kolorystyki ls w bardziej czytelny sposób.
Plik .ls_colors zawiera listę obsługiwanych terminali, następnie konfigurację kolorów różnych typów (jak zwykły plik, katalog) i rozszerzeń plików (jak *.deb, *.rpm).
Kolory czcionki i tła określane są następująco:

  • czarny – kolor czcionki 30 – kolor tła 40
  • czerwony – kolor czcionki 31 – kolor tła 41
  • zielony – kolor czcionki 32 – kolor tła 42
  • żółty – kolor czcionki 33 – kolor tła 43
  • niebieski – kolor czcionki 34 – kolor tła 44
  • purpurowy – kolor czcionki 35 – kolor tła 45
  • turkusowy – kolor czcionki 36 – kolor tła 46
  • biały – kolor czcionki 37 – kolor tła 47

Dodatkowo możemy ustawić w poszczególnych rodzajach plików takie atrybuty jak:

  • 00 – czcionka normalna
  • 01 – czcionka pogrubiona
  • 04 – czcionka podkreślona
  • 05 – czcionka mrugająca
  • 07 – przełącza kolory tła z kolorem czcionki
  • 08 – czcionka ukryta

Po ustawieniu odpowiednio kolorów wystarczy je załadować komendą

eval `dircolors .ls_colors`

Jeśli konfiguracja będzie przyjemniejsza dla oka wystarczy jak wpiszemy powyższą komendę do .bashrc i na każdym nowo-otwartym terminalu cieszyć nas będzie nowa kolorystyka listy katalogów.

Zmienne środowiska

W programowaniu zmienna przechowuje różnego rodzaju dane (np. tekst, liczbę, …), natomiast zmienne środowiskowe charakteryzują wygląd i działanie powłoki.
W Bashu zmienną deklaruje się (czyli tworzy) lub nadpisuje (czyli zmienia) w sposób:

NAZWA_ZMIENNEJ="WARTOŚĆ_ZMIENNEJ"

Natomiast odczytuje się ją:

echo $NAZWA_ZMIENNEJ

Najpopularniejszymi zmiennymi środowiska są:

  • PS1 – podstawowy znak zachęty [prompt], opis niżej
  • PS2 – pomocniczy znak zachęty, znak zachęty wykorzystywany przy łamaniu polecenia na wiele linii
  • HISTSIZE – liczba przechowywanych w pamięci poleceń (domyślnie 500)
  • EDITOR – domyślny edytor tekstu
  • PATH – lista katalogów do przeszukiwania poleceń oddzielonych znakiem :
  • CDPATH – lista katalogów przeszukiwań dla polecenia cd oddzielonych znakiem :
  • TMOUT – czas nieaktywności, po którym następuje zamknięcie powłoki

Zmienną PS1 (a także PS2) można ustawiać na bardzo wiele sposobów.
Pomocne w tym będą opcje:

  • u – nazwa użytkownika
  • h – nazwa hosta (komputera)
  • H – nazwa pełnego hosta
  • w – bezwzględna ścieżka do aktualnego katalogu
  • W – nazwa aktualnego katalogu
  • d – data w formacie dzień_tygodnia miesiąc dzień_miesiąca
  • t – godzina w formacie 24-godzinnym
  • T – godzina w formacie 12-godzinnym
  • @ – godzina w formacie 12-godzinnym wraz z am/pm
  • n – znak nowej linii
  • ! – numer aktualnego polecenia

Powyżej wypisałem tylko część opcji stosowanych w znaku zachęty. Więcej można znaleźć, oczywiście, w Internecie.

Kolejnym sposobem skonfigurowania prompta jest dodanie kolorów. Zmienić możemy zarówno kolor czcionki, tła, a także pogrubić czcionkę. Aby zmienić kolory należy posłużyć się kodem:

\e[Xm

Gdzie X oznacza oddzielone średnikami kody konfiguracji. Kolory czcionki jak i tła określamy identycznie jak w przypadku kolorowania wyniku komendy ls. Dodatkowo możemy ustawić pogrubienie (kod 1), oraz jego brak (kod 0).
Powrót do domyślnych ustawień (kolor czcionki 37, kolor tła 40, oraz wyłączone pogrubienie) otrzymujemy poprzez:

\e[0m

Na dołączonym obrazku można zobaczyć przykład rozbudowanego znaku zachęty o kodzie:

"\e[32;1m\u@\h   \e[34;1m[ \e[33;1m\@ \e[34;1m]   [ \e[33;1m\w \e[34;1m]\n \e[31;1m>>\e[0m "

Powyższe sposoby konfiguracji są tylko wierzchołkiem góry lodowej. Im częściej i dłużej będziecie używać powłoki Bash, tym bardziej plik .bashrc będzie się rozrastał.
Nie pozostaje mi nic innego jak tylko życzyć wszystkim przyjemnego używania Basha.


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

21 komentarzy do “Powłoka Bash – łatwiej i przyjemniej

  • DNA DesigN

    Myślę, że artykuł jest w sam raz dla początkujących użytkowników. Bardzo fajnie opisujesz tutaj podstawy Bash’a i jego konfiguracji. Mógłbyś się pokusić o kontynuowanie tego jako cykl artykułów o Bash’u, od podstaw po zaawansowane użycie i skryptowanie. 😉 To jest coś, co zawsze się przydaje.

  • DNA DesigN

    [quote comment=”24549″]to po sesji coś jeszcze skrobnę o Bashu[/quote]
    czyżby „kampania wrześniowa”? powodzenia życzę, sam też za 2 dni zaczynam… 2 poprawki w tym roku… ;P

  • anon

    w ostatniej części artu jest błąd – eskejpowane sekwencje typu e[32;1m powinny być otoczone [ i ] inaczej takie ustawienie kolorów będzie powodowało błędy przy zawijaniu wierszy, terminal bedzie doliczal dlugosc eskejpowanych sekwencji do dlugosci widocznego promptu i wpisywanej komendy.
    u mnie prompt wyglada tak: PS1=”[33[1;32m]u[33[0;37m]@[33[1;33m]h[33[0;37m]:[33[1;37m]w\[33[0m]$”

  • mike

    w ubuntu 8.04 cos sie pozminialo i aliasy wpisuje sie przez sudo gedit .bash_aliases
    a w bashrc trzeba odkrzyżykować przekierowanie do tego pliku.

  • mc

    a czy ktoś wie czy, albo jak wmontować konsolę na stałe do pulpitu (np z prawej strony zajmowałaby 30% szerokości pulpitu i była jako „część tapety” (czyli nie jak normalne okno o.0) ?

  • mario_7

    [quote comment=”24812″]A kto mi powie dlaczego jak dodam sobie aliasy, zamknę konsolę, następnie ją otworze to aliasy już nie działają? W czym to może być rzecz? Distro Ubuntu 8.04 ze strony http://www.ubuntu.pl[/quote%5D
    W artykule jest napisane:
    [quote post=”765″]Aliasy możemy wykorzystywać „na stałe” – wtedy tworzymy je w pliku .bashrc lub tymczasowo, kiedy na przykład w jednej sesji często korzystamy z jakieś długiej komendy tworząc go bezpośrednio w powłoce.[/quote]
    Może nie jest to zbyt jasne, więc wytłumaczę.
    Gdy tworzy się alias poprzez polecenie alias – wtedy dostępny jest on tylko w tej sesji terminala, w której został utworzony. Natomiast jeśli zapisze się aliasy w pliku .bashrc to będą one dostępne w każdej sesji terminala.
    Aliasy w pliku .bashrc wpisuje się tak samo jak polecenia w terminalu, najlepiej po jednym w linii.

  • kinio

    co to jest export??
    a. może zostać użyte w celu wykonania tego samego zadania co polecenie 'setenv’ w powłoce tcsh
    b. przekazuje sterowanie podpowłoce
    c. udostępnia wartość zmiennej dla otoczenia
    d. nie istnieje
    e. udostępnia zdalny system plików
    f. udostępnia lokalny system plików

  • burtek

    Hej.
    Po pierwsze: wielkie THX!!! Nareszcie coś widać od razu na pierwszy rzut oka w bashu.
    Po drugie: Czekam na kolejne artykuły 😉