15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
08.10.2024

“ping: command not found” — Як встановити та використовувати Ping в Ubuntu

Помилка `ping: command not found` з’являється в Ubuntu, коли пакет iputils-ping відсутній у системі. Це поширено на мінімальних інсталяціях, хмарних образах VPS та контейнерах Docker, де несуттєві утиліти видалено для зменшення розміру образу. Виправлення — це одна команда `apt`: `sudo apt install iputils-ping`. У цій статті пояснюється, чому пакет відсутній, як правильно встановити його в різних середовищах Ubuntu та як ефективно використовувати `ping` для реальної мережевої діагностики.

Що насправді робить команда Ping

`ping` — це утиліта мережевої діагностики, яка надсилає пакети ICMP Echo Request до цільового хоста та очікує відповідей ICMP Echo Reply. Час двостороннього проходження (RTT) для кожного пакета вимірюється в мілісекундах, що дає точний сигнал про мережеву затримку, доступність та стабільність.

Під капотом `ping` покладається на Internet Control Message Protocol (ICMP), визначений у RFC 792. Він працює на мережевому рівні (рівень 3 моделі OSI), що означає повне обходження TCP та UDP. Це робить його корисним для визначення того, чи проблема з підключенням знаходиться на рівні IP-маршрутизації, а не на рівні застосунку або транспортному рівні.

Основні випадки використання

  • Перевірка доступності — Підтверджує, чи активний віддалений хост та чи відповідає він.
  • Вимірювання затримки — Повідомляє RTT у мілісекундах; підвищений RTT вказує на перевантаження мережі або географічно віддалений сервер.
  • Виявлення втрати пакетів — Втрачені відповіді ICMP вказують на несправності обладнання, перевантажені маршрутизатори або нестабільні канали.
  • Перевірка мережевого шляху — Корисно для перевірки того, що щойно налаштований маршрут або правило брандмауера не блокує трафік.
  • Виявлення брандмауера та фільтрації ICMP — Якщо `ping` перевищує час очікування, але TCP-сервіси відповідають, брандмауер, швидше за все, блокує саме ICMP-трафік.
  • Перевірка DNS-розпізнавання — Пінгування імені хоста (а не IP) підтверджує, що DNS-розпізнавання працює правильно.

Чому Ping відсутній в Ubuntu?

Повна десктопна інсталяція Ubuntu включає `ping` за замовчуванням. Однак кілька поширених сценаріїв призводять до системи, де бінарний файл відсутній:

  • Мінімальні серверні інсталяції — Мінімальний ISO Ubuntu Server навмисно не включає багато утиліт, щоб зменшити розмір.
  • Хмарні образи та образи VPS — Провайдери часто розповсюджують спрощені образи Ubuntu для швидшого розгортання. Якщо ви запускаєте екземпляр VPS Hosting, ви можете зіткнутися з цим під час першого завантаження.
  • Контейнери Docker та LXC — Офіційні базові образи Ubuntu (`ubuntu:22.04`, `ubuntu:24.04`) не включають `iputils-ping` за замовчуванням.
  • Автоматизовані розгортання та CI/CD-конвеєри — Скриптові середовища, побудовані на основі мінімальних базових образів, часто не мають стандартних мережевих інструментів.
  • Середовища Chroot та WSL — Windows Subsystem for Linux та chroot-оточення також можуть не мати цього пакета.

Сам бінарний файл знаходиться за адресою `/bin/ping` (або `/usr/bin/ping` у новіших системах). Якщо цей шлях не існує, оболонка повертає `command not found`. Ви можете підтвердити, чи бінарний файл просто відсутній, а не знаходиться за нестандартним шляхом, за допомогою:

“`bash

which ping

or

type ping

“`

Якщо обидва повертають нічого, пакет не встановлено.

Як встановити Ping в Ubuntu (покроково)

Крок 1: Оновіть індекс пакетів

Завжди оновлюйте локальний індекс пакетів перед встановленням чого-небудь. Це гарантує, що `apt` знайде найновіші доступні версії пакетів та уникне помилок застарілих метаданих:

“`bash

sudo apt update

“`

