====== 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