Powłoka i środowisko pracy
DO PRZYGOTOWANIA
Samodzielnie należy przed tym laboratorium przygotować:
-
podstawy pracy z Emacs
zapoznać się z innymi edytorami, takimi jak pico, nano, mcedit, ew. czy joe pico jed zile
przypomnieć sobie pracę z sftp, ftp i scp
-
NIEOBOWIĄZKOWO, dla zainteresowanych: 101 Bash Commands and Tips for Beginners to Experts
WPROWADZENIE
Powłoki w środowisku GNU
W środowisku Unix istnieje wiele różnych standardów powłok.
Dwa najważniejsze to: SH (Bourne Shell) i CSH (C Shell).
Ich implementacje w środowisku GNU to: Bash (Bo(u)rn(e) Again Shell) i tcsh (TENEX-like Csh).
Najpopularniejszą w środowisku GNU/Linux jest GNU Bash.
Środowisko pracy aplikacji
Powłoka zapewnia środowisko do uruchamiania programów.
Środowisko to jest określane przez szereg zmiennych środowiskowych.
Każda zmienna ma nazwę i wartość.
Wartości zmiennych są napisami.
W powłokach Sh i Csh występują różnice w sposobie ustawiania zmiennych.
Typowe zmienne
PWD USER EDITOR VISUAL
HOME TERM PATH MAIL
LANG DISPLAY LOGNAME SHLVL SHELL
Definiowanie zmiennych środowiskowych
Ustawianie w Sh:
ZMIENNA=WARTOSC ; export ZMIENNA
Bash:
export ZMIENNA=WARTOSC
Usuwanie:
unset ZMIENNA
Csh:
setenv ZMIENNA WARTOSC
Usuwanie:
unsetenv ZMIENNA
Wyświetlanie (w przypadku zmiennej wyexportowanej):
printenv ZMIENNA
W powłoce Sh (Bash):
echo $ZMIENNA
Zmiana znaku zachęty
Bash (opis w bash(1), „PROMPTING” (ZACHĘTA POWŁOKI))
export PS1='\u@\h:\w '
Tcsh (tcsh(1), „set prompt”))
set prompt = "%n@%m:%~ "
Inne prompty to: PS2 PS3
i prompt1 prompt2
.
Re/Definiowanie poleceń
Do re/definiowania poleceń powłoki służy alias.
Do usuwania definicji: unalias.
Bash:
alias ls='ls -F'
alias ll='ls -l'
unalias ls
Tcsh:
alias ls 'ls -F'
alias ll 'ls -l'
unalias ls
Cytowanie napisów
W środowisku powłoki są używane 3 znaki specjalne pozwalające na konstruowanie/cytowanie napisów:
„
- cudzysłowy ”
, tekst w nich zawarty jest jednym napisem, w którym powłoka może interpertować znaki specjalne, np. podstawiać wartości zmiennych,
- apostrofy
', j.w. tylko BEZ możliwości interpretowania znaków specjalnych - tekst jest dokładnie cytowany,
- odwrócone apostrofy `
(obok klawisza Tab), zawartość tekstu jest traktowana jako polecenie, uruchamiana przez kolejna powłokę, a wynik działania polecenia jest podstawiany jako tekst.
Przeglądanie plików tekstowych
po jednym ekranie/linii do przodu: more
po jednym ekranie/linii 2 kierunki: less
wyświetlanie zawartości podanych plików:
cat [plik1 plik2 ... plikN]
Inicjalizacja pracy powłok
Przy początku i końcu pracy powłoki czytają odpowiednie pliki konfiguracyjne.
Czytane są różne pliki dla non/login shell.
sh używa innych plików niż csh.
Pliki są interpretowane, a nie uruchamiane.
Interpretację podanego pliku można wymusić przez source.
Komentarze w powłoce wstawia się przez #
.
Dowolny tekst wypisuje: echo „tekst”
.
Przeglądanie plików tekstowych (w tym inicjalizacyjnych powłok) jest możliwe przez: more, less, cat
Pliki inicjalizacyjne
Bash (opis w bash(1): INVOCATION, FILES)
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
/etc/bash.bashrc
~/.bashrc
~/.bash_logout
Tcsh (tcsh(1): Startup and shutdown, FILES)
/etc/csh.cshrc
/etc/csh.login
~/.tcshrc
~/.cshrc
~/.login
/etc/csh.cshrc
~/.tcshrc
~/.cshrc
/etc/csh.logout
~/.logout
GNU Readline
Jest to zaawansowana biblioteka do obsługi linii poleceń.
Jest dostępna w wielu programach GNU i innych na
GPL.
Rozpowszechaniana na
LGPL.
Umożliwia między innymi dopełnianie linii poleceń (tabulator), edycję (polecenia Emacs, VI) i historię (strzałki, Ctrl+P, Ctrl+N, i inne).
Edytory tekstu
Edytory dzielimy na: Emacs, VI i resztę…
Notacja zapisu poleceń w Emacs: C-x
(Ctrl+X), M-x
(M+X), np. C-x C-c
(Ctrl+X Ctrl+C), C-x 2
(Ctrl+X 2), M-x shell
(M+X shell) (klawisz Meta
to najczęściej lewy Alt)
Reszta często emuluje w pewnym zakresie jeden z tych dwóch.
Należy znać podstawy użycia Emacs i VI, np.: poruszanie się po ekranie, obsługa plików, podstawy edycji.
-
ĆWICZENIA
6 Typy powłok
sprawdzić typ swojej powłoki logowania: finger KONTO
sprawdzić typ powłoki w której się pracuje: printenv SHELL
uruchomić powłokę przeciwną do tej, w której się pracuje: bash, tcsh; sprawdzić jak zmieniło się środowisko: printenv; wyjść z uruchomionej powłoki dodatkowej.
7 Zmienne środowiskowe
oglądnąć ustawienia środowiska: printenv, jeżeli spis nie mieści się na ekranie, użyć printenv | less
odnaleźć w spisie zmienne wymienione w opisie laboratorium,
ustawić własną zmienną, np. ALFA na wybraną wartość, np. moja
przećwiczyć dla powłoki bash (export ZM=wart
) i tcsh (setenv ZM wart
)
zaobserwować dziedziczenie środowiska w powłoce na przykładzie bash (wpisać poniższe):
bash
COS=tam
printenv COS
echo $COS
bash
printenv COS
echo $COS
exit
export COS
printenv COS
echo $COS
bash
printenv COS
echo $COS
exit
exit
ustawić znaki zachęty w powłoce sh (bash) przy pomocy zmiennej PS1
i tcsh przy pomocy set prompt
; ustawić na wartości: uzytkownik@komputer katalog
, godzina-katalog
i inne.
przetestować dziedziczenie prompta w sh (ustawiać z i bez export
)
8 Aliasy
sprawdzić istniejące aliasy
zredefiniować (w odpowiedniej powłoce) działanie ls: alias ls='ls -alF
' (dla sh)
zdefiniować własny alias: alias ll='ls -l
'
ustawić alias:
alias strona='lynx -display_charset=iso-8859-2 http://galaxy.uci.agh.edu.pl/~gjn/dydaktyka'
sprawdzić istniejące aliasy
usunąć wybrane aliasy
dopisać wybrane aliasy do plików inicjalizacyjnych powłoki, zalogować się ponownie i sprawdzić działanie.
9 Cytowanie napisów
Proszę porównać działanie:
echo $SHELL
echo "$SHELL"
echo '$SHELL'
echo \$SHELL
echo \\$SHELL
echo \$$SHELL
echo "system to: uname"
echo "system to: 'uname'"
echo "system to: `uname`"
echo "ls -l"
echo 'ls -l'
echo `ls -l`
10 Inicjalizacja powłok
odnaleźć w dokumentacji odpowiednie fragmenty opisujące inicjalizację powłok: bash(1): INVOCATION (WYWOŁANIE), FILES (PLIKI), tcsh(1): Startup and shutdown, FILES
przy pomocy wybranego edytora (nano, pico, mcedit, emacs, jed, vi) stworzyć pliki dla własnej powłoki logowania:
inicjalizacyjne dla login shell
inicjalizacyjne dla nonlogin shell
czytane przy zamykaniu powłoki
działanie plików testować przy pomocy polecenia source
umieścić w plikach komentarze - znak hash (#
) i komunikaty - polecenie echo „napis”
sprawdzać inicjalizację powłok login i nonlogin uruchamiając:
tcsh
tcsh -l
bash
bash --login
w pliku czytanym przy zamykaniu powłoki umieścić polecenie clear
jak „przestawić” login shell, np. z tcsh na basha (przy pomocy plików inicjalizacyjnych)?
Wskazówka: Aby przetestować, czy poprawnie zdefiniowali Państwo plik inicjalizacyjny można np. zdefiniować w nim zmienną środowiskową, komunikat wyświetlany przy pomocy echo
lub alias (patrz kolejna sekcja), a następnie logując się do odpowiedniej powłoki (np. poprzez bash –login
, tcsh
) sprawdzić, czy alias jest znany (a zatem poprawnie wczytano i zinterpretowano plik inicjalizacyjny).
11 GNU Readline
Testować w GNU Bash, notacja funkcji GNU Emacs:
Poniższe ćwiczenie należy wykonać na w powłoce bash, zamiast <T> należy wciskać tabulator:
le<T><T>ss /e<T>/pas<T>
echo $HO<T><T>ME
cd ~s<T><T>
Należy przeglądać podręcznik do basha, część Readline, Completion. Zaobserwować działanie Readline w innych programach GNU, np. Emacs: uruchomić edytor, Ctrl+C C+F TabTab.
Dla poszerzenia wiedzy