Instrukcja
Zapoznajemy się z podstawowymi komendami w linuxie poznajemy środowisko oraz sposoby kompilacji pierwszych programów. Laboratorium to ma na celu przypomnienie sobie podstawy działania w środowisku systemu operacyjnego Linux.
Podstawy Linuxa
Poniższe zadania 1-10 są za 1,5 pkt.
- Logowanie
Po uruchomieniu komputerów wybrać system operacyjny operacyjny LINUX, najnowszą wersję.
Zalogować się loginem i hasłem podanym przez prowadzącego. - Katalog domowy - tu zaczynamy
- pwd - gdzie jesteśmy
- ls -la - wypisanie zawartości bieżącego katalogu
- grep {ciąg} {maska plików} - wyszukiwanie ciągu znaków wśród plików zadanych określonych przez maskę.
- zmienne środowiskowe
- echo $NASZA_ZMIENNA - wyświetli wartość zmiennej NASZA_ZMIENNA
- alias ll="ls -la" - tworzenie skrótów, tu przykład utworzenia skrótu ll wykonującego polecenie ls -la.
- env i set - operacje na zmiennych środowiskowych
- export $ZMIENNA - wyeksportowanie zmiennej środowiskowej.
- hostname - wyświetlenie nazwy komputera
- id - wyświetlenie identyfikatorów użytkownika.
- logname - wyświetlenie loginu użytkownika.
- .bashrc i .profile - pliki konfiguracyjne
W katalogu domowym użytkownika znaleźć można wiele plików konfiguracyjnych. Dwa z nich .bashrc oraz .profile (w uproszczeniu) przetwarzane są one podczas otwierania nowego terminala lub logowania.
Proste ćwiczenie:
- Wpisać do pliku konfiguracyjnego .bashrc następującą linię:
export BLABLA="ala ma kota" - Otworzyć nowy terminal.
- Sprawdzić zawartość zmiennej BLABLA za pomocą:
echo $BLABLA
- Wpisać do pliku konfiguracyjnego .bashrc następującą linię:
- Poruszanie się
- cd <ścieżka> - przejście do podanego katalogu
- mv <nazwa1><nazwa2> - zmiana nazwy/położenia pliku
- cp <nazwa1><nazwa2> - kopiowanie pliku
- rm <plik> - usuwanie pliku. Opcja -rf pozwoli usunąć też cały katalog.
- mkdir <katalog> - tworzenie katalogu
- rmdir <katalog> - usuwanie katalogu
-
Pliki
- cat <plik> - wyświetl zawartość pliku
- head <plik> - wyświetl pierwsze kilka linii pliku
- tail <plik> - wyświetl ostatnie kilka linii pliku. Przydatna opcja -f przy śledzeniu plików logowania.
- ln -s <plik> <link> - tworzenie linku symbolicznego do pliku.
- more <plik> - wyświetlanie zawartości pliku z zatrzymywaniem po każdym ekranie.
- wc <plik> - zliczanie znaków, słów i linii w pliku.
- Procesy
- ps - pokazanie bieżących procesów w systemie, często używane w takim zestawieniu ps -efa |grep student - pokaż wszystkie procesy systemu w formie długiej ale przepuść przez filtr tylko te które mają nazwę "student"
- kill, killall - głównie używane do usuwania procesów. Choć kill ogólnie służy do wysyłania sygnałów.
- top - pokazanie statystyk procesów najbardziej "zasobożernych"
- znaczenie znaków & > >> | - uruchomienie w tle i przekierowania
- fg, bg - operacje na procesach w tle.
Teraz wykonać to samo ale z przekierowaniem >>. Jaka jest wielkość pliku? Powtórzyć operacje z pojedynczym przekierowaniem i jeszcze raz sprawdzić wielkość pliku. - Inne
- tty - wyświetlenie bieżącego urządzenia terminala
- type <program> - pełna ścieżka do programu
- uname -a - informacje na temat komputera łącznie z numerem jądra.
- Edytor Vim
- zaczynamy pisanie:a,i,A,I,o,O
- kończymy pisanie:esc
- poruszamy się:strzałki, h,j,k,l,pgup,pgdwn,n,N,``,ma ~a
- kasujemy:x,d,D
- kopiujemy: y
- wklejamy: p,P
- szukamy: /,n,N,*,#
- zamieniamy: cw,r
- wychodzimy: q,q!,wq,q!
- ustawienia: :set np :set nu :syntax on
- plik konfiguracyjny: .vimrc
- Więcej informacji można znaleźć przygotowanym przeze mnie mini podręczniku do VIM
- Montowanie nośników
W celu zamontowania dyskietki wykonujemy polecenie
mount /mnt/floppy
Od tego momentu w katalogu /mnt/floppy będzie dostępna zawartość dyskietki
Przed wyjęciem dyskietki należy ją odmontować:
umount /mnt/floppy
Pendrive jeżeli nie zamontuje się automatycznie to trzeba go zamontować i odmontować w podobny sposób.
W razie problemów trzeba pytać prowadzącego zajęcia.
W niektórych systemach montowanie odbywa się w katalogu /media zamiast /mnt - Poznajemy kompilator gcc
Napisać prosty program typu "hello world" i go skompilować. Kompilacja odbywa się za pomocą kompilatora gcc.
gcc plik.c -o program
Jeżeli kompilacja wymaga podania ścieżek poszukiwań innych niż domyślne lub dołączenia jakiejś biblioteki to można zastosować opcje:
- -I<sciezka_includow>
- -L<sciezka_bibliotek>
- -l<biblioteka>
Jeżeli chcemy by kompilator powiadamiał nas o wszystkich błędach i ostrzeżeniach należy włączyć opcję:- -Wall
- Przekazywanie parametrów do programu - lista argumentów (0,5pkt)
Lista argumentów składa się z tablicy wskaźników na napisy.
main (argc, argv)
Napisać program wyświetlający parametry wejściowe. Każdy parametr powinien być wyświetlony w osobnym wierszu i w odwrotnej kolejności podawania. Np.:
int argc; /* liczba napisów */
char *argv[]; /* wskaźnik do tablicy napisów zapis **argv jest równoznaczny */
{}
./program1 ala ma kota a kot ma ale
Uwaga! Zerowy parametr to nazwa programu.
ale
ma
kot
a
kota
ma
ala
program1 - Lista zmiennych środowiska (0,5pkt)
- zawsze gdy wykonywany jest program przekazywana jest też lista zmiennych środowiskowych
- umieszczana jest w przestrzeni danych procesu.
- jest to tablica wskaźników do napisów w języku C
- zakończona jest wskaźnikiem NULL.
- napis ma zazwyczaj postać: zmienna=napis
- do programu w C można przekazać ją jako trzeci parametr w main()
- funkcja inicjująca w C tworzy też zmienną zewnętrzną
extern char **environ ; - wskazuje na to samo co envp
- w rzeczywistości najłatwiej zrobić to przez
char *getenv(char *nazwa_zmiennej); - poniższy program ma przekazaną listę zmiennych przez trzeci argument funkcji main oraz ją wyświetla:
main(argc,argv,envp)
int argc;
char *argv[];
char *envp[];
{
int ii;
for (ii=0; envp[ii] != (char *) 0; ii++)
printf("%s\n",envp[ii]);
exit(0);
} - Należy przepisać i uruchomić
- Numery identyfikacyjne tzw. Pid'y (0,5pkt)
Jest to unikalny numer przydzielany przez system każdemu procesowi. Możemy go uzyskać za pomocą funkcji:getpid();
Każdy proces posiada także swój proces macierzysty. Pid procesu macierzystego można uzyskać za pomocą funkcjigetppid();
Napisać programik wypisujący identyfikator procesu oraz identyfikator procesu macierzystego.
Sprawdzić do czego służy funkcja getpgrp() i setpgrp(). - Identyfikatory użytkownika i grupy (0,5pkt)
Można je pobrać za pomocą getuid() oraz getgid().
Napisać program (lub dopisać do poprzedniego) wyświetlający identyfikatory użytkownika i grupy.
Sprawdzić do czego są funkcje geteuid() i getegid() - Pliki (1,5pkt)
- każdy plik ma wiele atrybutów
- do odczytania atrybutów pliku służą stat i fstat
#include <sys/types.h> #include <sys/stat.h> int stat(char *pathname, struct stat * buf); /* po nazwię */ int fstat(int *fildes, struct stat *buf); /* po deskryptorze */ struct stat { ushort st_mode; /* typ pliku, prawa dostępu do pliku */ ino_t st_ino; /* numer i-węzła */ dev_t st_dev; /* identyfikator urządzenia, na którym jest pozycja w katalogu odpowiadająca temu plikowi */ short st_nlink; /*liczba dowiązań */ ushort st_uid; /* identyfikator użytkownika */ ushort st_gid; /* identyfikator grupy */ dev_t st_rdev; /*identyfikator urządzenia dla znakowych lub blokowych plików specjalnych */ off_t st_size; /* rozmiar pliku w bajtach */ time_t st_atime; /*czas ostatniego dostępu do pliku */ time_t st_mtime; /*czas ostatniej modyfikacji pliku */ tme_t st_ctime; /* czas ostatniej zmiany stanu pliku */ long st_blksize; /* optymalny rozmiar bloku dla operacji na plikach; tylko 4.3BSD */ long st_block; /*bieżąca liczba przydzielonych bloków; tylko w 4.3 BSD */ };
Napisać program który wyświetli wszystkie możliwe dane na temat pliku którego nazwę przekażemy jako parametr. Sprawdzić czy podana wyżej struktura odpowiada tej zwracanej w systemie Linux. Zmodyfikować program by wyświetlał informacje na temat wszystkich podanych plików jako parametry. Należy odpowiednio sformatować odczytane dane, np. uprawnienia, typ pliku czy pola zawierające czas.
- Sprawozdanie.
Sporządzić sprawozdanie w formie podręcznej " ściągawki" z powyższych poleceń. Sprawdzić jakie można dodawać opcje do różnych poleceń. Wyszukać inne polecenia i opisać.
Kilka uwag!
Sprawozdania proszę wgrać na moodle pod "spr" najpóźniej do końca dnia następnego. Po tym czasie sprawozdania nie będą oceniane.
Sprawozdanie może być w postaci dokumentu txt lub OpenOffice
Sprawozdanie powinno zawierać datę, numer i temat laboratorium którego dotyczy, grupę oraz imiona i nazwiska zespołu.
Do sprawozdań powinny być dołączone kody programów z ewentualnym opisem kompilacji.
Treść sprawozdań może być różna w zależności od rodzaju ćwiczeń. Podam jednak kilka uniwersalnych wskazówek co zwykle powinno się znaleźć w sprawozdaniu co może być oceniane:
- Wspomniane wyżej dane.
- Przebieg ćwiczenia, wraz ze zrzutami (w formie txt) ekranu, odpowiedziami na zadane pytania, przebieg testów jakie przeprowadziliśmy.
- Wnioski. Czego się nauczyliśmy, co się udało a czego się nie udało wykonać, z czym były największe problemy.
- Kody programów.
- W razie innej korespondencji. Maile należy opatrzyć tematem z numerem grupy i numerem laboratorium a także by były podpisane, anonimów też nie będę otwierał. Ogólnie proszę się dostosować do ogólnych zasad korespondencji mailowej.