Zadanie 1
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
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 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
man, apropos, whatisUzyj przykladow z powyzszego opisu.
System plikow w Unixie
Systemem plikow to "pliki i katalogi" rezydujace na dysku (w partycji
dysku).
Następujące dwa pojęcia są analogiczne:
mount /dev/hda2 /homeNizej 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
ls -l qqq/www.txtPozycje "." i ".." w katalogu
# odwolanie wzgledem biezacego katalogu
ls -l /home/mhanckow/qqq/www.txt
# sciezka bezwzgledna
Uruchamianie programów, proces macierzysty i potomny# 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
polecenie parametr_1 parametr_2 ... parametr_nKonkretne 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.
PATH=$PATH:/usr/bin/X11 # dopisaliśmy katalog /usr/bin/X11 PATH=$PATH:. # dopisaliśmy katalog "." (oznacza katalog bieżący) # "." na liście katalogów zmiennej PATH jest konieczna # aby latwo uruchamiać programy z bieżącego katalogu !!! echo $PATH # wyświetlanie zawartości zmiennej PATHJeś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.
export <nazwa_zmiennej>=<warosc_zmiennej>Przyklad zmiennej srodowiska: zmienna PATH opisana wyzej.
# konkretny przyklad:
export x=100
export zmienna="Tra la la !!!"
x=123to otrzymamy tzw zmienną powłoki; zmienne powłoki są "prywatna sprawa" powłoki i NIE sa dziedziczone przez procesy potomne.
Zadanie 3
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:
Nasze prawa do pliku oblicza się następująco:"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)
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.txtotrzymamy na terminalu napis:
-rwxr-xr-x 5 aaa bbb 1000 May 20 7:35 plik1.txtktó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 plikuCwiczenie 4
ls qqqZadanie 5
ls -l qqq
ls -ld qqq
ls -la qqq
ls -l qqq/plik.txt(plik ten utworzylismy w Cwiczeniu 4).
Zadanie 6
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.txtZadanie 7 (!)
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
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:
lsNastępnie dodaj "." na koniec zmiennej PATH poleceniem:
./ls
i znów spróbuj uruchomić "ls" na dwa sposoby, tak jak poprzednio.PATH=/usr/bin:.
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 !. |
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.txtZadanie 9 (!)
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:
Poprawność rozwiązania testujemy następująco (wersja z lokalnym linux-em):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 ze zdalnym linux-em - czyli maszyną atos):
Uwaga: Jak sprawdzic ilu uzytkownikow ma zalozone konta na naszej maszynie
?
Wystarczy obejrzec plik "/etc/passwd" ktory zawiera wpisy dla kazdego
uzytkownika;
cat /etc/passwdZadanie 10
#lub
less < /etc/passwd
a nastepnie sprobuj pisac do pliku poleceniem:----rw-rw- ? mhanckow users ? ? ? uuugggooo (właściciel nie ma żadnych praw; grupa ma prawa "rw"; pozostali "rw")
echo "123" >> plik.txtWnioski wpisz do sprawozdania.
Zadanie 11 (!)
.............................................................
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= 110000000Zadanie 12
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
Zadanie 13a
echo "qwe" >> qqq/plik.txtnastepnie zobacz zawartosc pliku "www/plik.txt" poleceniem:
# zakladam ze biezacym katalogiem jest /home/student
cat www/plik.txtPowtorz te operacje 2 razy. Zobacz też nr i-wezlow tych dwoch plikow (ls -il plik).
Zadanie 13b
Zadanie 13d
Zadanie 14
......................................................................................................
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" pozomowZadanie 15
Zadanie 15a
Zadanie 15b
Pliki specjalne są oznaczane literkami "b" i "c" w poleceniu "ls -l" :
Zadanie 16
Pisać do pliku najprościej poleceniem:
echo ''ABC" > plik.txt
czytać z pliku można tak:
cat <plik.txt
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 !
# kompilacja gcc pr01.c -o pr01 # uruchamianie pr01 pr01 1 2 "3 4" 5Gdybyś chciał używać w programie operacji zmiennopozycyjnych dołącz bibliotekę "libm" :
gcc pr01a.c -o pr01a -lmAby wykonać program krokowo pod debuggerem "gdb" należy skompilować program z opcja "-g" :
gcc -g pr01.c -o pr01 gdb pr01Polecenia 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 !
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:
Zadanie 18
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/X11Aby sprawdzić który xterm (konsola) wykonuje sie na jakiej maszynie wykonaj w nich polecenie "uname -a" !.
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 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
# 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 &"
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 mtoolsDyskietka zawiera zazwyczaj DOS-owy system plików (zwany FAT).
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" !!! |
***
Supermount ***
W niektórych nowszych wersjach linuxa wystepuje mechanizm zwany "supermount", ktory
zwalnia nas od "recznego" montowania dyskietki poleceniem mount;
.............................................................................................
Zadanie A1
Zadanie A2
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)