Laboratorium 0 - Praca w systemach UNIX, GNU/Linux

Zakres materiału

Rejestrowanie się w systemie UNIX: lokalnie i zdalnie (telnet, ssh, scp), zmiana haseł (passwd, yppasswd), system plików, polecenia ls, pwd, cp, mv, rm, mkdir, cd, chmod, cat/more/less, man, flagi poleceń, symbole ., .., *, ?, !, system poczty elektronicznej (interfejs przeglądarkowy, alpine), prosta edycja plików (nano/pico/vi(m)/emacs).

Informacje wprowadzające

Praca na stacjach lokalnych

Uczestnik kursu otrzymuje osobiste konto na lokalnych maszynach w laboratorium (login i hasło zostanie podane przez prowadzącego) oraz na serwerach diablo, panamintinyo. Właściciel konta jest odpowiedzialny za wszelkie działania wykonane przy jego pomocy, dlatego też należy niezwłocznie zmienić domyślne hasła i nie rozpowszechniać nowych. Należy także pamiętać o bezwzględnym wylogowaniu się z systemu przed opuszczeniem stanowiska pracy. Przy pracy w trybie konsolowym wystarczy zamknąć wszystkie uruchomione powłoki (polecenie exit lub logout), przy pracy w trybie graficznym należy zakończyć otwartą sesję graficzną.

Zmianę hasła na pojedynczym komputerze (np. diablo) lub ich grupie wykonujemy wydanym z poziomu powłoki systemowej poleceniem passwd lub yppasswd (w zależności od rozwiązania zastosowanego przez administratorów systemu – obecnie do zmiany haseł na udostępnionych studentom komputerach w naszych laboratoriach służy polecenie passwd). Często zmiana hasła na jednej maszynie spowoduje zmianę haseł w całym systemie (tak jest u nas). Po wpisaniu w terminalu polecenia zmiany hasła użytkownik zostanie poproszony o podanie starego hasła oraz o dwukrotne podanie hasła nowego. Uwaga: podczas wpisywania haseł w systemach UNIX i GNU/Linux, ze względów bezpieczeństwa, zostaje wyłączone wyświetlanie znaków na ekranie!

john_doe@okocim:~$ passwd 
Enter login(LDAP) password:            <-- aktualne hasło, wpisywane haslo nie wyswietla sie
New password:                          <-- wpisywane haslo nie wyswietla sie
Re-enter new password:                 <-- wpisywane haslo ciągle nie wyswietla sie
LDAP password information changed for mucha
passwd: password updated successfully

Analogicznie wygląda sesja zmiany hasła przy użyciu polecenia yppasswd.

Przestrzeń dyskowa wszystkich stacji roboczych w laboratorium jest połączona.

Praca zdalna na serwerach diablo, panamint, inyo

W celu połączenia się ze zdalnym komputerem można wykorzystać polecenie ssh, przykładowo:

john_doe@okocim:~$ ssh diablo.kcir.pwr.edu.pl                  <-- na: okocimie (informacja w znaku zachety basha)
Password:                                                      <-- wpisywane haslo nie wyswietla sie
Last login: Fri Apr 13 08:37:51 2012 from mobil.ict.pwr.wroc.pl
Sun Microsystems Inc.   SunOS 5.10      SUNW,Sun-Fire-880
[john_doe@diablo:~]$                                           <-- na: diablo (informacja w znaku zachety basha)

Polecenie ssh domyślnie próbuje wykonać logowanie na zdalnej maszynie z wykorzystaniem nazwy użytkownika z komputera łączącego się. Gdy loginy na komputerach różnią się, należy zestawić połączenie następująco:

john_doe@okocim:~$ ssh jane_doe@diablo.kcir.pwr.edu.pl         <-- John laczy sie z kontem Jane
albo
john_doe@okocim:~$ ssh diablo.kcir.pwr.edu.pl  -l jane_doe     <-- John laczy sie z kontem Jane
Jeśli komputery znajdują się w tej samej podsieci przy logowaniu można pominąć nazwę domeny:
john_doe@okocim:~$ ssh diablo         <-- komputery okocim i~diablo znajduja sie w tej samej podsieci

Aby zakończyć połączenie należy wpisać komendę exit:

john_doe@okocim:~$ ssh diablo.kcir.pwr.edu.pl                  <-- na: okocimie
   ...
