===== Praca z plikami i poleceniami ===== ==== Przygotuj się do laboratorium ==== * **Zdobądź dane dostępowe do [[https://spk.fais.uj.edu.pl/|serwera SPK]]** -- jeżeli ich nie pamiętasz (albo nie wiesz czy masz konto), pomogą w tym administratorzy ([[https://spk.fais.uj.edu.pl/contact|dane kontaktowe]]) * Zapoznaj się z poleceniem **chmod** (przejrzyj manual do polecenia **chmod** i/lub [[wp>Chmod|stronę w wikipedii]]) ==== Wiedza ==== === 1. Pomoc === * Znasz już manuala: **man** * Pracę z manualem warto zacząć od ''man man'' * Jeżeli z poleceniem związanych jest więcej niż jedna strona podręcznika, można wyświetlić krótki opis każdej z nich za pomocą: man -f man Odpowiednikiem tego wywołania jest: whatis man * Aby obejrzeć po kolei wszystkie strony dotyczące zadanego hasła: man -a man * Zbiór stron man można przeszukiwać według słów kluczowych: man -k manual Powyższe polecenie jest równoważne użyciu: apropos manual * Aby obejrzeć stronę związaną z danym hasłem z zadanej sekcji manuala: man 1 man === 2. 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ń. === 3. 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ć. * Krótkie opcje można scalać. * Przykłady wykorzystania opcji: ls --all # format długi ls -a # format krótki # zmiana kolejności opcji: ls -a -l ls -l -a # przekazanie argumentów ls --ignore=\*.png # format długi ls -I \*.png # format krótki # scalanie opcji ls -al # OK ls -la # OK ls -alI \*.png # OK ls -Ila \*.png # ŹLE! === 4. Praca z plikami === System plików ma strukturę drzewiastą: / /bin /bin/bash /home /home/gjn /home/gjn/plik /home/gjn/katalog/plik * 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/init.d/cups''. * 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!) === 5. Polecenia dotyczące plików i katalogów === Pliki: * **cp** kopiowanie * **mv** przenoszenie, zmiana nazwy * **rm** usuwanie * **touch** zakładanie pustego, modyfikacja daty * **file** typ pliku Katalogi: * **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) W nazwach plików do których użytkownik odwołuje się w powłoce można używać 2 **metaznaków** (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. === 6. 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 //**r**ead// * zapisu //**w**rite// * uruchamiania //e**x**ecute// * 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//) === 7. 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: $ 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 === 8. 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 nowo-tworzone 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 === 9. 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/ * 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 * Administrator może zmieniać właściciela **chown** i grupę **chgrp** pliku: chown user plik chgrp grupa plik === 10. 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 === 11. 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 === 12. 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 === 13. 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'' * notacja C-x oznacza: wciśnij równocześnie C-x (więcej na [[.:lab_shell|kolejnych zajęciach]]) * dostęp do klawiszy Fn (np. F1) przez Esc-n (np. Esc-1) * //lynx-like motion// w konfiguracji * wiele innych możliwości... Z MC dostępny jest edytor: **mcedit**. ==== Ćwiczenia ==== === I. 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ć zmianę kolejności i łączenie * znaleźć opcje **ls**, które przyjmują argumenty; przetestować je; na co należy zwrócić uwagę przy łączeniu? * 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 dla danej strony), można też spróbować ustawić inne języki, np. ''fr_FR.UTF-8'', czy ''de_DE.UTF-8''. === II. Pliki === * przetestować 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 można zakładać przy pomocy jednego z poleceń: echo "jakis napis" > plik # tworzy plik o nazwie "plik" z zawartoscia "jakis napis" touch plik # tworzy pusty plik o nazwie "plik" * wynik można sprawdzić przy pomocy **tree** (o ile jest dostępne w systemie) * poruszając się 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? === III. 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ć ćwiczenia w parach (wykonanie ćwiczeń w parach uzależnione jest od aktualnej konfiguracji systemu) * ćwiczenie podobne do powyższego, aby obserwować wpływ zmiany praw dostępu na możliwości dostępu do plików drugiej osoby * prawa dostępu na katalogach - próbuj 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//) * 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 === IV. 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'' === V. Midnight Commander === * Uruchomić Midnight Commander, **mc** i zmienić prawa dostępu do wybranego pliku za pomocą ''C-x c''.