|
|
pl:dydaktyka:unix:lab_pliki_i_polecenia [2013/10/21 12:06] ikaf [Dowiązania symboliczne] |
pl:dydaktyka:unix:lab_pliki_i_polecenia [2019/06/27 15:50] |
====== Praca z plikami i poleceniami ====== | |
| |
<code> | |
- Po czym rozpoznać Unixa? | |
- Kot przebiegający po klawiaturze wpisuje poprawną komendę... | |
/* nadesłał: Grzegorz Mucha, IS 2012 */ | |
</code> | |
| |
| |
| |
===== 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 <code>-h|--help</code> | |
* 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'': | |
<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 atrybutów ==== | |
Przykład: | |
<cli> | |
$ 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 | |
</cli> | |
==== SUID, SGID i sTicky bit ==== | |
* SUID - //set user id// - pozwala na uruchomienie danego pliku z prawami właściciela tego pliku | |
<cli> | |
$ ls -l /usr/bin/passwd | |
-rwsr-xr-x 1 root root 31704 lis 14 15:41 /usr/bin/passwd | |
</cli> | |
* 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 | |
<cli> | |
$ ls -l | grep tmp | |
drwxrwxrwt 22 root root 12288 lis 14 15:41 tmp | |
</cli> | |
| |
==== 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: | |
<cli> | |
chmod u+r cruise; chmod u-w cruise | |
chmod g+x,o-r cruise | |
chmod u+s,g+s,+t tmp/ | |
</cli> | |
* 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: | |
<cli> | |
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 | |
</cli> | |
==== Domyślne prawa, umask ==== | |
<cli> | |
$ 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 | |
</cli> | |
| |
==== 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: | |
<cli> | |
$ 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 | |
</cli> | |
==== Zmiana właściciela ==== | |
| |
chown user plik | |
chgrp grupa plik | |
| |
Zmienić właściciela może tylko root. | |
| |
| |
==== - MC ==== | |
Uruchomić Midnight Commander, **mc** i zmienić prawa dostępu do wybranego pliku <key>C-x c</key>. | |
| |
==== - 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'' | |
<code> | |
-rwxrwxrwx N uzytkownik grupa rozmiar data nazwa | |
</code> | |
| |
===== Ć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'' (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, a jak do domowego (3 sposoby)? | |
* 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'' | |
| |
| |
| |
| |
| |
===== VARIA ===== | |
| |
Automatyczne generowanie listy obecności o poranku: | |
<cli> | |
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 | |
</cli> | |
| |
Jak założyć swoją stronę domową na serwerze //student//? | |
<cli> | |
$ 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 | |
</cli> | |