Configurazione di rete, diagnostica e Risoluzione dei problemi di Linux generale sono parti essenziali dell'amministrazione del sistema. Anche per uno sviluppatore che lavora con sistemi Linux, conoscenza dei comandi di rete Linux è un ulteriore vantaggio.
Nello specifico, se vuoi diventare un ingegnere DevOps o far parte di SRE, è fondamentale conoscere tutti i comandi per la risoluzione dei problemi di Linux poiché faranno parte delle tue attività quotidiane.
Questo post tratterà gli importanti comandi per la risoluzione dei problemi di rete e di Linux che sono nativamente disponibili nei sistemi Linux.
Quali sono i migliori comandi di rete e risoluzione dei problemi di Linux?
Di seguito è riportato l'elenco dei comandi per la risoluzione dei problemi nativamente disponibili.
Comando | Descrizione |
hostname | Per controllare e impostare il nome host del server. |
host | Per ottenere i dettagli del DNS dell'host |
ping | Verifica se il server remoto è raggiungibile utilizzando il protocollo ICMP. Mostra anche il tempo di andata e ritorno dei pacchetti. |
curl | Un'utilità multipiattaforma utilizzata per trasferire i dati. Può essere utilizzato per risolvere diversi problemi di rete. |
wget | Utilità per scaricare file. Può essere utilizzato per la risoluzione dei problemi di connessioni e connettività proxy. |
ip | Un sostituto per ifconfig . Può essere utilizzato per configurare e recuperare informazioni sulle interfacce di rete dei sistemi |
arp | Utilità per visualizzare e gestire la cache arp. |
ss/netstat | Utilizzato principalmente per controllare le connessioni e il PID su porte e socket Unix. |
tracerout e | Questa utility utilizza il protocollo ICMP e trova gli hop coinvolti nella lettura del server di destinazione. Mostra anche il tempo impiegato tra i luppoli. |
mtr | mtr è un mix di ping e traceroute . Fornisce inoltre informazioni aggiuntive come host intermedi e reattività. |
dig | Ti aiuta a ottenere i record DNS associati a un nome di dominio. |
nslookup | Comando simile a dig. |
nc | utility per il debug dei socket TCP/UDP. |
telnet | Può essere utilizzato per testare la connettività remota sulle porte |
route | Ti aiuta a ottenere tutte le informazioni sulla tabella dei percorsi |
tcpdump | Questa utility ti aiuta a catturare i pacchetti di rete e ad analizzarli per problemi di rete. |
lsof | elenca tutti i file aperti e le informazioni sul processo che li hanno aperti |
Comprendiamo ogni comando e vediamo come possiamo usarlo per risolvere i problemi di Linux.
Nota importante: Ogni comando/utilità menzionato in questo post ha molte opzioni e flag. Ogni comando ha una pagina man e puoi usarla per identificare i flag e le opzioni richieste per il tuo caso d'uso. Ad esempio, per
ip
comando, puoi semplicemente digitarloman ip
nel terminale per ottenere tutti i dettagli su quel comando.
1. nome host
Il comando Hostname viene utilizzato per visualizzare il nome host della macchina e per impostare il nome host.
hostname
È possibile utilizzare il comando hostname per impostare un nuovo nome host per la macchina. Ad esempio,
sudo hostname temp.com
Se imposti il nome host usando “hostname
”, quando si riavvia la macchina, il nome host cambierà nel nome specificato nel file hostname (es:/etc/hostname).
Quindi, se vuoi cambiare il nome host in modo permanente, puoi usare il /etc/hosts
file o file hostname rilevante presente sul server.
- Per le macchine Ubuntu, puoi cambiarlo in
/etc/hostname
file. - Per RHEL, CentOS e Fedora puoi cambiarlo in
/etc/sysconfig/network
file.
2. ospitare
Il comando Host serve per la ricerca inversa di IP o di un nome DNS.
Ad esempio, se vuoi trovare un DNS collegato con un IP puoi utilizzare i comandi host come segue.
host 8.8.8.8
Puoi anche fare il contrario per trovare l'indirizzo IP associato al nome di dominio. Ad esempio,
host devopscube.com
3. ping
L'utilità di rete ping viene utilizzata per verificare se il server remoto è raggiungibile o meno. Viene utilizzato principalmente per controllare la connettività e la risoluzione dei problemi della rete.
Fornisce i seguenti dettagli.
- Byte inviati e ricevuti
- Pacchetti inviati, ricevuti e persi
- Tempo approssimativo di andata e ritorno (in millisecondi)
Il comando Ping ha la seguente sintassi.
ping <IP or DNS>
Ad esempio,
ping devopscube.com
Per eseguire il ping dell'indirizzo IP
ping 8.8.8.8
Se vuoi limitare l'output del ping senza usare ctrl+c, puoi usare il flag "-c" con un numero come mostrato di seguito.
ping -c 1 devopscube.com
4. ricciolo
L'utilità Curl viene utilizzata principalmente per trasferire dati da o verso un server. Tuttavia, puoi usarlo per la risoluzione dei problemi di rete.
Per la risoluzione dei problemi di rete, curl
supporta protocolli come DICT
, FILE
, FTP
, FTPS
, GOPHER
, HTTP
, HTTPS
, IMAP
, IMAPS
, LDAP
, LDAPS
, MQTT
, POP3
, POP3S
, RTMP
, RTMPS
, RTSP
, SCP
, SFTP
, SMB
, SMBS
, SMTP
, SMTPS
, TELNET
e TFTP
Ad esempio, curl
può verificare la connettività sulla porta 22 tramite telnet.
curl -v telnet://192.168.33.10:22
Puoi controllare la connettività FTP usando curl.
curl ftp://ftptest.net
Puoi anche risolvere i problemi di connettività del server web.
curl http://devopscube.com -I
5. wget
Il wget
comando viene utilizzato principalmente per recuperare le pagine Web.
Puoi usare wget
anche per risolvere i problemi di rete.
Ad esempio, puoi risolvere i problemi di connessione del server proxy utilizzando wget.
wget -e use_proxy=yes http_proxy=<proxy_host:port> http://externalsite.com
Puoi controllare se un sito web è attivo recuperando i file.
wget www.google.com
6. ip (ifconfig)
ip
comando viene utilizzato per visualizzare e manipolare percorsi e interfacce di rete. ip command è la versione più recente di ifconfig
. ifconfig funziona in tutti i sistemi, ma è meglio usare il comando ip invece di ifconfig.
Diamo un'occhiata ad alcuni esempi di ip
comando.
Visualizza dispositivi di rete e configurazione
ip addr
Puoi usare questo comando con pipe e grep per ottenere un output più granulare come l'indirizzo IP dell'interfaccia eth0. È molto utile quando si lavora su strumenti di automazione che richiedono il recupero dinamico dell'IP.
Il comando seguente ottiene l'indirizzo IP di eth0
interfaccia di rete.
ip a | grep eth0 | grep "inet" | awk -F" " '{print $2}'
Ottieni i dettagli di un'interfaccia specifica
ip a show eth0
Puoi elencare le tabelle di instradamento.
ip route
ip route list
7. arp
ARP (Protocollo di risoluzione degli indirizzi ) mostra la tabella della cache degli indirizzi IP e degli indirizzi MAC delle reti locali con cui il sistema ha interagito.
arp
Esempio di output,
[email protected]:~$ arp
Address HWtype HWaddress Flags Mask Iface
10.0.2.3 ether 52:54:00:12:35:03 C eth0
192.168.33.1 ether 0a:00:27:00:00:00 C eth1
10.0.2.2 ether 52:54:00:12:35:02 C eth0
8. ss (netstat)
Il ss
comando è un sostituto di netstat
. Puoi ancora usare netstat
comando su tutti i sistemi.
Usando ss
comando, puoi ottenere più informazioni di netstat
comando. Il comando ss è veloce perché ottiene tutte le informazioni dallo spazio utente del kernel.
Ora diamo un'occhiata ad alcuni usi di ss
comando.
Elenca tutte le connessioni
Il "ss
Il comando elencherà tutte le connessioni socket TCP, UDP e Unix sulla tua macchina.
[email protected]:~$ ss Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 * 7594 * 0 u_str ESTAB 0 0 @/com/ubuntu/upstart 7605 * 0 u_str ESTAB 0 0 * 29701 * 0 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 29702 * 0 tcp ESTAB 0 400 172.31.18.184:ssh 1.22.167.31:61808
L'output di ss
il comando sarà grande, quindi puoi usare ” ss | less
comando ” per rendere scorrevole l'output.
Filtraggio di socket TCP, UDP e Unix
Se vuoi filtrare i dettagli del socket TCP, UDP o UNIX, usa il flag “-t” “-u” e “-x” con il comando “ss”. Mostrerà tutte le connessioni stabilite alle porte specifiche. Se vuoi elencare sia le porte connesse che quelle in ascolto usando "a" con l'apposito flag come mostrato di seguito.
ss -ta ss -ua ss -xa
Elenca tutte le porte in ascolto
Per elencare tutte le porte in ascolto, usa il flag "-l" con il comando ss. Per elencare socket TCP, UDP o UNIX specifici, usa il flag "-t", "-u" e "-x" con "-l" come mostrato di seguito.
[email protected]:~$ ss -lt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:ssh *:* LISTEN 0 50 :::http-alt :::* LISTEN 0 50 :::55857 :::* LISTEN 0 128 :::ssh :::* LISTEN 0 50 :::53285 :::* [email protected]:~$
Elenca tutto stabilito
Per elencare tutte le porte stabilite, usa lo state established
flag come mostrato di seguito.
ss -t -r state established
Per elencare tutti i socket in stato di ascolto,
ss -t -r state listening
9. traceroute
Se non hai un traceroute
utility nel tuo sistema o server, puoi installarlo dal repository nativo.
traceroute
è un'utilità di risoluzione dei problemi di rete. Usando traceroute puoi trovare il numero di hop necessari affinché un particolare pacchetto raggiunga la destinazione.
Ad esempio,
traceroute google.com
Ecco l'output.
traceroute to google.com (173.194.33.163), 30 hops max, 60 byte packets 1 ec2-50-112-0-84.us-west-2.compute.amazonaws.com (50.112.0.84) 1.974 ms 1.895 ms 1.899 ms 2 100.64.1.247 (100.64.1.247) 1.414 ms 100.64.1.137 (100.64.1.137) 1.127 ms 100.64.1.97 (100.64.1.97) 1.313 ms 3 100.64.0.198 (100.64.0.198) 1.443 ms 100.64.0.62 (100.64.0.62) 2.160 ms 100.64.0.60 (100.64.0.60) 2.116 ms 10 66.249.94.214 (66.249.94.214) 6.313 ms 7.104 ms 209.85.249.34 (209.85.249.34) 5.986 ms 11 209.85.244.65 (209.85.244.65) 6.157 ms 6.341 ms 6.574 m. . 12 sea09s18-in-f3.1e100.net (173.194.33.163) 6.302 ms 6.517 ms 6.071 ms [email protected]:~$
L'output sopra mostra il numero di hop (12) per raggiungere google.com dal server devopscube AWS ec2.
10. mt
Il mtr
utility è uno strumento diagnostico di rete per risolvere i colli di bottiglia della rete. Combina le funzionalità di entrambi ping
e traceroute
Ad esempio, il comando seguente mostra il traceroute
output in tempo reale.
mtr google.com
Ecco l'output.
rapporto mtr
È possibile generare un report utilizzando il flag –report. Quando esegui il rapporto mtr, invia 10 pacchetti alla destinazione e crea il rapporto.
mtr -n --report google.com
11. scavare
Se hai attività relative alla ricerca DNS, puoi utilizzare "dig
” comando per interrogare i server dei nomi DNS.
Ottieni tutti i record DNS con dig
Il comando seguente restituisce tutti i record DNS e le informazioni TTL di twitter.com
dig twiter.com ANY
Usa +short
per ottenere l'output senza dettagli.
dig google.com ANY +short
Ottieni record DNS specifico con dig
Ad esempio, se vuoi ottenere il A record
per il particolare nome di dominio, puoi usare il comando dig. +short
fornirà le informazioni senza dettagli
dig www.google.com A +short
Allo stesso modo, puoi ottenere le altre informazioni sui record separatamente usando i seguenti comandi.
dig google.com CNAME +short
dig google.com MX +short
dig google.com TXT +short
dig google.com NS +short
Ricerca DNS inversa con dig
È possibile eseguire una ricerca DNS inversa con dig utilizzando il comando seguente. Sostituisci 8.8.8.8
con l'IP richiesto
dig -x 8.8.8.8
12. ricerca
Nslookup L'utilità (Ricerca del server dei nomi) viene utilizzata per controllare le voci DNS. È simile al comando dig.
Per controllare i record DNS di un dominio, puoi utilizzare il seguente comando.
nslookup google.com
Puoi anche eseguire una ricerca inversa con l'indirizzo IP.
nslookup 8.8.8.8
Per ottenere tutti i record DNS di un nome di dominio, puoi utilizzare quanto segue.
nslookup -type=any google.com
Allo stesso modo, puoi eseguire query per record come mx
, soa
ecc
13. nc (netcat)
Il nc
Il comando (netcat) è noto come l'esercito svizzero dei comandi di rete.
Usando nc
, puoi verificare la connettività di un servizio in esecuzione su una porta specifica.
Ad esempio, per verificare se ssh
port è aperta, puoi usare il seguente comando.
nc -v -n 192.168.33.10 22
netcat
può essere utilizzato anche per il trasferimento di dati su TCP/UDP e la scansione delle porte.
La scansione delle porte non è consigliata negli ambienti cloud. Devi richiedere al provider cloud di eseguire operazioni di scansione delle porte nel tuo ambiente.
14. telnet
Il comando telnet viene utilizzato per risolvere i problemi di connessione TCP su una porta.
Per verificare la connettività della porta tramite telnet, utilizzare il comando seguente.
telnet 10.4.5.5 22
15. percorso
Il “route
Il comando ” viene utilizzato per ottenere i dettagli della tabella di instradamento per il tuo sistema e per manipolarlo. Diamo un'occhiata ad alcuni esempi per il comando route.
Elenca tutte le rotte
Esegui il “route
” comando senza argomenti per elencare tutti i percorsi esistenti nel tuo sistema o server.
[email protected]:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default ip-172-31-16-1. 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 * 255.255.0.0 U 0 0 0 docker0 172.31.16.0 * 255.255.240.0 U 0 0 0 eth0 [email protected]:~$
Se vuoi ottenere l'output completo in forma numerica senza alcun nome host, puoi usare il flag "-n" con il comando route.
[email protected]:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.31.16.1 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.31.16.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 [email protected]:~$
16. tcpdump
Il tcpdump
comando viene utilizzato principalmente per la risoluzione dei problemi del traffico di rete.
Nota: Per analizzare l'output di
tcpdump
comando richiede un po' di apprendimento, quindi spiegarlo esula dallo scopo di questo articolo.
tcpdump
comando funziona con le interfacce di rete del sistema. Quindi è necessario utilizzare i privilegi di amministratore per eseguire il comando.
Elenca tutte le interfacce di rete
Utilizzare il comando seguente per elencare tutte le interfacce.
sudo tcpdump --list-interfaces
Acquisisci pacchetti su un'interfaccia specifica
Per ottenere il dump dei pacchetti su un'interfaccia specifica, puoi utilizzare il comando seguente.
Nota: premi
ctrl + c
per interrompere l'acquisizione dei pacchetti.
sudo tcpdump -i eth0
Per limitare l'acquisizione di pacchetti, puoi utilizzare il -c
flag con il numero.
Ad esempio,
sudo tcpdump -i eth0 -c 10
Acquisisci pacchetti su tutte le interfacce
Per acquisire pacchetti su tutte le interfacce, usa any
flag come mostrato di seguito.
sudo tcpdump -i any
17. lsof
lsof
è un comando che verrebbe utilizzato nella risoluzione dei problemi quotidiani di Linux. Questo comando è ugualmente importante per chiunque lavori con i sistemi Linux.
Per elencare tutti i file aperti, esegui lsof
comando.
lsof
Uno degli errori più comuni incontrati da sviluppatori e ingegneri DevOps è "Errore di associazione non riuscito:indirizzo già in uso “. È possibile trovare l'ID processo associato a una porta utilizzando il comando seguente. Puoi terminare il processo per liberare la porta.
lsof -i :8080
Utilità di risoluzione dei problemi di rete di terze parti
Sono disponibili più utilità della riga di comando per la risoluzione dei problemi di rete da soluzioni di terze parti.
È necessario installarli separatamente e utilizzarli per la risoluzione dei problemi. Per motivi di conformità alla sicurezza, non tutte le organizzazioni ti consentiranno di farlo. Tuttavia, se devi scegliere di utilizzare strumenti di terze parti, puoi esplorarli.
Conclusione
In questo articolo abbiamo trattato le importanti utilità della riga di comando di Linux per la risoluzione dei problemi e configurazione della rete.
Se stai iniziando con l'amministrazione del sistema, i ruoli DevOps o SRE, è essenziale conoscere queste utilità per supportare i progetti su cui stai lavorando.
Ogni utilità ha molte funzionalità e puoi esplorare ulteriormente per soddisfare le tue esigenze.
Se pensi che abbiamo perso qualche comando importante, faccelo sapere nella sezione commenti.
Inoltre, se vuoi imparare lo scripting della shell, consulta la nostra guida su come imparare lo scripting della shell. Se sei uno sviluppatore, dai un'occhiata alla mia guida sui comandi Linux che ogni sviluppatore dovrebbe conoscere.