Polecenia: man, apropos, stat, grep, find


meta: polecenia, man, apropos, stat, grep, find


Polecenia: man, apropos, stat, grep, find

Niejednokrotnie zdarzy się sytuacja w której poznamy nowe polecenie, ale nie będziemy wiedzieli w jaki sposób z niego skorzystać. Człowiek nie jest w stanie zapamiętać wszystkiego, a jeżeli z czegoś nie korzysta często może nie pamiętać co dokładanie dane polecenie lub opcja robi. Z tych dwóch powodów twórcy systemu Linux stworzyli kilka udogodnień dających możliwość poznania, uzupełnienia lub/i poszerzenia naszej wiedzy. Dzięki temu nie musimy intensywnie korzystać z internetu ponieważ w większości przypadków wystarczą nam informacje z podręcznika systemowego. W tym artykule poznamy sposoby korzystania z tego typu dobrodziejstw.

Podręcznik man

Najprostszym sposobem uzyskania informacji o jakimś poleceniu jest użycie polecenia man. W ten sposób mamy dostęp do dokumentacji zawierającej informacje dotyczące każdego polecenia. Chociaż na pierwszy rzut oka wydawać by się mogło, iż treść zawarta w tych podręcznikach jest trochę zagmatwana to, po wnikliwym wczytaniu się w jego treść jesteśmy w stanie odnaleźć odpowiedzi na większość pytań. Wyświetlmy dokumentację wcześniej poznanego polecenia ls:

kali@kali:~$ man ls

Niestety aby ukazać co mi się wyświetliło musiałbym przekopiować całą dokumentację na temat polecenia ls. Sporo linijek wkleiłbym dlatego postanowiłem, że skupię się jedynie na opisie.

Jak widzicie przed swoimi oczami uruchomiony został edytor tekstowy w którym opisane jest powyższe polecenie. Po wciśnięciu literki „h” będąc w podręczniku otrzymamy listę dostępnych skrótów klawiszowych potrzebnych do poruszania się. Te z których ja najczęściej korzystam przedstawiam poniżej:

strzałka w dół – przesuwa tekst po linijce do dołu

strzałka w górę – przesuwa tekst po linijce do góry

Page Down – przesuwa po kilka linijek w dół (o całą stronę)

Page Up – przesuwa po kilka linijek w górę (o całą stronę)

/ – po wciśnięciu tego klawisza otrzymujemy możliwość przeszukiwania dokumentacji polecenia poprzez wpisanie poszukiwanej przez nas frazy

q – kończy działanie programu oraz wcześniej wybranych opcji.

Polecenie apropos

Chociaż polecenie man powinno w większości przypadków wystarczyć to może wydarzyć się taka sytuacja iż informacje o poszukiwanym poleceniu będą znajdowały się w kilku różnych miejscach. Nie wszystkie informacje są zawarte w podręczniku man. Do wyszukania treści innych niż te z podręcznika posłuży nam polecenie apropos. Spójrzmy na poniższy przykład:

kali@kali:~$ apropos ls
add-shell (8)        - add shells to the list of valid login shells
atril-thumbnailer (1) - create png thumbnails from atril supported documents
blkls (1)            - List or output file system data units.
….
kali@kali:~$

Po wpisaniu apropos ls ukazała się spora lista podręczników, ułożonych alfabetycznie. Wkleiłem tylko trzy jakie u mnie się wyświetliły ponieważ taka ilość wystarczy by wyjaśnić działanie narzędzia. Cała lista posiada w swoim repertuarze informacje dotyczące polecenia ls porozrzucane po różnych dokumentacjach. Chociaż jeżeli użyjemy jedynie polecenia man ls to na 99% zostanie wyświetlony podręcznik o który nam chodzi. Natomiast polecenie apropos może służyć jako pewnego rodzaju alternatywa gdy nie uda nam się znaleźć poszukiwanej informacji w standardowej dokumentacji man.

Dzienniki i sekcje

Jeżeli uważnie przyjrzałeś się przykładowi zauważyłeś, że za nazwą polecenia znajduje się w nawiasie cyfra. Każda z tych cyfr zawiera dziennik z innym rodzajem informacji. Jaśniej pisząc, każda cyfra od 1 do 9 ma przypisaną swoją własną sekcję, czyli są do niej przypisane innego rodzaju pliki, funkcje. Przykładowo 8 zawiera informacje dotyczące poleceń do zarządzania systemem Linux poprzez użytkownika root. W ten sposób łatwiej jesteśmy w stanie odnaleźć informacje jeżeli wiemy w jakim celu chcemy skorzystać z danego polecenia. Pełny spis wraz z opisami przedstawiam poniżej:

1 – polecenia powłoki, programy w systemie

2 – wywołania jądra systemowego