[john_doe@diablo:~]$                                           <-- na: diablo 
[john_doe@diablo:~]$ exit
john_doe@okocim:~$                                             <-- z powrotem na okocimie

Dodatkowe podanie opcji -X (lub -Y jeśli takowa jest dostępna) przy wywoływaniu polecenia ssh pozwoli na przekierowanie wyświetlania aplikacji graficznych na lokalną stację użytkownika (połączenie z przekazaniem sesji graficznej) – tak zazwyczaj będziemy pracować.

Praca z powłoką systemową

W systemach UNIX i GNU/Linux najwygodniej pracuje się korzystając z interfejsu tekstowego powłoki (bash/shell). Dostęp do powłoki systemowej jest możliwy np. przy pomocy aplikacji terminala — tzw. konsoli (xterm/gnome-terminal etc) bądź w trybie tekstowym przez jeden z terminali wirtualnych (np. CTRL+ALT+F1). Wszystkie opisane powyżej polecenia wykonywane były właśnie w ten sposób.

Aby z poziomu powłoki systemowej uruchomić aplikację należy wpisać jej nazwę poprzedzoną ścieżką dostępu do niej. Przykładowo, jeśli w katalogu /usr/local/bin/ znajduje się aplikacja emacs można ją uruchomić wpisując:

[john_doe@diablo:~]$ /usr/local/bin/emacs
Ponieważ zwykle podawanie pełnej ścieżki jest dość uciążliwe, podstawowe katalogi z aplikacjami rozpoznawane są z kontekstu (a raczej na podstawie wartości zmiennej środowiska PATH). Tak więc, aby uruchomić edytor tekstu emacs zazwyczaj wystarczy wpisać
[john_doe@diablo:~]$ emacs
natomiast ścieżka '/usr/local/bin/' zostanie uzupełniona przez powłokę.

Należy zauważyć, że przy takim wywołaniu zadania, działanie terminala, z którego ją wywołano, zostaje zawieszone do czasu zakończenia zadania. Alternatywnie, z poziomu terminala można uruchomić zadania działające w tle, tzn. takie, które nie powodują zawieszenia działania terminala. W tym celu należy wykorzystać symbol & jak poniżej

[john_doe@diablo:~]$ emacs &
[1] 19773
Pojawiające się po wywołaniu liczby oznaczają kolejno numer uruchomionego zadania i procesu. Zazwyczaj w tle uruchamia się procesy operujące w swoich własnych oknach graficznych, zaś w pierwszym planie procesy wykorzystujące do komunikacji standardowe strumienie danych (terminal).

Na takiej samej zasadzie użytkownik może wykonywać polecenia powłoki, a także uruchamiać inne, dostępne aplikacje.

Warto pamiętać, że nazwy i ścieżki do poleceń są automatycznie dopełniane po naciśnięciu klawisza Tab. Jeśli po wpisaniu pierwszych liter nie da się jednoznacznie zidentyfikować polecenia należy dwukrotnie nacisnąć klawisz Tab aby zobaczyć listę możliwych opcji.

[john_doe@diablo:~/katalog]$ e              <-- tab + tab : lista polecen na litere 'e'
e                             epsffit
e1000g_transition             epstopdf
e2pall                        eqn
easy_install                  eqn2graph
easy_install-2.5              error
easy_install-2.6              esac
ebb                           escp2topbm
ebrowse                       escputil
echo                          esd
echo-client-2                 esd-config
eclipse                       esdcat
ecpg                          esdctl
ed                            esdfilt
edit                          esdloop
editmap                       esdmon
editres                       esdplay
edquota                       esdrec
             ...

[john_doe@diablo:~/katalog]$ em             <-- wpisanie 'em' + 'tab' dopelnia nazwe automatycznie (pojawiaja sie litery 'acs')
[john_doe@diablo:~/katalog]$ emacs

Podstawowe operacje używane w codziennej pracy pozwalają na poruszanie się po drzewie katalogów, tworzenie, usuwanie oraz edytowanie plików i katalogów:

ls
wyświetlanie zawartości katalogu
[john_doe@diablo:~]$ ls
katalog/                    plik        <-- John w swoim katalogu domowym '~' 
                                            ma jeden plik nazwany 'plik' 
                                            i jeden katalog o rownie 
                                            niewyszukanej nazwie
