]''
Przykład polecenia:\\
''polecenie jeden //42// [-opcje //foo//] --długa_opcja=//x//''
Co trzeba wpisać w konsolę:\\
''polecenie jeden 44 -oje baz --długa_opcja=x''
==== Pomoc systemowa ====
Pomoc wbudowana w polecenia zwykle jest wyświetlana po podaniu opcji ''-h'' (lub ''--help''), np:
* ''tracepath -h''
* ''netstat -h''
* ''ip a h''
* ''ifconfig -h''
Dłuższy opis zwykle jest w podręczniku systemowym – komenda ''man'' i towarzyszące, np:
* ''man tracepath''
* ''man ip'' / ''man 7 ip'' / ''man 8 ip''
* ''apropos …'' / ''man -k …'' – lista stron które w tytule mają podane słowo, np. ''apropos network''
* ''whatis …'' / ''man -f …'' – tytuły stron pod podaną nazwą, np. ''whatis write''
-----
===== Programy używane do konfiguracji i diagnostyki sieci w Linuksie =====
**Uwaga:** informacje o narzędziach są podane dla wyjaśnienia dlaczego kilka
komend realizuje to samo zadanie i dla uporządkowania wiedzy. Treści z tej
sekcji (listy komend, nazwy paczek narzędzi, etc.) nie będą w żaden sposób
wymagane na wejściówkach/teście.
==== Narzędzia do konfiguracji sieci ====
W Linuksie funkcjonują dwa zestawy podstawowych narzędzi do konfiguracji sieci.
Pakiet narzędzi ''[[https://wiki.linuxfoundation.org/networking/net-tools|net-tools]]''
powstał w 1983 roku, początkowo w systemie BSD.
Od tego czasu jest utrzymywany, jednak większość jego składników jest uznawana
za przestarzałe. Z tego pakietu na zajęciach pojawiają się komendy ''arp'',
''hostname'', ''ifconfig'', ''netstat'' i ''route''.
Około roku 2000 stworzono pakiet
''[[https://wiki.linuxfoundation.org/networking/iproute2|iproute2]]'', mający
zastąpić ''net-tools'' (i kilka innych, napisanych by udostępnić nowe możliwości
jądra systemu Linux). Z tego pakietu na zajęciach pojawiają się komendy ''ip''
i ''ss''.
\\
Na komendę ''ip'' składa się wiele "podkomend", np. ''ip link'', ''ip address'',
''ip neighbour'' czy ''ip route'', a pomoc do tej komendy jest rozbita na wiele
stron podręcznika – ''man ip-link'', ''man ip-address'', itd.
==== Narzędzia do diagostyki ====
Używane na zajęciach narzędzia do sprawdzania czy i jak działa sieć to między innymi:
* narzędzia z paczki ''[[https://wiki.linuxfoundation.org/networking/iputils|iputils]]'' takie jak ''arping'', ''ping'', czy ''tracepath''
* ndisc6 i rdisc6
* ''[[https://traceroute.sourceforge.net/|traceroute]]'', ''[[https://www.bitwizard.nl/mtr/|mtr]]''
* ''[[https://www.wireshark.org/|wireshark]]'', ''[[https://www.tcpdump.org/|tcpdump]]''
-----
===== Interfejsy sieciowe, konfiguracja adresów, sprawdzanie łączności =====
Karta sieciowa (//NIC – network interface card//) – fizyczne urządzenie do komunikacji sieciowej. \\
Interfejs sieciowy (//network interface//) – logiczne urządzenie do komunikacji sieciowej.
Interfejsy można podzielić na fizyczne (reprezentują fizyczne urządzenia sieciowe) i wirtualne (reszta).
\\
Przykładem interfejsu wirtualnego jest loopback – wirtualne urządzenie sieciowe łączące komputer z samym sobą.
==== Wyświetlanie listy urządzeń i adresów ====
| Lista aktywnych urządzeń | ''ifconfig'' | ''ip link show up'' |
| Lista wszystkich urządzeń | ''ifconfig -a'' | ''ip link [show]'' |
| Lista adresów sieciowych | ''ifconfig [-a]'' | ''ip address [show [up]]'' |
__//Zapamiętaj://__ komenda ''ip address'' konfiguruje adresy, ''ip link'' konfiguruje
urządzenia.
Nazwy podpoleceń i akcji polecenia ''ip'' można dowolnie skracać, ale jeśli
skróty nie są jednoznaczne, to narzędzie wybiera jedno rozwinięcie zamiast
wyświetlić komunikat o błędzie (sic!). \\
Np. ''ip link show'' można zapisać jako ''ip l sh'', ale ''ip l s'' jest już
traktowane jako ''ip link set''
Polecenie ''ip'' przyjmuje też opcje (podawane bezpośrednio po ''ip''), wśród
których warto znać opcję ''--brief'' (i ''--json'').
\\
Porównaj: ''ip addr'' i ''ip --brief addr''
==== [ekstra] Tradycyjne nazwy urządzeń ====
Tradycyjne nazwy urządzeń (zwykle zakończone kolejnym numerem, jak np. ''eth0'') to m. inn.:
* loopback (pętla zwrotna, połączenie do siebie samego) ''lo''
* przewodowe karty sieciowe ''eth''
* bezprzewodowe karty sieciowe ''wlan, ath, wifi, radio''
* ''firewire'', infiniband ''ib''
* urządzenia wirtualne: wirtualne karty sieciowe ''veth, dummy'',
mostki ''br'', urządzenia programowe ''tun, tap'',
tunele ''sit, tnl, ppp, vpn, gre''
Około 2015 roku w systemie Linux zmieniono sposób nadawania nazw urządzeniom. \\
Stąd dla fizycznych interfejsów można spotkać nazwy: ''eno1, enp2s0, wlp0s20f3, enx0050568a281e''
Nazwy takie jak ''eth0'', ''wlan0'' są dalej powszechnie używane w tutorialach,
dokumentacjach i podręcznikach jako generyczna nazwa urządzenia danego rodzaju.
Wcześniej to, która karta sieciowa dostanie który numer (eth0, eth1) było trudne
do przewidzenia (ale zwykle stałe dla danej konfiguracji sprzętowej). \\
Co gorsza, kolejność po dodaniu nowej karty sieciowej lub awarii jednej z kart
mogła ulec zmianie. \\
Więcej szczegółów:
[[https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/|[1]]]
[[https://en.wikipedia.org/wiki/Consistent_Network_Device_Naming|[2]]]
==== Sprawdzanie stanu i włączanie interfejsu ====
| Włączenie interfejsu | ''ifconfig //eth0// up'' | ''ip link set dev //eth0// up'' |
| Wyłączenie interfejsu | ''ifconfig //eth0// down'' | ''ip link set dev //eth0// down'' |
Stan interfejsu można sprawdzić komendami wyświetlającymi listę urządzeń (patrz wyżej).\\
Dla kart ethernetowych dodatkowe informacje można odczytać narzędziem ''ethtool'':
* ''ethtool /ifname//>'' – wyświetla podstawowe informacje \\
* ''ethtool --identify /ifname//>'' – prosi kartę o to, by zamrugała diodami tak żeby można było ją odróżnić od innych((Twórca sterownika lub producent sprzętu określa jak to mruganie wygląda))
**Informacje o tym, czy połączenie na warstwie fizycznej zostało nawiązane można sprawdzić przez:**
^ Polecenie ^ Wynik ^ oznacza, że karta jest… ^
| Każde z: \\ ''ip link'' \\ ''ip -br link'' \\ ''ip address'' | //brak pozostałych// | … wyłączona |
| ::: | ''<…,**NO-CARRIER**,…,**UP**,…> state …'' | … włączona, ale nie widzi nikogo po drugiej stronie |
| ::: | ''<…,**UP**,…,**LOWER_UP**,…> state …'' | … włączona i wykryła inną kartę po drugiej stronie |
| ''ifconfig'' | //brak pozostałych// | … wyłączona |
| ::: | ''<…,**UP**,…>'' | … włączona, ale nie widzi nikogo po drugiej stronie |
| ::: | ''<…,**UP**,…,**RUNNING**,…>'' | … włączona i wykryła inną kartę po drugiej stronie |
| ''ethtool'' | ''Link detected: no'' | … wyłączona **lub** nie widzi nikogo po drugiej stronie |
| ::: | ''Link detected: yes'' | … włączona i wykryła inną kartę po drugiej stronie |
| lampka przy porcie | nie świeci | … wyłączona **lub** nie widzi nikogo po drugiej stronie |
| ::: | zapalona | … włączona i wykryła inną kartę po drugiej stronie |
__//Zauważ://__ komenda ''ip link'' / ''ip address'' pokazuje też pole
''state'' z wartościami ''UP''/''DOWN'' i koloruje je na zielono/czerwono.
To pole pokazuje stan połączenia, a nie to czy interfejs jest włączony, i może
w ogóle nie pokazywać stanu (np. mieć wartość ''UNKNOWN'') albo pokazywać
jeszcze inne znane stany (np. ''DORMANT'').
==== Ustawianie / dodawanie / usuwanie adresów IP ====
=== ip address ===
| Dodanie nowego adresu do interfejsu | ''ip addr add //10.0.0.1/25// dev //eth0//'' \\ ''ip addr add //fd00::1/64// dev //eth0//''|
| Usunięcie adresu z interfejsu | ''ip addr del //10.0.0.1/25// dev //eth0//'' \\ ''ip addr del //fd00::1/64// dev //eth0//''|
| Wyczyszczenie adresów interfejsu (groźne) | ''ip addr flush dev //eth0//'' |
__//Uwaga://__ Każdy adres bez maski polecenie ''ip'' interpretuje jako adres
z maską /32 (IPv4) lub /128 (IPv6). Zawsze podawaj maskę manipulując adresami
poleceniem ''ip''.
=== ifconfig ===
| //Zmiana// bieżącego adresu IPv4 i/lub maski | ''ifconfig //eth0// [//10.0.0.1//] [netmask //255.255.255.128//]'' |
| Dodanie nowego adresu IPv4 do urządzenia \\ (tworząc alias urządzenia) | ''ifconfig //eth0:something// //10.0.0.1// …'' |
| 'Usunięcie' dodatkowego adresu IPv4 z urządzenia \\ (usunięcie aliasu) | ''ifconfig //eth0:something// down'' |
| 'Usunięcie' podstawowego adresu IPv4 z urządzenia | ''ifconfig //eth0// 0'' |
| Dodanie nowego adresu IPv6 | ''ifconfig //eth0// add //fd00::1/64//'' |
| Usunięcie adresu IPv6 | ''ifconfig //eth0// del //fd00::1/64//'' |
__//Zauważ://__ w poleceniu ''ifconfig'' adres IPv4 i adresy IPv6 konfiguruje się inaczej. \\
''ifconfig'' umie ustawić wiele adresów IPv6 na interfejsie, ale tylko jeden adres IPv4. \\
''ifconfig'' domyślnie dla IPv4 dobiera maskę pasującą do historycznej klasy adresu, a dla IPv6 /128.
Polecenie ''ifconfig'' pozwala na zmianę wielu ustawień naraz, dla przykładu
poniższe polecenie ustawi adres i włączy interfejs: \\
''ifconfig dummy0 192.168.0.1 netmask 255.255.255.0 up''
==== Sprawdzanie łączności IP ====
* ''ping /cel//>'' – sprawdza czas odpowiedzi od podanego adresu
* ''traceroute {-I|-T} /cel//>'' – sprawdza trasę, czyli jakie routery IP są na drodze do podanego adresu \\ Z uwagi na firewall Politechniki proszę używać opcji ''-I'' lub ''-T'', która go skutecznie omija
* ''mtr /cel//>'' – ponawia sprawdzanie trasy co sekundę ("połączenie" poleceń wyżej)
Jako cel można podać adres IP (np. ''ping 150.254.30.29'') lub nazwę słowną (przykładowo: ''ping cs.put.poznan.pl'', ''ping lab-net-1'')
Podane programy przyjmują też opcje ''-4'' i ''-6'' to użycia odpowiednio protokołu IPv4 i IPv6, np:
''traceroute -4 -T //nic.cl//''
Używając adresów IPv6 ze specjalnych bloków oznaczonych jako
[[https://en.wikipedia.org/wiki/Link-local_address|link-local]]
należy jeszcze dodać na jakim interfejsie znajduje się cel, używając składni
''//adres//%//interfejs//'', np. ''ping fe80::d8a8:fbff:fe92:2ddf%eth0''.
==== Przykładowe wyniki poleceń ====
__//Uwaga://__ W przykładach na stronie zwykle podświetlony tekst ma opis jako
dymek (//tooltip/title//) widoczny po najechaniu i zatrzymaniu myszy na obszarze
podświetlonego tekstu.
++++ Przykład ip --brief link: | {{section>bio-sk:podstawowe-narzedzia:przyklady#ip_--brief_link&inline&noheader}} ++++
++++ Przykład ip link: | {{section>bio-sk:podstawowe-narzedzia:przyklady#ip_link&inline&noheader}} ++++
++++ Przykład ip --brief address: | {{section>bio-sk:podstawowe-narzedzia:przyklady#ip_--brief_address&inline&noheader}} ++++
++++ Przykład ip address: | {{section>bio-sk:podstawowe-narzedzia:przyklady#ip_address&inline&noheader}} ++++
++++ Przykład ifconfig -a: | {{section>bio-sk:podstawowe-narzedzia:przyklady#ifconfig_-a&inline&noheader}} ++++
++++ Inny przykład ifconfig i ip address |
/ # ip a
10: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether da:a8:fb:92:2d:df brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.5.2/30 brd 192.168.5.3 scope link eth0
valid_lft forever preferred_lft forever
inet 172.19.67.0/19 brd 172.19.95.255 scope global eth0:1
valid_lft forever preferred_lft forever
inet 10.42.0.238/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::d8a8:fbff:fe92:2ddf/64 scope link
valid_lft forever preferred_lft forever
/ # ifconfig
eth0 Link encap:Ethernet HWaddr DA:A8:FB:92:2D:DF
inet addr:192.168.5.2 Bcast:192.168.5.3 Mask:255.255.255.252
inet6 addr: fe80::d8a8:fbff:fe92:2ddf/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1326 errors:0 dropped:0 overruns:0 frame:0
TX packets:1063 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2681637 (2.5 MiB) TX bytes:123670 (120.7 KiB)
eth0:1 Link encap:Ethernet HWaddr DA:A8:FB:92:2D:DF
inet addr:172.19.67.0 Bcast:172.19.95.255 Mask:255.255.224.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Uwaga: ifconfig w różnych dystrybucjach może mieć nieznacznie inny format wyjścia.
++++
==== [Ekstra] Windows ====
Do wyświetlenia listy interfejsów i adresów IP można użyć m. inn. komendy ''ipconfig'',
domyślnie pokazującej tylko aktywne interfejsy; ''ipconfig /all'' pokaże wszystkie
Adresy IP można ustawić z "okienek" [[https://support.microsoft.com/en-us/windows/experience/connectivity-networking/essential-network-settings-and-tasks-in-windows#change-tcpip-settings|https://support.microsoft.com/…#change-tcpip-settings]] \\
Z linii poleceń należy użyć komendy ''netsh'', kontekstu ''netsh interface ip''
[[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/netsh|https://learn.microsoft.com/…/netsh]] \\
Z PowerShella należy użyć cmdletów modułu NetTCPIP:
[[https://learn.microsoft.com/en-us/powershell/module/nettcpip/?view=windowsserver2025-ps|https://learn.microsoft.com/…/nettcpip/…]]
Windows dostarcza z systemem programy ''ping'' (przełączniki nie są zgodne; patrz ''ping /?'') i ''tracert''.