====== Praca z plikami i poleceniami ====== - Po czym rozpoznać Unixa? - Kot przebiegający po klawiaturze wpisuje poprawną komendę... /* nadesłał: Grzegorz Mucha, IS 2012 */ ===== DO PRZYGOTOWANIA ===== Samodzielnie należy przed tym laboratorium przygotować: * praca z man, * przeczytać artykuł //{{:pl:dydaktyka:unix:gjn-dokumentacja.pdf|Korzystanie z dokumentacji GNU/Linux}}// * przeanalizować w jaki sposób wyglądają strony man, z jakich części się składają? ===== WPROWADZENIE ===== ==== Uruchamianie programów ==== * Pliki programów są przechowywane w systemie plików. * Każdy plik programu w systemie ma nazwę (//case sensitive//). * Program jest uruchamiany przez powłokę poprzez podanie nazwy jego pliku. * Powłoka zapewnia mechanizmy kontroli pracy uruchamianych zadań (ang. //job//), programów. * Powłoka zapewnia mechanizmy przekazywania wyników pracy zadań. ==== Argumenty poleceń ==== * Polecenia mogą przyjmować argumenty. * Argumenty mogą być obowiązkowe (np. nazwa pliku) lub opcjonalne (tzw. opcje). * Niektóre opcje przyjmują dodatkowe argumenty (obowiązkowe, lub opcjonalne). * Nazwy opcji maja format długi i krótki. * Argumenty są //case sensitive//. * Spis opcji programu jest podany w man lub przez opcje -h|--help * Kolejność można zmieniać, przestawianie * opcje można scalać. ==== Opcje - przykłady ==== Format długi, krótki: ls -a ; ls --all Przestawianie: ls -a -l ; ls -l -a Argumenty: ls --ignore=\*.png ; ls -I \*.png Scalanie: DOBRZE: ls -al ; ls -la ; ls -alI \*.png ŹLE!!! ls -Ila \*.png ==== Praca z plikami ==== System plików ma strukturę drzewiastą: / /bin /bin/bash /home /home/gjn /home/gjn/plik /home/gjn/katalog/plik ==== Praca z plikami ==== * Jest zawsze tylko jedna taka struktura podczas pracy systemu. * W związku z tym zawsze jest bezwzględny początek ///// systemu plików. * Inne systemy mogą być włączane jako kolejne gałęzie. * Katalog bieżący: //.// katalog nadrzędny //..// * Katalog jest plikiem! ==== Nazewnictwo ==== * Wszystkie pliki i katalogi mają nazwy będące ciągami znaków alfanumerycznych. * Nazwy mogą być długie i są //case sensitive//. * Katalogi rozdziela się znakiem ///// (ang. //slash//). * Ścieżka dostępu to nazwa pliku pozwalająca na jego umiejscowienie. * Pełna (bezwzględna) ścieżka określa jego położenie względem początku drzewa, zaczyna się od /////, np. ///etc/X11/XF86config//. * Względna ścieżka określa położenie względem katalogu bieżącego. * ''~user'' oznacza katalog domowy użytkownika ''user'' (mechanizm na poziomie powłoki, nie systemu plików!) ==== Polecenia dotyczące plików ==== * **cp** kopiowanie * **mv** przenoszenie, zmiana nazwy * **rm** usuwanie * **touch** zakładanie pustego, modyfikacja daty * **file** typ pliku ==== Polecenia dotyczące katalogów ==== * **cd** zmiana bieżącego * **pwd** podanie bieżącego * **mkdir** zakładanie * **rmdir** usuwanie (pustego!) * **ls** pokazywanie zawartości * **du** pokazywanie objętości (również pliku) ==== Metaznaki ==== W nazwach plików do których użytkownik odwołuje się w powłoce można używać 2 znaków specjalnych, które zastępują ciągi znaków w nazwie pliku (ścieżce dostępu): * znak ''?'' zastępuje dokładnie jeden znak, * znak ''*'' zastępuje ciąg znaków o dowolnej (w tym zerowej) długości. ==== Prawa dostępu ==== * Każdy plik ma określone prawa dostępu regulujące jaki dostęp mają do niego użytkownicy. * Podstawowe atrybuty pliku określają możliwości jego: * odczytu //read// * zapisu //write// * uruchamiania //execute// ==== Właściciele pliku ==== * Każdy plik ma właściciela i jest przypisany do grupy właścicieli. * Z tego punktu widzenia użytkownicy systemu dzielą się na: * właściciela //user// * grupę właścicieli //group// * pozostałych użytkowników //others// (//others = all - user - group//) ==== Atrybuty pliku ==== Wynik polecenia ''ls -l'': -rwxrwxrwx N uzytkownik grupa rozmiar data nazwa Prawa dostępu - rwx rwx rwx TYPE USER GROUP OTHERS Typy plików: ''TYPE: - d b c l p s'' ==== Przykład atrybutów ==== Przykład: $ ls -l cruise -rw-r--r-- 1 tom staff 683 Jul 4 2000 cruise $ ls -l /tmp/cruise -rwxr-xr-x 1 tom staff 783 Jul 4 2000 /tmp/cruise ==== SUID, SGID i sTicky bit ==== * SUID - //set user id// - pozwala na uruchomienie programu z prawami właściciela tego pliku $ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 31704 lis 14 15:41 /usr/bin/passwd * SGID - //set group id// - pozwala na uruchomienie danego pliku z prawami grupy tego pliku * SGID - //set group id// - w przypadku katalogu, sprawia, że nowotworzone pliki, należą do tej grupy, do której należy katalog, a nie do grupy z uprawnieniami której pracuje użytkownik * sTicky bit - pliki w katalogu z ustawionym sticky bit mogą być usuwane lub zmieniane tylko przez właściciela danego pliku lub katalogu $ ls -l | grep tmp drwxrwxrwt 22 root root 12288 lis 14 15:41 tmp ==== Zmiana praw dostępu ==== * Prawa dostępu zmienia się przy pomocy polecenia **chmod** (ang. //change mode//): chmod prawa nazwa_pliku * gdzie prawa: ''ugoa +-= rwx [, ugoa +-= rwx]'' * Na przykład: chmod u+r cruise; chmod u-w cruise chmod g+x,o-r cruise chmod u+s,g+s,+t tmp/ * administrator może zmieniać właściciela **chown** i grupę **chgrp** pliku. ==== Numeryczne prawa dostępu ==== r=4, w=2, x=1 su=4, sg=2, t=1 chmod NNNN plik na przykład: chmod 755 plik chmod u=rwx,g=rx,o=rx plik chmod 644 plik chmod u=rw,g=r,o=r plik chmod 44 plik chmod 0044 plik ==== Domyślne prawa, umask ==== $ umask 0022 $ umask -S u=rwx,g=rx,o=rx $ touch nowy1 ; ls -l nowy1 -rw-r--r-- 1 gjn gjn 0 Feb 26 20:39 nowy1 $ umask 700 ; touch nowy2 ; ls -l nowy2 ----rw-rw- 1 gjn gjn 0 Feb 26 20:40 nowy2 $ umask 077 ; touch nowy3 ; ls -l nowy3 -rw------- 1 gjn gjn 0 Feb 26 20:40 nowy3 $ umask 000 ; touch nowy4 ; ls -l nowy4 -rw-rw-rw- 1 gjn gjn 0 Feb 26 20:40 nowy4 ==== Prawa do katalogów ==== * //write// -> zapis do katalogu * //read// -> odczyt zawartości (spisu plików!), możliwość wykonania **ls** * //execute// -> dostęp do zawartości (plików), możliwość wykonania **cd** Przykład: $ chmod a=rx katalog $ ls katalog plik $ cd katalog $ cd .. $ chmod a=r katalog ; ls katalog plik $ cd katalog sh: cd: katalog: Permission denied $ chmod a=x katalog ; cd katalog $ ls ls: .: Permission denied ==== Zmiana właściciela ==== chown user plik chgrp grupa plik Zmienić właściciela może tylko root. ==== Dowiązania symboliczne ==== * są wskaźnikami, skrótami do plików, * pozwalają na udostępnianie pliku pod różnymi nazwami, w różnych katalogach, * tworzenie przy pomocy ''ln -s'': ln -s plik dowiazanie * polecenie ''ls -L'' wyświetla pliki na które wskazuje link symboliczny. * bez opcji ''-s'' -> dowiązania sztywne, * liczba dowiązań sztywnych do pliku to ''N'' w ''ls -l'' -rwxrwxrwx N uzytkownik grupa rozmiar data nazwa ==== Midnight Commander ==== Jest to program do zarządzania plikami. Obsługuje się go podobnie jak inne typu "commander". Dodatkowo: * zmiana praw dostępu: C-x c * dostęp do klawiszy Fn przez ESC n * //lynx-like motion// w konfiguracji * wiele innych możliwości... Z MC dostępney jest edytor **mcedit**. ===== ĆWICZENIA ===== ==== - Polecenia ==== * sprawdzić w manualu opis poleceń //ls(1)// //cp(1)// //mkdir(1)// //rm(1)// * jakie opcje tych poleceń wyświetlają opis argumentów? * w przypadku **ls** przetestować działanie opcji ''l a A F d R'', w przypadku **mkdir** opcji ''p m'', dla **rm** ''f'' i ''R'' * dla poznanych powyżej opcji przetestować przestawianie i łączenie * znaleźć opcje **ls**, które przyjmują argumenty; przetestować je; na co należy zwrócić uwagę przy scalaniu? * należy sprawdzić, czy nie są zdefiniowane aliasy zmieniające pracę używanych poleceń (polecenie un/alias) * przy czytaniu manuala można przełączyć sesję na pracę w języku polskim przy pomocy ''export LANG=pl_PL.UTF-8'' (o ile jest dostępny), można też spróbować ustawić inne języki, np. ''fr_FR'', czy ''de_DE''. ==== - Pliki ==== * prztestować działanie wszystkich poznanych poleceń do obsługi plików i katalogów * jak przejść do katalogu domowego na różne sposoby? * w katalogu domowym założyć taką strukturę katalogów i plików: unix/ unix/lab2/ unix/lab2/alfa/ unix/lab2/alfa/one unix/lab2/beta/ unix/lab2/beta/two unix/lab2/beta/prima/ unix/lab2/beta/prima/three Pliki należy zakładać przy pomocy jednego z poleceń: echo "jakis napis" > plik touch plik Wynik można sprawdzić przy pomocy **tree**. * poruszając sie po stworzonej strukturze należy przetestować działanie poleceń **cd** i **pwd** wykorzystując bezwzględne i względne ścieżki dostępu, a tym katalogi specjalne ''.'' i ''..'' * przetestować działanie metaznaków (gwiazdka, pytajnik) z poleceniem **ls** w katalogu ///usr/bin// * jak przejść do katalogu poprzedniego? * jak przejść do katalogu domowego podanego użytkownika? ==== - Prawa dostępu ==== * przeczytać podręcznik do **chmod** i sprawdzić sposób działania polecenia * przetestować zmiany praw dostępu na plikach stworzonych w strukturze //unix/lab2// * odczyt testować przy pomocy ''cat plik'' * zapis przy pomocy ''echo "cos" >> plik'' * uruchamianie przy pomocy ''./plik'' * wykonać ćwiczenie podobne do powyższego, tak aby obserwować wpływ zmiany praw dostępu na możliwości dostępu do plików drugiej osoby * prawa dostępu na katalogach - ćwiczenie należy wykonywać w parach, próbując czytać pliki w katalogach drugiej osoby: czym różni się //read// od //execute//? sprawdzić działanie **pwd**, **ls** i cd przy różnych kombinacjach tych praw (szczególnie: tylko //read//, tylko //execute//) * opcja ''-R'' polecenia **chmod** powoduje rekursywną zmianę praw dostępu do zawartości katalogu. * jakie muszą być spełnione warunki aby użytkownik A mógł tworzyć katalogi w katalogu, który należy do użytkownika B, a co wystarczy do zapisu plików w katalogu? * prawa numeryczne: sposób działania i użycie; czym się różnią od symbolicznych? * numeryczne prawa dostępu a polecenie umask, sprawdzić działanie dla różnych wartości. * oglądnąć bity //SUIG/sTicky// na plikach/katalogach: ls -ld /tmp ls -l /usr/bin/passwd ==== - Linki ==== * przeczytać opis do //ln(1)// * stworzyć dowiązania symboliczne do plików przy pomocy ''ln -s'' ln -s plik dowiazanie * co się dzieje przy czytaniu, zapisywaniu, uruchamianiu dowiązania? * co przy jego usuwaniu?, a co przy usuwaniu samego pliku? * sprawdzić działanie dowiązań do katalogów; jak działa **pwd**, co dają opcje ''P L'' ==== - MC ==== Uruchomić Midnight Commander, **mc** i zmienić prawa dostępu do wybranego pliku C-x c. ===== VARIA ===== Automatyczne generowanie listy obecności o poranku: gjn:~$ who|awk '{print $1;}'|sort|uniq|xargs -i"{}" grep "{}" /etc/passwd|cut -d : -f5|cut -d, -f1|awk '{print $2,$1;}' |sed s/\ /,/g |sort >unix08-0800.cvs Jak założyć swoją stronę domową na serwerze //student//? $ cd $ mkdir public_html $ echo "to jest test strony uzytkownika: $USER" > public_html/index.html $ chmod o+x . $ chmod u+rwx,g=,o=x public_html $ chmod a+r public_html/index.html