Domyślnie ls wyświetla zawartość bieżącego katalogu. Można także po nazwie polecenia podać ścieżkę do katalogu który chcemy wyświetlić.
[john_doe@diablo:~]$ ls katalog/
plik_pierwszy               plik_drugi

W systemie UNIX (GNU/Linux) można modyfikować działanie polecań uzupełniając ich wywołania o odpowiednie flagi. Przykładowo polecenie ls można uruchomić z flagą -l ('long list') co spowoduje wyświetlanie dodatkowych informacji o plikach zawartych we wskazanej kartotece.

[john_doe@diablo:~]$ ls -l katalog/ 
total 16
-rw-r--r--   1 john_doe  user        19 kw 13 10:35 plik_drugi
-rw-r--r--   1 john_doe  user        22 kw 13 10:34 plik_pierwszy
Standardowa konwencja polega na używaniu jednoliterowych flag modyfikujących, podawanych po nazwie polecenia a poprzedzanych znakiem '-' (minus). Zazwyczaj można łączyć dość wygodnie wiele flag modyfikujących.

cd
poruszanie się po drzewie katalogów
[john_doe@diablo:~]$ cd katalog/                          <-- z katalogu '~' przechodzimy do katalogu 'katalog/'
[john_doe@diablo:~/katalog]$ cd ..                        <-- wchodzimy do katalogu nadrzednego (..)
[john_doe@diablo:~]$ cd -                                 <-- wracamy do katalogu w~ktorym bylismy ostatnio ('-')
/home/john_doe/katalog                                    
[john_doe@diablo:~/katalog]$ cd                           <-- bez  argomentow polecenie 'cd' wchodzi do katalogu domowego '~'
[john_doe@diablo:~]$

pwd
ścieżka do aktualnego katalogu roboczego

Przy dobrze skonfigurowanym znaku zachęty ([login@host:path]$) aktualny katalog roboczy jest zawsze widoczny (zapytaj prowadzącego jak to zrobić!). Gdy informacja ta nie jest dostępna można ją uzyskać wpisując komendę pwd.

[john_doe@diablo:~]$ pwd                     <-- znak '~' jest synonimem /home/user_name
/home/john_doe

touch
tworzenie pustego pliku (zmiana daty dostępu do pliku)
[john_doe@diablo:~/katalog]$ ls                                     <-- wyswietla pliki
plik_drugi      plik_pierwszy
[john_doe@diablo:~/katalog]$ touch plik_trzeci                      <-- utworz nowy plik
[john_doe@diablo:~/katalog]$ ls                                     <-- sprawdz czy zostal utworzony
plik_drugi      plik_pierwszy   plik_trzeci
[john_doe@diablo:~/katalog]$ ls -l                                  <-- sprawdz daty modyfikacji plikow
total 16
-rw-r--r--   1 john_doe  ar2006        19 kw 13 10:35 plik_drugi
-rw-r--r--   1 john_doe  ar2006        22 kw 13 10:34 plik_pierwszy
-rw-r--r--   1 john_doe  ar2006         0 kw 13 11:09 plik_trzeci
[john_doe@diablo:~/katalog]$ touch plik_pierwszy                    <-- uaktualnij plik_pierwszy
[john_doe@diablo:~/katalog]$ ls -l                                  <-- sprawdz daty modyfikacji plikow
total 16
-rw-r--r--   1 john_doe  ar2006        19 kw 13 10:35 plik_drugi
-rw-r--r--   1 john_doe  ar2006        22 kw 13 11:10 plik_pierwszy <-- bylo: 10:34
-rw-r--r--   1 john_doe  ar2006         0 kw 13 11:09 plik_trzeci
[john_doe@diablo:~/katalog]$

rm
usuwanie plików
[john_doe@diablo:~/katalog]$ ls
plik_drugi      plik_pierwszy   plik_trzeci
[john_doe@diablo:~/katalog]$ rm plik_trzeci 
rm: remove plik_trzeci (tak/nie)? tak              <-- potwierdz dzialanie
[john_doe@diablo:~/katalog]$ ls
plik_drugi      plik_pierwszy
[john_doe@diablo:~/katalog]$

