Podstawowe polecenia

Wprowadzenie teoretyczne do lekcji nr 4

Ta część materiałów dydaktycznych poświęcona jest poleceniom, za pomocą których możemy dokonać analizy posiadanych zasobów sprzętowych. Dodatkowo sprawdzimy polecenia, które pozwolą przetestować działanie pozdzespołów naszego komputera, ich aktualne zużycie itp. Do tych najbardziej klasycznych należą:
- uname
- lsb_release
- lspci
- lscpu
- lshw
- dmidecode
- free
- top
- htop
- df -h
- cfdisk
- fdisk
Analizując to zagadnienie nie należy też zapominać o plikach systemowych, które również takie informacje przechowują. I tak do tych najbardziej znanych należą:
- /etc/lsb-release
- /proc/meminfo
- /proc/cpuinfo

I. Polecenia i pliki diagnozujące system operacyjny.

1. Polecenie uname.
Stosując to polecenie jesteśmy w stanie pozyskać wiele informacji o naszym systemie operacyjnym. Oczywiście możemy wyświetlić kompleksowe informacje, które to polecenie nam oferuje, ale też możemy zastosować opcje do niego i uzyskać tylko to co chcemy.

Tradycyjnie już na początek proponuję użyć pomocy do naszego polecenia i wpisać w konsoli:
$ uname --help
Pojawiają nam się dostępne opcje, z których możemy odczytać np. numer kernela, jego wersję, nazwę hosta, itp. Dodatkowo za pomocą opcji -a jesteśmy w stanie wszystkie te parametry wyświetlić razem. Użyjemy do tego polecenia:
$ uname -a
I niby jest wszystko, ale jest to mało czytelne.

Dlatego warto skorzystać z tych opcji szczegółowych i wyciągnąć informację np. tylko o wersji kernela (kolor niebieski):
$ uname -v
albo o nazwie systemu operacyjnego (kolor zielony):
$ uname -o
Jak widzimy, wykorzystywanie szczegółowych opcji daje nam konkretny zwrot informacji.

2. Polecenie lsb_release.
Stosując to polecenie jesteśmy w stanie pozyskać wiele informacji o naszej dystrybucji systemu Linux. Podobnie jak w przypadku poprzedniego polecenia, możemy wyświetlić kompleksowe informacje, które to polecenie nam oferuje, ale też możemy zastosować opcje do niego i uzyskać tylko to co chcemy.

Tradycyjnie już używamy pomocy do naszego polecenia i wpisujemy w konsoli:
$ lsb_release --help
Pojawiają nam się dostępne opcje, z których możemy odczytać np. numer dystrybucji, czy też jej nazwę kodową. Dodatkowo za pomocą opcji -a jesteśmy w stanie wszystkie te parametry wyświetlić razem. Użyjemy do tego polecenia:
$ lsb_release -a
W przeciwieństwie do polecenia uname informacje te są czytelne, ale jak ktoś chce uzyskać tylko numer naszej dystrybucji to wystarczy użyć polecenia:
$ lsb_release -d
I wiemy już, że używamy wersji "Ubuntu 20.04.4 LTS".

3. Plik /etc/lsb-release.
Zdarza się, że nie wszystkie dystrybucje obsługują polecenie lsb_release i wtedy z pomocą przychodzi plik /etc/lsb-release.

Jesli chcemy wyświetlić zawartość pliku lsb-release wpisujemy w konsoli:
$ cat /etc/lsb-release
Ewentualnie możemy go edytować przy użyciu nano, używając do tego polecenia:
$ sudo nano /etc/lsb-release -a
I widzimy bardzo podobny efekt z informacją, że używamy wersji "Ubuntu 20.04.4 LTS".

II. Polecenia i pliki dotyczące podzespołów naszego komputera.

1. Polecenie lspci.
Jest to polecenie, czy też narzędzie które przedstawia nam informacje o wszystkich szynach PCI znajdujących się w naszym systemie oraz o tym jakie urządzenia są do nich podłączone.

Polecenie lspci --help

Na początku jak zawsze proponuję skorzystać z pomocy wpisując:
$ sudo lspci --help
Mamy tutaj dostepnych sporo możliwości, ale tak naprawdę najbardziej przydatną z nich jest opcja -v

Polecenie lspci -v

