SOP121/ćw - temat A.

2. Unix: podstawowe pojęcia; polecenia.

Logowanie.

Będziemy pracować następująco:
  • Rozpoczynamy pracę czyli logujemy się do maszyny z systemem operacyjnym "Linux" używając identyfikatora
            d<nr_indeksu>
    i hasła (???). Widzimy środowisko graficzne XWindows+KDE.
  • Uruchamiamy program xterm (emulator terminala tekstowego) w którym będziemy eksperymentować z Linux-em. Program xterm tworzy "okienko" oraz uruchamia powłokę, z którą prowadzimy konwersację poprzez to okienko. Konwersacja polega głównie na uruchamianiu programów i obserwowaniu wyników ich działania (pod DOS-em rolę powłoki pełnił program "command.com").
  • Uruchamiamy drugi xterm, a w nim klienta telnet-u i podłączamy się do (zdalnej) maszyny "atos.amu.edu.pl":
            telnet atos
            (lub "ssh atos")
  • Uruchamiamy trzeci xterm, w którym wlaczamy jeden z edytorów :
            pico lek01.txt
            mcedit lek01.txt
            kwrite lek01.txt &
            (ostatni jest programem XWindows-owym !)
    aby pisac sprawozdanie ... 
  • Zadanie 1


    Uruchom polecenia "hostname" i "uname -a" wyświetlające informacje o maszynie na której pracujesz.
    Otwórz okienka xterm dla lokalnej maszyny (tylko xterm) oraz dla maszyny zdalnej atos (xterm+telnet/ssh), a następnie uruchom te polecenia na obu maszynach ...
    Do sprawozdania z wykonania "Zadania 1" wstaw polecenia i ich wydruki skopiowane z okienka xterm (podaj wyraźnie na której maszynie były uruchamiane !).

    Polecenie "uname -a" wyswietla nastepujace informacje:
            sysname nodename release osversion machine processor
    gdzie:
            sysname - nazwa systemu operacyjnego
            nodename - sieciowa nazwę systemu
            release - wydanie systemu operacyjnego (np "2.2.13-7mdk")
            osversion - wersja systemu operacyjnego (np "#8 śro sie 16 22:54:27 CEST 2000")
            machine - typ sprzętu czyli architektura komputera
            processor - typ procesora.
    Wyprobuj tez polecenie: "uname --help"; jak widac mozna siegac po poszczegolne informacje (opcja "-a" powoduje ze sa wyswietlane wszystkie informacje).

    Zadanie 1a


    Czym się różni działanie polecenia "ls" (wyświetlającego pliki bieżącego katalogu) na :
            1. lokalnym Linux-ie (katalog "d????")
            2. zdalnym Linux-ie czyli na maszynie "atos" (katalog "d????") ?
    Przeczytaj to, zinterpretuj wydruki, i odpowiedz pisemnie na pytanie. Do sprawozdania wstaw także wydruki eksperymentów.

    Wskazówka: w Unixie można montować nie tylko lokalne systemy plików ale także "sieciowe" czyli pochodzące z innej maszyny (przykład konkretnego typu sieciowego systemu plików: NFS = Network File System).

    Manual.

    Manual jest niewyczerpanym źródłem informacji dotyczących poleceń, funkcji systemowych/bibliotecznych i innych spraw związanych z Unixem/Linuxem ...

    Manual jest podzielony na rozdziały 1,2,3,4,5,7,8
    (Dotyczy Digital Unix-a; na Linux-ie rozdziały o wyższych numerach są nieco inne)
    Rozdział 1 dotyczy poleceń
    Rozdział 2 dotyczy funkcji systemowych
    Rozdział 3 dotyczy funkcji bibliotecznych (języka C/C++)
    Rozdział 4 dotyczy formatów plików (np konfiguracyjnych w katalogu /etc)
    Rozdział 7 dotyczy plików specjalnych (katalog /dev)
    Rozdział 8 dotyczy administracji

    Manuala używamy przy pomocy polecenia "man" ...
           man <nazwa_polecenia>
           man <nr_rozdzialu> <nazwa_polecenia>

           man ls # dostaniemy informacje na temat polecenia "ls"
           man man # dostaniemy informacje na temat polecenia "man"

           man sleep # dotyczy polecenia sleep
           man 1 sleep # dotyczy polecenia sleep
           man 3 sleep # dotyczy funkcji "bibliotecznej" sleep
             # cyferka oznacza nr rozdziału z którego chcemy wziąć opis
             # (bo to samo hasło może występować w kilku rozdziałach !)

           man umask # dotyczy polecenia umask
           man 1 umask # dotyczy polecenia umask (lub komendy wew. powloki)
           man 2 umask # dotyczy "funkcji systemowej" umask

    informacje o zawartości rozdziałów manuala:
           man 1 intro
           man 2 intro
           ...

    inne polecenia związane z manualem:
           apropos <slowo_kluczowe>
             # wyświetla wszystko co się kojarzy z danym słowem
             # Np: apropos terminal
                       apropos administration

           whatis <slowo_kluczowe>
             # opisuje funkcje komendy
             # Np: whatis xterm
                       whatis ls

    operowanie tekstem manualu (klawisze):
           "u" w górę kilka linii
           "d" w dół kilka linii
           "1G" na początek
           "G"  na koniec
           " "  cala strona do przodu
           "b"  cala strona do tylu
           "q"  koniec
           "?"  pomoc
           "/tekst" poszukiwanie tekstu
                  # znajdz następne znalezisko "n", poprzednie "N"
           "/wyrazenie_regularne" wyrafinowane poszukiwanie tekstu
                  # Np: /^ *Expr
                  # czyli wyszukiwanie linii zaczynajacych sie od spacji i slowa "Expr";
            strzalki, pgup/pgdn - na ogol tez dzialaja

    opis polecenia przy pomocy opcji "--help"
           np:
           ls  --help
           ls  --help  |  less
               # "ls  --help" wyswietla dlugi tekst dlatego lepiej go ogladac przy pomocy "less"
           uname  --help

    Cwiczenie 2


    Wypróbuj polecenia związane z manualem:
    man, apropos, whatis
    Uzyj przykladow z powyzszego opisu.
    Sprawdź o czym mówią rozdziały manuala Linuxa (są inne niż podano wyżej).
    Czym się różnią "man umask" i "man 2 umask" (lub "man sleep" i  "man  3 sleep" ) ?.
     
     

    Pojecia dotyczące plików.

    Pliki i katalogi
    Przypomnijmy, że katalog to tablica która zawiera nazwy plików i innych katalogów, tak więc katalogi tworzą pewne "drzewo". Każdy katalog posiada nazwę; nazwa ta powinna mieć coś wspólnego z zawartością katalogu. Do kazdego pliku lub katalogu mozna sie odwolac przy pomocy "sciezki" przechodzacej przez elementy (wierzcholki) drzewa katalogow ...

    System plikow w Unixie
    Systemem plikow to "pliki i katalogi" rezydujace na dysku (w partycji dysku).
    Następujące dwa pojęcia są analogiczne:

    1. dysk logiczny DOS-u czy Windows (np A:, C:)
    2. system plików Unix-a

    Globalna struktura katalogów w Unixie (GSK)
    W Unix-ie istnieje jedna wielka "globalna struktura katalogow"; w niektórych katalogach tej struktury są zamontowane systemy plików - "lokalne" bądź "sieciowe", czyli pochodzace z innej maszyny (tzw NFS = Network File System).
    Jeśli w katalogu /home zamontowano system plików zawierający katalog /student, a w tym katalogu "plik.txt", to dostęp do tego pliku uzyskujemy poprzez /home/student/plik.txt.
    Montowaniem systemow plikow zajmuje się zasadniczo administrator przy pomocy polecenia "mount", np:
    mount /dev/hda2 /home
    Nizej widzimy przyklad globalnej struktury katalogow (GSK); katalog korzen czyli "/" rezyduje na partycji "hda1"; w katalogu /home GSK zamontowano partycje "hda2".

    Tradycyjne katalogi Unixa
    Zauważ, że katalogi w UNIX-ie nie są całkiem "dowolne" (tj wymyślone przez użytkownika); istnieją pewne standardowe katalogi których znaczenie jest uświęcone tradycją, np:

           /dev <-- pliki specjalne urządzen
                    do których należy m.in. "/dev/lp" mający takie
                    znaczenie jak "prn" pod DOS-em !
    
           /bin     <-- tutaj znajdują się programy poleceń (np "ls")
           /usr/bin
    
           /usr/bin/X11 <-- programy używające X Windows (np xterm)
    
           /etc <-- pliki konfiguracyjne
                    np plik "/etc/passwd" zawierający listę
                    użytkowników danej maszyny wraz z rozmaitymi
                    informacjami ...
    Sciezki wzgledne i bezwzgledne
    Kazdy proces posiada "biezacy katalog". Jesli sciezka do pliku lub katalogu NIE zaczyna sie od "/" to jest obliczana "wzgledem" biezacego katalogu.
    ls -l qqq/www.txt
        # odwolanie wzgledem biezacego katalogu
    ls -l /home/mhanckow/qqq/www.txt
        # sciezka bezwzgledna
    Pozycje "." i ".." w katalogu
    Pozycja "." oznacza bieżący katalog, ".." oznacza katalog macierzysty katalogu bieżącego (czyli krok w kierunku korzenia). Każdy katalog nawet pusty posiada pozycje "." i "..".  (Aby je zobaczyć użyj polecenia "ls -a"; patrz opis polecenie "ls" niżej). Podając ścieżkę do pliku możemy wielokrotnie używać ".." i ".".
    # bieżącym katalogiem jest /aaa/bbb/qqq/www;
    # oto różne sposoby jakimi możemy się dostać do pliku "plik.txt"
    # znajdujacego sie w katalogu /aaa/bbb/ccc/ddd:
         /aaa/bbb/ccc/ddd/plik.txt
         ../../ccc/ddd/plik.txt
         ../www/../../ccc/ddd/plik.txt
         ./././../../ccc/ddd/././plik.txt
    
    # jakie jest zastosowanie samej "." ???
    przypuscmy ze program "qqq" wymaga podania parametru okreslajacego katalog 
    i ze chcemy podac katalog biezacy;
    wtedy mozemy uruchomic qqq nastepujaco:
         qqq .
    inne zastosowanie: jesli na zmiennej PATH nie ma "." to aby uruchomic program qqq
    z biezacego katalogu musimy wydac polecenie:
         ./qqq kat
    Uruchamianie programów, proces macierzysty i potomny
    Programy uruchamia się przy pomocy tzw komend; w komendzie podaje się nazwę pliku z programem oraz (ewentualnie) parametry:
     polecenie parametr_1 parametr_2 ... parametr_n
    Konkretne przykłady komend:
    ls -l plik.txt
    prog -par1 -par2 -par3 123 -par4 "qwe asd zxc"
      # parametry par3 i par4 maja wartość
      # parametry par1 i par2 to przełączniki (które "coś" włączają)
      # (tak naprawdę parametry to napisy ...)

    Uruchomiony program staje się procesem.

    Jeśli pracujemy w powloce "bash" to jest ona procesem macierzystym; jesli uruchomimy jakis program, np "ls" (musi to byc program a nie komenda wbudowana powloki !), to jest tworzony proces potomny ktory wykona program "ls"; gdy proces potomny zakonczy dzialanie, wtedy bash wyswietla znak zachety (tzw prompt) i mozna uruchomic nastepny program.

    Zmienne środowiska procesu
    Istnieją (przynajmniej) dwa sposoby przekazywania danych do uruchamianego programu:
  • przez parametry programu; np "ls plik.txt", gdzie plik.txt jest parametrem;
  • przez zmienne środowiska.
    Kazdy proces (=uruchomiony program) posiada zmienne środowiska lub inaczej "zmienne eksportowane". Zmienne posiadają nazwę i wartość. Z poziomu powloki "bash" lub "ksh" tworzy się je poleceniem:
    export <nazwa_zmiennej>=<warosc_zmiennej>
    # konkretny przyklad:
    export x=100
    export zmienna="Tra la la !!!"
    Przyklad zmiennej srodowiska: zmienna PATH opisana wyzej.
    Wazna cecha zmiennych srodowiska: sa "dziedziczone" przez procesy potomne.
    Uwaga: Jeśli pominiemy słowo "export", np:
    x=123
    to otrzymamy tzw zmienną powłoki; zmienne powłoki są "prywatna sprawa" powłoki i NIE sa dziedziczone przez procesy potomne.
     

    Zadanie 3


    (Sprawdzamy czy faktycznie zmienne środowiska są dziedziczone przez procesy potomne)
    Utworz zmienna srodowiska "x" o wartosci "123", nastepnie uruchom potomnego bash-a (polecenie "bash", oraz polecenie "ps" wyswietlajace dzialajace procesy), nastepnie zobacz czy w potomnym bash-u jest dostepna zmienna "x" (polecenie "echo $x"), i ostatecznie zakoncz prace potomnego basha (polecenie "exit" lub Ctrl+D) wracajac do pierwotnego bash-a (wydaj tez na koncu polecenie "ps").
    Powtorz powyzsze doswiadczenie ale bez slowa "export" (czyli tworzac zmienna "x" pleceniem "x=100").
    Uwaga: zmienna mozna usunac poleceniem unset <nazwa_zmiennej>.
    Do sprawozdana wstaw kopie zawartosci konsoli w czasie eksperymentu !

     

    Uzyskiwanie informacji o pliku.

    Do uzyskiwania informacji o plikach służy polecenie "ls".
    Oto kilka przykładów jego uruchamiania:
        ls 
          # wyświetla pliki bieżącego katalogu
        ls -l 
        ls -l .
          # wyświetla wszystkie informacje o plikach bieżącego katalogu
        ls -ld
        ls -ld .
          # wyświetla wszystkie informacje o bieżącym katalogu 
          # (a nie o jego zawartości tak jak by to się stało bez opcji "-d")
        ls -la 
          # wyświetla także pliki o nazwach zaczynających się od "." 
          # (jest to coś w rodzaju DOS-owych plików ukrytych)
    Poniżej wyjaśnia się znaczenie napisów wyświetlanych przez polecenie "ls" ...

    Użytkownicy i grupy użytkowników
    Pojawiają się teraz pojęcia użytkownika oraz grupy użytkowników...
    Każdy plik ma właściciela i grupę właścicieli; można nadawać prawa do pliku osobno dla:


    Prawa do plików i katalogów
    Są trzy prawa do plików i katalogów:
  • "r" czytanie (dla katalogów: wyświetlanie listy plików np poleceniem"ls")
  • "w" pisanie (dla katalogów: dodawanie plików do katalogu, usuwanie plików z katalogu, zmiana nazwy pliku w katalogu)
  • "x" wykonanie programu (dla katalogów: dostęp do plików w katalogu)
  • Nasze prawa do pliku oblicza się następująco:
    1. jesli jestem wlascicielem pliku to mam prawa przyslugujace wlascicielowi; idz do punktu 4
    2. jesli naleze do grupy wlascicieli pliku to mam prawa przyslugujace grupie wlascicieli; idz do punktu 4
    3. mam prawa przyslugujace "pozostalym"
    4. koniec

    Rodzaje plików u Unixie
    W Unixie jest wiele rodzajów plików (w nawiasach okrągłych podałem oznaczenie wyświetlane przez polecenie "ls -l").
  • pliki zwykłe; przechowywanie danych i programów ("-")
  • katalogi ("d")
  • pliki specjalne; pozwalają na bezpośrednie odwoływanie się do urządzeń ("b" lub "c")
  • łącza nazwane; służą procesom do komunikowania się ("p")
  • dowiązania symboliczne (lub miękkie); jest to plik który zawiera ścieżkę do pliku docelowego, jeśli jakiś program zapisuje dowiązanie symboliczne to w rzeczywistości zapisuje plik docelowy ("l")

  •  

    Dowiązania twarde do plików
    W Unix-ie jeden plik może występować w wielu katalogach. Plik jest bowiem identyfikowany przez tzw nr i-węzła. Katalog to tabela zawierająca następujące pary:

           [nr i-węzła, nazwa pliku]
    Ten sam nr i-węzła może się więc pojawić w różnych pozycjach różnych katalogów lub w różnych pozycjach tego samego katalogu (z inną nazwą pliku). Opisany mechanizm to tzw dowiązania twarde, nie mylić z dowiązaniami symbolicznymi !.

    Inne uwagi na temat plików i katalogów
    W Unix-ie (w przeciwieństwie do DOS-u) rozróżnia się wielkość liter w nazwach plików i katalogów.
     
     

    .........................................................................................

    Zobaczymy teraz w jaki sposób polecenie "ls -l" udziela nam informacji o pliku ...
    Po wydaniu polecenia:

        ls -l plik1.txt
    otrzymamy na terminalu napis:
        -rwxr-xr-x 5 aaa bbb 1000 May 20 7:35 plik1.txt
    który ma następujące znaczenie:
        "-" typ pliku
               "-" oznacza plik zwykły
            inne możliwości:
               "d" - katalog,
               "l" - dowiązanie symboliczne
               "b" - plik specjalny blokowy
               "c" - plik specjalny znakowy
               "p" - łącza nazwane
    
         uuugggooo
        "rwxr-xr-x" prawa dla właściciela (uuu),
                    grupy właścicieli (ggg),
                    oraz dla pozostałych (ooo)
    
        "5" liczba dowiązań twardych
            (tj w ilu katalogach ten plik występuje razem z "." i "..")
    
        "aaa" nazwa właściciela
    
        "bbb" nazwa grupy właścicieli 
    
        "1000" rozmiar pliku w bajtach
    
        "May 20 7:35" data i czas ostatniej modyfikacji pliku
    
        "plik1.txt" nazwa pliku
    Cwiczenie 4

    Utworz katalog "qqq" (mkdir qqq) a w nim plik "plik.txt" (echo "ABC" > qqq/plik.txt).
    Nastepnie wypróbuj polecenia:
    ls qqq
    ls -l qqq
    ls -ld qqq
    ls -la qqq
    Zadanie 5

    Zapisz do sprawozdania wszystkie informacje na temat pliku "qqq/plik.txt" jakie uda Ci się uzyskać przy pomocy
    ls -l qqq/plik.txt
    (plik ten utworzylismy w Cwiczeniu 4).

    Zadanie 6


    (Wyjasniamy dziwne wartosci "liczby dowiazan twardych katalogu").
    Liczba dowiązań do pliku oznacza liczbę katalogów w których ten plik występuje. Zbadaj i wyjaśnij liczbę dowiązań katalogu, który posiada 0,1,2 podkatalogi (sprawdzić trzy przypadki). Ma to związek z pozycjami katalogu "." i "..". (Polecenia do tworzenia/usuwania katalogów to mkdir <kat>, rmdir <kat>).

    Wskazówka:

     

    Operacje na plikach i katalogach.

    Uwaga: w poniższych poleceniach często podaje się nazwę pliku lub katalogu. Tam gdzie można podać więcej niż jedną nazwę można także podać tzw "wzorzec" (np plik*.txt) utworzony przy pomocy znaków globalnych ("*", "?"); powłoka automatycznie wygeneruje wszystkie nazwy pasujące do wzorca i istniejące w strukturze katalogów (jest to tzw generowanie nazw plików -zostanie to dokładniej wyjaśnione gdy będziemy omawiać powłokę).
       pwd = Print Working Directory
           wyświetla bieżący katalog
    
       cd = Change Directory
           chodzenie po drzewie katalogów
           czyli zmiana bieżącego katalogu
           bez parametru - przejście do katalogu "HOME"
    
       cp, rm, mv, mkdir, rmdir:
           kopiowanie, usuwanie, przemieszczanie, 
           tworzenie katalogu, usuwanie katalogu (pustego !)
    
       cp = CoPy 
           polecenie "cp" sluzy do kopiowania plikow;
           polecenie "cp" może mieć następującą postać
             cp opcje plik plik
                 # kopiuje plik do pliku
                 # przyklady:
                 cp plik1.txt plik2.txt
                 cp ../../qqq.txt ../../aaa/bbb/ccc/www.txt
                 cp /home/users/jkowalski/qqq.txt ../../aaa/bbb/ccc/www.txt
             cp opcje pliki katalog
                 # kopiuje pliki do katalogu
                 # przyklady:
                 cp plik1.txt plik2.txt plik3.txt qqq
                     # gdzie "qqq" jest katalogiem
                 cp aaa/*.txt qqq
                     # UWAGA: napis aaa/*.txt zostaje zastąpiony przez 
                       listę plików *.txt w katalogu aaa;
                       robi to automatycznie powłoka ! 
                       (jest to tzw "generowanie nazw plików")
    
           opcje "-r" i "-R" oznaczają kopiowanie "razem z podkatalogami"
           (wśród plików źródłowych mogą się znajdować katalogi;
           będą one kopiowane razem z całym drzewem podkatalogów)
    
           opcja "-i" powoduje zadawanie pytań, gdy istniejący
           plik może być zapisany (opcja "-f" ma odwrotne działanie)
    
       mv = MoVe
           polecenie "mv" sluzy do przemieszczania plików i katalogów;
           sluzy takze do zmianiania nazwy pliku;
           polecenie "mv" może mieć następujące postacie:
             mv opcje plik plik
             mv opcje pliki katalog
             mv opcje katalogi katalog
                # przyklady:
                mv qqq qqq1 
                   # gdzie "qqq" jest katalogiem;
                   # UWAGA: powyzsze polecenie dziala inaczej w zaleznosci od tego 
                   # czym jest "qqq1" !
                   # -jesli "qqq1" nie istnieje to katalog "qqq" 
                   #  zmieni nazwe na "qqq1"
                   # -jeśli "qqq1" istnieje i jest katalogiem to katalog "qqq" 
                   #  zostanie przemieszczony i stanie się podkatalogiem "qqq1"
    
       rm = ReMove
           usuwanie plików; z opcja "-r" umożliwia usuwanie 
           razem z podkatalogami (niebezpieczne !)
    
       jak utworzyć plik do eksperymentów ?
           cat > plik.txt 
                  # czyta tekst z klawiatury, aż do naciśnięcia ^D;
                  # program "cat" przepisuje stdin na stdout
                  # stdout jest "przekierowane" do pliku plik.txt
                  # tak więc wprowadzany tekst znajdzie się
                  # właśnie w tym pliku ...
           echo "123 ABC" > plik.txt
                  # polecenie echo wyświetla tekst podany przez parametr
                  # na "stdout" (czyli standardowe wyjście),
                  # które jest przekierowane do pliku,
                  # czyli tekst trafi do pliku "plik.txt"
           echo "123 ABC" >> plik.txt
                  # tekst zostanie dopisany na koniec pliku "plik.txt"
    
       jak wyświetlić zawartość plików na terminalu ? 
           cat plik1.txt
    Zadanie 7 (!)


    Utwórz strukturę katalogów widoczna powyżej; prostokaty oznaczaja katalogi a kolo oznacza plik zwykly. Do tworzenia/usuwania katalogow sluza polecenia mkdir i rmdir. Nastepnie wykonaj operacje:
    1. przejdz do katalogu "eee" (od teraz zakladamy ze "eee" jest biezacym katalogiem)
    2. skopiuj "plik.txt" do katalogu "www" poslugujac sie sciezkami wzglednymi (!)
    3. przemiesc podkatalog "qqq2" do katalogu "www" (aby stal sie on jego podkatalogiem)
    4. zmien nazwe katalogu "www" na "www_1"
    5. przemiesc cala zawartosc katalogu "www_1" do katalogu "eee" poslugujac sie znakami globalnymi (?*); jesli nie jestes pewien jak dzialaja znaki globalne to najpierw uruchamiaj polecenia tak: "echo mv  kat1/* kat2" a dopiero potem bez slowa echo ... [zalecam takie postepowanie]
    6. w katalogu "eee" znajduje sie "plik.txt"; wykonaj jego kopie ktora ma sie znalezc w tym samym katalogu w ktorym jest "plik.txt" i ma miec nazwe "qqq2"

    Do sprawozdania powyższego zadania dodaj wydruki wykonywanych poleceń oraz obraz stworzonej struktury katalogów przed i po wykonaniu operacji 1-6.

    Uwagi i wskazówki do powyższego zadania:

    Zadanie 8


    (Znaczenie "." w zmiennej PATH).
    Do eksperymentu potrzebujemy programu (binarnego, czyli w formacie "wykonywalnym") w bieżącym katalogu; w tym celu skopiuj do bieżącego katalogu program /bin/ls (wyprobuj tez "whereis ls" podające ścieżkę do programu "ls").
    Następnie uruchom potomnego bash-a i zmodyfikuj w nim zmienną PATH:
    PATH=/usr/bin
      # dzięki temu gdy uruchamiamy "ls" to na pewno
      # NIE uruchomi się program ls z katalogu /bin

    Spróbuj uruchomić program "ls" z biezacego katalogu na dwa sposoby:

    ls
    ./ls
    Następnie dodaj "." na koniec zmiennej PATH poleceniem:
    PATH=/usr/bin:.
    i znów spróbuj uruchomić "ls" na dwa sposoby, tak jak poprzednio.
    Do sprawozdania wstaw wydruki eksperymentów i uzasadnienie wyników.
     
     

    Prawa do plików.

    Polecenie "chmod" = "Change Mode" służy do zmieniania praw do plików. Przy pomocy tego polecenia możemy zadecydować jakie prawa do danego pliku mają różne osoby: jego właściciel, grupa właścicieli  i pozostałe osoby.
    Pytanie: jak przypomniec sobie "kim jestesmy" i jaka jest nasza "aktywna grupa uzytkownikow" ?
    Odp: polecenie "id" wyświetla nazwe uzytkownika i nazwę jego aktywnej grupy (oraz inne grupy do których użytkownik należy)
     
    Uwaga: aby ktoś mógł robić cokolwiek z pewnym plikiem musi mieć przynajmniej prawo "x" do wszystkich katalogów ze ścieżki prowadzącej do tego pliku !. 
     
    Polecenie chmod ma dwie postaci:
           chmod "komu"[+-=]"prawa" plik
           chmod XXX plik
              gdzie "komu" to :
                 u - właściciel pliku
                 g - grupa właścicieli pliku
                 o - pozostali
                 a - wszyscy (czyli ugo)
              oraz gdzie "prawa" to :
                 r, w, x
              +-= : nadawanie, odbieranie, dokładnie takie
              XXX : cyfry ósemkowe
    
              Przykłady:
                  chmod u+x skrypt 
                    # właścicielowi pliku "skrypt" dodaliśmy prawo "x" do tego pliku
    
                  chmod u+x,g-wx qqq.txt 
                    # właścicielowi pliku "qqq.txt" dodaliśmy prawo "x" do tego pliku
                    # grupie właścicieli pliku "qqq.txt" zabraliśmy prawo "w" i "x" do tego pliku
    
                  chmod a-x qqq.txt 
                    # wszystkim odebralismy prawo "x"
    
                  chmod u=rw plik1.txt
                    # właściciel bedzie miał dokładnie prawa "rw"
    
                  chmod 644 plik2.txt
              w ostatniej linii używa się 3 cyfr ósemkowych
              ma to następujące znaczenie:
                         uuugggooo
                         rwxrwxrwx
                         421421421
                         110100100
                         rw-r--r--
                          6  4  4
              tak więc polecenie: 
                    chmod 644 plik2.txt
              jest równoważne poleceniu: 
                    chmod u=rw,g=r,o=r plik2.txt
    Zadanie 9 (!)

    (Zastosowanie praw do plików i katalogów)
    CEL: chcemy dać drugiemu użytkownikowi tej samej maszyny prawo zapisu do naszego pliku o nazwie "eee/plik.txt"

    Uwaga: To zadanie wymaga 2 użytkowników na jednym linux-ie - lokalnym lub zdalnym.
    Przypuśćmy że "my" jesteśmy użytkownikiem student i chcemy dać prawo zapisu do pliku użytkownikowi mhanckow. Jeśli mhanckow należy do grupy użytkowników X oraz jeśli grupa właścicieli naszych plików i katalogów = X, to możemy użyć praw dla grupy właścicieli (w przeciwnym wypadku użyjemy praw dla pozostałych). Pamiętajmy o tym ze aby inny użytkownik tej samej maszyny mógł się dostać do pliku "/home/student/eee/plik.txt", musi miec prawo "x" do wszystkich katalogów w ścieżce do tego pliku! Aby sprawdzić czy prawidlowo nadalismy prawa do plikow i katalogow użyj skryptu prawa, napisanego w powłoce ksh/bash, pokazującego prawa do wszystkich katalogów w ścieżce podanej jako argument. Skrypt można uruchomić poleceniem:

    prawa eee
      # jesli jestesmy w katalogu macierzystym katalogu "eee";
      # jednak najpierw należy nadać skryptowi prawo wykonywania "x" poleceniem:
      #   chmod u+x prawa
    
    Poprawność rozwiązania testujemy następująco (wersja z lokalnym linux-em):
    1. użytkownik student pracuje w XWindows
    2. użytkownik jkowalski loguje się do linuxa w trybie tekstowym (do "wirtualnej" konsoli tekstowej wchodzimy przy pomocy Ctrl+Alt+F2, a następnie się logujemy)
    3. student wchodzi do katalogu eee
    4. student odczytuje długość i wyświetla zawartość pliku plik.txt (ls -l plik.txt; cat plik.txt)
    5. mhanckow wchodzi do katalogu /home/student/eee
    6. mhanckow dopisuje cos na koniec plik.txt poleceniem: echo 'ABCD' >> plik.txt
    7. powtarzamy kilkakrotnie punkty 4 i 6

    Poprawność rozwiązania testujemy następująco (wersja ze zdalnym linux-em - czyli maszyną atos):

    1. użytkownik student telnetuje się do atos-a (ssh atos)
    2. użytkownik mhanckow telnetuje się do atos-a
    3. robią to samo co w poprzednim przypadku od punktu 3
    Wydruki "z punktu widzenia" obu użytkowników włączyć do sprawozdania!

    Uwaga: Jak sprawdzic ilu uzytkownikow ma zalozone konta na naszej maszynie ?
    Wystarczy obejrzec plik "/etc/passwd" ktory zawiera wpisy dla kazdego uzytkownika;

    cat /etc/passwd
    #lub
    less < /etc/passwd
    Zadanie 10

    Przypuśćmy że jestem właścicielem i równocześnie należę do grupy właścicieli pewnego pliku.
    Co się dzieje gdy prawa właściciela są mniejsze niż prawa grupy ?
    Czy w takim wypadku mam mniejsze prawa do pliku niż ma grupa ?
    Przypomnij sobie opis praw (zwłaszcza sposób obliczania praw) i sprawdź to eksperymentalnie ...
    W tym celu utworz plik "plik.txt", nadaj mu takie prawa:
    ----rw-rw- ? mhanckow users ? ? ?
     uuugggooo
    (właściciel nie ma żadnych praw; grupa ma prawa "rw"; pozostali "rw")
    a nastepnie sprobuj pisac do pliku poleceniem:
    echo "123" >> plik.txt
    Wnioski wpisz do sprawozdania.
    Uwaga 1: na Linuxie zazwyczaj każdy użytkownik ma własną jednoosobową grupe o tej samej nazwie jak nazwa użytkownika (w powyższym przykładzie "student").
    Uwaga 2: jak sprawdzić kim jesteśmy i jaka jest nasza aktywna grupa użytkowników ? patrz tutaj.
     

    Zadanie 11 (!)


    Mamy sciezke do pliku /aaa/bbb/ccc/plik.txt.
    Jakie muszę mieć prawa do występujących w niej katalogów i pliku "plik.txt" abym mógł :
             1> zapisac plik.txt
             2> odczytac plik.txt
             3> usunac plik.txt
             4> uruchomic skrypt poleceniem plik.txt
             5> obejrzec zawartosc /aaa/bbb/ccc
    Chodzi tu o prawa minimalne, ale wystarczające!  Zaprojektuj odpowiedni eksperyment w którym sprawdzisz swoje odpowiedzi. Najwięcej wątpliwości budzą punkty 3 (czy wystarczy prawo "w" do ccc) i 4 (czy wystarczy prawo "x" do uruchomienia skryptu; skrypt to plik tekstowy zawierający dowolne komendy). Do sprawozdania wstaw odpowiedzi na pytania w formie tabelki oraz wydruki eksperymentów ...

    .............................................................
     

    Polecenie "umask" ogranicza prawa nadawane standardowo nowo tworzonym plikom.

       umask XXX
          opis tego polecenia znajduje się w manualu w opisie powłoki "ksh";
          zobacz także "man 1 umask" i "man 2 umask"
    
          XXX to 3 cyfry ósemkowe interpretowane jak dla "chmod";
          jeżeli w XXX kazdą cyfrę zapiszemy dwójkowo wtedy
          "1" na danej pozycji oznacza ze przy tworzeniu nowego pliku 
          prawo odpowiadające tej pozycji zostanie ODEBRANE
          Przykład:
            umask 077
            # jeśli teraz ktoś tworzy nowy plik z prawami 664
            # to plik otrzyma prawa 600
                 uuugggooo       uuugggooo       uuugggooo
                 rwxrwxrwx       rwxrwxrwx       rwxrwxrwx
                 421421421       421421421       421421421
            077= 000111111  644= 110110100  600= 110000000
    Zadanie 12 
    (To jest eksperyment z poleceniem "umask".)
    Wykonaj "umask 000" i utwórz plik "plik1.txt" (poleceniem echo "ABC" > plik1.txt).
    Następnie wykonaj "umask 077" i utwórz plik "plik2.txt".
    Zobacz jakie prawa mają oba pliki. Wszystko to umieść w sprawozdaniu.
     

    Dowiązania do plików.

    Ten sam plik moze w Unixie wystepowac w kilku miejscach struktury katalogow.
    Do tworzenia "kopii" pliku pod inna nazwa lub w innym katalogu (ale nie jest to prawdziwa kopia bo tak naprawde plik jest jeden) czyli do tworzenia dowiazan sluzy polecenie "ln" ...
       ln [-s] stary_plik nowy_plik
           polecenie "ln" pozwala tworzyć dowiązania do plików i katalogów
           (oznacza to, ze ten sam plik będzie dostępny w różnych katalogach 
           lub pod różnymi nazwami w tym samym katalogu)
    
       ln stary_plik nowy_plik 
         # tworzy dowiązanie twarde;
         # zwiększa liczbę dowiązań pokazywana przez "ls -l" 
         # dla "stary_plik" i "nowy_plik";
         # (oczywiscie jako stary_plik i nowy_plik można podać scieżkę)
         # ograniczenia:
         #   -> NIE może dotyczyć katalogów
         #   -> NIE może przeskakiwać między różnymi systemami plików
         #      zamontowanymi w podkatalogach "drzewa katalogów" patrz tutaj
    
       ln -s stary_plik nowy_plik 
         # tworzy dowiązanie symboliczne;
         # dowiązanie symboliczne jest implementowane w systemie jako plik 
         # zawierający ścieżkę do pliku docelowego;
         # "ls -l" pokaże symbol "l";
         # -> może dotyczyć katalogów
         # -> może "przeskakiwać" miedzy różnymi systemami plików
    
       ls -il plik.txt
         # wyswietla tzw "nr i-wezla" pliku (oprocz pozostalych informacji "-l");
         # kazdy plik w danym systemie plikow ma inny nr i-wezla
    UWAGA: 
         Jak widac moze istniec kilka roznych sciezek do tego samego pliku ... 
         Plik (lub katalog) jest identyfikowany jednoznacznie przez numer i-wezla
         Katalog to tablica której wiersz (czyli pozycja katalogu) zawiera : 
              * nr i-wezla (identyfikujący plik) 
              * nazwę pliku 
         I-wezel to struktura danych opisujaca plik, m.in. polozenie blokow dyskowych z zawartoscia pliku.


    Zadanie 13


    Utworz (przy pomocy m.in. dowiazan) nastepujaca strukture katalogow:

    oraz pokaz jak sie dostac do "plik.txt" przechodzac przez katalog "eee" (podaj sciezke bezwzględną).
    Wskazowka: zwroc uwage na ograniczenia dowiazan twardych !.
    Do sprawozdania wstaw tez wykonane polecenia zakladajac ze biezacym katalogiem jest /home/student.

    Zadanie 13a


    Zmodyfikuj plik "qqq/plik.txt" z poprzedniego zadania poleceniem:
    echo "qwe" >> qqq/plik.txt
        # zakladam ze biezacym katalogiem jest /home/student
    nastepnie zobacz zawartosc pliku "www/plik.txt" poleceniem:
    cat www/plik.txt
    Powtorz te operacje 2 razy. Zobacz też nr i-wezlow tych dwoch plikow (ls -il plik).
    Nastepnie modyfikuj plik "eee/qqq/plik.txt" i obserwuj zawartosc "www/plik.txt" (podobnie jak poprzednio).

    Zadanie 13b


    SPRAWDŹ co się dzieje podczas usuwania pliku, który ma kilka "dowiązań twardych" (zaobserwuj zmniejszająca się liczbę dowiązań), innymi slowy:
    1. utworz plik "plik.txt"
    2. utworz kilka dowiazan twardych do "plik.txt" np

    3.     ln plik.txt plik1.txt
          ln plik.txt plik2.txt
          ln plik.txt plik3.txt
    4. nastepnie obserwuj liczbe dowiazan twardych "plik.txt" (ls -l plik.txt)

    5. rownoczenie usuwajac pliki plik1.txt, plik2.txt, plik3.txt
       
    Zadanie 13c
    SPRAWDŹ co się dzieje podczas zmiany praw pliku, który ma kilka "dowiązań twardych" tj zmien prawa danego pliku (polecenie "chmod") i odczytaj prawa jego dowiazania twardego (polecenie "ls -l"). Na podstawie tej obserwacji wyciągnij wniosek gdzie są przechowywane prawa do pliku: w pozycji katalogu czy w i-węźle ?.

    Zadanie 13d


    Odpowiedz na pytanie czy: Wykonaj odpowiedni eksperyment; chodzi to o to czy plik1 i plik2 będą mialy ten sam czy inny nr i-węzła (nr i-węzła pliku odczytuje się przy pomocy "ls -i plik").

    Zadanie 14


    Utwórz plik "plik.txt", a następnie utwórz do niego dowiązanie twarde "twarde.txt" i dowiązanie miękkie (=symboliczne) "miekkie.txt".
    JAK polecenie "ls -l" informuje nas czego dotyczy dowiązanie symboliczne ? (wstaw do sprawozdania).
    JAK sprawdzić czy dany plik jest dowiązaniem twardym do innego pliku ? (wskazówka: liczba dowiazan).
    JAK dowiedzieć sie do którego ? (wskazówka: opcja "-i" polecenia "ls").
    Odpowiedzi na te pytania wstaw do sprawozdania.
     

    ......................................................................................................
     
     

    Różne polecenia.

    (Prosze "luzno" przejrzec te przyklady ... konkretne zadanie znajduje sie za nimi)
        echo "QQQ WWW eee"
            #pisanie na terminal
        echo "QQQ WWW eee" > plik.txt
            #pisanie do pliku dzięki "przekierowaniu" 
        cat > plik.txt
            #pisanie z terminala do pliku; konczy sie po nacisnieciu Ctrl+D
        cat plik1.txt plik2.txt plik3.txt > plik_wynik.txt
            #polaczenie zawartosci plikow plik1.txt plik2.txt plik3.txt i zapisanie w plik_wynik.txt
        cat <plik1.txt >plik2.txt
            #skopiowanie zawartosci plik1.txt do plik2.txt
    
        ls | grep "txt"
            #"grep" filtruje linie wyprowadzanie przez "ls";
            #przepuszcza tylko linie zawierające słowo 'txt'
            #znak "|" ma podobne znaczenie jak pod DOS-em (tworzy tzw potok)
            #UWAGA: polecenie "grep" dopuszcza używanie tzw wyrażeń regularnych, np
        ls | grep '^abc*\.txt$'
            #powyzszy przykład wyświetla tylko pliki o nazwach 
            # ab.txt, abc.txt, abcc.txt, abccc.txt, ...
            # napis c* oznacza że litera c może się powtórzyć dowolną ilość razy
            # ^oznacza poczatek słowa, $oznacza koniec słowa
        ls | grep '^a(bc)*$'
            #powyzszy przykład wyświetla tylko pliki o nazwach
            #  a, abc, abcbc, abcbcbc, ...
    
        ftp main.amu.edu.pl
            #"ftp" jest klientem usługi FTP
            #pozwala kopiować pliki między naszą i zdalną maszyna ...
            #można wydawać polecenia: 
            #  help, cd, ls, get, put, mget, mput, binary, asci
        tar cvf <archiwum> <katalog>
            #tar służy do zapisywania struktury katalogów w jednym pliku
            #(nie jest wykonywana żadna kompresja!)
        #konkretny przyklad:
        tar cvf archiwum.tar ../qqq
            #zapis całej struktury katalogów wychodzącej z ../qqq w jednym pliku archiwum.tar
    
        tar xvf <archiwum>
        #konkretny przyklad:
        tar xvf archiwum.tar
            #odtwarza strukturę katalogów z "archiwum.tar" w bieżacym katalogu
    
        compress/uncompress
        #konkretny przyklad:
        compres archiwum.tar
        uncompres archiwum.tar.Z
            #kompresowanie/dekompresowanie
            #dodaje przyrostek ".Z" do nazwy pliku
    
        gzip/gzip -d
        #konkretny przyklad:
        gzip archiwum.tar
        gzip -d archiwum.tar.gz
            #kompresowanie/dekompresowanie
            #dodaje przyrostek ".gz" do nazwy pliku
    
        du -k 
            #wyświetla ilość wykorzystanego przez nas miejsca na dysku 
            #(opcja "-k" oznacza "w kilobajtach")
        df
            #informuje ile jest wolnego miejsca we wszystkich zamontowanych
            #systemach plików
    
        split -b 1440k plik.txt.gz
            #dzieli plik na "kawałki" o podanym rozmiarze
            #kawałki otrzymują nazwy xaa, xab, xac, ...
        
        wget http://main.amu.edu.pl/~mhanckow -r -l 2
            #sciaganie stron WWW na lokalna maszyne; 
            #  -r   oznacza rekurencyjne wchodzienie do "linkow" na stronach WWW
            #  -l n oznacza ze program bedzie sie zaglebial na "n" pozomow
    Zadanie 15
    WYPRÓBUJ polecenie "tar cvf" oraz "gzip" na pewnej strukturze katalogów (jeśli jej nie masz ta ją skonstruuj i skopiuj do jej katalogów niektóre programy z /bin takie jak np /bin/ls, tak aby struktura katalogów miała sporą objętość). Powiedzmy, że otrzymasz plik archiwum.tar.gz o długości 2MB.
    NASTĘPNIE spróbuj przygotować ten plik do kopiowania na dyskietki (tj podziel go na kawałki o odpowiedniej długości, mieszczące się na dyskietce, przy pomocy polecenia "split").  Jeśli nie pamiętasz ile miejsca jest na pustej dyskietce, to zamontuj taką dyskietkę i użyj polecenia "df" (patrz montowanie dyskietki).
    Do sprawozania wstaw wykonywane polecenia.

    Zadanie 15a


    Spróbuj odtworzyć strukturę katalogów z "kawałków" utworzonych w zadaniu 15 (odtwórz ja w innym podkatalogu aby nie kolidowała ze źródłową struktura katalogów). Do sprawozdania wstaw wykonywane polecenia + wydruki dowodzące że odtworzona struktura katalogów jest taka sama jak źródłowa struktura katalogów.

    Zadanie 15b


    Sprobuj utworzyc lokalna kopie zajeciowach stron WWW (tych z ktorymi teraz pracujemy) przy pomocy polecenia "wget". Wyprobuj opcje "-l 1" i "-l 2". Następnie spróbuj otworzyć zapisane lokalnie strony WWW przy pomocy przyglądarki (np Netscape-a).
     
     

    Pliki specjalne.

    Pliki specjalne znajdują się (zwyczajowo) w katalogu /dev.  Pozwalają one na "surowy" dostęp do urządzeń, np dysków czy terminali.
  • w przypadku dysków oznacza to, że system plików jest widziany NIE jako drzewo katalogów z plikami, lecz jako ciąg bajtów, w których znajdują się informacje opisujące drzewo katalogów z plikami
  • w przypadku terminali, jeśli zapiszemy coś do pliku specjalnego terminala to ten napis pokaże się na terminalu; podobnie w przypadku czytania z pliku specjalnego.
  • plik specjalny /dev/null to urządzenie "puste" (można do niego pisać i nie daje to żadnego efektu); przy czytaniu zachowuje się jak plik "który się skończył".
  • Pliki specjalne są oznaczane literkami "b" i "c" w poleceniu "ls -l" :

  • "b" oznacza plik specjalny blokowego urządzenia we/wy (np dysku; /dev/hda1)
  • "c" oznacza plik specjalny znakowego urządzenia we/wy (np terminala; /dev/tty01)
    Zamiast rozmiaru pliku pokazywane są dwie liczby główny nr urządzenia (identyfikuje program obsługi urządzenia = driver) i poboczny nr urządzenia (jest nr jednostki urządzenia danego typu) .

    Zadanie 16


    (Eksperyment z plikiem specjalnym terminala)
    Spróbuj pisać i czytać z pliku specjalnego terminala tekstowego poprzez który pracujesz z powłoką. Wykonaj to zadanie na dwa sposoby:
    1. używając "prawdziwego" pliku specjalnego terminala, uzyskanego poleceniem "tty"
    2. używając pliku "/dev/tty" który udostępnia terminal sterujący bieżącego procesu

    Pisać do pliku najprościej poleceniem:
        echo ''ABC" > plik.txt
    czytać z pliku można tak:
        cat <plik.txt

     

    Grupy użytkowników.

    Polecenia związane z grupami użytkowników:

    Jeśli nasza aktywna grupa użytkowników = grupa właścicieli pliku X to mamy prawa do pliku X jakie przypisano grupie właścicieli pliku X (oczywiście pod warunkiem że nie jesteśmy właścicielem pliku X bo wtedy mamy prawa przypisane właścicielowi).

    Nowo tworzone przez nas pliki mają grupę właścicieli taką jak nasza aktywna grupa.

    Uwaga 1: powyzsze reguly dotycza systemow uniksopodobnych wzorowanych na "Unix System V" !
    Uwaga 2: eksperymenty z grupami uzytkownikow wymagaja wspolpracy z root-em, czyli administratorem systemu unixowego !
     
     
     

    Programy w języku C/C++, kompilacja, debugger.

    Programy w języku C kompilujemy i uruchamiamy następująco:
          # kompilacja
          gcc pr01.c -o pr01
          # uruchamianie
          pr01
          pr01 1 2 "3 4" 5
    Gdybyś chciał używać w programie operacji zmiennopozycyjnych dołącz bibliotekę "libm" :
          gcc pr01a.c -o pr01a -lm
    Aby wykonać program krokowo pod debuggerem "gdb" należy skompilować program z opcja "-g" :
          gcc -g pr01.c -o pr01
          gdb pr01
    Polecenia debuggera (jest polecenie help - ale mało czytelne) :
          "b" - ("b" jak break) ustawienie pułapki na konkretnej
                linii kodu lub na funkcji
          "r" - uruchomienie programu
          "c" - kontynuacja działania aż do następnej pułapki
          "n","s" - wykonywanie krokowe
          "l" - listowanie kodu
          "help b" - info o poleceniu "b"
    UWAGA: zanim wykonasz "r" najpierw ustaw pułapkę !!! (np wydaj polecenie: "b main")

    Zadanie 17 


    Skompiluj i uruchom program w pliku pr01.c (program ten wypisuje swoje parametry oraz zmienne środowiska). Uruchom program nastepujaco:
    pr01 1 2 3 "4 5"
    Sprobuj także wykonać ten program krokowo; w tym celu skompiluj go jeszcze raz z opcja "-g "; następnie uruchom debugger (gdb pr01); nastepnie ustaw pułapkę na funkcji main (b main); następnie uruchom program (r); kolejne kroki wykonuje sie przy pomocy (n - jak "next") lub (s - jak "skip"). Do sprawozdania wstaw (częściowy) wydruk eksperymentu !
     
     

    XWindows; uruchamianie programów z odleglej maszyny.

    Pokazemy teraz w jaki sposob mozna uzywac programow pracujacych na odleglej maszynie ...
    Zakladamy ze chodzi o programy komunikujace sie z uzytkownikiem przy pomocy systemu okien zwanego "XWindows".
    Środowisko KDE (= K Desktop Environment) znane z linuxa jest zbudowane "na" XWindows.

    Bedziemy uruchamiac te programy na odleglej maszynie, ale w taki sposob aby wyswietlaly okna na lokalnej maszynie dzieki czemu mozna z nimi pracowac siedzac przy lokalnej maszynie !.

    System XWindows składa się z następujących elementów:

    1. X-serwer: pracuje na lokalnej maszynie; wyświetla okna na ekranie komputera przed którym siedzi użytkownik;
    2. klienci X-serwera: są to programy używające "X Windows" do komunikacji z użytkownikiem; mogą pracować na lokalnej lub odległej maszynie; użytkownik może równocześnie używać wielu takich klientów pracujących na różnych maszynach; programy okienkowe ktorych caly czas uzywamy, np xterm, to wlasnie klienci X-serwera;
    3. "Window Manager": jest to jeden z klientów; jest odpowiedzialny za wyświetlanie niektórych elementów okien, np suwaków do przesuwania zawartości okien; wygląd okien, sposób ich przesuwania itp zależy od Window Manager-a (środowisko KDE to właśnie "window manager" + x-klienci, których nazwy zaczynają się zazwyczaj od litery "k", np kedit).

     

    Zadanie 18 
    (UWAGA: z niewiadomych powodów to zadanie się obecnie nie udaje; zamiast modyfikowania zmienne DISPLAY można użyć programu ssh z opcją -X i wszystkie programy XWindowsowe uruchamiane na zdalnej maszynie będą otwierały okna na lokalnej maszynie !)
    Połącz się ze zdalną maszyną atos.amu.edu.pl, a następnie wykonaj na niej następujące polecenia :
         export DISPLAY=komputer.labs.wmid.amu.edu.pl:0.0
           # zamiast "komputer" wpisz nazwe własnej maszyny (lokalnej)
           # zmienna jest "eksportowana", czyli trafi
           # do środowiska wszystkich programów uruchomionych z tej powłoki
           # gdyż jest "prawdziwą" zmienną środowiska
    
    	       # skąd wziąć adres lokalnej maszyny ???
    	       # wypróbuj na lokalnej maszynie polecenie:
    	       #   /sbin/ifconfig
    	       # w polu "inet addr" jest adres IP lokalnej maszyny w postaci cyfrowej;
    	       # zobacz takze polecenia:
    	       #   hostname
    	       #   hostname --domain
    	       #   dnsdomainname
    
         xterm &
           # to polecenie uruchamia xterm drugoplanowo (dzięki &)
           # program xterm wyświetli okno na X-serwerze pracującym
           # na maszynie o adresie podanym w zmiennej DISPLAY
           # spróbuj uruchomić inne programy, np: 
         xclock &
         xedit &
    
    	       # jeśli X-serwer odrzuci połączenie - wtedy użyj
    	       # (na lokalnej maszynie !) polecenia "xhost",
    	       # które zezwala na dostęp do X-serwera innym maszynom:
    	       #   xhost +atos.amu.edu.pl
    
    	       # jeśli nie można uruchomić programu "xterm" dodaj
    	       # do zmiennej PATH katalog /usr/bin/X11
    	       #   PATH=$PATH:/usr/bin/X11
    Aby sprawdzić który xterm (konsola) wykonuje sie na jakiej maszynie wykonaj w nich polecenie "uname -a" !.
    Do sprawozdania wstaw polecenie jakie wydawales, zaznaczajac na ktorej maszynie sie to odbywalo.

    UWAGA: zauważ, ze program "xterm" i wszystkie procesy z niego uruchamiane pracują na maszynie odleglej, jednak tworzone przez nie okna wyświetlane są na maszynie lokalnej, której adres podano w zmiennej DISPLAY !.
     

    VNC - Virtual Network Computing

    Vnc to tzw "zdalny desktop" ...
    protokól miedzy klientem i serverem vnc nazywa sie RFB = Remote Frame Buffer
    serwer Xvnc - jest rownoczesnie "serwerem vnc" jak i x-serwerem (ale bez "fizycznego ekranu")
    programy użytkowników są x-klientami i pokazują okna na Xvnc
    klient czyli "viewer vnc" - podłącza się do serwera vnc ...
    jaka jest różnica między viewerem vnc a x-serverem (pełnią przecież podobną rolę - pokazują okna) ???
    odp: viewer vnc jest dużo prostszy, przesyłanie bitmap jest lepiej zoptymalizowane, istnieją viewery vnc
    na wszystkie możliwe systemy operacyjne ...
    idea ultra lekkiego klienta ...

    Zadanie 18a


    Spróbuj włączyć Xvnc, w nim xterm oraz wybrany window manager, a następnie spróbuj
    podłączyć pod Xvnc przeglądarke vnc, np VncViewer lub VncViewer.jar
    (ten ostatni trzeba uruchamiać tak: java -jar VncViewer.jar HOST ??? PORT ???
    gdzie PORT to 5900+displaynumber)
    Do sprawozdania wstaw wydruk ps pokazujący wszystkie uruchomione procesy (niech zawiera ppid!)
    # przyklad jak to można zrobić...
    Xvnc :1 -geometry 700x500&
    twm -display :1 &
    xterm -display :1 &

    Następnie stwórz stronę www, w której jest applet VncViewer.jar
    spróbuj otworzyć tę stronę przeglądarką obsługującą javę ...

    <APPLET CODE=VncViewer.class ARCHIVE=VncViewer.jar WIDTH=700 HEIGHT=500>
    <PARAM NAME="HOST" VALUE="localhost">
    <PARAM NAME="PORT" VALUE="5901">
    <PARAM NAME="Show controls" VALUE="No">
    </APPLET>

    Spróbuj uruchomić jakąś aplikacje bez window managera, tak aby zajmowała cały desktop
    (używając opcji -geometry) może to być "wish triangles.tcl -geometry 700x500 &"

     

    Polecenia dotyczące dyskietki DOS-owej.

    Istnieje zestaw poleceń dotyczących dyskietki (mtools); polecenia te przypominaja polecenia DOS-owe, z ta roznica ze maja w nazwie przedrostek "m" ...
           mcopy, mcd, mdir, ...
    
           # Np: 
               mdir a:
               mcopy -t *.cc a:/katalog
                  # kopiowanie plikow *.cc w trybie tekstowym na dyskietke
                  # (tryb tekstowy = ulegnie zmianie sposob kodowania koncow linii)
               mcopy lekcja.txt a:/
                  # kopiowanie w trybie binarnym czyli bez zadnych modyfikacji
    
           # Zobacz też:
               man mtools
    Dyskietka zawiera zazwyczaj DOS-owy system plików (zwany FAT).
    Można ten system plików "zamontować", np w katalogu /mnt/floppy, przy pomocy polecenia mount:
    mount <plik_specjalny> <punkt_montowania_w_strukturze_katalogow>
    # Przyklady:
           mount /dev/fd0 /mnt/floppy 
               # montowanie dyskietki (dyskietka musi być w stacji przed wydaniem polecenia !);
               # plik specjalny /dev/fd0 dotyczy stacji dyskietek;
               # powyższe polecenie może wydać jedynie "root" 
               # (czyli administrator maszyny z Unix-em)
    
               # zwykli użytkownicy mają zazwyczaj zezwolenie na wydawanie poleceń:
           mount /mnt/floppy 
               # lub
           mount /dev/fd0
               # o ile w pliku /etc/fstab znajduje sie odpowiedni wpis, np:
               #    /dev/fd0 /mnt/floppy auto sync,user,noauto,nosuid,nodev,unhide 0 0
               # slowo "user" w powyzszej linii oznacza ze kazdy uzytkownik (nie tylko root)
               # moze montowac ten system plikow !;
               # poza tym plik fstab zawiera systemy plikow ktore sa montowane
               # podczas wlaczania systemu ...
    
           umount /mnt/floppy  
               # odmontowywanie;
               # to sie nie uda jesli /mnt/floppy lub jego podkatalog 
               # jest katalogiem biezacym jakiegos procesu (np sami w nim "jestesmy") !
    
           df = Disk Free
               # "df" pokazuje wszystkie zamontowane systemy plików
               # oraz stopień ich wykorzystania
    UWAGA:  Zawsze zanim wyciągniesz dyskietkę ze stacji najpierw ja "odmontuj" !!! 
    (ma to związek z używaniem buforów w pamięci operacyjnej podczas dostępu do dyskietki ...). 
    Jesli wyciagniesz dyskietke bez odmontowywania to zapisane wczesniej dane "znikna" !!!
     

    Zadanie 19

    SPRAWDŹ czy Ty (nie root) mozesz "montowac" dyskietke (zawartosc pliku /etc/fstab); jest tak to ...
    SPRAWDŹ, w jakim stopniu można używać "praw" Unix-a w stosunku do zamontowanej dyskietki.
    W tym celu:
    1. zamontuj dyskietke
    2. utworz na dyskietce plik "/mnt/floppy/plik.txt"
    3. nadaj mu prawo "u=rw,g=,o=" potem  zobacz jakie ma prawa poleceniem"ls -l"
    4. nadaj mu prawo "u=,g=rw,o=rw" potem  zobacz jakie ma prawa poleceniem"ls -l"
    Wnioski z eksperymentu wpisz do sprawozdania.
     

    *** Supermount ***
    W niektórych nowszych wersjach linuxa wystepuje mechanizm zwany "supermount", ktory zwalnia nas od "recznego" montowania dyskietki poleceniem mount;

    Zadanie 19a

    (Wersja zadania z supermount - można opuścić jeśli mechanizm ten jest niedostępny).
    SPRAWDŹ, w jakim stopniu można używać "praw" Unix-a w stosunku do zamontowanej dyskietki.
    W tym celu:
    1. wloz dyskietke do stacji, wykonaj "ls /mnt/floppy", odczekaj chwile ...; supermount automatycznie zamontuje dyskietke
    2. utworz na dyskietce plik "/mnt/floppy/plik.txt"
    3. nadaj mu prawo "u=rw,g=,o=" potem  zobacz jakie ma prawa poleceniem"ls -l"
    4. nadaj mu prawo "u=,g=rw,o=rw" potem  zobacz jakie ma prawa poleceniem"ls -l"
    Wnioski z eksperymentu wpisz do sprawozdania.
     

    .............................................................................................
      

    Zadanie A1


    Skonfiguruj program "kmail" czyli klienta pocztowego.
    Należy wpisać nastepujace informacje: Następnie proszę wypróbować czy wszystko działa wysyłając maila na adres
    "mhanckow@main.amu.edu.pl", czyli do prowadzącego zajęcia.
    Jako "subject" proszę podać "SOP121; <oznaczenie literowe tematu>; <imię i nazwisko>; test kmail"
    lub "ZSZ SO; <oznaczenie literowe tematu>; <imię i nazwisko>; test kmail"
     
     

    Zadanie A2


    (Uzywanie dyskietki z "supermount" - można opuścić jeśli mechanizm ten jest niedostępny)

    Utworz plik o nazwie "supermount_test.txt" poleceniem:
        echo "123qwe123" > supermount_test.txt
    (Zakladam caly czas ze katalogiem biezacym jest /home/student.)

    Skopiuj "supermount_test.txt" na dyskietke:
        1. wloz dyskietke; wykonaj "ls /mnt/floppy", odczekaj chwile ...
        2. wykonaj:
                cp supermount_test.txt /mnt/floppy
                ls /mnt/floppy
        3. odczekaj az swiatelko na stacji dyskietek przestanie sie palic i wyciagnij dyskietke

    Skopiuj "supermount_test.txt" z dyskietki do katalogu "z_dyskietki":
        1. utworz katalog z_dyskietki poleceniem "mkdir z_dyskietki"
        2. wloz dyskietke; wykonaj "ls /mnt/floppy", odczekaj chwile ...
        3. wykonaj:
                cp /mnt/floppy/supermount_test.txt z_dyskietki
        4. porownaj zawartosc obu plikow poleceniem
                cmp supermount_test.txt z_dyskietki/supermount_test.txt
            (cmp [= compare] to polecenie do porownywania zawartosci plikow)