Powłoka i środowisko pracy

DO PRZYGOTOWANIA

Samodzielnie należy przed tym laboratorium przygotować:

  • podstawy pracy z Vi (ten link może pomóc: http://vim-adventures.com/)
  • 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
  • przeczytać artykuł GNU Bash - Więcej niż Sh

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.
  • Ciekawy tutorial do nauki VI: VIM Adventures

ĆWICZENIA

20 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.

21 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)

22 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.

23 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`

24 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).

25 GNU Readline

Testować w GNU Bash, notacja funkcji GNU Emacs:

  • historia:
    • przeglądanie: Ctrl+P, Ctrl+N
    • szukanie: Ctrl+R
  • edycja linii:
    • poruszanie się: Ctrl+A, Ctrl+E, M+F, M+B
    • czyszczenie: Ctrl+L
    • kopiowanie i wklejanie: Ctrl+K, M+D, Ctrl+Y
  • dopełnianie (ang. completion): TAB.

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

pl/dydaktyka/unix/lab_powloka.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0