3 – wywołania bibliotek systemowych

4 – pliki urządzeń

5 – formaty plików

6 – gry

7 – streszczenia podręczników man

8 – informacje dotyczące poleceń do zarządzania systemem Linux przez użytkownika root

9 – podprogramy jądra systemu

Polecenie stat

W artykule dotyczącym pwd, ls, cd poznaliśmy polecenie ls, które jest wykorzystywane w każdym innym artykule dotyczącym konsoli. Chociaż dostarcza ono nam naprawdę sporo informacji o plikach i katalogach to jednak nie są to wszystkie informacje jakie możemy poznać. Aby uzyskać podstawowe dane jak najbardziej należy skorzystać z polecenia ls lecz jeżeli potrzebujemy danych technicznych lepszym narzędziem okaże się polecenie stat. Porównajmy oba polecenia w prostym przykładzie:

kali@kali:~$ touch stat
kali@kali:~$ ls stat
stat
kali@kali:~$ stat stat
  File: stat
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d      Inode: 1572948     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    kali)   Gid: ( 1000/    kali)
Access: 2020-10-04 08:15:18.927609103 -0400
Modify: 2020-10-04 08:15:18.927609103 -0400
Change: 2020-10-04 08:15:18.927609103 -0400
 Birth: -
kali@kali:~$ 

Jak widać różnica jest ogromna. Opiszmy jakie informacje otrzymaliśmy przy pomocy polecenia stat. W pierwszej linijce widnieje nazwa pliku. Kolejna mówi nam o rozmiarze oraz typie. Trzecia w kolejności:

O miejscu na jakim urządzeniu znajduje się dany plik oraz o ilości dowiązań do niego.

Kolejny wiersz to nic innego niż prawa dostępu do pliku o których wspominałem w artykule Uprawnienia i system Kali Linux.

Ostatnie trzy przedstawiają kolejno: Ostatni dostęp do pliku, Modyfikację, oraz Datę zmiany objętości pliku.

Jeżeli będziemy korzystali z tego narzędzia to tylko w ten sposób w jaki opisałem. Jak chcesz uzyskać więcej informacji na jego temat skorzystaj z wcześniej poznanego polecenia man.

Dopełnienia nazw


meta: polecenia, man, apropos, stat, grep, find


Jeżeli używasz już trochę trybu tekstowego zauważyłeś/aś pewną niedogodność. Gdy chcesz zrobić coś z plikami, które zawierają dość długie nazwy to samo wpisanie ich nazwy zajmuje bardzo dużo czasu. Zawsze możemy się pomylić, popełnić jakąś literówkę, a akurat się spieszymy. W przeglądarkach internetowych jeżeli nie wyczyszczamy historii przeglądanych stron to po wpisaniu kilku liter pojawia nam się lista stron o podobnych nazwach.

W systemie Linux pomyślano i o tym dlatego stworzono system dopełnień, dzięki któremu po wpisaniu kilku pierwszych liter nazwy pliku cała pozostała nazwa zostanie uzupełniona. Do tego zadania posłuży nam klawisz tabulatora. Jak on działa? Otóż kiedy mamy plik o długiej nazwie wystarczy wpisać kilka pierwszych liter i wcisnąć klawisz [tab]. Jeżeli tylko jeden plik ma na początku litery które wpisaliśmy nazwa zostanie uzupełniona o brakującą część. Jeżeli jest ich kilka lub chociażby dwa to zostaniemy o tym poinformowani sygnałem dźwiękowym. Oznaczać to będzie, że musimy dopisać jeszcze kilka liter do wyrazu by mógł on zostać uzupełniony.

Żadnego sensownego przykładu nie zdołam wam pokazać dlatego spróbujcie sami stworzyć plik o jakiejś długiej nazwie a następnie spróbujcie go usunąć korzystając z polecenia rm oraz klawisza tabulacji.

Polecenie grep

Czasami może zdarzyć się, że będziemy potrzebowali wyświetlić jedynie kilka linijek tekstu znajdujących się w dość obszernym pliku. Rozwiązać to można przy pomocy wcześniej poznanych poleceń takich jak head czy też tail lecz przydadzą się one tylko wtedy kiedy ów szukane informacje znajdują się na początku lub końcu dokumentu. Jest jeszcze jedna możliwość, która polega na wyszukaniu informacji w dokumencie podając słowo klucz. Można by to nazwać poleceniem wyszukiwania danych w tekście które odnajdzie nam informacje i wyświetli je w podobny sposób jak to robią wcześniej wymienione polecenia. Polecenie, które tutaj opisuję nosi nazwę grep. Zerknijmy na poniższy przykład.

kali@kali:~$ cd /etc
kali@kali:/etc$ grep bash adduser.conf
DSHELL=/bin/bash
kali@kali:/etc$ 

Jak widać w przykładzie została wyświetlona tylko jedna linijka pliku ponieważ tylko ona zawierała frazę przez nas szukaną, czyli w tej linijce było słowo kluczowe bash.

Polecenie może szukać informacji w kilku plikach np. w danym folderze, należy tylko zamiast nazwa pliku wpisać /nazwafolderu/*.

Opcje polecenia grep


meta: polecenia, man, apropos, stat, grep, find


Poniżej przedstawiam opcje polecenia:

-b – przy wyniku wypisuje numer linijki w którym dana informacja się znajduje.

-c – wyświetla liczbę znalezionych wyników

-f – wyszukuje w nazwie pliku słowo klucz.

-h – nie wyświetla ścieżki do pliku w jakim znaleziono szukane słowo

-i – ignoruje wielkość liter

-l – wyświetlana jest jedynie nazwa pliku a nie zawartość

-n – wyświetla wszystkie podstawowe informacje + numer wiersza w którym odnaleziono słowo

-s – blokuje wyświetlanie komunikatów

-v – wyświetla wszystko poza szukanym słowem

-w – wyświetla wiersze w których słowo klucz jest całym wyrazem

Polecenie find

Ostatnie polecenie artykułu posłuży nam wyszukiwaniu plików. Nie zawsze można zapamiętać gdzie i co zapisaliśmy. Nawet jeżeli staramy się mieć porządek na swoich dyskach, partycjach to przy większej ilości plików możemy mieć problem w odnalezieniu tego którego obecnie potrzebujemy.

Jeżeli uważnie przeczytałeś dział ogólne informacje o systemie Linux, a dokładnie temat katalogowania plików i się tym kierowałeś to na pewno już wiesz, że ogromne znaczenie ma dla nas porządek na dysku, a w tej sytuacji nazewnictwo plików. Jeżeli o to zadbaliśmy to naprawdę znacznie sobie ułatwiliśmy zadanie, ponieważ polecenie find, którym się teraz zajmiemy służy odnajdowaniu plików po nazwie.

Opcje polecenia find

-name [nazwa_pliku] – wyszukuje plik po jego nazwie

-path [słowo klucz] – szuka plików które w nazwie ma podane słowo

-perm [uprawnienie] – wyszukuje wg. uprawnień

-type [typ] – wyszukuje wg. typów:

b blokowy

c znakowy

d katalog

p łącze nazwane

f zwykły plik

l dowiązanie symboliczne

s gniazdo

-user [użytkownik] – wyszukuje pliki które należą do podanego użytkownika

Powyżej zapisałem najistotniejsze opcje polecenia z których ja od czasu do czasu korzystam. Resztę można odnaleźć w podręcznikach man i tam odsyłam ciekawskich. Teraz spójrzmy na poniższy przykład:

kali@kali:~$ find / -name config
find: ‘/run/udisks2’: Permission denied
find: ‘/run/lightdm’: Permission denied
find: ‘/run/user/1000/inaccessible’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/openvpn-server’: Permission denied
find: ‘/run/openvpn-client’: Permission denied
find: ‘/run/cryptsetup’: Permission denied
find: ‘/run/systemd/unit-root’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
find: ‘/run/initramfs’: Permission denied
find: ‘/.cache’: Permission denied
/etc/subversion/config
….
kali@kali:~$

W moim przypadku wyników było naprawdę sporo, dlatego tylko kilka linijek wkleiłem. Bardzo ważną informacją jest to iż plik o nazwie config a plik config.cfg są zupełnie innymi plikami. Polecenie find widzi różnice między nimi, czyli rozpoznaje rozszerzenia plików które należy stosować przy szukaniu. Jeżeli chcielibyśmy odnaleźć plik o nazwie kali i byłby to plik napisany w standardowym formacie open office, należałoby wpisać frazę kali.odt.

Podsumowanie

Kiedyś jak zaczynałem naukę swojego pierwszego języka programowania, a był to PASCAL zapytałem swojego znajomego który już programował od kilku lat na czym to polega? I od czego zacząć? Pamiętam do dziś jak wspomniał mi, że w większej mierze nauka programowania polega na umiejętności przeszukiwania zasobów ogólnie dostępnych. Czyli odnajdywaniu tego co ktoś już napisał. I choć wydawało mi się to śmieszne teraz muszę przyznać, że jest to 50% sukcesu. Reszta to własna inwencja twórcza.

Linux nie jest językiem programowania, ale dokumentacje posiada tak jak języki programowania. Do każdego polecenia znajduje się jakiś wpis w man stąd też umiejętność korzystania z tych zasobów jest bardzo ważna. Przez cały czas będziemy poznawać coś nowego i teraz już wiemy gdzie zacząć szukać.


meta: polecenia, man, apropos, stat, grep, find