ssh
Transkrypt
ssh
Akademia Górniczo-Hutnicza Wydział Inżynierii Mechanicznej i Robotyki Katedra Robotyki i Mechatroniki SIECI KOMPUTEROWE I BAZY DANYCH ĆWICZENIE NR 4 Temat: PRACA ZDALNA W SIECI – USŁUGI TELNET ORAZ SSH Praca zdalna w sieci TELNET - protokół zdalnej sesji Protokół telnet jest tzw. protokołem zdalnej sesji. Oznacza to, że program korzystający z tego protokołu (często również o nazwie "telnet") umożliwia komunikację ze zdalnym komputerem. Przy pomocy telnet-u można więc poprzez sieć Internet zalogować się na się na odległym serwerze i pracować na nim tak, jak przy pomocy fizycznie podłączonego doń terminala. Protokół ten, powstał jako jedna z pierwszych usług dostępnych w sieci Internet. Aktualnie został on wyparty przez protokół Secure Shell, który oferuje szyfrowanie zarówno wprowadzanego hasła, jak i całego przebiegu sesji. Właśnie ze względu na fakt, że w przypadku korzystania z telnet-u, cała treść Twojego dialogu ze zdalnym komputerem przesyłana jest siecią bez żadnego zabezpieczenia (co umożliwia np. podsłuchanie Twojego hasła), wykorzystywanie tego protokołu nie jest zalecane i powinno zostać ograniczone do sytuacji, w których protokół Secure Shell nie jest dostępny. System Windows (95/98/ME/NT/2000) zawiera prosty program o nazwie telnet umożliwiający zestawienie zdalnej sesji. W przypadku, jeśli nie masz na pulpicie ani na pasku zadań skrótu do programu telnet, w celu jego uruchomienia kliknij przycisk "Start", następnie wybierz polecenie "Uruchom", wprowadź nazwę programu telnet i kliknij przycisk "OK". SSH - bezpieczny protokół zdalnej sesji Protokół ssh jest jednym z tzw. protokołów zdalnej sesji. Oznacza to, że program korzystający z tego protokołu (często również o nazwie zawierającej skrót "ssh") umożliwia komunikację ze zdalnym komputerem. Przy pomocy ssh można więc poprzez sieć Internet zalogować się na się na odległym serwerze i pracować na nim tak, jak przy pomocy fizycznie podłączonego doń terminala. Inaczej jednak niż w przypadku protokołu telnet, protokół ssh zapewnia szyfrowanie całej transmisji (łącznie z nazwą konta oraz hasłem, transmitowanym podczas sekwencji logowania się na serwerze). Protokół ten udostępniony początkowo w wersji 1 szybko ewoluował i aktualnie częściej używana jest jego 2-ga wersja. Oprogramowanie sieciowe zainstalowane na serwerze sklab potrafi połączyć się z programem - klientem ssh przy pomocy obu wersji protokołu. Oczywiście, ze względu na liczne udoskonalenia włączone do wersji 2 protokołu, zalecane jest posługiwanie się tą właśnie wersją. Zasada działania protokołu ssh opiera się na kryptograficznej technologii RSA i jest następująca: każdy z komputerów, na którym zainstalowane jest oprogramowanie ssh posiada parę kluczy: tzw. klucz prywatny dostępny tylko dla administratora komputera (i oczywiście oprogramowania systemowego obsługującego protokół ssh) oraz klucza publicznego dostępnego dla wszystkich użytkowników sieci. Klucze te są tak zbudowane, że informację zaszyfrowaną kluczem prywatnym można rozszyfrować tylko przy pomocy klucza publicznego i odwrotnie informację zaszyfrowaną kluczem publicznym można rozszyfrować wyłącznie przy pomocy klucza prywatnego. Klucze są więc ze sobą powiązane, ale żadnego z nich nie można odtworzyć na podstawie znajomości drugiego. Połączenie ssh inicjowane jest po stronie programu - klienta ssh. Klient łączy się z serwerem i otrzymuje od niego jego klucz publiczny. Klucz ten porównywany jest z zachowanym w wewnętrznej bazie danych klienta, z poprzednich połączeń. W przypadku wykrycia niezgodności kluczy wyświetlane jest specjalne ostrzeżenie umożliwiające przerwanie połączenia. Następnie, klient przekazuje serwerowi swój klucz publiczny, generuje losową 256 bitową liczbę, szyfruje ją przy pomocy swojego klucza prywatnego oraz klucza publicznego serwera. Serwer po otrzymaniu tak zakodowanej liczby rozszyfrowuje ją przy pomocy swojego klucza prywatnego i klucza publicznego klienta. Tak otrzymana liczba jest losowa a ponadto znana tylko klientowi i serwerowi. Jest ona używana jako klucz do kodowania podczas dalszej komunikacji. W trakcie prac nad protokołem ssh opracowano liczne jego udoskonalenia i rozszerzenia. Jednym z nich jest możliwość autoryzacji użytkowników przy pomocy pary kluczy RSA (podobnie, jak podczas nawiązywania połączenia ssh pomiędzy klientem i serwerem). Jest to znacznie bezpieczniejszy sposób logowania się na serwerze niż przy pomocy tradycyjnych haseł. Aby używać autoryzację RSA należy wygenerować parę kluczy (swój klucz prywatny i klucz publiczny). W systemach unixowych do tego celu służy program ssh-keygen. Jego opis możemy obejrzeć wydając komendę "man ssh-keygen". Wygenerowany klucz publiczny należy umieścić w pliku identity.pub w podkatalogu .ssh swojego katalogu domowego. Klucz prywatny należy przenieść w bezpieczne miejsce, np. na swój prywatny komputer lub na noszoną ze sobą dyskietkę. Dla zwiększenia bezpieczeństwa można podczas tworzenia pary kluczy RSA zażądać dodatkowego zaszyfrowania klucza prywatnego wymyślonym przez siebie hasłem. W takim przypadku, przed każdym wykorzystaniem swojego klucza prywatnego do uzyskania połączenia z serwerem konieczne jest podanie hasła rozkodowującego klucz. Wiele programów - klientów ssh umożliwia wykorzystanie autoryzacji RSA zamiast wprowadzania tradycyjnych haseł. Innym rozszerzeniem oprogramowania realizującego połączenia ssh jest protokół scp umożliwiający bezpieczne przesyłanie plików. Powoli wypiera on opracowany w początkach istnienia sieci Internet protokół ftp, którego podstawową wadą była możliwość podsłuchania zarówno hasła jak i zawartości transmisji. PuTTY - klient secure shell dla MS Windows Program PuTTY, jest darmowym emulatorem terminala dla systemów MS Windows, obsługującym protokoły telnet oraz SSH w wersji 1 oraz 2. Program nie wymaga instalacji - wystarczy umieścić go w wybranym katalogu i utworzyć do niego skrót w Menu Start lub na pulpicie Windows. Po uruchomieniu programu na ekranie pojawia się okienko konfiguracyjne. Jest ono podzielone na dwie części. Z lewej strony w pionowym oknie znajduje się menu konfiguracyjne, natomiast z prawej strony pojawiają się pola i opcje wybierane i wprowadzane podczas konfiguracji programu (rys. 6.1). W celu konfiguracji sesji ssh na serwerze sklab wybierz pozycję menu Session, następnie wprowadź adres serwera: 149.156.115.209 i zaznacz protokół "SSH". Automatycznie zostanie wybrany port 22, na którym odbierane są przez serwer żądania otworzenia sesji ssh. W małym okienku umieszczonym pod napisem "Saved Sessions" wprowadź wybraną przez Ciebie nazwę sesji, np. sklab. Rys. 6.1 Widok okna konfiguracyjnego programu PuTTY – konfiguracja ustawień sesji W menu "Terminal" zaznacz opcje "Auto wrap mode initially on" (rys. 6.2). Rys. 6.2 Widok okna konfiguracyjnego programu PuTTY – konfiguracja ustawień terminala Menu "Keyboard" wypełnij tak, jak na rysunku 6.3. Bardzo ważne jest zaznaczenie opcji "Application and AltGr act as Compose key". Pozwoli ono na wprowadzanie polskich znaków diakrytycznych przy pomocy prawego klawisza Alt. Rys. 6.3 Widok okna konfiguracyjnego programu PuTTY – konfiguracja ustawień klawiatury Podobnie menu "Window" wypełnij zgodnie z rysunkiem 6.4. Rys. 6.4 Widok okna konfiguracyjnego programu PuTTY – konfiguracja ustawień okna W menu "Apperance" (rys. 6.5) wypełnij pole "Window title". Po kliknięciu klawisza "Change..." wybierz font, który będzie używany przez emulator terminala. Rys. 6.5 Widok okna konfiguracyjnego programu PuTTY – konfiguracja wyglądu Proponujemy wybór fontu Lucida Console (rys. 6.6). Możesz oczywiście użyć innego fontu, ważne jednak, by zawierał on zestaw znaków dla Europy Środkowej. Rys. 6.6 Widok okna konfiguracyjnego programu PuTTY – wybór czcionki W menu "Translation" (rys. 6.7) zaznacz opcję "Use font in both ANSI and OEM modes" oraz "Character set translation on received data: UTF-8". Ta druga opcja spowoduje, że program PuTTY będzie dokonywał automatycznego tłumaczenia znaków ze strony kodowej UTF-8, obowiązującej na serwerze na kodowanie aktualnie obowiązującą w systemie MS Windows. Pozwoli to na poprawne wprowadzanie z klawiatury oraz wyświetlanie na ekranie polskich znaków diakrytycznych. Rys. 6.7 Widok okna konfiguracyjnego programu PuTTY – konfiguracja ustawień systemu znaków Menu "Selection" pozostawiamy bez zmian. Podobnie postępujemy z menu "Colours", choć możemy oczywiście wybrać inny zestaw kolorów niż standardowy. W menu "Connection" w oknie "Auto-login username" możesz wprowadzić nazwę konta, na które będziesz się logować. Możesz również pozostawić to okno nie wypełnione. W takim przypadku, program PuTTY zapyta Cię o nazwę konta przed nawiązaniem połączenia z serwerem. Pomijamy pozycję menu: "Telnet". W menu "SSH" w pozycji "Preferred SSH protocol version (Preferowana wersja protokołu SSH)" zaznacz w przypadku serwera sklab opcję "2". Nie wszystkie serwery unixowe obsługują wersję 2 protokołu SSH, dla niektórych serwerów właściwym wyborem będzie więc "1". W pozycji "Preferred encryption algorithm" pozostaw listę bez zmian. Wróć teraz do pozycji menu: "Session". Kliknij przycisk "Save", co spowoduje zapamiętanie w rejestrze Windows parametrów skonfigurowanej przed chwilą sesji pod wybraną przez Ciebie nazwą. W celu uruchomienia skonfigurowanej sesji, wystarczy po uruchomieniu programu PuTTY i pojawieniu się jego okna konfiguracyjnego zaznaczyć w prawym oknie tekstowym nazwę sesji, którą chcesz otworzyć, następnie kliknąć na niej dwa razy lub nacisnąć przycisk "Load", a w następnej kolejności przycisk "Open" (rys. 6.8). Rys. 6.8 Widok okna konfiguracyjnego programu PuTTY – wybór sesji Jeśli z danym serwerem łączysz się po raz pierwszy, pojawi się okno ostrzegające, że przesłany przez serwer tzw. "publiczny klucz serwera" nie jest znany Twojemu komputerowi. W takim przypadku naciśnij przycisk "Tak". Ekran z rysunku 6.9 pojawi się także w przypadku, jeśli klucz publiczny serwera uległ zmianie. Ponieważ administratorzy zmieniają klucze serwerów bardzo rzadko, może to oznaczać, że jakiś obcy komputer próbuje podszyć się pod serwer, z którym chcesz uzyskać połączenie. Jeśli masz jakiekolwiek wątpliwości, kliknij przycisk "Nie" przerywając nawiązanie połączenia i skontaktuj się z administratorem serwera. Rys. 6.9 Nawiązywanie połączenia za pomocą programu PuTTY Po nawiązaniu połączenia i ewentualnym wprowadzeniu nazwy konta (jeśli nie skonfigurowałeś jej w parametrach danej sesji), serwer zapyta Cię o hasło (rys. 6.10). Wprowadzane przez Ciebie znaki nie będą wyświetlane na ekranie. Rys. 6.10 Widok okna programu PuTTY - autentykacja Jeśli hasło zostało poprawnie zweryfikowane przez serwer, możesz rozpocząć teraz zdalną sesję na serwerze (rys. 6.11). Cały przebieg sesji (łącznie z nazwą Twojego konta i hasłem) przesyłany jest poprzez sieć Internet w postaci zaszyfrowanej. Nie jest więc możliwe przechwycenie żadnych danych transmitowanych pomiędzy Twoim lokalnym komputerem a zdalnym serwerem. Polskie znaki diakrytyczne możesz wprowadzać zgodnie z tzw. klawiaturą programisty (posługując się prawym klawiszem Alt). Rys. 6.11 Widok okna programu PuTTY – praca z narzędziem Na zakończenie sesji wprowadź komendę exit, która wyloguje Cię z serwera i przerwie połączenie. Praca w systemie Linux Składnia Wszystkie (prawie) polecenia i aplikacje pisane dla systemu Linux mają taką samą składnię: komenda opcje argumenty co zrobić? jak zrobić? dla jakich danych? Poszczególne elementy składni są oddzielane znakiem odstępu. Komenda to nazwa programu lub polecenia powłoki. Opcje to element składni, który umożliwia modyfikację sposobu działania komendy. Może wystąpić, ale nie musi. Opcje to zwykle pojedycze litery poprzedzone znakiem minus, np: -k -l -p i jeśli dopuszczalne są takie trzy opcje to najczęściej można je zapisać jako -klp. Opcje mogą wymagać, aby bezpośrednio po oznaczeniu opcji wystąpił tekst (np: nazwa pliku). Opcja może więc mieć postać: -o program.o. W Linuksie używa się również opcji w postaci słowa poprzedzonego dwoma znakami minus, opcja może więc mieć postać - -help i nie oznacza połączenia czterech różnych opcji (-h -e -l -p) ale pojedynczą opcję. Ten sposób pisania opcji jest jednocześnie skróconą informacją o roli jaką pełni dana opcja. Zwykle opcje literowe i słowowe można używać zamiennie np: opcja -r jest równoważna opcji - -reverse i obydwie mogą oznaczać, np. to, że porządkowanie należy wykonać rosnąco zamiast malejąco. Argumenty to najczęściej nazwy plików, ale mogą mieć również inne znaczenie. W wielu poleceniach argumenty również mogą, ale nie muszą wystąpić. Argumenty zwykle określają jaki plik, czy też pliki należy potraktować jako dane. Jeśli argument nie występuje, to może być przyjmowany argument domyślny, np. bieżący katalog, dane będą wprowadzane z klawiatury itp., zależnie od polecenia. Listowanie katalogów Prześledzimy składnię polecenia listującego zawartość katalogu. W dokumentacji systemu ma ona postać: ls [OPTION]...[FILE]... Napisy, które mogą wystąpić ale nie muszą są zapisywane w nawiasach kwadratowych, dotyczy to jak widać zarówno opcji jak i argumentów. Trzy kropki oznaczają, że zarówno opcji jak i argumentów może być wiele. Takie reguły obowiązują w podręczniku systemowym. Prześledźmy kilka przykładów użycia polecenia ls. o ls wyprowadzi na monitor nazwy plików z bieżącego katalogu. W poleceniu nie występują ani opcje ani argumenty. o ls / wyprowadzi na monitor nazwy plików z katalogu /. W poleceniu nie występują opcje, występuje natomiast argument i jest nim katalog /. o ls -l wyprowadzi na monitor zawartość katalogu bieżącego, ale oprócz nazw plików pojawi się sporo więcej informacji na temat każdego pliku. o ls -l /etc wyprowadzi na monitor zawartość katalogu /etc z obszerną informacją o plikach. o ls -a wyprowadzi na monitor zawartość bieżącego katalogu z uwzględnieniem plików, których nazwy zaczynają się od kropki - zwykle są to pliki konfiguracyjne. W związku z tym, że polecenie ls -l jest wykonywane wielokrotnie zostało, po uzupełnieniu kilkoma opcjami (mającymi znaczenie tylko kosmetyczne) i po wzbogaceniu o stronicowanie, zastąpione (alias) poleceniem l. Można prześledzić działanie poniższych poleceń: • • • l l .. l -a Prawa dostępu do plików Podczas listowania katalogu np. poleceniem l -a wyświetlana jest np. następująca informacja: drwxr-x--drwxrwxr-x -rw-------rw-r--r--rw-r--r--rw-r--r-drwx------rw-------rw------drwx-----drwx-----drwx------rwx------ 57 24 1 1 1 1 5 1 1 2 2 2 1 user root user user user user user user user user user user user group root group group group group group group group group group group group 3072 1024 10246 24 151 1574 1024 12175 1161 1024 1024 1024 30 Jan Jan Jan Apr Mar Oct Jan Jan Dec Nov Jan Jan Jun 14 5 14 2 26 18 14 3 21 17 14 14 6 14:18 11:10 14:18 1998 1999 10:51 12:03 09:16 12:41 14:43 10:52 14:22 1997 ./ ../ .bash_history .bash_logout .bash_profile .bashrc .netscape/ .pinerc choinka prezenty/ mail/ nsmail/ zmien* i oznacza kolejno: • • • • • • • • typ pliku i prawa dostępu do niego, liczba dowiązań (na razie to pominiemy) właściciel pliku grupa pliku rozmiar (w bajtach) pliku data ostatniej modyfikacji pliku nazwa pliku znak określający rodzaj pliku: • / - katalog • * - plik wykonywalny • itd. Warto rozszyfrować informację o prawach dostępu do pliku i typie pliku (pierwszych dziesięć znaków z listy plików). Opis praw dostępu znajduje się na poniższym rysunku (rys. 6.12). Rys. 6.12 Prawa dostępu Nie wyczerpuje to wszystkich możliwości, ale z pozostałymi spotykamy się rzadziej i w tym miejscu nie będą omawiane. Prawa czytania, pisania czy też wykonania dla plików zwykłych są oczywiste. Takie same prawa nadajemy katalogom i to już nie jest takie oczywiste. Tak, więc: • • • Prawo czytania katalogu jest prawem czytania wyłacznie spisu plików - tzn. ich nazw, np. nie można odczytać ani praw dostępu do pliku, ani tym bardziej zawartości pliku, nawet jeśli mamy takie uprawnienia do pliku w tym katalogu. Prawo pisania do katalogu, które jest uprawnieniem do dopisywania plików, kasowania plików, a więc operowania na spisie. Przy czym jest prawem martwym, jeśli nie ma uprawnienia wykonania. Tworzenie nowych plików i kasowanie plików wymaga dostępu do i-węzła, czyli tworzenia względnie kasowania pełnej informacji o pliku. Prawo wykonania dla katalogu umożliwia dostęp do i-węzła, czyli możliwość odczytania adresu dyskowego pliku. I wykonania na nim tych operacji, do jakich mamy uprawnienia wynikające z uprawnień do pliku i katalogu. Jeśli więc chcemy czytać, tworzyć, poprawiać, kasować pliki w danym katalogu musimy mieć do niego prawa rwx. Powstaje pytanie kto nadaje uprawnienia plikom? Każdy nowo powstający plik otrzymuje uprawnienia zgodnie z konfiguracją powłoki w danym systemie. Każdy użytkownik może zdjąć uprawnienia dla wszystkich tworzonych plików przez zmianę konfiguracji powłoki. Każdy użytkownik może nadać dowolne uprawnienia pojedynczym plikom (tylko tym, których jest właścicielem). Jak? O tym później. Znaki uogólniające i inne ułatwienia Zanim przejdziemy do omawiania innych poleceń zapoznajmy się z ułatwieniami jakie daje powłoka bash - przydadzą się napewno. • Jeśli napiszesz kilka początkowych znaków polecenia, to po naciśnięciu znaku tabulacji[TAB] zostanie ono uzupełnione do pełnej nazwy, o ile będzie jedynym poleceniem zaczynającym się od znaków napisanych przez ciebie. Jeśli będzie ich więcej, to ponowne wciśnięcie znaku [TAB] wyświeti je wszystkie. Jeśli będzie ich zbyt dużo, to zostaniesz zapytany czy chcesz obejrzeć wszystkie możliwości. Np. Wydajesz polecenie: • • p[TAB] usłyszysz sygnał dźwiękowy, oznacza to, że poleceń zaczynających się od litery p jest więcej niż jedno. Jeśli napiszesz p[TAB][TAB] dostaniesz informację: There are 290 possibilities. Do you really • • • wish to see them all? (y or n) możesz więc otrzymać spis poleceń zaczynających się od litery p, ale jest ich aż 290. Możesz odpowiedzieć tak lub nie. Jeśli napiszesz • passw[TAB] otrzymasz napis • passwd i usłyszysz sygnał dźwiękowy, oznacza to, że jest więcej niż jedno polecenie zaczynające się od passwd ( litera d zostanie dopisana). Jeśli napiszesz • passw[TAB][TAB] dostaniesz spis złożony z dwóch poleceń: passwd passwd.noyp Jeśli napiszesz kilka początkowych znaków argumentu, to z bieżącego katalogu zostanie wybrany plik zaczynający się od napisanych znaków, o ile będzie jedyny. Dalej możesz postępować analogicznie jak porzednim punkcie. Tak więc, 2 znaki tabulacji napisane na pozycji polecenia, to nic innego jak wylistownia wszystkich poleceń znajdujących się na ścieżce przeszukiwania, a 2 znaki tabulacji wciśnięte na pozycji argumentu, to po prostu wylistowanie bieżącego katalogu. Poza tym możesz odwoływać się do historii wykonywanych poleceń wciskając ,,strzałkę do góry'' lub ,,strzałkę w dół''. Przydatne będą również znaki ugólniające zestawione w tabeli 8.1. Tabela 8.1 Znaki uogólniające stosowane w systemach uniksowych. znak zastępuje * dowolny ciąg znaków (również pusty) ? jeden znak [dowolny_ciąg_znaków jeden ze znaków występujących w ciągu. ] Przykłady: • ls ks* wyświetli nazwy plików zaczynają się od liter ks i wszystkie pliki zapisane w kartotech o nazwach zaczynających od liter ks, • ls ??aaa wyświetli listę plików, których nazwy składają się z 5 znaków i ostatnie trzy znaki to 3 litery "a" ( np.: weaaa 4daaa i tym podobne) oraz pliki zapisane w kartotech o nazwach spełniających ten warunek. • ls [abc]?x wyświetli listę plików, których nazwy zaczynają się od litery "a" lub od litery "b" bądź od litery "c", po których następuje dowolny znak i na końcu nazwy jest litera "x" (np.: atx box cfx i tym podobne) oraz pliki zapisane w kartotech o nazwach spełniających ten warunek. Przeglądanie plików tekstowych W systemach unix'owych dostępna jest duża ilość narzędzia pozwalających na pracę z tekstem. Są to zazwyczaj polecenia o prostej składni pozwalające na wykonanie konkretnych czynności. Poniżej zaprezentowano pewien wyselekcjonowany podzbiór tych narzędzi pozwalających na przeprowadzenie podstawowych operacji z plikami tekstowymi. • • • • • • • • more plik1 plik2 .. Przeglądanie plików strona po stronie, wiersz po wierszu (tylko do przodu) i na kilka innych sposobów. Jeśli chcesz się dowiedzieć jak wykonaj polecenie more dla pliku którego długość przekracza jeden ekran i wciśnij znak "h" (help) a dostaniesz potrzebną informację. less plik Polecenie analogiczne do poprzedniego, ale umożliwia przeglądanie do przodu i do tyłu. Jak? patrz wyżej. cat plik1 plik2 .. Łączy pliki i wynik tej operacji przesyła na monitor. Użyte do krótszego niż jeden ekran pliku pozwala na jego przeglądnięcie. nano plik Edytor tekstów. Łatwy ale niewiele w nim można. A przy pisaniu większych tekstów można przede wszystkim stracić cierpliwość i oczy. vi plik Edytor tekstów. Najstarszy i najbardziej zasłużony edytor unixowy. Dla posługujących się nim od lat jest edytorem kultowym. Trudno go jednak nazwać edytorem przyjaznym. Można w nim wszystko pod warunkiem że się wie jak. Wyjście z edytora z zapisem to: Esc a potem dwa razy Shift z tee plik Zapisze tekst wprowadzany z klawiatury do pliku i wyświetli go na monitorze bezpośrednio po każdej wprowadzonej linii. Chcąc zakończyć pisanie tekstu musisz w nowej linii wcisnąć [Ctrl-d]. head -n liczba plik Przeglądanie określonej -n liczby początkowych linii pliku. Jeśli pominiesz opcję -n liczba to ujrzysz 10 początkowych linii pliku. tail -n liczba plik Przeglądanie określonej -n liczby końcowych linii pliku. Jeśli pominiesz opcję -n liczba to ujrzysz 10 końcowych linii pliku. Wykonywanie podstawowych operacji na systemie plików Praca z systemem plików związana jest z wykonaniem podstawowych operacji takich jak tworzenie, kopiowanie czy zmiana nazw wybranych plików. Są to bardzo proste czynności jednak obecnie przyzwyczajenia związane z wykorzystaniem interfejsów graficznych powodują iż wiele osób ma problemy z wykonaniem tych czynności bez użycia narzędzi działających w trybie graficznym. Poniżej zestawiono podstawowe narzędzia pozwalające na proste zarządzanie systemem plików w systemie unix. Zakładanie katalogu, zmiana katalogu bieżącego: • • • mkdir katalog Jest to założenie nowego katalogu o nazwie katalog - nazwa ta może być dowolna. Będzie to pod katalog bieżącego katalogu. Jeśli chesz zobaczyć efekt wykonania takiego polecenia musisz wylistować bieżący katalog. cd ścieżka Bieżącym katalogiem stanie się ścieżka, która może być podana w sposób względny lub bezwzględny. cd ~ Katalogiem bieżącym staje się katalog domowy, bez względu na to, który katalog był bieżącym w chwili wydania tego polecenia, czyli jest to powrót do domu. Kasowanie plików zwykłych i katalogów: • • • • • rm plik1 plik2 ... Kasowanie wymienionych plików bez możliwości ich odtworzenia. rm -i plik1 plik2 ... Przy każdym kasowaniu pliku będzie się ukazywało żądanie potwierdzenia kasowania. W tym systemie rm jest równoważne z rm -i rm -r plik1 plik2 ... Kasownie wymienionych plików, przy czym pliki mogą być również katalogami. Jeśli plik jest katalogiem, to kasowane są również wszystkie pliki z wymienionego katalogu. Ze względu na wymieniną wyżej równoważność, będzie ukazywało się żądanie potwierdzenia kasowania przy każdym pliku i katalogu. rm -f plik1 plik2 ... Kasownie plików bez żądania potwierdzenia przy każdym kasowanym pliku. rmdir katalog ... Kasowanie katalogu. Katalog winien być wcześniej pusty. Kopiowanie i przesuwanie plików: • • • • • • cp plik1 plik2 Zostanie utworzona kopia pliku1 w pliku2. Jeśli plik2 był, wtedy jego zawartość zostanie utracona bezpowrotnie. cp -i plik1 plik2 Zostanie utworzona kopia pliku1 , ale jeśli plik2 był to zostaniesz zapytany czy chcesz napewno go stracić. W tym systemie powłoka została skonfigurowana tak, by zawsze tzn. nawet bez opcji -i było zadawane powyższe pytanie. cp plik... katalog Jest to druga forma polecenia cp i spowoduje utworzenie kopii plików w katalogu. Pozostałe uwagi pozostają bez zmian. mv plik1 plik2 Jest to przeniesienie pliku1 do pliku2. Jeśli plik2 był, wtedy jego zawartość zostanie utracona bezpowrotnie. mv -i plik1 plik2 Plik1 zostanie przeniesiony do pliku2 , ale jeśli plik2 był to zostaniesz zapytany czy chcesz napewno go stracić. mv plik... katalog Jest to druga forma polecenia mv i spowoduje przeniesienie kopii plików do katalogi. Pozostałe uwagi pozostają bez zmian. Procesy Proces to wykonujący się program. Każdy użytkownik może śledzić procesy. Temu służą polecenia ps, pstree i top. • ps Wyświetli procesy uruchomione z bieżącego terminala, np: PID TTY 11075 pts/2 27683 pts/2 TIME CMD 00:00:00 bash 00:00:07 netscape-commun 27693 pts/2 30932 pts/2 00:00:00 netscape-commun 00:00:00 ps gdzie: PID - identyfikator procesu. Każdy proces dostaje swój unikalny numer. Prcesy mogą mieć te same nazwy, ale ich identyfikatory będą różne. TTY - nazwa terminala, TIME - czas wykorzystany przez proces, CMD - nazwa programu. • • • • • • • • • ps -A Wyświetli wszystkie procesy. ps aux Polecenie ps może być wykonywane z kilkoma różnymi kluczami i tak kluczami (w powyższym są trzy klucze: a u x). Wyświetone zostaną wszystkie procesy, łącznie z procesami niezwiązanymi z żadnym terminalem (znak zapytania w kolumnie TTY) z obszerną informacją o każdym procesie. ps t terminal Zostaną wyświetlone procesy związane z terminalem. Nazwa terminala winna mieć postać taką jak w kolumnie TTY. pstree Wyświetli wszystkie procesy w postaci drzewa procesów. top Wyświetla na bieżąco wszystkie (dokładniej tyle ile mieści się na ekranie) procesy i ich stan. Przerwanie wyświetlania to wciśnięcie litery q. Jeśli chcemy przerwać proces (np. zawieszony lub zapętlony) musimy znać jegp PID. Do przerywania procesów można użyć klawiszy: [Ctrl-c] lub jeśli to nie da rezultatów polecenia kill. • • kill numer_procesu Jest to przerwanie procesu o PID = numer_procesu. A jeśli to nie pomoże to: kill -9 numer_procesu Jest to najmocnieszy sygnał przerwania, temu nie oprze się żaden proces (chyba, że nie jesteśmy jego właścicielami, ale na to nie ma rady). Zmiana praw dostępu • chmod u+x plik Właściciel (u) dostaje (+) prawo wykonania (x) pliku A oto pozostałe możliwości: • u - właściciel • g - grupa • o - pozostali • a - wszyscy • + - dostaje prawa • - - odejmowane są prawa • x - wykonania • r - czytania • w - pisania Jeśli więc napiszesz • chmod ug+wx plik to właściciel i grupa pliku dostaną uprawniennia wx, dotychczasowe uprawnienia pozostaną bez zmian. • chmod ddd plik W którym ddd trzy cyfry ósemkowe, (po jednej dla właściciela,grupy i pozostałych użytkowników systemu). Wartości poszczególnych uprawnień są następujące: • 1- prawo wykonania, • 2- prawo pisania • 4- prawo czytania a suma tych wartości określa uprawnienia dla określonego użytkownika np. 761 -> (1+2+4,2+4,1) i generuje uprawnienia rwxrw x Powyższe możliwości zmiany praw dostępu dotyczą istniejących już plików. Można również zażądać, by każdy nowo powstający plik miał inne niż przyjęte w danej konfiguracji prawa dostępu. Dokładniej, można zdjąć wybrane uprawnienia z każdego tworzonego pliku. Należy to zrobić dodając do pliku konfiguracyjnego np. pliku .bash_profile polecenie: • • umask ddd w którym ddd, podobnie jak powyżej są trzema cyframi ósemkowymi, ale w tym poleceniu oznaczają zdjęcie uprawnień wyznaczonych przez te cyfry, czyli umask 077 oznacza pozostawienie uprawnień wynikających z dotychczasowej konfiguracji dla właściciela i zdjęcie wszystkich uprawnień dla pozostałych użytkowników. Polecenia zmiany grupy i właściciela w większości implementacji systemów unix'owych może dokonywać wyłącznie administrator. Tak jest również w Linux'ie. Nie zaszkodzi jednak poznać te polecenia. • • chown nowy_właściciel plik plik zmienia właściciela na nowego_właściciela chgrp nowa_grupa plik plik zmienia grupę na nową_grupę Przeszukiwanie drzewa systemu - polecenie find Polecenie find jest jednym z podstawowych narzędzi administratora systemu. Może być wykorzystywane przez użytkowników. Służy do wykonywania polecenia na wielu plikach umieszczonych w różnych katalogach i spełniających wybrane kryterium. Budowa polecenia find jest na początku trochę przykra, ale jeśli spojrzymy na nie, tak jak to jest pokazane poniżej i prześledzimy kilka przykładów to wszystko stanie się jasne. • find gdzie_szukać według_jakiego_kryterium co_zrobić_ze_znalezionym PRZYKŁADY: • find / -name '*passwd*' -print w którym • gdzie_szukać to / i oznacza przeszukiwanie całego drzewa systemu, łącznie z wszystkimi zamontowanymi systemami plików, nawet jeśli są to systemy z odległych komputerów. Przeszukiwane będą tylko te gałęzie drzewa systemu, do których mamy uprawnienia, a o wszystkich próbach nieuprawnionego przeszukiwania zostaniemy poinformowani. Można uniknąć wyprowadzania tej informacji, ale o tym póżniej. • według_jakiego_kryterium to opcja -name '*passwd*' i oznacza poszukiwanie pliku, w którego nazwie występuje tekst passwd. Jak widać, w nazwach plików można wykorzystać znaki uogólniające, takie jak w powłoce, ale wtedy należy pamiętać, by nazwę pliku ująć w apostrofy, dzięki czemu znak uogólniający nie będzie • • • interpretowany przez powłokę a przez polecenie find. Jeśli w nazwach nie są umieszczane znaki uogólniające, to apostrofy można pominąć, • co_zrobić_ze_znalezionym to opcja -print i oznacza wyprowadzenie bezwględnej ścieżki dostępu znalezionych plików. find . -name '*.c' -exec less {} Pozwoli na przeglądnięcie poleceniem less wszystkich plików zawierających programy źródłowe w języku C a znajdujące się we wszystkich katalogach od katalogu bieżącego począwszy, ponieważ: • gdzie_szukać to . - przeszukiwanie od bieżącego katalogu począwszy. • według_jakiego_kryterium to opcja -name '*.c' i oznacza, że interesują nas pliki z rozszerzeniem c. • co_zrobić_ze_znalezionym ma postać -exec less {} \ i nakazuje wykonanie (-exec) polecenia less z argumentami w postaci znalezionych plików wstawionymi w miejsce nawiasów {}. Możemy zatem wykonać dowolne polecenie systemu ze znalezionymi wg wybranego kryterium plikami. Pamiętaj, by po napisaniu polecenia systemu w opcji -exec napisać odstęp a po nim \; - jest to niezbędne. find /tmp -atime +3 -and -uid +499 -print -exec rm -rf {} \; i spowoduje skasowanie wszystkich plików, które nie były używane od 3 dni i ich właścicielami są użytkownicy o UID większym niż 499 i znajdującymi się we wszystkich katalogach od katalogu /tmp począwszy, informacja o znalezionych plikach zostanie przekazana na monitor. find . -name '*.c'-ok less {} \; zamiast opcji -exec występuje opcja -ok spowoduje, że przed każdym wykonaniem polecenia less dla znalezionego pliku będziemy zapytani czy należy je wykonać. Różne Systemy unix'owe dysponują niezwykle bogatymi zestawami narzędzi pozwalających na wykonywanie różnorodnych zadań. Duża ilość narzędzi może spowodować pewną frustrację szczególnie w odniesieniu do początkujących użytkowników systemu. Aby ułatwić rozpoczęcie pracy poniżej wyselekcjonowano zestaw funkcji, które mogą być użyteczne w trakcie pracy z materiałem prezentowanym w niniejszej publikacji. • • • • • • • who Wyprowadzi na monitor informację o wszystkich pracujących użytkownikach. date Wyprowadza na monitor bieżącą datę i czas. du plik Podaje ile Kb zajmuje plik (1Kb = 1024b). Uwaga: liczba zajętych Kb nie jest równoważna rozmiarowi (temu, który otrzymujemy listując katalogi) pliku, ponieważ każdy plik zajmuje pełną liczbę bloków (1 blok = 1024 bajty). Jest to więc rzeczywisty obszar dysku zajmowany przez plik. Jako argument może być podana nazwa katalogu. wc plik Policzy ile jest linii, słów i znaków w pliku. wc -l plik Policzy ile jest linii w pliku. sort plik Uporządkuje alfabetycznie linie z pliku i wynik takiego uporządkowania wyprowadzi na monitor. sort -t'znak' -r -n -k od,do plik Polecenie sort umożliwia różnorodne sposoby sortowania. Każda linia zapisana w pliku • • • • • • • • • może być podzielona na pola. Znakiem oddzielającym pola może być dowolny znak podany przez użytkownika. Do tego służy opcja -t'znak'; jeśli opcja ta nie występuje, to znakiem oddzielającym pola jest odstęp lub znak tabulacji. Porządkować można biorąc pod uwagę całą linię lub tylko wybrane pola. Do wybierania pól, które posłużą do porządkowania można wykorzystać opcję -k od,do. Numeracja pól zaczyna się od 1. Opcję tę można również zapisać w postaci -k nr_pola, jeśli do sortowania posłuży jedno pole. Jeśli opcja ta nie występuje, to przy porządkowaniu bierze się pod uwagę całą linię. Porządkowanie może być alfabetyczne lub numeryczne. Chcąc przeprowadzić porządkowanie numeryczne należy użyć opcji -n. Sortownie alfabetyczne jest przyjmowane jako domyślne. Porządkować można rosnąco lub malejąco. Porządkownie rosnące jest przyjmowane domyślnie, natomiast użycie opcji -r pozwala na uporządkowanie malejące. grep 'tekst' plik ... Wyprowdzi na monitor te linie plików, w których znajduje się tekst. Znaki cudzysłowów w wielu przypadkach można pominąć, ale jeśli jednym ze znaków 'tekstu' są znaki specjalne powłoki np. odstęp,gwiazdka itp., wtedy cudzysłowy są niezbędne. Bezpieczniej jest umieszczać je zawsze. pwd Podaje bezwzględną ściężkę dostępu bieżącego katalogu. cut -d'znak' -f nr1-nr2 plik Wybiera z tekstu zapisanego w pliku pola od nr1 do nr2, pola oddzielane znakiem cut -d"znak " -f nr1,nr2 plik Wybiera z tekstu zapisanego w pliku pola nr1 i nr2, pola oddzielane znakiem tar cfv plik.tar plik ... Jest to tworzenie (klucz c) archiwum z plików w pliku (klucz f) o nazwie plik.tar. Podczas tworzenia archiwum będą wyświetlane nazwy plików (klucz v), z których tworzone jest archiwum. Dobrze jest przed tworzeniem archiwum z grupy plików zapisać je wszystkie w jednej kartotece i w kartotece nadrzędnej utworzyć archiwum za pomocą polecenia: • tar cfv katalog.tar katalog Zostanie utworzone archiwum z wszystkich plików katalogu w pliku katalog .tar. Podczas rozpakowywania archiwum zostanie utworzony katalog, a w niej będą umieszczone pliki uprzednio archiwizowane. tar xfv plik.tar Rozpakuje archiwum (klucz x) zapisane w pliku (klucz f) plik.tar. Podczas rozpakowywania archiwum będą wyświetlane nazwy plików, z których było utworzone archiwum (klucz v). gzip plik Jest to kompresja pliku, zostanie utworzony plik.gz, Plik pierwotny nie będzie zachowany. gzip -d plik.gz Jest to dekompresja pliku plik.gz. tar cfvz plik.tar.gz plik ... Kompresję pliku można zrobić jednocześnie z archiwizacją (klucz z). Kompresja jest wykonywan polecenie gzip. Dla skompresowanego w ten sposób archiwum plików często przyjmuje się nazwy postaci plik.tgz. Podręcznik (manual) i inne pomoce Dokumentacja systemu jest zapisywana na kilka sposobów. Jedną z podstawowych pomocy jest podręcznik systemowy - manual. • man polecenie Jest to bezpośrednie odwołanie się do strony podręcznika opisującej wybrane polecenie. Przeglądanie stron odbywa się za pomocą polecenia less. Podręcznik podzielony jest na rozdziały i przeglądany od rozdziału pierwszego począwszy. Tak więc, jeśli w systemie jest • • • • polecenie o nazwie ojojoj oraz funkcja biblioteki systemowej o tej samej nazwie, to przegląniemy opis polecenia ojojoj, bo one znajdują się w rozdziale pierwszym a funkcje systemowe w rozdziale drugim. Chcąc dotrzeć do opisu funkcji systemowej musisz napisać: • man 2 ojojoj xman & Jeśli pracujesz w trybie graficznym, to możesz napisać polecenie powyższe i klikać myszą do woli. Pamiętaj, by po nazwie polecenia napisać znak &. Pozwoli ci to na dalszą pracę na terminalu, z którego wydałeś polecenie, bo jest to przeniesienie wykonania polecenia w tło. Wszystkie aplikacje graficzne należy tak wywoływać, albo znaleźć odwołanie do nich z menu. apropos tekst Możesz znaleźć w podręczniku systemowym wszystko, co ma związek z napisanym tekstem, np. apropos color - wyprowadzi nazwy poleceń, funkcji i aplikacji mających związek z kolorami. whereis polecenie Pozwoli na znalezienie scieżki dostępu do wybranego polecenia i jego opisu w podręczniku systemowym. whatis polecenie Wyświetli krótki opis wybranego polecenia Pomoce związane z systemem możesz również uzyskać za pomocą polecenia • • info polecenie Dostaniesz opis tego polecenia. Sterownie przeglądaniem odpowiednich części tego opisu jest możliwe za pomocą tekstowego menu. Opis możliwości sterowania znajdziesz po uruchomieniu tego programu. Trochę czasu zajmie nauczenie się wędrowania po dokumentach, ale będzie to bardzo pomocne. Dokumenty w formacie "info" są zwykle najbardziej miarodajne. Tu mała uwaga. Ze względu na burzliwy rozwój systemu i na ogromną liczbę powstających aplikacji, dokumentacja nie zawsze jest w pełni aktualna. Braki w dokumentacji nie są uciążliwe i objawiają się rzadko. info Polecenie info może być wywołane bez argumentu, wtedy dostaniesz spis wszystkiego co jest opisane w formacie info. Linux w wielu dystrybucjach (np. Mandriva, Fedora, Ubuntu) jest dostarczany w postaci pakietów oprogramowania. Podczas instalacji systemu tworzona jest baza danych o zainstalowanych pakietach. Jeśli są instalowane nowe pakiety, to baza danych jest aktualizowana. Oczywiście, można również instalować oprogramowanie w inny sposób, ale wtedy baza danych nie będzie aktualizowana. W przypadku dystrybucji Mandriva lub Fedora nazwy pakietów mają rozszerzenie rpm i jest to skrót nazwy Red Hat Package Manager. Program instalujący pakiety nazywa się tak samo. Zawsze możesz sprawdzić jakie pakiety są zainstalowne. Możesz przeczytać informację o poszczególnych pakietach. Możesz dowiedzieć się jakie pliki wchodzą w skład pakietu. Możesz również dowiedzieć się w skład, którego pakietu wchodzi wybrany plik. Jak to zrobić? Patrz niżej. • • • rpm -qa Podaje listę wszystkich pakietów. rpm -qi wybrany_pakiet Podaje krótką informację o wybranym_pakiecie. rpm -ql wybrany_pakiet Podaje listę plików wchodzących w skład wybranego_pakietu Przygotowanie systemu do publikowania własnych stron WWW w Internecie Dokumenty opracowane w języku HTML (zwyczajowo kończących się rozszerzeniem .html lub .htm) stanowiące zawartość Twojego serwisu WWW muszą zostać umieszczone w podkatalogu public_html (i ewentualnie jego podkatalogach) w Twoim katalogu domowym. W celu skopiowania plików z Twojego lokalnego komputera na serwer 149.156.115.209 możesz posłużyć się protokołem ftp lub (bezpieczniej) scp. Prosimy o zwrócenie uwagi, że w systemie unix rozróżniane są wielkie i małe litery w nazwach plików. Nazwy plików, do których odwołujesz się w Twoich dokumentach HTML muszą być identyczne z rzeczywistymi nazwami plików na Twoim koncie shellowym. Najlepiej jest więc przyjąć zasadę używania wyłącznie małych liter w nazwach plików i nie stosowania w nich polskich znaków diakrytycznych. Na serwerze 149.156.115.209 musisz samodzielnie utworzyć w swoim katalogu domowym katalog public_html. Możesz w tym celu użyć tego samego programu, który posłuży Ci do transmisji plików. Możesz również zalogować się na swoim koncie shellowym przy pomocy protokołu telnet lub (lepiej) ssh i wykonać sekwencję poleceń: cd -przejdź do katalogu domowego mkdir public_html -utwórz podkatalog public_html chmod -nadaj wszystkim użytkownikom (a więc i serwerowi WWW) prawo przeszukania katalogu domowego chmod o+x public_html -nadaj wszystkim użytkownikom (a więc i serwerowi WWW) prawo przeszukania katalogu public_html Zwróć uwagę, że przyznanie użytkownikom prawa przeszukania katalogu ("x") nie oznacza równoczesnego nadania prawa jego odczytu ("r"). W takim przypadku inni użytkownicy serwera (w tym serwer WWW) nie mogą sprawdzić (wylistować) zawartości Twojego katalogu domowego ani jego podkatalogu public_html, mogą jedynie sprawdzić istnienie w nich zbioru o znanej sobie nazwie. Strona startowa (początkowa) twojego serwisu WWW powinna mieć nazwę: index.html, ewentualnie: index.htm, index.shtml, index.php, index.php4, index.php3 lub index.cgi. Serwer WWW stara się odnaleźć stronę początkową zawsze w podanej powyżej kolejności. Jeśli więc w katalogu public_html znajduje się plik o nazwie "index.html" oraz Twój plik o nazwie "index.htm", serwer WWW będzie nadal udostępniał ten pierwszy plik jako stronę początkową. Jeśli nie jest to zgodne z Twoimi intencjami, musisz usunąć ten plik lub zmienić mu nazwę. Prosimy również o zwrócenie uwagi, że serwer WWW musi mieć możliwość odczytu wszystkich plików, składających się na Twój serwis WWW. Jest to domyślne ustawienie dla wszystkich tworzonych przez Ciebie plików (również tych przesłanych na Twoje konto przy pomocy protokołu ftp lub scp, na ogół nie musisz się więc tym kłopotać. Z poziomu shella unixowego możesz nadać prawo odczytu danego pliku wszystkim użytkownikom, wydając komendę: "chmod o+r nazwa_pliku". Taki sam efekt dla wszystkich plików w bieżącym katalogu uzyskasz wydając komendę: "chmod o+r *". Natomiast polecenie "ls -l" wyświetli wykaz plików znajdujących się w Twoim bieżącym katalogu (rys. 6.13). Rys. 6.13 Listowanie katalogów na komputerze zdalnym Każda pozycja zawierająca opis pliku (lub katalogu) rozpoczyna się od ciągu 10 znaków opisujących prawa dostępu do pliku (oraz jego typ). Z punktu widzenia przygotowywanego serwisu WWW musisz zwrócić uwagę na pierwszy znak opisu (zawarty na rysunku w niebieskiej ramce) opisujący typ pliku i na trzy ostatnie znaki (zawarte w żółtej ramce) opisujące prawa dostępu do pliku dla wszystkich użytkowników. Dla zwykłych plików (symbol "-" w polu typu pliku) uprawnienia dla wszystkich użytkowników powinny być ustawione na "r--" (tylko prawo odczytu). Dla katalogów (symbol "d" w polu typu pliku) odpowiednie prawa dostępu powinny być ustawione na "r-x" (prawa odczytu i przeszukania). Twój prywatny serwis WWW dostępny jest pod adresem: http://149.156.115.209/~snumer_indexu (zwróć uwagę na obowiązkowy znak tyldy "~"). Zadania do wykonania 1. Wyszukaj w zasobach sieci internet program PuTTY i zainstaluj go lokalnie. 2. Za pomocą PuTTY połącz się ze zdalnym komputerem na którym chcesz pracować (np. 149.156.115.209 jako loginu użyj frazy sNumerIndexu, hasło zostanie podane przez prowadzącego zajęcia). 3. Załóż katalog o nazwie tmp. 4. Utwórz plik tekstowy zawierający Twoje imię i nazwisko 5. Dla nowoutworzonego pliku zmień prawa dostępu tak, by wszyscy użytkownicy systemu mogli go czytać, a jeśli mają takie prawa, to zmień je tak, by tylko właściciel pliku mógł czytać i poprawiać ten plik. 6. Wyświetl procesy. 7. Sprawdź ilu użytkowników pracuje na twoim komputerze. 8. Zmień hasło (Uwaga! zapisz sobie to hasło). Wróć do poprzedniego hasła. 9. Znajdź plik passwd w systemie. 10. Sprawdź w jakim katalogu pracujesz. 11. Utwórz plik o dowolnej nazwie zawierający twoje imię nie korzystając z edytora. 12. Przeglądnij opis komendy rm. 13. Załóż katalog pozwalający na publikowanie Twoich stron WWW w sieci (opis w tekście). 14. Utwórz za pomocą dowolnej metody opisanej w tekście plik tekstowy tmp.txt. 15. Umieść w utworzonym pliku następujący tekst: <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <title> Strona próbna!! </title> </head> <body> Witaj świecie!!! <BR> <B>Imię Nazwisko</B> </body> </html> 16. Zmień nazwę pliku na index.html 17. Sprawdź prawa dostępu do pliku. 18. Skasuj plik tmp.txt. 19. Policz ile linii ma plik index.html. 20. Sprawdź za pomocą przeglądarki internetowej swoją stronę.