Strona główna » Blog » Jak sprawdzić adres IP w Linuksie: ip addr, hostname -I, curl
Jak sprawdzić adres IP w Linuksie: ip addr, hostname -I, curl
- 30 października 2026
- 09:00
- Autor: Adrien Roche
- Sieci

Sprawdzanie adresu IP w Linuksie poleceniem ip addr
Poleceniem, które odpowiada na pytanie „jaki jest mój adres IP” w każdej aktualnej dystrybucji Linuksa, jest ip z pakietu iproute2. Jest domyślnie obecne w każdej ważnej dystrybucji, działa bez roota i stanowi podstawę dla pozostałych poleceń z tego przewodnika albo je zastąpiło. Podstawowa forma wypisuje wszystkie interfejsy wraz ze wszystkimi ich adresami:
ip addr show
ip a # same thing, shorterNa serwerze z jedną kartą sieciową wynik wygląda tak (linie z czasem życia valid_lft zostały pominięte):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 203.0.113.25/24 brd 203.0.113.255 scope global eth0
inet6 2001:db8:1::25/64 scope global
inet6 fe80::5054:ff:fe12:3456/64 scope linkJak to czytać:
- Nazwa interfejsu.
loto pętla zwrotna, zawsze127.0.0.1, dostępna tylko z samej maszyny. Prawdziwa karta to tutajeth0; przy przewidywalnych nazwach interfejsów pojawia się jakoens3,enp0s3lubeno1, a karty bezprzewodowe zaczynają się odwl. inetto adres IPv4,inet6to IPv6. Przyrostek/24to długość prefiksu w notacji CIDR, współczesny zapis maski255.255.255.0.scope globaloznacza adres routowalny poza tym hostem;scope link(liniafe80::) jest ważny wyłącznie w podłączonym segmencie sieci;scope hostto pętla zwrotna.state UPwraz zLOWER_UPoznacza, że interfejs jest włączony i ma łącze.state DOWNlubNO-CARRIERto zwykle przyczyna, dla której interfejs w ogóle nie ma adresu.
Przydatne warianty:
ip -4 addr # IPv4 only
ip -6 addr # IPv6 only
ip -br -4 addr # one line per interface
ip -4 addr show dev eth0 # a single interfaceForma skrócona (-br) to najszybszy sposób sprawdzenia adresu IP w Linuksie, gdy interfejsów jest kilka, czyli w typowej sytuacji na VPS z Dockerem:
$ ip -br -4 addr
lo UNKNOWN 127.0.0.1/8
eth0 UP 203.0.113.25/24
docker0 DOWN 172.17.0.1/16hostname -I: same adresy
Gdy potrzebujesz tylko adresów, hostname -I (wielka litera I) wypisuje wszystkie skonfigurowane adresy w jednej linii, oddzielone spacjami, z pominięciem pętli zwrotnej i adresów link-local IPv6:
$ hostname -I
203.0.113.25 2001:db8:1::25Dwa zastrzeżenia. hostname -i z małą literą to inne polecenie: rozwiązuje nazwę hosta przez /etc/hosts i DNS, co w Debianie i Ubuntu zwykle daje 127.0.1.1. Poza tym hostname -I wypisuje adresy bez gwarantowanej kolejności, włącznie z mostkami wirtualnymi w rodzaju docker0, więc hostname -I | awk '{print $1}' jest skrótem dla człowieka, a nie wiarygodnym „głównym IP” dla skryptów. Opcja nie należy do POSIX: mają ją Debian, Ubuntu, Fedora i RHEL, ale minimalne obrazy oparte na BusyBox, takie jak Alpine, mogą jej nie mieć.
ifconfig, nmcli i networkctl
ifconfig (przestarzały, net-tools)
ifconfig pojawia się w starszych poradnikach. Należy do pakietu net-tools, od lat wypieranego przez iproute2 i nieobecnego w domyślnej instalacji aktualnych wydań Ubuntu, Debiana oraz Fedory/RHEL. Jeśli zwraca command not found, przełącz się na ip albo zainstaluj pakiet:
sudo apt install net-tools # Debian / Ubuntu
sudo dnf install net-tools # Fedora / RHEL / Rocky / Alma$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 203.0.113.25 netmask 255.255.255.0 broadcast 203.0.113.255
inet6 fe80::5054:ff:fe12:3456 prefixlen 64 scopeid 0x20<link>Czytelne, ale z istotnym ograniczeniem: ifconfig pokazuje tylko jeden adres IPv4 na interfejs. Adresy dodatkowe dodane przez ip addr add, częste na VPS z kilkoma publicznymi IP, są dla niego niewidoczne.
nmcli i networkctl
Komputery biurkowe i serwery z rodziny Fedora/RHEL zarządzają siecią przez NetworkManager; Ubuntu Server używa netplan na bazie systemd-networkd, a wiele obrazów VPS stosuje ten sam model. Każde rozwiązanie ma narzędzie statusu pokazujące adres, bramę i DNS w jednym bloku:
nmcli device show eth0
nmcli -g IP4.ADDRESS device show eth0 # NetworkManager: just the address field
networkctl status eth0 # systemd-networkdFlaga -g (--get-values) wypisuje samą wartość jednego pola, wraz z długością prefiksu, co jest wygodne w skryptach. Jeśli nie masz pewności, który stos sieciowy działa na maszynie ani nawet jaka to dystrybucja i wydanie, najpierw ustal wersję systemu z wiersza poleceń; odpowiedź przesądza o tym, które narzędzie jest dostępne.
Jak poznać publiczny adres IP przy użyciu curl
Wszystko powyżej pokazuje adres skonfigurowany na interfejsie. Na większości VPS publiczny adres IPv4 jest przypisany bezpośrednio do interfejsu, więc to również adres widziany przez internet. W domu, w biurze lub w niektórych chmurach interfejs ma adres prywatny z zakresów RFC 1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), a router albo NAT 1:1 tłumaczy go przy wyjściu. Jedynym pewnym sposobem poznania strony publicznej jest zapytanie zewnętrznej usługi:
curl -4 icanhazip.com
curl -4 ifconfig.me/ip
curl -4 https://api.ipify.org
curl -6 icanhazip.com # public IPv6, if the host has oneFlagi -4 i -6 wymuszają rodzinę adresów, co ma znaczenie na hostach dual-stack: bez nich curl może preferować IPv6 i zwrócić adres, którego się nie spodziewasz. icanhazip.com jest prowadzony przez Cloudflare od 2021 roku i zwraca zwykły tekst. Odpowiedź należy czytać jako „adres, z którego wychodzi mój ruch”: za VPN-em lub proxy będzie to adres węzła wyjściowego, a nie twojego dostawcy internetu.
IPv6: globalny kontra link-local
Niemal każdy interfejs w Linuksie pokazuje przynajmniej jedną linię inet6, często braną błędnie za publiczny adres IPv6. Linia zaczynająca się od fe80:: i oznaczona scope link to adres link-local: każdy interfejs generuje go automatycznie, jest ważny tylko w podłączonej sieci i nigdy nie jest osiągalny z internetu. Publiczny adres IPv6 ma oznaczenie scope global i zaczyna się od 2 lub 3, ponieważ globalna przestrzeń unicast to 2000::/3.
ip -6 addr show scope global
ip -6 route show defaultJeśli pierwsze polecenie nic nie wypisze, maszyna nie ma routowalnego IPv6 i curl -6 zakończy się błędem. Dodatkowe adresy globalne oznaczone jako temporary na komputerze biurkowym pochodzą z rozszerzeń prywatności; serwery je wyłączają, aby adres pozostał stabilny dla DNS i reguł zapory.
Brama domyślna, trasa i DNS
Sam adres nie mówi jeszcze, czy maszyna cokolwiek osiągnie. Mówi o tym tablica routingu, którą wypisuje ip route (w skrócie ip r):
$ ip route
default via 203.0.113.1 dev eth0 proto static
203.0.113.0/24 dev eth0 proto kernel scope link src 203.0.113.25Linia default via to brama domyślna, czyli router używany przez każdy pakiet, dla którego nie pasuje żadna bardziej szczegółowa trasa. Drugą linię dodało jądro przy konfiguracji adresu; pole src to adres, który host preferuje jako źródłowy w tej sieci. Najbardziej przydatna sztuczka opiera się właśnie na tym: zapytaj jądro, którego adresu użyłoby dla danego celu.
$ ip route get 1.1.1.1
1.1.1.1 via 203.0.113.1 dev eth0 src 203.0.113.25 uid 1000
cacheWartość src jest z definicji adresem wyjściowym maszyny w kierunku internetu, niezależnie od tego, jakie istnieją interfejsy, mostki czy tunele. W przypadku DNS nadal warto zajrzeć do /etc/resolv.conf, ale w systemach z systemd-resolved (Ubuntu od 18.04, nowsze Fedory) zawiera on jedynie lokalny stub 127.0.0.53; prawdziwe serwery nadrzędne pokazuje resolvectl status albo pola IP4.DNS w nmcli device show na hostach z NetworkManagerem.
Skrypty: zapisanie adresu IP do zmiennej
Wynik interaktywny jest przeznaczony dla ludzi; skrypt potrzebuje jednego adresu bez niczego wokół. Poniższe wzorce sprawdzają się w praktyce, od najprostszego do najbardziej odpornego:
# One interface, IPv4, prefix length stripped
IP=$(ip -4 -o addr show dev eth0 | awk '{print $4}' | cut -d/ -f1)
# Robust: the source address used to reach the internet
IP=$(ip route get 1.1.1.1 | awk '{for (i=1; i<=NF; i++) if ($i == "src") {print $(i+1); exit}}')
# Same thing with JSON output and jq
IP=$(ip -j route get 1.1.1.1 | jq -r '.[0].prefsrc')
# Public IP, with a timeout so the script never hangs offline
PUBLIC_IP=$(curl -4 -s --max-time 5 https://icanhazip.com)Flaga -o sprawia, że ip wypisuje jeden adres na linię, dzięki czemu pozycje pól w awk pozostają bezpieczne; dodaj head -n 1, jeśli interfejs ma kilka adresów IPv4. Flaga -j przełącza ip na wyjście JSON, a jq wybiera wtedy pola po nazwie. W czymkolwiek, co działa na więcej niż jednej maszynie, wybieraj tę formę: nazwy interfejsów różnią się między hostami, nazwy pól nie.
| Polecenie | Co pokazuje | Najlepsze do |
|---|---|---|
ip addr / ip -br -4 addr | Wszystkie interfejsy, wszystkie adresy, stan | Codzienna praca, pełny obraz |
hostname -I | Wszystkie adresy w jednej linii | Szybki rzut oka |
ip route get 1.1.1.1 | Adres źródłowy używany w kierunku internetu | Skrypty, hosty z wieloma interfejsami |
ifconfig | Jeden adres IPv4 na interfejs (przestarzałe) | Stare systemy i poradniki |
curl -4 icanhazip.com | Publiczny IPv4 widziany przez internet | NAT, VPN, potwierdzenie adresu VPS |
Co zmienia się na VPS
Na VPS z dedykowanym IPv4 polecenia ip -4 addr, hostname -I i curl -4 icanhazip.com powinny zwrócić ten sam adres, ponieważ publiczne IP jest skonfigurowane wprost na interfejsie, bez NAT-u po drodze. Gdy się różnią, coś znajduje się na ścieżce: NAT po stronie dostawcy, zapomniany klient VPN albo mostek Dockera, który zajął pierwsze miejsce w hostname -I.
Po potwierdzeniu adresu sprawdź dwie rzeczy. Po pierwsze, czy jest faktycznie osiągalny i na których portach — to inne pytanie niż to, czy jest skonfigurowany: sprawdź otwarte porty na serwerze Linux od wewnątrz przy użyciu ss -tulpn, a z zewnątrz przy użyciu nmap. Po drugie, odwrotny DNS. Sprawdź rekord PTR dla swojego adresu:
dig -x 203.0.113.25 +shortŚwieży VPS zwykle odpowiada ogólną nazwą dostawcy albo niczym. Jeśli serwer wysyła pocztę lub udostępnia jakąkolwiek usługę publiczną, ustaw nazwę hosta i odwrotny DNS tak, aby były zgodne; poczta wychodząca bywa rutynowo odrzucana, gdy rekord PTR i nazwa HELO się nie zgadzają.
Te polecenia najszybciej wchodzą w krew na serwerze, którego adres należy tylko do ciebie i się nie zmienia. VPS z Linuksem od rdp.monster ma dedykowany adres IPv4, pełny dostęp root, dedykowane CPU i RAM, nielimitowane pasmo (fair-use) oraz brak KYC, z płatnościami w kryptowalutach, od $8.99 miesięcznie. Serwer jest online około 10 sekund po potwierdzeniu płatności, więc od pierwszego ip -br -4 addr dzieli cię tylko chwila.
Najczęściej zadawane pytania
Dlaczego hostname -I pokazuje więcej niż jeden adres IP?
hostname -I wypisuje wszystkie adresy na wszystkich interfejsach z wyjątkiem pętli zwrotnej i adresów link-local IPv6, więc maszyna z Dockerem, libvirt, klientem VPN lub drugą kartą sieciową pokazuje ich kilka. docker0 dokłada 172.17.0.1, virbr0 zwykle 192.168.122.1, a host dual-stack dodaje swój globalny adres IPv6. Kolejność nie jest gwarantowana. Gdy potrzebujesz adresu, z którego naprawdę wychodzi ruch, uruchom ip route get 1.1.1.1 i odczytaj pole src.Dlaczego ifconfig zwraca command not found w Ubuntu?
ifconfig jest częścią pakietu net-tools, wypieranego przez iproute2 i nieobecnego w domyślnej instalacji aktualnych wydań Ubuntu, Debiana oraz Fedory/RHEL. Zamiennikiem jest ip addr, dostępne wszędzie. Jeśli skrypt lub stare przyzwyczajenie naprawdę tego wymaga, zainstaluj pakiet poleceniem sudo apt install net-tools albo sudo dnf install net-tools, pamiętając, że ifconfig pokazuje tylko jeden adres IPv4 na interfejs i ukrywa adresy dodatkowe dodane przez ip addr add.Dlaczego hostname -i zwraca 127.0.1.1?
hostname -i w ogóle nie sprawdza sieci: rozwiązuje nazwę hosta tak, jak zrobiłaby to dowolna aplikacja, przez /etc/hosts, a następnie DNS. Instalatory Debiana i Ubuntu dodają linię mapującą nazwę hosta na 127.0.1.1, aby maszyna mogła rozwiązać własną nazwę bez sieci, i to właśnie ta linia wraca. Użyj formy z wielką literą, hostname -I, która czyta prawdziwe adresy interfejsów, albo ip -4 addr po pełne szczegóły.Jak znaleźć adresy IP innych urządzeń w mojej sieci?
ip neigh show (albo arp -a, jeśli zainstalowano net-tools). Pełny obraz daje skanowanie podsieci pingiem: nmap -sn 192.168.1.0/24 wypisuje każdego hosta, który odpowiada, wraz z nazwami, gdy dostarcza je odwrotny DNS. Podstaw własną sieć, którą odczytasz z trasy scope link w ip route. Na VPS rzadko się to przydaje, a skanowanie sąsiednich adresów może naruszać regulamin dostawcy.Adrien Roche, Redaktor ds. infrastruktury i hostingu
Inżynier systemowy z ponad 10-letnim doświadczeniem w administrowaniu serwerami Windows i Linux. Adrien prowadzi dokumentację infrastruktury rdp.monster i pisze nasze poradniki o RDP, hostingu VPS, administracji serwerami, sieciach i narzędziach prywatności.




