Linux

9.1 Сетевая диагностика

Сетевые утилиты помогают диагностировать проблемы с подключением и анализировать сетевой трафик.

ping — проверка доступности

ping google.com                  # проверить доступность сайта
ping -c 4 8.8.8.8               # отправить 4 пакета
ping -i 2 google.com             # интервал между пакетами 2 сек
ping -t 64 google.com            # TTL пакетов 64

traceroute — трассировка маршрута

traceroute google.com            # показать маршрут до сервера
traceroute -n google.com         # не разрешать имена хостов
traceroute -m 10 google.com      # максимум 10 прыжков

mtr — комбинация ping и traceroute

mtr google.com                   # запустить mtr
mtr -r -c 10 google.com          # 10 циклов и завершить
mtr -n google.com                 # не разрешать имена

nslookup — разрешение DNS

nslookup google.com              # найти IP адрес
nslookup 8.8.8.8                 # обратный поиск (IP -> имя)
nslookup -type=MX google.com     # найти MX записи

dig — расширенный DNS запрос

dig google.com                   # подробная информация о DNS
dig @8.8.8.8 google.com          # использовать конкретный DNS сервер
dig -x 8.8.8.8                   # обратный DNS запрос
Интерпретация ping:
time= — время отклика в миллисекундах
ttl= — время жизни пакета
packet loss — процент потерянных пакетов

9.2 Просмотр сетевых соединений

Команды для просмотра активных сетевых соединений и анализа сетевого трафика.

ss — современная замена netstat

ss -tuln                         # все TCP и UDP соединения
ss -tulnp                        # с процессами
ss -tuln | grep :80              # найти соединения на порту 80
ss -tuln | grep LISTEN           # только слушающие порты

netstat — классическая команда

netstat -tuln                    # все TCP и UDP соединения
netstat -tulnp                   # с процессами
netstat -r                       # таблица маршрутизации
netstat -i                       # статистика интерфейсов

lsof — список открытых файлов

lsof -i                          # все сетевые соединения
lsof -i :80                      # соединения на порту 80
lsof -i tcp                      # только TCP соединения
lsof -i udp                      # только UDP соединения

iftop — мониторинг трафика

sudo iftop                       # мониторинг трафика в реальном времени
sudo iftop -i eth0               # конкретный интерфейс
sudo iftop -n                    # не разрешать имена хостов

nethogs — трафик по процессам

sudo nethogs                    # трафик по процессам
sudo nethogs eth0                # конкретный интерфейс
Расшифровка состояний TCP:
LISTEN — ожидает подключения
ESTABLISHED — установленное соединение
CLOSE_WAIT — ожидает закрытия
TIME_WAIT — временное ожидание

9.3 Скачивание файлов

wget и curl — основные инструменты для скачивания файлов из интернета.

wget — простой загрузчик

wget https://example.com/file.zip    # скачать файл
wget -O filename.zip https://example.com/file.zip  # сохранить с другим именем
wget -c https://example.com/file.zip # продолжить загрузку
wget -r https://example.com/         # рекурсивно скачать сайт

curl — универсальный инструмент

curl https://example.com/file.zip    # скачать файл
curl -O https://example.com/file.zip # сохранить с оригинальным именем
curl -L https://example.com/redirect # следовать редиректам
curl -C - https://example.com/file.zip # продолжить загрузку

HTTP запросы с curl

curl -X GET https://api.example.com/data     # GET запрос
curl -X POST -d "data=value" https://api.example.com  # POST запрос
curl -H "Authorization: Bearer token" https://api.example.com  # с заголовками
curl -v https://example.com                  # подробный вывод

Пакетная загрузка

# Создать список URL для загрузки
echo "https://example.com/file1.zip" > urls.txt
echo "https://example.com/file2.zip" >> urls.txt

# Загрузить все файлы
wget -i urls.txt

Ограничение скорости

wget --limit-rate=1m https://example.com/file.zip  # ограничить скорость
curl --limit-rate 1m https://example.com/file.zip  # ограничить скорость
Выбор между wget и curl:
wget — лучше для простого скачивания файлов
curl — лучше для API запросов и сложных операций

9.4 SSH подключение

SSH (Secure Shell) — протокол для безопасного удаленного доступа к серверам.

Базовое подключение

ssh user@hostname              # подключиться к серверу
ssh user@192.168.1.100        # подключиться по IP
ssh -p 2222 user@hostname     # подключиться на нестандартном порту

Первый вход