Stosując opcję -v, mamy możliwość wyświetlenia szczegółowych informacji o wszystkich urządzeniach znajdujących się w naszym systemie. Wpisujemy zatem:
$ sudo lspci -v
I otrzymujemy powyższy wynik. Korzystamy z VB, więc pamiętajmy, że na maszynie rzeczywistej niektóre wpisy wyglądają bardziej sensownie. Ale już o urządzeniu audio możemy parę rzeczy się dowiedzieć, np. kto jest producentem, czy też jaki sterownik jądra jest obecnie w użyciu). Natomiast jeśli chcemy uzyskać więcej szczegółowych informacji możemy zastosować opcję -vv, a nawet -vvv

Polecenie lspci

Natomiast jeśli chcemy uzyskać informacje ogólne o naszych urządzeniach PCI, to wystarczy wpisać polecenie lspci bez żadnych opcji, ale oczywiście stosując sudo:
$ sudo lspci
Jak widać producenta naszego kontrolera dźwięku też można z tego odczytać.

2. Polecenie lscpu.
Jest to polecenie, które wyświetla informacje o architekturze procesora znajdującego się w naszym komputerze.

Ponownie proponuję skorzystać z pomocy, tradycyjnie już wpisując polecenie z opcją --help:
$ sudo lscpu --help
Możemy przeanalizować dostępne opcje i zastosować właściwy parametr, ale tak naprawdę do uzyskania jakiejś informacji o naszym procesorze w zupełności wystarczy samo polecenie bez żadnych opcji.

Dlatego chcąc uzyskać informacje dotyczące np. ilości rdzeni procesora, albo prędkości zegara (taktowanie) wystarczy wpisać:
$ sudo lscpu
Oczywiście zwrot szczegółowych informacji o naszym procesorze jest nieco zakłamany ponieważ pracujemy na wirtualnej maszynie, ale do celów dydaktycznych powinno nam to wystarczyć.

3. Polecenie lshw.
Polecenie lshw to takie sprytne narzędzie, które wyświetla szczegółowe informacje dotyczące komponentów znajdujących się w naszym komputerze. Podobnie jak większość wcześniej zaprezentowanych poleceń zawsze powinniśmy go używać z uprawnieniami administratora.

Właściwie to podobnie jak wcześniej powinienem odesłać wszystkich do skorzystania z pomocy, ale tym razem zaczniemy od zastosowania polecenia bez żadnych opcji. Wpisujemy zatem:
$ sudo lshw
Otrzymujemy bardzo szczegółową informację o sprzęcie znajdującym się w naszym systemie i tak naprawdę możemy tu znaleźć wszystko, ale trzeba to sobie odszukać. Nie jest to takie proste, ponieważ musimy pamiętać, że pracujemy w trybie tekstowym i widzimy tylko samą koncówkę informacji zwróconych przez powyższe polecenie.

Warto więc skorzystać z polecenia less, które umożliwia wyświetlanie informacji "ekranami" z możliwością nawigacji. Składnia takiego polecenia powinna wyglądać następująco:
$ sudo lshw | less
Teraz spokojnie możemy używać strzałek, spacji bądź entera do poruszania się po naszej konsoli. Na początku mamy tylko takie ogólne informacje (np. o procesorze lub pamięci), a te bardziej szczegółowe należy odszukać w dalszej części zwróconych informacji.

Niemniej jednak warto z samej pomocy skorzystać, ponieważ są tam opcje, za pomocą których można sobie trochę ułatwić życie. Wpisujemy zatem:
$ sudo lshw --help
Mamy tutaj między innymi taką podpowiedź, że możemy sobie wyeksportować informacje do plików typu html lub xml, ale w trybie tekstowym zbyt wiele nie zyskamy. Dlatego w tym przypadku tak naprawdę najlepiej skorzystać z opcji -short lub -businfo.

Wykorzystamy więc opcję -short. Wpisujemy zatem:
$ sudo lshw -short
Używając tego polecenia otrzymujemy takie skrócone informacje o naszym sprzęcie.

Oczywiście możemy sobie przekierować wynik tego polecenia do konkretnego pliku, w naszym przypadku będzie to plik sprzet.txt. Wystarczy użyć polecenia:
$ sudo lshw -short > sprzet.txt
Następnie korzystając z polecenia cat możemy wyświetlić zawartość pliku sprzet.txt. Całe polecenie będzie miało postać:
$ cat sprzet.txt
Nie podaję pełnej ścieżki do tego pliku, ponieważ jestem w katalogu domowym użytkownika highsec, w tym miejscu został on utworzony, więc możemy zastosować ścieżkę względną do tego pliku. Ważną rzeczą po przeglądnięciu zawartości tego pliku jest kolumna class.

W większości przypadków potrzebujemy konkretnego zwrotu informacji np. o pamięci RAM, a nie przeglądać wszystkie wpisy dotyczące naszych podzespołów. Dlatego wybieramy konkretny komponent widoczny w kolumnie class i wykorzystując parametr -c, sprawdzamy go. Wystarczy użyć polecenia:
$ sudo lshw -c memory
Efekt polecenia widoczny jest powyżej i nie musimy już przeglądać wszystkich danych, żeby dowiedzieć się ile mamy RAM-u w systemie (u nas 4GB). Oczywiście taką składnię stosujemy do dowolnego komponentu, który w danej chwili nas interesuje.

Możemy także odfiltrować sobie konkretną informację, np. rozmiar pamięci, używając polecenia grep. Spowoduje ono wypisanie całej linijki, która zawiera konkretny ciąg znaków np. "size". Parametr -i jest po to, aby zignorować wielkość liter. Wystarczy użyć polecenia:
$ sudo lshw -c memory | grep -i size
I mamy tylko wpisy zawierające ciąg znaków "size" czyli dysponujemy 4 GB RAM-u.

Oczywiście również możemy sobie przekierować odfiltrowany wynik tego polecenia do konkretnego pliku, w naszym przypadku będzie to plik ram.txt. Wystarczy użyć polecenia:
$ sudo lshw -c memory | grep -i size > ram.txt
Aby sprawdzić, czy faktycznie efekt naszego polecenia znalazł się w pliku, wystarczy wpisać:
$ cat ram.txt
I wszystko się zgadza.

Należy pamiętać, że użycie znaku ">" spowoduje utworzenie nowego pliku lub nadpisanie zawartości w już istniejącym pliku. Natomiast jeśli chcielibyśmy dodać coś do naszego pliku ram.txt to należy ">>". Załóżmy, że chcemy dopisać do pliku ilość rdzeni naszegoi procesora. Wystarczy użyć polecenia:
$ sudo lscpu | grep -i core >> ram.txt
I jeszcze sprawdzamy poleceniem:
$ cat ram.txt
I wszystko się zgadza.

Można jeszcze "ładnie" rozdzielić te informacje o pamięci od informacji o rdzeniach procesora. Wykorzystamy to tego polecenie echo. Wpisujemy więc:
$ sudo echo "-------------------------------------------" >> ram.txt
I jeszcze sprawdzamy poleceniem:
$ cat ram.txt
Prawie dobrze, z tym małym wyjątkiem, że nasza linia dodana została na końcu. Poprawimy więc nasze wpisy wykonując w odpowiedniej kolejności wszystkie polecenia:
$ sudo lshw -c memory | grep -i size > ram.txt
$ sudo echo "-------------------------------------------" >> ram.txt
$ sudo lscpu | grep -i core >> ram.txt
I ponownie sprawdzamy poleceniem:
$ cat ram.txt
Teraz jest wszystko jak należy.

4. Plik /proc/meminfo.
Skoro jesteśmy przy pamięci RAM, to warto mieć świadomość, że można ją sprawdzać na różne sposoby. Dane takie przechowywane są w naszym systemie w odpowiednich plikach. Jednym z nich jest /proc/meminfo

Wprawdzie ten plik nie zawiera takich informacji jak producent pamięci, czy też jej numer seryjny, ale za to mamy wpisy mówiące o tym ile tej pamięci jest, ile jest dostepnej, wolnej itp. Wpisujemy zatem polecenie:
$ cat /proc/meminfo
I już widzimy, że faktycznie dysponujemy 4 GB RAM-u, a dostępnej obecnie pamięci jest około 3,5 GB.

5. Polecenie free.
Podobny efekt można uzyskać wykorzystując polecenie free. Tak naprawdę wyświetla ono statystyki dotyczące wykorzystania pamięci RAM (całkowita, używana, dostępna, współdzielona itp.).

Tym razem, tradycyjnie już, na początku proponuję skorzystać z pomocy. Wpisujemy zatem polecenie:
$ free --help
Jak widać na powyższym screenie kilka opcji do wyboru mamy. Jedną z nich jest wykorzystanie parametru -h.

Ta opcja w dosłownym tłumaczeniu "pokazuje dane wyjściowe czytelne dla człowieka". Wpisujemy zatem polecenie:
$ free -h
I widzimy, że dysponujemy prawie 4GB RAM-u (3,8Gi - przypomina to raczej jednostkę "gibi"). Gdybyśmy wpisali samo polecenie free, to uzyskamy podobny wynik, tyle, że przedstawiony w kilobajtach.

