courses:unix:lab_shell

  • Zapoznać się z edytorami:
    • vi (konieczny, jeżeli chcesz być prosem!) (ten link może pomóc ogarnąć podstawy: http://vim-adventures.com/)
    • emacs (jeżeli chcesz korzystać z niego na SPK, musisz dodać opcję -X logując się przez SSH (ssh -X login@host); dzięki temu na Twoim komputerze wyświetli się okienko emacsa pracującego na SPK)
    • inne edytory takie jak: nano, mcedit, ew. joe, pico, jed, zile
  • Przypomnieć sobie pracę z sftp i scp
  • Przeczytać artykuł GNU Bash - Więcej niż Sh

NIEOBOWIĄZKOWO, dla zainteresowanych - warto przejrzeć: 101 Bash Commands and Tips for Beginners to Experts

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

2. Ś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
  • Operacje na zmiennych środowiskowych:
    ## Bash/Sh ##
    export ZMIENNA=WARTOSC  # ustawianie (Bash)
        ZMIENNA=WARTOSC ; export ZMIENNA  # ustawianie (Sh)
    echo $ZMIENNA           # wyświetlanie
    unset ZMIENNA           # usuwanie
     
    ## Tcsh/Csh ##
    setenv ZMIENNA WARTOSC  # ustawianie
    printenv ZMIENNA        # wyświetlanie
    unsetenv ZMIENNA        # usuwanie

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

4. Re/Definiowanie poleceń (alias)

Polecenie alias widzieliśmy już poprzednio - poznajmy je lepiej!

  • Do re/definiowania poleceń powłoki służy alias.
  • Do usuwania definicji: unalias.
  • Przykłady:
    ## Bash ##
    alias ls='ls -F'
    alias ll='ls -l'
    unalias ls
     
    ##Tcsh##
    alias ls 'ls -F'
    alias ll 'ls -l'
    unalias ls

5. Cytowanie napisów

W środowisku powłoki są używane 3 znaki specjalne pozwalające na konstruowanie/cytowanie napisów:

  • cudzysłowy “TEKST” , tekst w nich zawarty jest jednym napisem, w którym powłoka może interpretować znaki specjalne, np. podstawiać wartości zmiennych,
  • apostrofy 'TEKST' , j.w., tylko BEZ możliwości interpretowania znaków specjalnych – tekst jest dokładnie cytowany,
  • odwrócone apostrofy `TEKST` (obok klawisza Tab), zawartość tekstu jest traktowana jako polecenie, uruchamiana przez kolejna powłokę, a wynik działania polecenia jest podstawiany jako tekst.

6. Przeglądanie plików tekstowych

  • po jednym ekranie/linii do przodu: more
  • po jednym ekranie/linii w obydwu kierunkach: less (less is more!)
  • wyświetlanie zawartości podanych plików:
    cat [plik1 plik2 ... plikN]
To help remember the difference between less and more, a common joke is to say, “less > more,” implying that less has greater functionality than more. A similar saying is that “less is more, more or less” (Wikipedia)

7. 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ę rozpoczynając od #.
  • 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

8. 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ń (Tab), edycję (polecenia Emacs, Vi) i historię (, Ctrl+P, Ctrl+N, i inne).

9. 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 M/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.
  • Vi jest zawsze dostępny - inne edytory niekoniecznie!
  • Ciekawy tutorial do nauki VI: VIM Adventures

I. Typy powłok

  • sprawdzić typ swojej powłoki logowania: finger LOGIN / printenv SHELL / cat /etc/passwd | grep LOGIN
  • 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

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

III. 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=utf-8 https://fais.uj.edu.pl/'
  • sprawdzić istniejące aliasy
  • usunąć wybrane aliasy
  • dopisać wybrane aliasy do plików inicjalizacyjnych powłoki, zalogować się ponownie i sprawdzić działanie

IV. 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`

V. 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
    • 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, a następnie logując się do odpowiedniej powłoki (j.w.) sprawdzić, czy alias jest znany (a zatem poprawnie wczytano i zinterpretowano plik inicjalizacyjny).
  • 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)?

VI. GNU Readline

Przetestować w GNU Bash:

  • historia:
    • przeglądanie: Ctrl+P (również: ), 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
    • przykład (w miejscu <Tab> należy wciskać tabulator):
      le<Tab><Tab>ss /e<Tab>/pas<Tab>
      echo $HO<Tab><Tab>ME
      cd ~s<Tab><Tab>  # może zająć kilka sekund na serwerze SPK
  • courses/unix/lab_shell.txt
  • Last modified: 4 years ago
  • by 127.0.0.1