Dydaktyka:
FeedbackDla uporządkowania gdzie trzymać które pliki, dla Linuksa powstał (na bazie zwyczajów z innych uniksopodobnych systemów) dokument Filesystem Hierarchy Standard określający jakie katalogi powinny istnieć w Linuksie i do czego należy je wykorzystywać.
W podręczniku systemowym na stronie hier
(i, w przypadku Linuksa używającego
systemd, też file-hierarchy
) mogą znajdować się informacje dotyczące
hierarchii plików w danym systemie.
Zadanie 1 Na podstawie FHS / man hier
odpowiedz do czego są przeznaczone katalogi:
• /bin
, /usr/bin
oraz /sbin
, /usr/sbin
• /lib
i /usr/lib
• /usr/share
• /etc
• /opt
• /root
i /home
• /tmp
• /var
Narzędzie locate
służy
do przeszukiwana wcześniej przygotowanej listy plików w systemie.
Lista plików (tzw. baza) jest zwykle aktualizowana codziennie – większość
dystrybucji razem z instalacją programu locate
do zaplanowanych
uruchamianych codziennie zadań dopisuje wywołanie aktualizującej listę plików
komendy updatedb
.
Współczesne implementacje programu locate
przed wyświetleniem nazwy pliku
sprawdzają czy plik dalej istnieje i czy użytkownik ma do niego dostęp.
Lista nazw wszystkich plików jest potencjalnym zagrożeniem bezpieczeństwa,
stąd dystrybucje stosują różne metody zabezpieczenia dostępu do niej.
Zadanie 2 Użyj komendy locate --statistics
do wyświetlenia statystyk
listy plików.
Jeśli podano opcję --regex
, wszystkie argumenty będą traktowane jako
wyrażenia regularne.
W przeciwnym razie każdy argument arg
który nie jest wzorcem1)
jest zmieniany na wzorzec *arg*
.
Zadanie 3 Porównaj działanie komend:
• locate 'stdint'
• locate '*stdint'
• locate --regex '.*stdint'
• locate --regex '.*stdint$'
locate
dopasowuje każdy argument do pełnej ścieżki do pliku (lub, z opcją
-b
, tylko nazwy pliku) i jeśli choć jeden argument pasuje, wypisuje nazwę
pliku na standardowe wyjście.
Jeśli podano opcję -A
(--all
), wszystkie argumenty muszą pasować do
pliku żeby jego nazwa została wypisana.
Zadanie 4 Porównaj działanie komend:
• locate -A bin ps to pdf
vs locate bin ps to pdf
• locate -b netpbm
vs locate netpbm
Po podaniu opcji -0
komenda locate
oddziela wypisywane nazwy plików
bajtem o wartości zero ('\0') zamiast nową linią ('\n').
Zadanie 5
Znajdź pliki o nazwie bin
.
Zadanie 6
Znajdź pliki zawierające w nazwie słowo pause
i w ścieżce katalog icons
.
Zadanie 7
Znajdź pliki zawierające w nazwie znak [
.
Narzędzie find
służy do
wyszukiwania plików: odwiedza rekurencyjnie podane katalogi i wykonuje
podane testy bądź akcje dla każdego kolejnego pliku.
Narzędzie find
jest włączone w
standard POSIX,
natomiast jego implementacje zwykle umieją dużo więcej niż wymaga POSIX.
W tych materiałach opisany jest program find
z GNU findutils
(powszechnie instalowany w dystrybucjach Linuksa).
Z istotnych opcji, polecenie find
ma dwie:
-L
nakazuje podążać za dowiązaniami symbolicznymi (domyślne),
-H
nie podąża za dowiązaniami symbolicznymi (i pozwala je wyszukać jako dowiązania).
find
ma specyficzną składnię – najpierw należy podać opcje, potem
listę przeszukiwanych ścieżek, na końcu testy i akcje.
Jeśli pominie się listę przeszukiwanych ścieżek, find
szuka w bieżącym katalogu.
Jeśli pominie się akcję, find
wypisze nazwy znalezionych plików na standardowe
wyjście.
Kolejność argumentów ma istotne znaczenie.
find -ls -name '*bash*'
wpierw wypisze znalezione pliki, a potem sprawdzi czy mają w nazwie słowo bash,
find -name '*bash*' -ls
wpierw sprawdzi czy znalezione pliki mają w nazwie słowo bash, a potem je wypisze.
Wybrane testy: | |
find … | dopasowuje: |
---|---|
-name pattern -iname pattern | nazwę pliku do wzorca pattern (wersja z -i ignoruje wielkość liter) |
-path pattern -ipath pattern | ścieżkę do wzorca pattern (wersja z -i ignoruje wielkość liter) |
-type {f|d|l|p|s|c|b} | rodzaj pliku – f zwykły, d katalog, l symlink, etc. |
-user name -group name | właściciela / grupę pliku |
-perm tryb -perm -tryb -perm /tryb | uprawnienia: dokładnie takie jak podano - wszystkie podane bity ustawione / choć jeden podany bit ustawiony tryb można zapisać ósemkowo ( 22 ) lub symbolicznie (go+w ) |
-size s | rozmiar; 512c oznacza 512B; 512M oznacza 512MB; -512c oznacza co najwyżej 512B, +512c oznacza co najmniej 512B Uwaga: domyślną jednostką, oznaczaną jako b , są bloki dyskowe, nie bajty |
-atime d / -amin min -ctime d / -cmin min -mtime d / -mmin min | czas dostępu, zmiany, modyfikacji w dniach (d) lub minutach (min) poprzedzenie czasu + oznacza ≥, a - oznacza ≤ niż podany |
Testy można:
-a
(oraz, przyjmowany jako domyślny jeśli nie podano innego) i -o
(lub) find -name baz -o -name bar
(
i )
, ale uwaga – nawiasy są znakiem specjalnym w powłoce, stąd \(
i \)
find -size -1M \( -name baz -o -name bar \)
!
find ! -type f ! -type d
Inne istotne testy:
-mindepth n
i -maxdepth n
określają jak głęboko schodzić wewnątrz katalogów.
-xdev
nie wchodzi do katalogów w których są zamontowane systemy plików.
Tzn: jeśli wyszukasz pliku w katalogu /
, to find nie będzie szukać wewnątrz katalogu /mnt/cdrom
jeśli podmontowano w nim zawartość płyty CD.
Wybrane akcje: | |
-print | domyślna akcja - wypisz nazwy oddzielone znakiem nowej linii |
-print0 | wypisz nazwy oddzielone znakiem '\0' |
-delete | usuwa pasujące pliki |
-exec … {} … ; | wykonuje podany program dla każdego znalezionego pliku z osobna (patrz niżej) |
-exec … {} + | wykonuje podany program dla wszystkich znalezionych plików razem (patrz niżej) |
find -exec program arg1 arg2 \{\} \;
znajdzie pliki: one
, two
i three
, to wykona:program arg1 arg2 one
program arg1 arg2 two
program arg1 arg2 three
Jeśli find -exec program arg1 arg2 \{\} +
znajdzie pliki: one
, two
i three
, to wykona:
program arg1 arg2 one two three
W -exec
każde wystąpienie wyrażenia {}
jest zastępowane nazwą pliku.
Uwaga: {}
(i ;
) są znakami specjalnymi dla powłoki, więc
trzeba je escape'ować (tzn. \{\}
) lub zamknąć w cudzysłowach ("{}"
).
Dla składni -exec … {} +
argument {}
musi wystąpić jednokrotnie jako
ostatni argument.
Zadanie 8 Wykonaj ze swojego katalogu domowego komendę find
(bez
argumentów), find .config/..
oraz find ~
.
Czym różnią się wyniki tych
komend?
Zadanie 9 Znajdź jedną komendą wszystkie pliki w katalogach /srv/
i /var/lib/zypp/
.
Zadanie 10 Znajdź pliki w katalogu domowym których nazwy kończą się
na .xml
.
Zadanie 11 Znajdź puste pliki w katalogu domowym.
Zadanie 12 Znajdź i wyświetl pliki z katalogu /usr/include
o rozmiarze
mniejszym bądź równym 32B.
Uwaga: dla find
jednostka b
lub brak jednostki to bloki dyskowe.
Bajty są oznaczane jednostką c
.
Zadanie 13 Znajdź wszystkie swoje pliki poza swoim katalogiem domowym.
Zadanie 14 Znajdź w katalogu domowym pliki, dla których grupa nie ma prawa do odczytu.
Zadanie 15
Wykonaj komendę: find \( -type d -ls \) -o \( -print \)
.
Kiedy jest uruchamiana akcja -ls
, a kiedy -print
?
Jak zadziała ta komenda bez nawiasów?