6. Programy top i htop.
Oprócz polecenia free, które w jakiś sposób diagnozuje nam wykorzystanie pamięci, możemy także skorzystać z programu top lub bardziej zaawansowanego htop. Obydwa programy po uruchomieniu prezentują zbiór użytecznych informacji, a nawet danych statystycznych dotyczących obecnego obciążenia procesora, pamięci oraz uruchomionych procesów.

Program top jest narzędziem bardzo prostym i dostępnym niemal we wszystkich systemach uniksopodobnych. Aby go uruchomić wystarczy wpisać w konsoli:
$ top
Efekt tego polecenia nie jest jakoś wizualnie powalający, a sam "interfejs" może być dla niektórych nawet nieczytelny. Niemniej jednak z powyższego screena możemy np. odczytać, że zalogowany w systemie jest obecnie 1 użytkownik, system działa od 2 minut, jest 96 procesów, z których uruchomiony jest 1, a uśpionych jest 95, zaś dostępnej pamięci mamy około 3,5GB. Widzimy też, że numer PID programu top ma wartość 979.

Natomiast nieco bardziej przejrzystym programem jest htop, który coraz częściej jest dostępny domyślnie w niektórych dystrybucjach bez potrzeby instalacji. Aby go uruchomić wystarczy wpisać w konsoli:
$ htop
Jak widzimy, sam interfejs jest zdecydowanie bardziej czytelny, a oprócz tego dochodzą tutaj opcje związane z zabijaniem procesów (F9), podnoszeniem (F8) lub obniżaniem (F7) priorytetu procesu itp. Również możemy sobie filtrować (F4) procesy oraz dostosować ustawienia do własnych potrzeb (F2).

Dosyć ciekawą opcją, jest możliwość wyświetlenia powiązanych ze sobą procesów, w formie "drzewa" używając klawisza F5. Widzimy na powyższym screenie, w jaki sposób jest uruchomiona i powiązana nasza obecna sesja.

Spróbujemy teraz nieco bardziej obciążyć nasz procesor i uruchomić kilka konsoli. Zalogujemy się także drugim użytkownikiem oraz odpalimy kilka dodatkowych zadań. Zastosujemy w konsoli polecenie:
$ w
Na powyższym screenie widzimy kto jest obecnie zalogowany oraz jakie zadania są uruchomione w poszczególnych konsolach.

Teraz widzimy wyraźnie w jaki sposób uruchomione dodatkowe procesy wpływają na obciążenie procesora i zużycie pamięci.

Teraz wybierzemy sobie (wystarczy go zaznaczyć) proces o numerze PID 1539, czyli ping elektronik.rzeszow.pl i zwyczajnie go wyłączymy (zabijemy), używając klawisza F9. Na koniec potwierdzimy Enterem i zostanie wysłany sygnał (Send signal) do zamknięcia procesu.

Przechodzimy następnie do konsoli nr 4, i sprawdzamy czy nasz proces został zakończony. Komunikat Terminated mówi nam jasno, że proces został zakończony.

7. Polecenie dmidecode.
Dmidecode to takie narzędzie, które jest w stanie odczytać tablice DMI (Desktop Manager Interface) komputera. Taka tablica zawiera konkretne informacje dotyczące zainstalowanego sprzętu takiego jak np. płyta główna, procesor, wersja BIOS-u czy nawet numer seryjny wybranych urządzeń. Nie musimy zatem otwierać obudowy naszego komputera aby nieco informacji pozyskać.

Na początku jak zawsze proponuję skorzystać z pomocy, pamiętając o stosowaniu sudo. Wpisujemy więc:
$ sudo dmidecode --help
Mamy tutaj dostepnych trochę opcji, ale tak naprawdę najbardziej przydatną z nich jest opcja -t.

Wpisując parametr -t ponownie skorzystamy z pomocy. Wpisujemy więc:
$ sudo dmidecode -t --help
Jak widać mamy dostępnych kilka sekcji czy też typów, które możemy sobie szczegółowo wyświetlić. My wyciągniemy trochę informacji o płycie głównej.

Wykorzystamy do tego typ baseboard. Wpisujemy więc:
$ sudo dmidecode -t baseboard
Pojawiają nam się szczegółowe informcje, ale pamiętajmy, że ja pracuję na "wirtualce" więc to są trochę mało precyzyjne dane. W systemie rzeczywistym wygląda to zupełnie inaczej.