# При первом подключении система спросит:
# The authenticity of host 'hostname' can't be established.
# Are you sure you want to continue connecting (yes/no)?
# Введите 'yes' для продолжения

Выполнение команд на удаленном сервере

ssh user@hostname "ls -la"     # выполнить команду и выйти
ssh user@hostname "uptime && who"  # выполнить несколько команд

Туннелирование портов

ssh -L 8080:localhost:80 user@hostname  # локальный туннель
ssh -R 8080:localhost:80 user@hostname  # удаленный туннель

Передача файлов через SSH

scp file.txt user@hostname:/home/user/  # скопировать файл на сервер
scp user@hostname:/home/user/file.txt . # скопировать файл с сервера
scp -r directory/ user@hostname:/home/user/  # скопировать каталог

Настройка SSH клиента

# Создать файл ~/.ssh/config
Host myserver
    HostName 192.168.1.100
    User myuser
    Port 22
    IdentityFile ~/.ssh/id_rsa

# Теперь можно подключаться просто:
ssh myserver
Безопасность SSH: Всегда используйте ключи вместо паролей для аутентификации. Отключите root login и используйте нестандартные порты.

9.5 Аутентификация по ключам

SSH ключи обеспечивают более безопасную аутентификацию, чем пароли.

Генерация SSH ключа

ssh-keygen -t rsa -b 4096        # создать RSA ключ
ssh-keygen -t ed25519            # создать Ed25519 ключ (рекомендуется)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"  # с комментарием

Процесс генерации

# Система спросит:
# Enter file in which to save the key (/home/user/.ssh/id_rsa): [Enter]
# Enter passphrase (empty for no passphrase): [введите пароль или Enter]
# Enter same passphrase again: [повторите пароль]

Копирование ключа на сервер

ssh-copy-id user@hostname        # автоматически скопировать ключ
# Или вручную:
cat ~/.ssh/id_rsa.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Проверка подключения

ssh user@hostname                # подключиться без пароля
ssh -i ~/.ssh/id_rsa user@hostname  # использовать конкретный ключ

Управление ключами

ssh-add ~/.ssh/id_rsa            # добавить ключ в ssh-agent
ssh-add -l                       # показать загруженные ключи
ssh-add -D                       # удалить все ключи из ssh-agent

Настройка ssh-agent

# Добавить в ~/.bashrc или ~/.profile:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
Типы ключей:
RSA — классический, совместимый
Ed25519 — современный, быстрый, безопасный
ECDSA — компактный, быстрый

9.6 Передача файлов

Различные способы передачи файлов между компьютерами в Linux.

scp — копирование через SSH

# Копирование файла на сервер
scp file.txt user@hostname:/home/user/
scp -r directory/ user@hostname:/home/user/

# Копирование файла с сервера
scp user@hostname:/home/user/file.txt .
scp -r user@hostname:/home/user/directory/ .

# Копирование между серверами
scp user1@host1:/path/file user2@host2:/path/

rsync — синхронизация файлов

rsync -avz file.txt user@hostname:/home/user/  # синхронизировать файл
rsync -avz --delete local/ user@hostname:/home/user/  # синхронизировать каталог
rsync -avz --progress user@hostname:/home/user/ .  # с прогрессом

sftp — интерактивная передача

sftp user@hostname              # подключиться к SFTP серверу
# Команды SFTP:
# put file.txt                 # загрузить файл
# get file.txt                 # скачать файл
# ls                           # список файлов
# cd directory                 # смена каталога
# quit                         # выход

wget/curl для загрузки

wget https://example.com/file.zip
curl -O https://example.com/file.zip
curl -L -o file.zip https://example.com/file.zip

Создание архива перед передачей

tar -czf archive.tar.gz directory/  # создать архив
scp archive.tar.gz user@hostname:/home/user/
ssh user@hostname "cd /home/user && tar -xzf archive.tar.gz"

Практический пример резервного копирования

#!/bin/bash
# Скрипт резервного копирования на удаленный сервер

BACKUP_DIR="/home/user/backup"
REMOTE_USER="backup"
REMOTE_HOST="backup-server.com"
REMOTE_DIR="/backups"

# Создать архив
tar -czf "$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz" /home/user/documents/

# Передать на сервер
scp "$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"

# Удалить локальный архив
rm "$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz"
Выбор инструмента:
scp — простые операции копирования
rsync — синхронизация и инкрементальные копии
sftp — интерактивная работа с файлами
wget/curl — загрузка из интернета

Настройки

Цветовая схема

Тема