cat
wyświetlanie zawartości plików na ekranie (także: sklejanie plikow)
[john_doe@diablo:~/katalog]$ ls
plik_drugi      plik_pierwszy
[john_doe@diablo:~/katalog]$ cat plik_pierwszy 
To jest plik pierwszy!                             <-- zawartosc pliku: plik_pierwszy
[john_doe@diablo:~/katalog]$ cat plik_drugi 
To jest plik drugi!                                <-- zawartosc pliku: plik_drugi
[john_doe@diablo:~/katalog]$
(zobacz także: less/more)

mv
zmiana nazwy (przenoszenie) plików
[john_doe@diablo:~/katalog]$ ls
plik_drugi      plik_pierwszy
[john_doe@diablo:~/katalog]$ mv plik_pierwszy plik_trzeci   <-- zmien nazwe
[john_doe@diablo:~/katalog]$ ls
plik_drugi    plik_trzeci
[john_doe@diablo:~/katalog]$ cat plik_trzeci 
To jest plik pierwszy!                                      <-- plik zamieniono!
[john_doe@diablo:~/katalog]$

mkdir
tworzenie katalogów
[john_doe@diablo:~/katalog]$ ls
plik_drugi    plik_trzeci
[john_doe@diablo:~/katalog]$ mkdir podkatalog   <-- utworz nowy katalog
[john_doe@diablo:~/katalog]$ ls
plik_drugi    plik_trzeci   podkatalog/         <-- sprawdz czy jest
[john_doe@diablo:~/katalog]$ ls podkatalog/     <-- katalog jest pusty; nic sie nie wyswieta!
[john_doe@diablo:~/katalog]$ cd podkatalog/     <-- przejdz do nowego katalogu
[john_doe@diablo:~/katalog/podkatalog]$ pwd     <-- sprawdz sciezke
/home/john_doe/katalog/podkatalog
[john_doe@diablo:~/katalog/podkatalog]$
W celu usunięcia (pustego) katalogu należy wykorzystać komendę rmdir.

cp
kopiowanie plików
[john_doe@diablo:~/katalog]$ ls
plik_drugi    plik_trzeci   podkatalog/ 
[john_doe@diablo:~/katalog]$ cp plik_drugi podkatalog   <-- skopiuj plik do podkatalogu
[john_doe@diablo:~/katalog]$ ls
plik_drugi    plik_trzeci   podkatalog/         <-- sprawdz co sie pojawilo
[john_doe@diablo:~/katalog]$ ls podkatalog/     <-- katalog juz nie jest pusty
plik_drugi
[john_doe@diablo:~/katalog/podkatalog]$ cp plik_drugi nowy_plik   <-- skopiuj plik pod nowa nazwa
[john_doe@diablo:~/katalog]$ ls
nowy_plik     plik_drugi    plik_trzeci   podkatalog/   <-- sprawdz co sie pojawilo
[john_doe@diablo:~/katalog/podkatalog]$

emacs
potężny edytor tekstu

Praca z edytorem tekstu emacs

Poproś prowadzącego o wskazówki dotyczące korzystania z edytora (otwieranie, edycja i zapisywanie plików). Korzystając z opisu kolejnego zadania samodzielnie zapoznaj się z możliwościami edytora. Będzie to Twoje podstawowe narzędzie pracy! W trakcie następnych zajęć dowiesz się o nim sporo.

Przebieg ćwiczenia

Materiały

Przy samodzielnym ćwiczeniu dużej części zaprezentowanego materiału pomocne mogą być rozdziały 3 Narzędzia GNU dla zwykłych użytkowników'' oraz 11 Programowanie w C'' (podrozdziały 11.1-11.3) książki Glass, Ables: Linux dla programistów i użytkowników'', Helion, 2007.

Bibliografia

1
G. Glass, K. Ables, Linux dla programistów i użytkowników, Helion, 2007.
2
D. Cameron, GNU Emacs: Leksykon kieszonkowy, Helion, 2002.
3
C. Newham, B. Rosenblatt Learning the bash Shell, O'Reilly Media, 1998.

About this document ...

This document was generated using the LaTeX2HTML translator Version 2021.2 (Released July 1, 2021)

The command line arguments were:
latex2html -html_version 3.2,latin2,unicode -split 0 -no_navigation PProg_lab_00

The translation was initiated on 2023-10-05