Ćwiczenie nr 14: System Linux Barbara Łukawska, Adam Krechowicz, Tomasz Michno Czym jest Linux? Słowo Linux może oznaczać zarówno jądro systemowe Linux, jak i całą rodzinę systemów operacyjnych, które na nim bazują. Jądro systemowe jest zbiorem najważniejszych funkcji systemu operacyjnego, które znajdują się pomiędzy aplikacjami, a sprzętem. Czym jest dystrybucja? Dystrybucja jest to system operacyjny zbuwany z użyciem jądra Linux, zawierający datkowe aplikacje. Niektóre takie systemy są płatne, jednak większa część z nich jest całkowicie darmowa. Obecnie mamy dyspozycji wiele dystrybucji, z których dla początkujących użytkowników polecalibyśmy: Ubuntu, Mint lub opensuse. Instalacja W dawniejszych czasach instalacja systemu Linux wymagała większej znajomości komputera, jednak obecnie nie jest trudniejsza od instalacji systemów z rodziny Winws najczęściej sprowadza się wyboru partycji oraz podstawowych ustawień systemu. W celu przetestowania działania systemu oprócz instalacji na fizycznym dysku twardym, możemy skorzystać z maszyny wirtualnej aplikacji, która symuluje odrębny komputer. Użytkownicy w systemie Linux System Linux jest systemem wielostępowym, co oznacza, że może z niego korzystać wielu użytkowników w tym samym momencie. Najważniejszym kontem użytkownika w systemie jest konto głównego administratora o nazwie root. Posiada ono stęp wszystkich elementów systemu, a także pozwala zarządzać innymi użytkownikami. Z tego względu nie zaleca się korzystać z niego podczas codziennej pracy - należy utworzyć konto zwykłego użytkownika. Konto zwykłego użytkownika posiada pełny stęp najpotrzebniejszych w codziennej pracy elementów systemu, jak również posiada swój katalog mowy na pliki. Katalog ten nosi nazwę HOME i można nie przejść wybierając ścieżkę /home/nazwaużytkownika lub wpisując jako ścieżkę znak ~. Bez datkowych modyfikacji system nie pozwala na przeglądanie katalogów i plików należących innych użytkowników (bez ich zgody). Istnieje również możliwość tworzenia i dawania użytkowników grup, dzięki czemu łatwiej jest nimi zarządzać. Każdy plik w systemie (jak również katalog) posiada ustawienia określające prawa odczytu, zapisu i wykonania dla różnych użytkowników. W systemie możemy określić je oddzielnie dla: właściciela wybranej grupy użytkowników wszystkich pozostałych użytkowników Śrowiska graficzne
Oprócz różnych dystrybucji w systemach Linux stępne są również różne śrowiska graficzne, najpopularniejsze to: GNOME KDE W systemie może być zainstalowanych wiele śrowisk, które można wybrać przy logowaniu. W przypadku, gdy nie posiada żadnego, wtedy jego obsługa będzie wykonywana w trybie tekstowym. Podstawowe polecenia Uruchamianie terminala: Konsola, zwana też terminalem jest jednym z najważniejszych elementów systemu Linux. Można ją uruchomić wciskając kombinację klawiszy Ctrl+Alt+F[1-6] (przechodzimy trybu tekstowego, wymagane jest ponowne zalogowanie), jak również wybierając z menu odpowiedni wpis (w zależności od dystrybucji i śrowiska graficznego, np. dla KDE: System->Terminal->Terminal, pozostajemy w trybie graficznym). Po uruchomieniu terminala może on wyglądać następująco: Tekst, który został wyświetlony nazywa się znakiem zachęty, który oznacza że system czeka na nasze polecenia. Na początku znaku zachęty znajduje się nazwa aktualnie zalogowanego użytkownika, po znaku @ nazwa komputera, po dwukropku katalog, w którym aktualnie znajduje się użytkownik. Znak > 1 kończy znak zachęty, pozwalając na wprowadzenie polecenia. Uruchamianie poleceń W celu uruchomienia polecenia w terminalu wystarczy wpisać jego nazwę po znaku zachęty i wcisnąć Enter, np.: whoami user Polecenie whoami wyświetla nazwę aktualnie zalogowanego użytkownika. Po wykonaniu wszystkich zadań (czyli po wyświetleniu nazwy użytkownika), program kończy swoje działanie i zostaje ponownie wyświetlony znak zachęty, po którym możemy wpisać kolejne polecenie. Większość standarwych poleceń systemowych posiada wbuwaną krótką instrukcję obsługi wyświetlaną poprzez pisanie --help po nazwie polecenia: whoami --help Składnia: whoami [OPCJA]... Wypisanie nazwy użytkownika związanego z aktualnym efektywnym idetyfikatorem użytkownika. Działa jak id -un. --help wyświetlenie tego opisu i zakończenie --version wyświetlenie informacji o wersji i zakończenie Raporty o błędach whoami wysyłaj bug-coreutils@gnu.org strona mowa GNU coreutils: http://www.gnu.org/software/coreutils/ 1 - może to być też znak $, %, :, a w przypadku użytkownika root rówież #
Pomoc w używaniu oprogramowania GNU: http://www.gnu.org/gethelp/ O błędach tłumaczenia whoami poinformuj przez http://translationproject.org/team/ Żeby przeczytać kompletną kumentację uruchom: info coreutils 'whoami invocation' Ciąg znaków --help był parametrem przekazanym polecenia whoami. Czasami parametrów może być więcej, wtedy oddzielamy je od siebie znakiem spacji. Parametry służące sterowania programem (zaczynające się od znaku - lub --) są często nazywane przełącznikami, w celu odróżnienia ich od pozostałych parametrów. Dodatkową pomoc polecenia/programu możemy uzyskać za pomocą polecenia man, podając jako parametr nazwę programu (np. man whoami). Najważniejsze polecenia systemowe: cd ls cp rm mv Nazwa polecenia mkdir rmdir su su who chmod Opis Przejście katalogu podanego jako parametr Wyświetlenie zawartości katalogu Skopiowanie pliku. Pierwszy parametr to ścieżka kopiowanego pliku, drugi to ścieżka miejsca, gdzie go skopiować Usunięcie pliku podanego jako parametr. Aby usunąć katalog, musimy usunąć wszystkie pliki, które się w nim znajdują. W tym celu należy użyć datkowo przełącznika -R. UWAGA! Tego polecenia należy używać rozsądnie wpisanie rm -rf / jako root spowoduje usunięcie całego linuksa z dysku. Przeniesienie pliku z jednego miejsca drugiego. Pierwszy parametr to ścieżka przenoszonego pliku, drugi to ścieżka nowego miejsca. Dla katalogów należy podać datkowo przełącznik -R Utworzenie nowego katalogu o nazwie podanej jako parametr Usunięcie pustego katalogu o nazwie podanej jako parametr Uruchomienie polecenia podanego jako parametr z uprawnieniami administratora (konta root) Przełączenie się na innego użytkownika podanego jako parametr (jeśli nie podamy parametru użytkownik zostanie przełączony na roota). W niektórych systemach w celu przejścia na konto roota należy wywołać su su Wypisuje aktualnie zalogowanych użytkowników w systemie Zmiana uprawnień pliku, jako pierwszy parametr podajemy nowe uprawnienia, jako drugi nazwę pliku. Uprawnienia podawane są najczęściej w formie liczbowej, np.: chmod 777 plik - pełny stęp pliku chmod 644 plik - odczyt i zapis tylko dla właściciela, pozostali mogą jedynie odczytywać Pierwsza cyfra oznacza uprawnienia dla właściciela, druga dla grupy, trzecia dla pozostałych użytkowników. 0 brak praw 1 prawo wykonania pliku
chown date touch echo clear ps 2 zapis 3 zapis i wykonanie 4 odczyt 5 odczyt i wykonanie 6 odczyt i zapis 7 odczyt, zapis i wykonanie Zmiana właściciela pliku, pierwszy parametr to nazwa nowego właściciela, drugi nazwa pliku Wyświetlenie aktualnego czasu i daty Tworzy nowy plik tekstowy o nazwie podanej jako parametr Wypisanie tekstu podanego jako parametr Wyczyszczenie okna konsoli Wypisanie listy procesów (bez parametrów są to tylko procesy użytkownika na danym terminalu). Użycie przełączników -aux spowoduje wypisanie wszystkich procesów. free Wypisanie liczby wolnej pamięci (przełącznik -m wyświetli liczby w MB, -g w GB) df Podaje informacje o wolnym miejscu na dysku Proste skrypty Skrypty są zwykłymi plikami tekstowymi, zawierającymi polecenia dla systemu. Dzięki temu możliwe jest zautomatyzowanie często wykonywanych operacji, uwalniając użytkownika od wpisywania wszystkich poleceń ręcznie w konsoli. Stworzymy teraz krok po kroku prosty skrypt wypisujący na ekranie tekst Witaj na kierunku Informatyka!. Pierwszym krokiem jest utworzenie nowego pliku tekstowego (można utworzyć go za pomocą GUI lub konsolowo używając polecenia touch). Następnie zaleca się, aby na początku każdego skryptu umieścić następującą linijkę: Możemy teraz przejść właściwej części naszego skryptu. Wypiszemy teraz za pomocą polecenia echo tekst Witaj na kierunku Informatyka! : echo "Witaj na kierunku Informatyka!" Zapisujemy skrypt i za pomocą polecenia chmod +x nazwa nadajemy mu uprawnienia wykonania. Możemy teraz wykonać nasz bardzo prosty skrypt wystarczy w konsoli wpisać jego nazwę poprzedzoną./ (./ informuje terminal, że skrypt/program który chcemy uruchomić znajduje się w bieżącym katalogu):./skrypt Witaj na kierunku Informatyka!
W pobny sposób jak polecenia echo, możemy użyć również innych poleceń systemowych, np.: możemy wypisać datkowo czas i datę: echo "Witaj na kierunku Informatyka!" echo -n "Dzisiaj jest: " date Powyższy kod skryptu wyświetli nam:./skrypt Witaj na kierunku Informatyka! Dzisiaj jest: czw, 11 paź 2012, 12:13:50 CEST Przełącznik -n przy poleceniu echo powoduje, że po wyświetleniu tekstu nie nastąpi przejście nowej linii. Skrypty pozwalają również na używanie zmiennych specjalnych obiektów, których możemy zapamiętać wolne dane (np. wynik polecenia). Każda zmienna posiada swoją nazwę, przy pomocy której jest używana w kodzie skryptu. Zmienne tworzone są wraz z pierwszym użyciem. Przypisanie wartości zmiennej wygląda następująco: zmienna=wartość Jeśli chcemy zapisać zmiennej wynik działania polecenia należy umieścić je pomiędzy dwoma znakami `, np : zmienna=`date` W celu odczytania wartości zmiennej wystarczy poprzedzić ją znakiem $, np.: echo $zmienna Skrypty pozwalają również na warunkowe wykonywanie poleceń za pomocą instrukcji if. Kod takiej instrukcji jest następujący: if [ warunek ] then polecenie fi Do tworzenia warunków często są przydatne datkowe znaczniki 2 : -e sprawdza, czy plik istnieje = sprawdza, czy oba wyrażenia są sobie równe!= Sprawdza, czy wyrażenia są różne -n Sprawdza, czy wyrażenie ma długość > 0 -d Sprawdza, czy katalog istnieje -r, -w, -x -lt, -gt -le, -ge Sprawdza, czy: można odczytać, zapisać, wykonać plik Mniejsze, większe Mniejsze bądź równe, większe bądź równe 2 Pozostając w ścisłości podczas sprawdzania warunku wywoływane jest polecenie test, które przyjmuje jako parametry podane wyrażenie
W celu przetestowania napiszmy skrypt, który porówna dwie wartości zapamiętane w zmiennych: zmienna1=10 zmienna2=15 if [ $zmienna1 -lt $zmienna2 ] then echo "$zmienna1 jest mniejsze od $zmienna2" fi W przypadku, gdy chcemy wykonać datkowe polecenia gdy warunek nie jest spełniony, należy skorzystać z instrukcji if- else: if [ warunek ] then polecenia gdy warunek jest spełniony else polecenia, gdy warunek nie jest spełniony fi Po daniu else naszego skryptu wygląda on następująco (w celu przetestowania całości zmieniliśmy wartość pierwszej zmiennej na 24): zmienna1=24 zmienna2=15 if [ $zmienna1 -lt $zmienna2 ] then echo "$zmienna1 jest mniejsze od $zmienna2" else echo "$zmienna1 jest większe bądź równe $zmienna2" fi Oprócz instrukcji warunkowych w skryptach możemy także wykonywać polecenia wiele razy korzystając z dwóch rodzajów pętli. Pierwszą z nich jest pętla while, która wykonuje polecenia zawsze gdy spełniony jest warunek: while [ warunek ] polecenia Przykławo, wypisanie liczb od 0 5 może wyglądać następująco: 1 2 i=0 3 while [ $i -le 5 ] 4 5 echo "zmienna i ma wartość $i" 6 i=$[i + 1] 7 W linii nr 6 użyliśmy nowej instrukcji zwiększenia wartości zmiennej o 1 (należy uważać, aby po znaku = nie używać spacji, ponieważ instrukcja może wtedy nie działać). Wynikiem działania skryptu jest:
zmienna i ma wartość 0 zmienna i ma wartość 1 zmienna i ma wartość 2 zmienna i ma wartość 3 zmienna i ma wartość 4 zmienna i ma wartość 5 Innym rodzajem pętli jest pętla for, która pozwala na podanie listy argumentów, dla których ma zostać wykonana: for zmienna in lista polecenia Przykławo: for i in pierwszy drugi trzeci czwarty "wolny Tekst" echo "To jest $i wyraz" da nam wynik: To jest pierwszy wyraz To jest drugi wyraz To jest trzeci wyraz To jest czwarty wyraz To jest wolny Tekst wyraz Jak widać, pętla for przy każdym swoim przebiegu przypisuje kolejną wartość z listy zmiennej, aż ich wyczerpania. Każdy element listy podajemy po znaku spacji, w przypadku gdy zawiera on znak spacji, cały tekst powinien zostać objęty cudzysłowem. Oprócz tekstów możemy stosować zupełnie wolne wartości, np. liczby. W przypadku ciągu liczb przydatne jest polecenie seq, które stworzy nam listę kolejnych wartości od podanej jako pierwszy parametr podanej jako drugi parametr. Poniższe użycie seq w skrypcie: for i in `seq 0 5` echo "Wartość i= $i" zadziała identycznie jak skrypt: for i in 0 1 2 3 4 5 echo "Wartość i= $i" Dodatkowo skrypty mogą być w pełni interaktywne. Do odczytania tekstu podawanego przez użytkownika z klawiatury służy polecenie read, które jako parametr przyjmuje nazwę zmiennej której ma zostać zapisany tekst: read zmiennatestowa
Zadania 1. Uruchom system Linux, a następnie korzystając z przeglądarki plików utwórz w katalogu mowym katalog z Twoim imieniem i nazwiskiem. 2. Uruchom terminal, przetestuj działanie polecenia cd (wejście katalogu wewnątrz bieżącego katalogu, przejście o jeden poziom wyżej, przejście katalogu używając ścieżki bezwzględnej) oraz ls. Pod koniec przejdź katalogu, który został utworzony w zadaniu 1. 3. Przetestuj działanie poleceń służących tworzenia i usuwania katalogów i plików: utwórz katalog o nazwie Katalog 1, a następnie przejdź niego i utwórz plik o nazwie Plik tekstowy.txt korzystając z polecenia echo zapisz niego wolną linijkę tekstu (echo tekst > Plik tekstowy.txt ) wyświetl zawartość pliku w konsoli przejdź o poziom wyżej w strukturze katalogów spróbuj usunąć Katalog 1 kolejno poleceniami: rmdir, rm oraz ponownie poleceniem rm, ale z parametrem -R 4. Przetestuj działanie polecenia cp oraz mv, jaka jest między nimi różnica? 5. Stwórz skrypt, który wyświetli w konsoli Twoją wizytówkę (imię, nazwisko, rok urodzenia oraz nr grupy). 6. Korzystając z pętli utwórz program, który na ekranie wyświetli choinkę utworzoną ze znaków # lub *. 7. Utwórz skrypt, który zapyta użytkownika o imię oraz rok urodzenia, a następnie sprawdzi czy jest on starszy, czy młodszy od Ciebie. 8. Napisz skrypt, który będzie uruchamiał wszystkie poprzednie skrypty w zależności od wyboru użytkownika. Skrypt powinien działać w pętli. Przed zakończeniem pracy usuń katalog, który został utworzony w zadaniu 1.