На Виділеному сервері або щойно розгорнутому VPS цей крок особливо важливий, оскільки кеш пакетів може бути застарілим на дні або тижні.

Крок 2: Встановіть iputils-ping

Бінарний файл `ping` в Ubuntu надається пакетом iputils-ping, який є частиною ширшого набору `iputils`, що підтримується спільнотою ядра Linux:

“`bash

sudo apt install iputils-ping

“`

Коли з’явиться запит `Do you want to continue? [Y/n]`, натисніть `Y` та `Enter`. Пакет невеликий (зазвичай менше 100 KB) і встановлюється за секунди.

Крок 3: Перевірте встановлення

Підтвердіть, що бінарний файл тепер доступний та функціонує:

“`bash

ping -c 4 google.com

“`

Прапорець `-c 4` обмежує виведення до 4 пакетів. Успішна відповідь виглядає так:

“`

PING google.com (142.250.185.46) 56(84) bytes of data.

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=1 ttl=118 time=12.4 ms

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=2 ttl=118 time=11.9 ms

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=3 ttl=118 time=12.1 ms

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=4 ttl=118 time=12.3 ms

— google.com ping statistics —

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 11.9/12.175/12.4/0.185 ms

“`

Ви хочете бачити 0% втрати пакетів та стабільні значення RTT. Висока варіація RTT (`mdev`) сигналізує про мережевий джитер, що важливо для застосунків, чутливих до затримки.

Крок 4: Перевірте шлях до встановленого бінарного файлу та дозволи

“`bash

which ping

ls -la $(which ping)

“`

В Ubuntu 20.04 та пізніших версіях `ping` більше не потребує біта setuid. Натомість він використовує можливості Linux (`cap_net_raw`) для надсилання сирих ICMP-пакетів без привілеїв root. Ви можете перевірити це за допомогою:

“`bash

getcap $(which ping)

Expected output: /usr/bin/ping cap_net_raw=ep

“`

Це покращення безпеки порівняно зі старішими реалізаціями на основі setuid.

Встановлення Ping всередині контейнера Docker

Якщо ви працюєте всередині контейнера Docker на основі Ubuntu, процес ідентичний, але вам може знадобитися виконувати команди від імені root (користувач за замовчуванням у більшості базових образів):

“`bash

apt update && apt install -y iputils-ping

“`

Прапорець `-y` автоматично підтверджує запит, що необхідно для неінтерактивних збірок Dockerfile. Щоб вбудувати `ping` у власний образ, додайте його до вашого `Dockerfile`:

“`dockerfile

FROM ubuntu:22.04

RUN apt update && apt install -y iputils-ping && rm -rf /var/lib/apt/lists/*

“`

Рядок `rm -rf /var/lib/apt/lists/*` очищає кеш пакетів, щоб зменшити розмір шару образу — найкраща практика для виробничих образів контейнерів.

Встановлення Ping в Ubuntu без доступу до Інтернету (офлайн-метод)

На ізольованих серверах або відокремлених мережевих сегментах `apt` не може отримати доступ до зовнішніх репозиторіїв. У цьому випадку у вас є два варіанти:

Варіант 1: Перенесіть пакет .deb вручну

На машині з доступом до Інтернету завантажте пакет:

“`bash

apt download iputils-ping

“`

Перенесіть файл `.deb` на цільову машину через `scp` або USB-накопичувач, потім встановіть його:

“`bash

sudo dpkg -i iputils-ping_*.deb

“`

Варіант 2: Використовуйте локальне дзеркало або внутрішній APT-репозиторій

Налаштуйте `/etc/apt/sources.list` для вказівки на внутрішнє дзеркало, яке має кешований пакет. Це стандартний підхід для корпоративних середовищ із суворим контролем вихідного трафіку.

Альтернативні інструменти, якщо Ping заблоковано або недоступний

ICMP-трафік часто блокується брандмауерами, хмарними групами безпеки або хостинг-провайдерами. Якщо `ping` постійно перевищує час очікування, незважаючи на доступність хоста, розгляньте ці альтернативи:

