Dla 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 oneprogram arg1 arg2 twoprogram 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?