System Unix cz. I – wstęp
Spis treści:
Słowo wstępu
Poradnik ten tworzony jest na potrzeby studiów i część rozwiązań pomimo swojej akademickich natury może znaleść wiele ciekawych i praktycznych zastosowań. Kieruje go głównie do ludzi dopiero zaczynających swoja przygode z systemami rodziny UNIX. Każdy z nas kiedyś się uczył i zdaje sobie sprawę jak ważny jest dostęp do materiałów i wiedzy. Piękną rzeczą w IT jest otwartość na rozwój i współpracę, to na tych zasadach Linus Torvalds oparł swój system – Linux. Postaram się by ten mini-poradnik napisany był w przystępnym i praktycznym stylu. Uwagi i sugestie proszę kierować na adres patryk.nizio@gmail.com. Proszę abyś miał na uwadze że przedstawione tutaj rozwiązania nie zawsze będą najbardziej optymalne, a sposóbów rozwiązań danego zaganienia jest wiele.
Historia
Każdy z nas słyszał o Linuxie i jego dystrybucjach, mało kto natomiast zna krętą droge historii która doprowadziła do jego stworzenia. Wszystko zaczeło się w 1969 r. kiedy to grupka programistów po godzinach pracy, hobbystycznie zaczeła pisać system operacyjny. Wszystko działo sie w Bell Labs (oddział badawczy firmy AT&T ). Dennis Ritchi, Ken Thompson oraz paru ich kolegów po godzinach pracy pracowali nad nowym systemem operacyjnym, korzystąc z firmowego sprzętu. System (wówczas jeszcze bez nazwy) który napisali funkcionował wewnątrz firmy przez pare miesięcy. W 1971 roku zyskał nazwe UNIX jako gra słów do Multics. W 1972 roku został przepisany z assemblera na język C. Ciekawostką jest to ze język C powstał właśnie na potrzeby UNIXa.
W 1974 r. AT&T została uznana za monopolistę przez Departament Sprawiedliwości USA, zgodnie z wyrokiem sądu w postępowaniu antymonopolowym przeciwko firmie AT&T będącej właścicielem Bell Labs, miała ona zakaz wchodzenia na rynek komputerowy. Unix nie mógł być z tego powodu wydany jako produkt – firma miała obowiązek udostępnienia swoich niezwiązanych z telefonami technologii każdemu zainteresowanemu podmiotowi. I tak system ten stał sie popularny w srodowiskach akademickich, gdzie tworzono nowe rozwiązania i moduły.
W roku 1982 r. zakończył sie trwajacy od 1974 r. proces sądowy. Nowy wyrok anulował poprzednie zarządzenia, które zabraniały firmie wydania Uniksa jako produktu, dzięki czemu UNIX System V mógł zostać wydany na licencji komercyjnej. W tym czasie krążyło już wiele wersji i wariacji systemu, W latach 80 firmy tworzyły własne wersje systemu UNIX które komercializowali. Niespodobało się to firmie AT&T która powołała Unix Internacional, okres lat 90 to tzw. „wojna unixowa”. Ciągle wytaczane procesy omal nie doprowadziły do upadku całego systemu. W 1991 roku Linus Torvalds – fiński student zaczą prace nad Unix-podobnym systemem nazwanym póżniej Linux. Dzięki szybkiemu rozwojowi otwartego oprogramowania Linux zyskał na popularności i jest uzywany w różnych wersjach do dzisiaj.
Jeśli jesteś ciekaw jak rozwiajały się systemy rodziny UNIX zobacz poniższe drzewo rozwoju
System plików – Teoria
System plików jest to sposób reprezentacji plików na przestrzeni dyskowej. Dzięki niemu możemy tworzyć, usuwać, otwierać pliki i katalogi. Położenie danych mozemy określić podając do nich ścieżke.
- Ścieżka względna – względem bieżącego katalogu (katalog roboczy), polecenie pwd wyswietla pełną ścieżkę do obecnego katalogu roboczego, na przykład: ./katalog1/text.txt
.. - przenosi nas do katalogu wyżej (dwie kropki)
. - to katalog w którym obecnie się znajdujemy (jedna kropka)
- Ścieżka bezwzględna – ścieżka absolutna względem katalogu domowego np. /home/katalog1/katalog2/plik.txt
Żeby jednak zacząć poruszać się po systemie przybliże sposób wpisywania komend do konsoli. Polecenia (komendy) w systemie UNIX mogą zawierać „flagi, parametry” co to jest? Otóż są to opcje polecenia. Może lepiej będzie to przedstawić na przykładzie. Polecenie ls listuje nam zawartośc katalogu ale polecenie z flagą „-S” ls -S posortuje zawartość katalogu według rozmiaru pliku, zamiast domyslnego sortowania alfabetycznego. Największe pliki wyświetlane będą na początku. Żeby zobaczyć jakie flagi ma polecenie użyj wbudowaną instrukcje obsługi wpisując man [polecenie]
Uogólniony zapis poleceń możemy zapisać tak:
[polecenie] [parametry,flagi] [argumenty]
Na początku może wydawać Ci sie to troche skomplikowane, ale po pewnym czasie i oswojeniu z man’em zaczniesz swobodnie korzystać z konsoli. Poniżej podaje podstawowe polecenia które przydadzą się w poruszaniu się po systemie.
Ważniejsze polecenia na początek:
cd [scieżka]
– służy do przemieszczania się między katalogami
Przykład:
cd A/B – przechodzi do katalogu B który jest w katalogu A
cd .. – przechodzi do katalogu rodzica
cd – powraca do katalogu domowego
mkdir [nazwa_katalogu]
– polecenie to służy do tworzenia katalogów
Przykład:
mkdir --mode=666 nowy_kat – polecenie tworzy katalog „nowy_kat” nadając mu od razu odpowiednie prawa dostępu
cp źródło1 źródło2 … źródło_N cel
– kopiuje źródła 1,2,… N do cel (pewien katalog)
Przykład:
cp -r A D – kopiuje (rekurencja) zawartość katalogu A do katalogu D
mv
– polecenie przeniesienia
Przykład:
mv /home/user /tmp – Przeniesienie katalogu /home/user do /tmp mv plik1 plik2 – zmienia nazwe z „plik1” na „plik2”
tree
– wyświetla drzewo katalogów
rm -r
– usuwa katalog wraz z podkatalogami (rekurencja)
rmdir
– usuwa pusty katalog
clear
– czyszczenie konsoli
touch
– zmiany w pliku, np. zmiana daty, touch plik1 – tworzy pusty plik
ls [parametr] [katalog]
– listowanie zawartości katalogu
man [nazwa_strony]
– najważniejsza komenda podczas początków nauki, czyli manual – instrukcja obsługi. Objaśnienie komend i atrybutów np. man cd
System plików – Praktyka
Teraz będzie ciekawie, spróbujemy utworzyć kilka katalogów jedna komendą, pamiętajmy że “ .. ” – powraca do katalogu wyżej, komendą mkdir -p utworze katalog kuchnia z podkatalogami,
dyzio@student:~$ mkdir -p kuchnia/lodowka/wodka_zimna/../jajka/../maslo/../../zamrazarka/wodka_bardzo_zimna/../pierogi/../../chlebak/chleb/ dyzio@student:~$ tree kuchnia kuchnia |-- chlebak | `-- chleb |-- lodowka | |-- jajka | |-- maslo | `-- wodka_zimna `-- zamrazarka |-- pierogi `-- wodka_bardzo_zimna
Prawa dostępu
Prawa dostępu to mechanizm określający uprawnienia w systemach unixowych. Po co nam prawa dostępu na naszym komputerze? Tutaj one nie są nam aż tak potrzebne. Należy jednak pamiętać że system Unix jest systemem z którego może korzystać wielu uzytkowników na raz (system wielodostępny). Co wiec gdy mamy wiele zasobów i wielu użytkowników? Wyobraź sobie serwer pewnej firmy, każdy z pracowników ma swoje konto z którego pracuje. Mamy również 3 grupy w firmie, szefostwo, księgowość i pracownicy. Pewien nieuczciwy pracownik wszedł w katalog pani Baśi z ksiegowości i w arkuszu z wypłatami dopisał jedno zero przy swojej wypłacie. Innym razem pewien śmieszek z działu analiz podmienił szefowi prezentacje dochodów rocznych na prezentacje zabawek erotycznych. Szef po dosyć wstydliwym wystąpieniu przed azjatyckimi inwestorami pomyślał że musi nadać uprawnienia swoim pracownikom. Dzięki uprawnieniom każdy z pracowników mógł dalej bez problemu korzystać ze swojego konta ale nie mógł np. zajrzeć w katalog pani Baśi. Szef dostał uprawnienia odczytu do katalogów pracowników by na bieżąco móc sprawdzić postęp danego projektu. Pracownik o imieniu Bartek pracował dzielnie, dzień i noc zamieniajac kawę w kod. Bartek chciął podzielić sie z zespołem postępami i udostępnił pewne pliki nadając im odpowiednie uprawnienia
Więc jak widzisz gdy użytkowników jest wiele i chcemy utrzymać pewien ład i porządek, powinniśmy korzystać z praw dostępu.
Wyróżniamy :
r (read) – prawo do odczytu
w (write) – prawo do zapisu
x (execute) – prawo do uruchamiania
Przykład: rw- // taki plik będzie można otworzyć, zapisać ale nie będzie można go uruchomić
Przykład: — //całkowity brak dostępu do katalogu/pliku
Przykład: r-x //tylko do odczytu, bez możliwosci usuwania i edycji
Uprawnienia Symboliczne
Prawa dostępu dostępu do plików i katalogów zmieniamy poleceniem chmod poniżej jego atrybuty:
u (użytkownik) g (grupa) O (pozostali) a (wszyscy)
+ (dodaj) – (odbierz) = (ustaw)
r (odczyt) w (zapis) x (uruchamianie)
Sprawdź co oznacza ciąg znaków: (najedź myszką) –|rwx|r-x|r–
Uprawnienia numeryczne
Jeżeli chcesz odebrać wszystkie prawa osobom które nie są członkami twojej grupy to uzyjesz polecenia: chmod O-rwx wiadomosc
Jest to tylko jeden sposób nadawania uprawnień, poznaliśmy już sposób symboliczny. Przejedzmy teraz do sposobu numerycznego, pokaże Wam prosty przykład a później wytłumaczę:
dyzio@student:~$ ls -l wiadomosc -rw-r--r-- 1 dyzio geolgrp 0 2016-03-02 01:08 wiadomosc dyzio@student:~$ chmod 666 wiadomosc dyzio@student:~$ ls -l wiadomosc -rw-rw-rw- 1 dyzio geolgrp 0 2016-03-02 01:08 wiadomosc
Sposób numeryczny wydaje się na pierwszy rzut oka bardziej skomplikowany jednak gdy nauczymy się przeliczać prawa dostępu będzie on praktyczny i wygodny, a sposób symboliczny będziemy stosować tylko w przypadkach gdy będziemy chcieli nadać pojedyncze uprawnienia np. chmod O+r
Jak zamienia się uprawnienia na liczby? W bardzo prosty sposób, na pewno każdy zna system binarny i ósemkowy i wie że liczba 101 (2) to 5 (8), wiec ciąg uprawnień rw-r–r– będzie liczbą 644, ciąg znakowy podzielmy sobie na 3 częsci: rw- | r– | r– w miejsca liter wstawiamy 1 a tam gdzie jest pusto stawiamy 0. Otrzymujemy liczbę 110100100, teraz podzielmy ja na 3 części 110 | 100 | 100 i każdą z tych części zamieńmy na liczbę ósemkowa wiedząc że waga od najstarszego (po lewej) to 4,2,1 (kolejne potęgi dwójki: 2^0=1, 2^1=2, 2^2=4) wiec otrzymamy liczbę 110->6 | 100->4 | 100->4 a więc 644.
Jakie prawa dostępu nadają poniższe wartości?
Przykład:
dyzio@student:~/sh$ ls -l total 8 -rw-rw-rw- 1 dyzio geolgrp 122 2016-03-20 21:54 login.sh -rwxr-xr-- 1 dyzio geolgrp 32 2016-03-20 21:03 skrypt.sh* dyzio@student:~/sh$ chmod 774 login.sh dyzio@student:~/sh$ ls -l total 8 -rwxrwxr-- 1 dyzio geolgrp 122 2016-03-20 21:54 login.sh* -rwxr-xr-- 1 dyzio geolgrp 32 2016-03-20 21:03 skrypt.sh* dyzio@student:~/sh$ chmod 755 login.sh skrypt.sh dyzio@student:~/sh$ ls -l total 8 -rwxr-xr-x 1 dyzio geolgrp 122 2016-03-20 21:54 login.sh* -rwxr-xr-x 1 dyzio geolgrp 32 2016-03-20 21:03 skrypt.sh*