ІнструментПротоколОсновне використанняКоманда встановлення
`ping`ICMPБазова доступність та затримка`apt install iputils-ping`
`traceroute`ICMP / UDPПокроковий аналіз шляху`apt install traceroute`
`mtr`ICMPБезперервний шлях + статистика затримки`apt install mtr`
`nmap`TCP/UDP/ICMPСканування портів, виявлення хостів`apt install nmap`
`curl` / `wget`HTTP/HTTPSДоступність на рівні застосунку`apt install curl`
`nc` (netcat)TCP/UDPТестування підключення через сирі сокети`apt install netcat-openbsd`
`hping3`TCP/UDP/ICMPФормування власних пакетів`apt install hping3`
`fping`ICMPМасове тестування доступності хостів`apt install fping`

Ключовий висновок: `mtr` (Matt’s Traceroute) є, мабуть, кориснішим, ніж `ping` для діагностики переривчастої втрати пакетів, оскільки він безперервно зондує кожен вузол на шляху та відображає відсоток втрат на кожному вузлі в реальному часі. На виробничих серверах — включаючи ті, що працюють з VPS з cPanel — `mtr` має бути вашим першим інструментом, коли клієнт повідомляє про нестабільні проблеми з підключенням.

Поширені помилки та способи їх виправлення

"permission denied" або "operation not permitted"

Це відбувається, коли можливість `cap_net_raw` відсутня у бінарному файлі, або при запуску всередині контейнера з обмеженими можливостями Linux:

“`bash

Check capabilities

getcap /usr/bin/ping

Restore if missing

sudo setcap cap_net_raw+ep /usr/bin/ping

“`

Всередині Docker вам може знадобитися запустити контейнер з `–cap-add NET_RAW` або `–privileged` (використовуйте `–privileged` лише в довірених, ізольованих середовищах):

“`bash

docker run –cap-add NET_RAW ubuntu:22.04 ping -c 2 8.8.8.8

“`

"unable to locate package iputils-ping"

Це означає, що `apt` не може знайти пакет у поточному списку репозиторіїв. Причини та виправлення:

  1. Застарілий індекс пакетів — Спочатку виконайте `sudo apt update`.
  2. Пошкоджений sources.list — Перевірте, що `/etc/apt/sources.list` містить дійсні записи репозиторіїв Ubuntu.
  3. Мінімальний контейнер без репозиторію universe — Додайте репозиторій universe: `sudo add-apt-repository universe`.
  4. Відсутнє мережеве підключення — Перевірте за допомогою `curl https://archive.ubuntu.com`, щоб підтвердити, що машина може отримати доступ до серверів пакетів Ubuntu.

"ping: connect: Network is unreachable"

Бінарний файл встановлено, але система не має налаштованого мережевого маршруту. Це проблема конфігурації мережі, а не проблема `ping`. Діагностуйте за допомогою:

“`bash

ip route show

ip addr show

“`

Якщо маршрут за замовчуванням відсутній, додайте його:

“`bash

sudo ip route add default via <gateway_ip>

“`

"Name or service not known" (збій DNS)

`ping google.com` розпізнає ім’я хоста перед надсиланням ICMP-пакетів. Якщо DNS не працює, ви побачите цю помилку. Перевірте, пінгуючи IP безпосередньо:

“`bash

ping -c 2 8.8.8.8

“`

Якщо це вдається, проблема специфічна для DNS. Перевірте `/etc/resolv.conf` та переконайтеся, що налаштовано дійсний сервер імен.

Основні прапорці Ping, які повинен знати кожен системний адміністратор

ПрапорецьОписПриклад
`-c <n>`Надіслати рівно n пакетів, потім зупинитися`ping -c 5 8.8.8.8`
`-i <sec>`Інтервал між пакетами (за замовчуванням: 1 с)`ping -i 0.2 8.8.8.8`
`-s <bytes>`Встановити розмір корисного навантаження пакета (за замовчуванням: 56 байт)`ping -s 1400 8.8.8.8`
`-t <ttl>`Встановити значення IP Time-To-Live`ping -t 64 8.8.8.8`
`-W <sec>`Час очікування відповіді на кожен запит`ping -W 2 8.8.8.8`
`-q`Тихий режим — показувати лише підсумок`ping -q -c 10 8.8.8.8`
`-f`Флуд-пінг (потребує root)`sudo ping -f 8.8.8.8`
`-4` / `-6`Примусово використовувати IPv4 або IPv6`ping -6 ipv6.google.com`
`-D`Друкувати мітку часу перед кожним рядком`ping -D -c 5 8.8.8.8`
`-O`Повідомляти про очікувані відповіді (показує втрату пакетів у рядку)`ping -O 8.8.8.8`

