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.

BASH

Spis treści

  1. Co to jest shell
  2. Powłoka bash – konfiguracja
  3. Ustawianie zmiennych środowiskowych powłoki bash
  4. Lista najważniejszych zmiennych środowiskowych
  5. Komendy w Linuksie (strona 2)
  6. Skrypty powłoki bash (strona 2)
  7. Inne ciekawostki które mogą się przydać (strona 2)

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:

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ć:

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