Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== 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ą: <code bash>man -f man</code> Odpowiednikiem tego wywołania jest: <code bash>whatis man</code> * Aby obejrzeć po kolei wszystkie strony dotyczące zadanego hasła: <code bash>man -a man</code> * Zbiór stron man można przeszukiwać według słów kluczowych: <code bash>man -k manual</code> Powyższe polecenie jest równoważne użyciu: <code bash>apropos manual</code> * Aby obejrzeć stronę związaną z danym hasłem z zadanej sekcji manuala: <code bash>man 1 man</code> === 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 <code>-h|--help</code> * Kolejność można zmieniać. * Krótkie opcje można scalać. * Przykłady wykorzystania opcji:<code bash> 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! </code> === 4. Praca z plikami === System plików ma strukturę drzewiastą: <code> / /bin /bin/bash /home /home/gjn /home/gjn/plik /home/gjn/katalog/plik </code> * 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'':<code> -rwxrwxrwx N uzytkownik grupa rozmiar data nazwa</code> * Prawa dostępu:<code> - rwx rwx rwx TYPE USER GROUP OTHERS</code> * Typy plików: ''TYPE: - d b c l p s'' * Przykład: <code bash> $ 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 </code> === 8. SUID, SGID i sTicky bit === * SUID - //set user id// - pozwala na uruchomienie programu z prawami właściciela tego pliku<code bash> $ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 31704 lis 14 15:41 /usr/bin/passwd </code> * 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 <code bash> $ ls -l | grep tmp drwxrwxrwt 22 root root 12288 lis 14 15:41 tmp </code> === 9. Zmiana praw dostępu === * Prawa dostępu zmienia się przy pomocy polecenia **chmod** (ang. //change mode//): <code>chmod prawa nazwa_pliku</code> * gdzie prawa: ''ugoa +-= rwx [, ugoa +-= rwx]'' * Na przykład:<code bash> chmod u+r cruise; chmod u-w cruise chmod g+x,o-r cruise chmod u+s,g+s,+t tmp/ </code> * Numeryczne prawa dostępu <code> r=4, w=2, x=1 su=4, sg=2, t=1 chmod NNNN plik</code> * Na przykład: <code bash> 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 </code> * Administrator może zmieniać właściciela **chown** i grupę **chgrp** pliku: <code bash> chown user plik chgrp grupa plik</code> === 10. Domyślne prawa, umask === <code bash> $ 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 </code> === 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: <code bash> $ 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 </code> === 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'': <code bash>ln -s plik dowiazanie</code> * 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''<code> -rwxrwxrwx N uzytkownik grupa rozmiar data nazwa </code> === 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 <key>C-x</key> (więcej na [[.:lab_shell|kolejnych zajęciach]]) * dostęp do klawiszy <key>Fn</key> (np. <key>F1</key>) przez <key>Esc-n</key> (np. <key>Esc-1</key>) * //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:<code> 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</code> * pliki można zakładać przy pomocy jednego z poleceń: <code bash> echo "jakis napis" > plik # tworzy plik o nazwie "plik" z zawartoscia "jakis napis" touch plik # tworzy pusty plik o nazwie "plik"</code> * 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: <code bash> ls -ld /tmp ls -l /usr/bin/passwd</code> === IV. Linki === * przeczytać opis do //ln(1)// * stworzyć dowiązania symboliczne do plików przy pomocy ''ln -s'': <code bash>ln -s plik dowiazanie</code> * 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''. courses/unix/lab_files.txt Last modified: 13 months agoby kkt