Dydaktyka:
Feedback
(Tekstowa) powłoka systemowa (shell), terminal, konsola.
Programy np. xfce4-terminal, konsole
Zmiana użytkownika – su
Wykonania programu na prawach innego użytkownika – sudo polecenie
Użycie sudo do uruchomienia shella z prawami roota: sudo -s (lub sudo -i lub sudo su)
Historia w konsoli: strzałki góra/dół, history, ctrl+r, fc
Obsługa polecenia less (wykonaj dla przykładu: convert -h | less albo man less):
/ – wyszukuje:n – następne wystąpienieN – poprzednieg – początek dokumentu; G – koniecq – wyjście
Wzór polecenia (wyjaśnienie: składni od Microsoftu/githuba, opcji od projektu GNU):
polecenie {jeden|z|wielu} <arg1> [-opcje <arg2>] --długa_opcja=<arg3> [<arg4>]
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 wbudowana w polecenia zwykle jest wyświetlana po podaniu opcji -h (lub --help), np:
tracepath -h netstat -hip a h ifconfig -h
Dłuższy opis zwykle jest w podręczniku systemowym – komenda man i towarzyszące, np:
man tracepathman ip / man 7 ip / man 8 ipapropos … / man -k … – lista stron które w tytule mają podane słowo, np. apropos networkwhatis … / man -f … – tytuły stron pod podaną nazwą, np. whatis writeUwaga: 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.
W Linuksie funkcjonują dwa zestawy podstawowych narzędzi do konfiguracji sieci.
Pakiet narzędzi 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
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.
Używane na zajęciach narzędzia do sprawdzania czy i jak działa sieć to między innymi:
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ą.
| 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
Tradycyjne nazwy urządzeń (zwykle zakończone kolejnym numerem, jak np. eth0) to m. inn.:
loethwlan, ath, wifi, radiofirewire, infiniband ibveth, 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:
[1]
[2]
| 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 innych1)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).
| 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.
| 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
ping <cel> – sprawdza czas odpowiedzi od podanego adresutraceroute {-I|-T} <cel> – sprawdza trasę, czyli jakie routery IP są na drodze do podanego adresu -I lub -T, która go skutecznie omijamtr <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
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.
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.
/ # ip --brief link lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> eth0 DOWN 00:10:18:aa:bd:7c <BROADCAST,MULTICAST> eth1 DOWN 00:10:18:aa:bd:7e <NO-CARRIER,BROADCAST,MULTICAST,UP> eth2 UP e4:54:e8:a5:98:c6 <BROADCAST,MULTICAST,UP,LOWER_UP> eth3 DOWN 94:e6:f7:17:08:72 <BROADCAST,MULTICAST> enp1s0 UP 78:8c:b5:35:09:37 <BROADCAST,MULTICAST,UP,LOWER_UP>
/ # ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 00:10:18:aa:bd:7c brd ff:ff:ff:ff:ff:ff altname eno2 altname enp5s0f0 altname enx001018aabd7c 3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000 link/ether 00:10:18:aa:bd:7e brd ff:ff:ff:ff:ff:ff altname enp5s0f1 altname enx001018aabd7e 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether e4:54:e8:a5:98:c6 brd ff:ff:ff:ff:ff:ff altname enp0s31f6 altname enxe454e8a598c6 5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 94:e6:f7:17:08:72 brd ff:ff:ff:ff:ff:ff altname eno1 altname enp0s20f3 altname enx94e6f7170872 6: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 78:8c:b5:35:09:37 brd ff:ff:ff:ff:ff:ff altname enx788cb5350937
/ # ip --brief address lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 DOWN eth1 DOWN 10.0.1.1/24 192.168.1.1/24 eth2 UP 150.254.32.66/26 2001:808:201:100:8d42:7f5c:e3a1:56d5/64 2001:808:201:100:e654:e8ff:fea5:98c6/64 fe80::5c78:bcff:fe91:7758/64 eth3 DOWN 10.0.0.1/24 enp1s0 UP 100.100.16.1/24 fe80::7a8c:b5ff:fe35:937/64
/ # ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:10:18:aa:bd:7c brd ff:ff:ff:ff:ff:ff
altname enp5s0f0
altname enx001018aabd7c
inet 10.0.0.1/24 scope global e0
valid_lft forever preferred_lft forever
3: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:10:18:aa:bd:7e brd ff:ff:ff:ff:ff:ff
altname enp5s0f1
altname enx001018aabd7e
inet 10.0.1.1/24 scope global e1
valid_lft forever preferred_lft forever
inet 192.168.1.1/24 scope global e1
valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether e4:54:e8:a5:98:c6 brd ff:ff:ff:ff:ff:ff
altname eno2
altname enp0s31f6
altname enxe454e8a598c6
inet 150.254.32.66/26 brd 150.254.32.127 scope global br0
valid_lft forever preferred_lft forever
inet6 2001:808:201:100:8d42:7f5c:e3a1:56d5/64 scope global temporary dynamic
valid_lft 604277sec preferred_lft 85615sec
inet6 2001:808:201:100:e654:e8ff:fea5:98c6/64 scope global dynamic mngtmpaddr proto kernel_ra
valid_lft 2591948sec preferred_lft 604748sec
inet6 fe80::5c78:bcff:fe91:7758/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 94:e6:f7:17:08:72 brd ff:ff:ff:ff:ff:ff
altname eno1
altname enp0s20f3
altname enx94e6f7170872
6: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 78:8c:b5:35:09:37 brd ff:ff:ff:ff:ff:ff
altname enx788cb5350937
inet 100.100.16.1/24 brd 100.100.16.255 scope global enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::7a8c:b5ff:fe35:937/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
/ # ifconfig -a eth1: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether 00:10:18:aa:bd:7c txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 10.0.1.1 netmask 255.255.255.0 broadcast 0.0.0.0 ether 00:10:18:aa:bd:7e txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 150.254.32.66 netmask 255.255.255.192 broadcast 150.254.32.127 inet6 2001:808:201:100:8d42:7f5c:e3a1:56d5 prefixlen 64 scopeid 0x0inet6 fe80::5c78:bcff:fe91:7758 prefixlen 64 scopeid 0x20 inet6 2001:808:201:100:e654:e8ff:fea5:98c6 prefixlen 64 scopeid 0x0 ether e4:54:e8:a5:98:c6 txqueuelen 1000 (Ethernet) RX packets 3617 bytes 445412 (434.9 KiB) RX errors 0 dropped 13 overruns 0 frame 0 TX packets 3166 bytes 352651 (344.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 16 memory 0x95700000-95720000 enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 100.100.16.1 netmask 255.255.255.0 broadcast 100.100.16.255 inet6 fe80::7a8c:b5ff:fe35:937 prefixlen 64 scopeid 0x20<link> ether 78:8c:b5:35:09:37 txqueuelen 1000 (Ethernet) RX packets 66 bytes 4855 (4.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 19 bytes 1828 (1.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 12 bytes 1932 (1.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 1932 (1.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth3: flags=4098<BROADCAST,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 255.255.255.0 broadcast 0.0.0.0 ether 94:e6:f7:17:08:72 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
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.
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/…#change-tcpip-settings
Z linii poleceń należy użyć komendy netsh, kontekstu netsh interface ip
https://learn.microsoft.com/…/netsh
Z PowerShella należy użyć cmdletów modułu NetTCPIP:
https://learn.microsoft.com/…/nettcpip/…
Windows dostarcza z systemem programy ping (przełączniki nie są zgodne; patrz ping /?) i tracert.