Практична порада: Використовуйте `ping -s 1472 -M do <gateway>` для тестування виявлення MTU шляху. Прапорець `-M do` встановлює біт «Don’t Fragment»; якщо пакет перевищує MTU шляху, ви отримаєте повідомлення ICMP «Frag needed», що є остаточним способом діагностики TCP-чорних дір, пов’язаних з MTU — поширена проблема на VPN-тунелях та певних конфігураціях хмарних мереж.

Міркування безпеки: коли вимикати ICMP

Хоча `ping` є безцінним для діагностики, необмежений ICMP на публічних серверах несе ризики:

  • Атаки ICMP-флуду (ping flood) — Великий обсяг ICMP-трафіку може насичувати пропускну здатність або CPU на старому обладнанні.
  • Мережева розвідка — Відповідь на ICMP розкриває, що хост активний, що допомагає зловмисникам картографувати вашу інфраструктуру.
  • Smurf-атаки — Посилені ICMP-атаки широкомовної розсилки (здебільшого пом’якшені в сучасних мережах, але все ще актуальні для застарілої інфраструктури).

Для виробничих серверів — особливо тих, що розміщують веб-застосунки або послуги Email Hosting — розумна політика полягає в тому, щоб дозволяти ICMP лише з довірених IP-адрес управління та обмежувати швидкість або блокувати ICMP з публічного Інтернету за допомогою `iptables` або `nftables`:

“`bash

Allow ICMP from a trusted management IP

sudo iptables -A INPUT -p icmp –icmp-type echo-request -s 203.0.113.10 -j ACCEPT

Rate-limit ICMP from all other sources (max 10 pings/second)

sudo iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 10/second -j ACCEPT

Drop remaining ICMP echo requests

sudo iptables -A INPUT -p icmp –icmp-type echo-request -j DROP

“`

Цей підхід зберігає діагностичну корисність для вашої команди, одночасно зменшуючи поверхню атаки.

Ping у контексті серверних та хостингових середовищ

Розуміння поведінки `ping` суттєво відрізняється залежно від вашого хостингового середовища:

Спільний хостинг: На планах Спільного веб-хостингу у вас зазвичай немає доступу до оболонки. Діагностика на основі ping повинна виконуватися з локальної машини або зовнішнього сервісу моніторингу, спрямованого на IP вашого сервера.

VPS та виділені сервери: Повний доступ root означає, що ви можете встановити `iputils-ping` та вільно виконувати всі діагностичні команди. Саме тут `ping`, `mtr` та `traceroute` є найбільш цінними для усунення проблем з підключенням між вашим сервером та провайдерами вищого рівня.

GPU-сервери: Високопродуктивні обчислювальні середовища, такі як вузли GPU Hosting, часто запускають мінімальні образи ОС для максимального виділення ресурсів обчислювальним навантаженням. Ping та інші діагностичні інструменти зазвичай відсутні та повинні бути встановлені явно.

Контейнери та оркестрація: У подах Kubernetes або сервісах Docker Swarm інструменти налагодження мережі зазвичай відсутні у виробничих образах. Рекомендований підхід — використовувати виділений контейнер-sidecar для налагодження або ефемерний pod для налагодження (`kubectl debug`), а не перевантажувати виробничі образи діагностичними утилітами.

Матриця швидких рішень

Використовуйте цю матрицю для визначення правильної дії залежно від вашого конкретного сценарію:

СценарійРекомендована дія
Нова інсталяція сервера Ubuntu, ping відсутній`sudo apt update && sudo apt install iputils-ping`
Контейнер Docker, немає запрошення root`apt update && apt install -y iputils-ping`
Ping встановлено, але «permission denied»`sudo setcap cap_net_raw+ep /usr/bin/ping`
Ping перевищує час очікування, хост доступний через HTTPICMP заблоковано брандмауером — використовуйте `curl` або `nc` натомість
DNS-розпізнавання не вдається при пінгуванні імені хостаПеревірте `/etc/resolv.conf`; перевірте за допомогою `ping 8.8.8.8`
Потрібен покроковий аналіз шляхуВстановіть та використовуйте `mtr` замість `ping`
Офлайн / ізольований серверЗавантажте `.deb` на іншій машині, перенесіть через `scp`, встановіть за допомогою `dpkg -i`
ICMP заблоковано хмарним провайдеромПеревірте правила групи безпеки / брандмауера; дозвольте ICMP тип 8 вхідний

Технічний контрольний список: правильне налаштування Ping

  • [ ] Виконайте `sudo apt update` перед спробою встановлення
  • [ ] Встановіть за допомогою `sudo apt install iputils-ping`
  • [ ] Підтвердіть шлях до бінарного файлу: `which ping` має повернути `/usr/bin/ping`
  • [ ] Перевірте можливості: `getcap /usr/bin/ping` має показати `cap_net_raw=ep`
  • [ ] Спочатку перевірте з IP (`ping -c 2 8.8.8.8`) перед тестуванням з іменем хоста
  • [ ] Якщо ім’я хоста не вдається, але IP вдається, діагностуйте DNS через `/etc/resolv.conf`
  • [ ] Для контейнерів додайте `–cap-add NET_RAW`, якщо помилки дозволів зберігаються
  • [ ] На виробничих серверах застосуйте обмеження швидкості `iptables` для публічного ICMP
  • [ ] Розгляньте `mtr` для постійних або переривчастих проблем з підключенням
  • [ ] Для офлайн-середовищ використовуйте `apt download` на підключеній машині та перенесіть `.deb`

FAQ

П: Чому Ubuntu не включає ping за замовчуванням?

Мінімальні образи та серверні образи Ubuntu не включають `iputils-ping` для зменшення розміру інсталяції. Пакет не є частиною обов’язкових залежностей базової системи, тому він виключається, якщо не запитано явно. Встановіть його за допомогою `sudo apt install iputils-ping`.

П: Чи є різниця між `ping` та `ping6` в Ubuntu?

У сучасних системах Ubuntu (18.04 та пізніших) бінарний файл `ping` обробляє як IPv4, так і IPv6. Використовуйте `ping -4` для примусового використання IPv4 або `ping -6` для примусового використання IPv6. Окремий бінарний файл `ping6` застарів та більше не постачається окремо в поточних випусках `iputils-ping`.

П: Чому ping працює від імені root, але не вдається для звичайних користувачів?

Це вказує на те, що можливість `cap_net_raw` відсутня у бінарному файлі. Виконайте `sudo setcap cap_net_raw+ep /usr/bin/ping` для її відновлення. Крім того, перевстановлення пакета (`sudo apt install –reinstall iputils-ping`) скине можливості бінарного файлу до правильних значень за замовчуванням.

П: Чи можу я використовувати ping для перевірки, чи відкритий певний порт?

Ні. `ping` використовує ICMP і не має поняття про TCP/UDP-порти. Щоб перевірити, чи відкритий певний порт, використовуйте `nc -zv <host> <port>` (netcat) або `nmap -p <port> <host>`. Хост може бути доступний через `ping`, маючи заблокований певний порт, або навпаки.

П: Що означає високий `mdev` (стандартне відхилення) у виведенні ping?

`mdev` вимірює варіацію RTT між пакетами. Високе значення `mdev` (наприклад, 20–50 мс при середньому RTT 30 мс) вказує на мережевий джитер — непостійний час доставки пакетів. Це особливо шкідливо для застосунків реального часу, таких як VoIP, відеоконференції та онлайн-ігри. Постійний джитер зазвичай вказує на перевантаження на проміжному маршрутизаторі, несправний мережевий інтерфейс або неправильно налаштовану політику QoS.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати