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 (mailx/elm/pine), 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 diablopanamit. 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 (udostępnione komputery podzielone są obecnie na dwie grupy chronione oddzielnymi hasłami: komputery diablopanamint oraz komputery w laboratoriach 103-127 C3). 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@melasia314:~$ yppasswd 
Changing NIS account information for john_doe on lab103.
Please enter old password:                               <-- wpisywane haslo nie wyswietla sie
Changing NIS password for john_doe on lab103.
Please enter new password:                               <-- wpisywane haslo nie wyswietla sie
Please retype new password:                              <-- wpisywane haslo nie wyswietla sie

The NIS password has been changed on lab103.

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

Przestrzeń dyskowa wszystkich stacji roboczych w laboratorium jest połączona. Aby uzyskać zdalny dostęp do plików pozostawionych na lokalnym komputerze można połączyć się z serwerem lab103.ict.pwr.wroc.pl (niestety opcja obecnie niedostępna dla studentów - z tego względu wszystkie potrzebne pliki należy przechowywać na komputerach diablo lub panamint i logować się zdalnie na nich jak to opisano poniżej).

Praca zdalna na serwerach diablopanamint

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

john_doe@melasia314:~$ ssh diablo.ict.pwr.wroc.pl                  <-- na: melasia314 (informacja w znaku zachety basha)
Password:                                                          <-- wpisywane haslo nie wyswietla sie
Last login: Fri Apr 13 08:37:51 2012 from mobil.ict.pwr.w
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@melasia314:~$ ssh jane_doe@diablo.ict.pwr.wroc.pl         <-- John laczy sie z kontem Jane
albo
john_doe@melasia314:~$ ssh diablo.ict.pwr.wroc.pl  -l jane_doe     <-- John laczy sie z kontem Jane
Aby zakończyć połączenie wpisz komendę exit:
john_doe@melasia314:~$ ssh diablo.ict.pwr.wroc.pl                  <-- na: melasia314
   ...
[john_doe@diablo:~]$                                               <-- na: diablo 
[john_doe@diablo:~]$ exit
john_doe@melasia314:~$                                             <-- z powrotem na melasia314

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

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.

Spis literatury

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 2008 (1.71)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

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

The translation was initiated by Robert Muszynski on 2016-10-18


Robert Muszynski 2016-10-18