Konfiguracja powłoki (shella) w Linuksie i podstawowe komendy
Poradnik dla tych, którzy korzystają z jakiegoś shella na Linuksie i nie wiedzą jak poprawnie skonfigurować polskie znaki, ustawić domyślny edytor, czy odpalić coś z automatu po zalogowaniu. Ponadto przedstawiłem kilka podstawowych komend, które ułatwią początkującym pracę w systemie Linux.
Spis treści
Co to jest shell
Krótko mówiąc, nie można pracować bezpośrednio z jądrem Linuksa – trzeba do tego jakiegoś interpretera poleceń, czyli właśnie shella – powłoki systemowej. Jak ktoś pamięta DOS-a, to tam podobną funkcję pełnił plik command.com
. Różnica jest taka, że w Linuksie powłokę można sobie wybrać z kilku (to jakie powłoki są dostępne, zależy od administratora). Najpopularniejsze powłoki to:
- Bourne Shell (/bin/sh) – jest to przodek wszystkich innych powłok systemów UNIX-owych, dość mocno ograniczony
- Bourne Again Shell (/bin/bash) – domyślna powłoka systemów Linux, dla większości użytkowników ma wszystko co powinna
- C Shell (/bin/csh) – składnia i konstrukcje bardzo podobne do tych z języka C
- Enhanced C Shell (/bin/tcsh) – bardziej rozbudowana wersja C Shell
- Korn Shell (/bin/ksh) – jedna z najpopularniejszych powłok UNIX-owych, rzadko wykorzystywana w Linuksie
Aby sprawdzić jakiej powłoki używasz, wpisz w wierszu poleceń echo $SHELL
.
Powłokę (shella) można zmienić w Linuksie poleceniem chsh (change shell), co będzie widoczne po ponownym zalogowaniu.
Jeśli chcesz sprawdzić jak wygląda dana powłoka, po prostu ją odpal, czyli np. /bin/tcsh
. Powrót następuje po odpaleniu exit
.
Poniższy opis jest napisany z myślą o ludziach, którzy korzystają z kont shellowych, najczęściej z Windowsa (jednak Linux jest zdecydowanie częściej systemem na serwerze niż na komputerze domowym). Oczywiście konfiguracja samej powłoki jest taka sama, niezależnie czy logujesz się z Windowsa czy z Linuksa :)
Powłoka bash – konfiguracja
Jak już wiesz której powłoki chcesz używać, to zapewne nie masz co tu czytać, bo znasz różnice – czyli również podstawy. Jako że bash jest powłoką najpopularniejszą, proponuję właśnie z niego korzystać.
Znak zachęty
Znak zachęty to nic innego, jak kawałek tekstu znajdujący się bezpośrednio przed kursorem, zachęcający do wpisania polecenia. Znak zachęty można skonfigurować, natomiast najczęściej wygląda mniej więcej tak: login@nazwa-serwera:/aktualna/ścieżka/w/drzewie/katalogów$
czyli np. leniwy@srv:~$
(znak tyldy oznacza katalog domowy użytkownika). Jeśli wygląda u Ciebie inaczej, a chcesz właśnie taki, wpisz w konsoli export PS1='\u@\h:\w\$ '
.
Konfiguracja powłoki bash
Polecenia które wpływają na sposób działania powłoki, wpisane z palca (np. wspomniany wyżej eksport zmiennej środowiskowej PS1) działają tylko do czasu wylogowania. Aby nie trzeba było ich powtarzać po każdym zalogowaniu, należy je umieścić w skrypcie startowym. Dla basha istnieje kilka skryptów, o istnieniu których warto wiedzieć:
- /etc/profile – plik zawierający konfigurację globalną wszystkich powłok Bourne i powiązancyh (w tym basha)
- ~/.bash_profile – plik z konfiguracją użytkownika (jest w końcu w jego katalogu domowym), dla tzw. login shelli
- ~/.bashrc – plik z konfiguracją użytkownika, w przypadku gdy bash nie jest uruchomiony jako login shell
- ~/.bash_logout – interpretowany przy wyjściu z login shella
W skrócie można powiedzieć, że bash jest odpalany jako login shell, gdy się logujesz na serwer (najczęściej podając hasło). Jeśli odpalasz potem „z palca” /bin/bash
, lub np. korzystasz ze screena i otwierasz kolejne jego okno – już nie jest odpalany jako login shell.
Ustawianie zmiennych środowiskowych powłoki bash
Warto wiedzieć, że sposób działania powłoki (i nie tylko samej powłoki) zależy od ustawienia niektórych zmiennych środowiskowych. Zmienne środowiskowe to nic innego jak zmienne powiązane z danym środowiskiem, czyli z powłoką w której pracujesz. Zmienne które ustawiasz „z palca” po zalogowaniu, nie są widoczne w innych instancjach powłoki, ani nie pozostanie po nich ślad po wylogowaniu. Te które ustawisz w skrypcie startowym, będziesz miał dostępne zawsze.
Ustawianie „z palca”
Ustawienie zmiennej środowiskowej „z palca” polega na odpaleniu prostej komendy: export ZMIENNA='wartość'
. Przed ani po znaku równości nie może być spacji. W prosty sposób możesz to przetestować, bawiąc się ustawieniem zmiennej PS1. Po wylogowaniu i zalogowaniu ponownym zmiany te oczywiście nie będą widoczne. Aby wyświetlić zawartość danej zmiennej, należy uruchomić echo $ZMIENNA
(zwróć uwagę na znak dolara).
Ustawianie na stałe
Aby po każdym zalogowaniu mieć ustawione konkretne zmienne środowiskowe, umieść je w pliku ~/.bash_profile
po prostu otwierając ten plik w dowolnym edytorze (czyli np. przez vim ~/.bash_profile
czy mcedit ~/.bash_profile
). W tym pliku najpierw ustawiaj je przez set ZMIENNA='wartość' a następnie przez export ZMIENNA. Przykład ustawiania kilku zmiennych:
set PS1='\u@\h:\w\$ '
set EDITOR=vim
export PS1 EDITOR
Jak pewnie nie trudno zauważyć, przy ustawieniu zmiennej EDITOR wartość nie została objęta cudzysłowem – w przypadku wartości jednowyrazowych nie ma tego obowiązku.
Po zapisaniu pliku, możesz się przelogować i odpalić echo $EDITOR
. Jak więc widać, nie jest to takie trudne :)
Zmienna środowiskowa PATH
Jak uruchamiasz jakieś polecenie (np. ls
czy vim
), nie musisz podawać pełnej ścieżki do pliku z tym poleceniem. Tak samo jak w starym dobrym DOS-ie, jest to spowodowane odpowiednim ustawieniem zmiennej środowiskowej PATH. Wiesz jak sprawdzić ustawienie aktualne, ale jak dopisać coś (kolejny katalog) do tej zmiennej, nie kopiując wszystkich istniejących? Otóż podczas ustawiania zmiennej, możesz użyć jej aktualnej wartości. Jeśli chcesz dopisać katalog z własnymi skryptami (np. ~/skrypty
), który również ma być przeszukiwany przy uruchamianiu komend, wystarczy że ustawisz tą zmienną na $PATH':~/skrypty'
(cudzysłów jest przydatny przy ścieżkach ze spacjami). Teraz wystarczy że wpiszesz nazwę skryptu który tam umieściłeś, bez podawania całej ścieżki, aby go odpalić. Aby po zmianie sprawdzić aktualną wartość, odpal echo $PATH
.
Jeśli chcesz dopisać taki katalog w pliku ~/.bash_profile
, należy (na wzór powyżej) dodać wpis set PATH=$PATH':~/skrypty'
i dopisać do listy polecenia export zmienną PATH (czyli obecnie będzie miała postać export PS1 EDITOR PATH
).
Lista najważniejszych zmiennych środowiskowych
Zmienne, które warto ustawić w pliku startowym powłoki
Zmienna | Sugerowana wartość | Opis |
---|---|---|
LANG | 'pl_PL.utf8' | Wartość dla wszystkich lokali, nie ustawionych przez odpowiednią zmienną LC_* |
LC_ALL | 'pl_PL.utf8' | Wartość dla wszystkich lokali (ignorowane są ustawione już przez LC_*) |
LC_* | brak | Ustawienie lokali wpływające na różne komunikaty w systemie. Patrz: man bash |
PATH | PATH':~/skrypty' | Ustawienie ścieżek do katalogów, w których będą szukane pliki odpowiadające za wpisywane komendy |
HISTRCONTROL | 'erasedups' | Ustawienie sposobu budowania historii komend użytych w powłoce |
HISTSIZE | '10000' | Długość historii, czyli ilość pamiętanych komend |
EDITOR | 'vim' | Ustawienie domyślnego edytora. Może z niego korzystać np. program mc czy svn |
PS1 | '\u@\h:\w\$ ' | Znak zachęty |
TMPDIR | /tmp | Katalog na pliki tymczasowe powłoki. Nie należy ustawiać, jeśli działa prawidłowo |
Jeśli chodzi o zmienne LANG
i LC_ALL
, samo ich ustawienie nie wystarczy aby poprawnie były wyświetlane polskie znaki. Ważne jest, aby konsola która je będzie wyświetlała, była również odpowiednio skonfigurowana. Jeśli korzystasz z programu PuTTY, przed zalogowaniem należy ustawić w opcjach Window/Translation sposób kodowania znaków na taki sam, czyli UTF-8. Najlepiej zapisać to jako ustawienie domyślne. W przeciwnym razie zamiast polskich znaków będziesz miał krzaczki.
Jako że z założenia jest to przewodnik dla leniwych, oto kawałek który można skopiować i wkleić do własnego pliku ~/.bash_profile
set LANG='pl_PL.utf8'
set LC_ALL='pl_PL.utf8'
set HISTCONTROL='erasedups'
set HISTSIZE='10000'
set EDITOR='vim'
set PS1='\u@\h:\w\$ '
export LANG LC_ALL HISTCONTROL HISTSIZE EDITOR PS1
Zmienne, których wartości mogą Ci się przydać
Niektóre zmienne środowiskowe mogą Ci się przydać w skryptach bashowych, lub po prostu do sprawdzenia w konsoli przez echo $ZMIENNA
. Do czego je wykorzystasz – to już Twoja sprawa :)
Zmienna | Przykładowa wartość | Opis |
---|---|---|
HOSTNAME | srv1.leniwy.eu | Nazwa hosta, czyli w większości przypadków informacja o domenie, pod jaką jest dostępny serwer |
SHELL | /bin/bash | Aktualna powłoka |
TERM | screen | Typ terminala. W zależności od niego, różne rzeczy mogą się różnie wyświetlać |
USER | leniwy | Twój login na serwerze |
PWD | /tmp | Aktualny katalog |
HOME | /home/leniwy | Twój katalog domowy |