Comandi Linux per principianti: La guida essenziale del terminale con esempi
Il terminale sembra intimidatorio finché non conosci qualche dozzina di comandi. Scopri quelli che contano, raggruppati in base a ciò che stai cercando di fare, quindi combinali per rispondere a una domanda reale su un file di registro.
- Un piccolo insieme di comandi Linux copre la maggior parte del lavoro quotidiano:
ls,cd,cp,mv,rm,categrep. - I tubi (
|) collegano strumenti semplici per rispondere a domande più difficili. rmnon ha un cestino, quindi ricontrolla prima di premere Invio.- Utilizza
mano--helpogni volta che dimentichi un’opzione.
La maggior parte dei server, contenitori e macchine cloud eseguono Linux e di solito non dispongono di un desktop grafico. Ecco perché imparare i comandi Linux è un’abilità così utile sia per gli sviluppatori che per i tester. Non è necessario memorizzarne centinaia. Alcune dozzine ti porteranno lontano.
Abbiamo testato gli esempi di file, ricerca e pipe in Git Bash su Windows, che fornisce gli stessi strumenti principali, e l’output proviene da quell’esecuzione. Non abbiamo eseguito i comandi per permessi, servizi, pacchetti e accesso remoto, perché dipendono da un vero sistema Linux. I dettagli possono variare in base alla distribuzione, quindi controlla la documentazione del tuo sistema.
Iniziare in sicurezza
Non è necessario installare Linux per esercitarsi. Buone opzioni includono:
- Windows: Sottosistema Windows per Linux (WSL) o Git Bash per le nozioni di base.
- macOS: il Terminale integrato, i cui comandi sono molto simili, anche se alcune opzioni differiscono.
- Qualsiasi sistema: un contenitore. Il nostro tutorial su Docker per principianti mostra come avviarne uno.
Esercitati in una cartella usa e getta e ricorda che tutto in Linux fa distinzione tra maiuscole e minuscole: Notes.txt e notes.txt sono file diversi.
Anatomia di un comando
ls -l /var/log
^ ^ ^
| | argument: what to act on
| option: how to behave
command: what to run
Le opzioni brevi di solito possono essere combinate, quindi ls -l -a e ls -la sono la stessa cosa. Le opzioni lunghe utilizzano due trattini, come in --help. Per assistenza, eseguire man ls per il manuale completo o ls --help per un riepilogo. Premere q per uscire da una pagina di manuale.
Muoversi nel file system
| Comando | Cosa fa |
|---|---|
pwd |
Stampa la cartella corrente |
l |
Elenca i file |
ls -la |
Elenca tutti i file, compresi quelli nascosti, con i dettagli |
cartella del CD |
Si sposta in una cartella |
cd.. |
Sale di un livello |
cd ~ |
Va alla tua cartella Inizio |
disco - |
Ritorna alla cartella precedente |
Premi Tab per completare automaticamente i nomi dei file e la freccia su per ripristinare i comandi precedenti. Queste due abitudini fanno risparmiare più tempo di qualsiasi altro suggerimento qui. Un nome file che inizia con un punto, come .env, è nascosto e ls lo mostra solo con -a.
Gestisci file e cartelle
| Comando | Cosa fa |
|---|---|
mkdir -p progetto/logs |
Crea cartelle, inclusi i genitori |
tocca note.txt |
Crea un file vuoto |
cp a.txt b.txt |
Copia un file |
cp -r origine/ backup/ |
Copia una cartella |
mv a.txt b.txt |
Rinomina o sposta un file |
rm a.txt |
Elimina un file |
rm -r cartella/ |
Elimina una cartella e tutto ciò che contiene |
Ecco una breve sessione della nostra corsa:
$ mkdir -p project/logs
$ cd project
$ touch notes.txt
$ ls
logs notes.txt
$ cp notes.txt backup.txt
$ mv backup.txt old.txt
$ ls
logs notes.txt old.txt
$ rm old.txt
$ ls
logs notes.txt
Suggerimento: rm non utilizza un cestino e i file eliminati generalmente scompaiono. Prestare particolare attenzione a rm -r e ai caratteri jolly. Esegui prima ls con lo stesso modello, per vedere esattamente cosa corrisponderebbe, e usa rm -i se vuoi un prompt per ogni file.
Visualizza il contenuto del file
| Comando | Cosa fa |
|---|---|
scheda del gatto |
Stampa un intero file |
meno file |
Scorre un file lungo (q per uscire) |
testa -n 5file |
Mostra le prime cinque righe |
coda -n 5 file |
Mostra le ultime cinque righe |
tail -ffile |
Segue le nuove righe man mano che vengono scritte |
wc -l |
Conta le righe |
Per i prossimi esempi, abbiamo creato un piccolo file di registro:
$ cat logs/app.log
ERROR db down
INFO started
ERROR disk full
INFO stopped
$ head -n 1 logs/app.log
ERROR db down
$ tail -n 1 logs/app.log
INFO stopped
$ wc -l logs/app.log
4 logs/app.log
tail -f è uno strumento quotidiano per osservare il registro di un’applicazione in tempo reale mentre si riproduce un bug. Premere Ctrl+C per fermarlo.
Cerca con grep e trova
grep cerca all’interno dei file e find cerca i file stessi:
$ grep ERROR logs/app.log
ERROR db down
ERROR disk full
$ grep -c ERROR logs/app.log
2
$ find . -name "*.log"
./logs/app.log
| Opzione | Significato |
|---|---|
grep -i |
Ignora maiuscole e minuscole |
grep -r |
Cerca una cartella in modo ricorsivo |
grep -n |
Mostra i numeri di riga |
grep -v |
Mostra le righe che non corrispondono |
grep -c |
Conta le linee corrispondenti |
Pipe e reindirizzamento
Questa è l’idea che rende la riga di comando così potente. Ogni strumento svolge un piccolo lavoro e tu li colleghi:
| Simbolo | Cosa fa |
|---|---|
| |
Invia l’output di un comando a quello successivo |
> |
Scrive l’output in un file, sostituendo il suo contenuto |
>> |
Aggiunge l’output a un file |
2> |
Scrive messaggi di errore in un file |
$ echo "hello" > greeting.txt
$ echo "world" >> greeting.txt
$ cat greeting.txt
hello
world
Fai attenzione con un singolo >, perché sovrascrive silenziosamente ciò che era già nel file.
Un esempio reale: riepilogare un registro
Quante righe di ogni tipo ci sono nel nostro log? Combinando quattro semplici comandi si ottiene la risposta:
$ cut -d' ' -f1 logs/app.log | sort | uniq -c
2 ERROR
2 INFO
Leggendo da sinistra a destra: cut prende la prima parola separata da spazi su ogni riga, sort raggruppa insieme parole identiche e uniq -c conta ciascun gruppo. La fase di ordinamento è importante, perché uniq comprime solo i duplicati vicini. Aggiungi | sort -nr alla fine per elencare prima i più comuni.
Questo tipo di battuta è di grande aiuto quando stai indagando sui fallimenti. Può dirti rapidamente se un errore si è verificato due o duemila volte, il che è un dettaglio utile da inserire in una segnalazione di bug.
Autorizzazioni sui file
Esegui ls -l e vedrai qualcosa di simile a questo:
-rwxr-xr-- 1 asha devs 512 Nov 1 10:00 deploy.sh
Dopo il primo carattere, che indica il tipo di file, ci sono tre gruppi di tre caratteri, per il proprietario, il gruppo e tutti gli altri. Ciascuno può avere r (lettura), w (scrittura) e x (esecuzione).
| Comando | Cosa fa |
|---|---|
chmod +x deploy.sh |
Rende eseguibile uno script |
file chmod 644 |
Il proprietario può leggere e scrivere, gli altri possono leggere |
chmod 755 script.sh |
Il proprietario ha pieno accesso, gli altri possono leggere ed eseguire |
file chown asha |
Cambia il proprietario |
comando sudo |
Esegue un comando come amministratore |
I numeri si sommano: leggere è 4, scrivere è 2 ed eseguire è 1. Quindi 7 significa tutti e tre e 5 significa lettura ed esecuzione. Evita chmod 777, che offre a tutti l’accesso completo, come soluzione rapida per errori di autorizzazione. Trova invece la vera causa. E usa sudo con attenzione, poiché rimuove i controlli di sicurezza che normalmente proteggono il sistema.
Processi e informazioni di sistema
| Comando | Cosa fa |
|---|---|
ps aux |
Elenca i processi in esecuzione |
top o htop |
Mostra una vista dal vivo della CPU e della memoria |
uccidi 1234 |
Chiede al processo 1234 di fermarsi |
df -h |
Mostra lo spazio libero su disco |
du -sh cartella |
Mostra la dimensione di una cartella |
libero -h |
Mostra l’utilizzo della memoria |
stato systemctl nginx |
Mostra lo stato di un servizio |
journalctl -u nginx |
Mostra i log di un servizio |
Per installare il software, utilizza il gestore pacchetti della tua distribuzione, come sudo apt install curl su Debian e Ubuntu o sudo dnf install curl su Fedora e RHEL.
Archivi e lavoro remoto
$ tar -czf logs.tar.gz logs
$ tar -tzf logs.tar.gz
logs/
logs/app.log
In tar, c significa crea, z significa gzip, f nomina il file e t elenca i contenuti. Per estrarre un archivio, utilizzare tar -xzf logs.tar.gz. Per lavorare con altre macchine, questi tre sono ciò di cui hai bisogno:
| Comando | Cosa fa |
|---|---|
ssh utente@server |
Apre un terminale remoto |
file scp utente@server:/percorso/ |
Copia un file su SSH |
curl -I https://esempio.com |
Mostra le intestazioni di risposta di un URL |
Questi stessi comandi vengono utilizzati all’interno di Dockerfiles e pipeline CI/CD, quindi questa conoscenza ripaga nel lavoro DevOps.
Errori comuni
- Utilizzare
rm -rfsenza guardare. Controlla prima la cartella conpwde fai attenzione agli spazi nei percorsi. - Sovrascrivere con
>. Usa>>quando volevi aggiungere. - Eseguire tutto con
sudo. Usalo solo quando è richiesto. - Incollare comandi che non capisci. Leggili prima, soprattutto tutto ciò che collega un download a una shell.
- Dimenticando le virgolette. Un nome di file con spazi, come
"my file.txt", ne ha bisogno.
Considerazioni finali
Non impari a conoscere il terminale leggendolo. Apri una shell, crea una cartella di pratica ed esegui i comandi di ciascuna sezione. Quindi prova a rispondere a una domanda reale utilizzando una pipe, ad esempio quale errore appare più spesso in un registro. Inizia con la navigazione e i file questa settimana, aggiungi grep e i tubi successivamente e il resto seguirà quando ne avrai bisogno.
Domande frequenti
Quali sono i comandi Linux più basilari?
Inizia con pwd, ls, cd, mkdir, cp, mv, rm, cat e grep. Riguardano lo spostamento, la gestione dei file e la ricerca, che costituiscono la maggior parte del lavoro quotidiano del terminale.
Come posso esercitarmi con i comandi Linux su Windows?
Utilizza il sottosistema Windows per Linux per un ambiente completo o Git Bash per le nozioni di base. Anche l’esecuzione di un contenitore Linux con Docker funziona bene.
Qual è la differenza tra > e >> in Linux?
Un singolo > sostituisce il contenuto del file con l’output. Un doppio >> aggiunge l’output alla fine del file e mantiene ciò che è già lì.
Posso annullare il comando rm?
Generalmente no, perché rm non utilizza un cestino. Gli strumenti di ripristino a volte aiutano ma non sono affidabili, quindi conserva prima i backup e controlla attentamente.
Cosa significa sudo?
sudo esegue un singolo comando con diritti di amministratore. È necessario per attività come l’installazione di software e deve essere utilizzato con cautela.
Continua a imparare
Hai bisogno di aiuto con test, WordPress o SEO?
Aiutiamo i team a fornire software migliore e a far crescere i loro siti. Raccontaci a cosa stai lavorando e ti suggeriremo chiaramente il prossimo passo.
Altre guide su test, intelligenza artificiale e sviluppo moderno
Ti è piaciuto questo articolo? Scegli un argomento e passa direttamente ai nostri tutorial più recenti.
Spiegazione delle allucinazioni dell'intelligenza artificiale: perché i modelli linguistici inventano le cose e come ridurle
Spiegazione delle allucinazioni dell'intelligenza artificiale: cosa sono, perché i modelli linguistici le producono, tipi comuni, come ridurle con b…
Leggi l'articolo →DevOpsSpiegazione delle variabili d'ambiente: file .env, segreti e configurazione eseguiti correttamente
Variabili d'ambiente spiegate con esempi Python che abbiamo eseguito: lettura e impostazione, perché ogni valore è una stringa, file .env, ereditari…
Leggi l'articolo →Sviluppo softwareSpiegazione della limitazione della velocità API: algoritmi, intestazioni e gestione degli errori 429
La limitazione della velocità dell'API spiegata con una simulazione che abbiamo eseguito: bucket di token, finestra fissa, finestra scorrevole, risp…
Leggi l'articolo →Automazione dei testDerisione in Python: unittest.mock, patch e gli errori che fanno mentire i test
Mocking in Python con unittest.mock, testato: Mock e return_value, side_effect, patch dove viene utilizzato un nome, specifiche e autospec, date moc…
Leggi l'articolo →Test del softwareSpiegazione della copertura del codice: copertura di linea o di filiale e cosa significa realmente il 100%.
Copertura del codice spiegata con una vera esecuzione di cover.py: copertura di linea, ramo e condizione, lettura di un rapporto, perché la copertur…
Leggi l'articolo →Database e SQLDELETE vs TRUNCATE vs DROP in SQL: differenze, rollback e quando utilizzarli
DELETE vs TRUNCATE vs DROP spiegato con SQL testato: cosa rimuove, rollback, trigger, reimpostazione dell'identità, velocità e come differiscono Pos…
Leggi l'articolo →Database e SQLSpiegazione delle visualizzazioni SQL: crea, utilizza ed evita le insidie, con esempi
Viste SQL spiegate con le query che abbiamo eseguito: creazione di una vista, risultati in tempo reale, nascondere colonne, prestazioni, viste aggio…
Leggi l'articolo →Sviluppo softwareInterfaccia TypeScript e tipo: differenze reali, testate con il compilatore
Interfaccia TypeScript vs tipo, verificata con il vero compilatore: cosa possono fare entrambi, cosa può fare solo uno, fusione delle dichiarazioni,…
Leggi l'articolo →Sviluppo softwareSpiegazione di Python *args e **kwargs: funzioni flessibili con esempi chiari
Python *args e **kwargs spiegati con il codice che abbiamo eseguito: compressione e decompressione, ordine dei parametri, argomenti solo per parole …
Leggi l'articolo →Sviluppo softwareFunzioni Lambda Python: sintassi, usi reali e quando non usarli
Funzioni lambda Python spiegate con il codice che abbiamo eseguito: sintassi, ordinamento con chiave, mappa e filtro, chiusure, trap dell'associazio…
Leggi l'articolo →Intelligenza artificialeCosa sono gli agenti AI? Come funzionano, con un semplice ciclo di agenti che puoi eseguire
Cosa sono gli agenti IA? Una semplice guida al ciclo dell'agente, agli strumenti, alla memoria e ai guardrail, con un piccolo ciclo Python che abbia…
Leggi l'articolo →DevOpsMonitoraggio vs osservabilità: la vera differenza, con log, metriche e tracce
Spiegazione del monitoraggio e dell'osservabilità: errori noti e sconosciuti, log, metriche e tracce, una procedura dettagliata sugli incidenti di p…
Leggi l'articolo →DevOpsVolumi Docker e montaggi di associazione: mantenere i dati del contenitore nel modo giusto
Volumi Docker e montaggi di collegamento spiegati: perché i dati del contenitore scompaiono, volumi denominati, montaggi di collegamento, tmpfs, ese…
Leggi l'articolo →Automazione dei testTDD vs BDD: differenze chiave, una caratteristica costruita in entrambi i modi e quando utilizzarli ciascuno
TDD vs BDD spiegato con una funzione di sconto costruita in entrambi i modi: refactoring rosso-verde con il codice che abbiamo eseguito, scenari "Da…
Leggi l'articolo →Test del softwareTest di accettazione da parte dell'utente (UAT): processo, lista di controllo ed esempi reali
Spiegazione del test di accettazione dell'utente: chi lo esegue, in cosa differisce dal QA, un processo in sette fasi, un modello di test case UAT, …
Leggi l'articolo →Database e SQLSpiegazione dei valori SQL NULL: IS NULL, COALESCE, NULLIF e le trappole da evitare
Valori SQL NULL spiegati con le query che abbiamo eseguito: logica a tre valori, IS NULL, COALESCE, NULLIF, come aggregazioni, join e ordinamento tr…
Leggi l'articolo →Database e SQLIstruzione SQL CASE WHEN: sintassi, esempi reali ed errori comuni
SQL CASE WHEN spiegato con le query che abbiamo eseguito: moduli semplici e cercati, ordine delle condizioni, pivot con SUM, trucchi COUNT, ordiname…
Leggi l'articolo →Sviluppo softwareCos'è il JWT? Token Web JSON spiegati con un esempio funzionante
Cos'è il JWT? Spiegazione dei token Web JSON: le tre parti, un token creato e manomesso nel codice che abbiamo eseguito, JWT e sessioni, archiviazio…
Leggi l'articolo →Sviluppo softwareSpiegazione del loop di eventi JavaScript: stack di chiamate, microtask e timer con esempi
Il ciclo di eventi JavaScript spiegato con il codice che abbiamo eseguito: stack di chiamate, code di attività e microtask, perché setTimeout 0 non …
Leggi l'articolo →Sviluppo softwareSpiegazione dei generatori Python e del rendimento: risparmia memoria con esempi reali
Generatori Python e rendimento spiegati con il codice che abbiamo eseguito: come vengono messi in pausa e ripresi, misurato il risparmio di memoria,…
Leggi l'articolo →Intelligenza artificialeCosa sono gli incorporamenti? I vettori e la somiglianza del coseno spiegati semplicemente
Cosa sono gli incorporamenti? Una guida in linguaggio semplice ai vettori, alla similarità del coseno e alla ricerca semantica, con un piccolo esemp…
Leggi l'articolo →DevOpsDistribuzione blu-verde rispetto a quella canaria: differenze, compromessi e come scegliere
Spiegazione della distribuzione blu-verde e canary: come funziona ciascuna, costi, rischi e rollback, bucket utente stabile che abbiamo testato, mig…
Leggi l'articolo →Automazione dei testTest instabili: quali sono le cause e come risolverli definitivamente
Test instabili spiegati con demo che abbiamo eseguito: le cause principali, come confermarne e diagnosticarne uno, soluzioni adeguate per tempistich…
Leggi l'articolo →Test del softwareTest di carico e test di stress: differenze, metriche ed esempi k6
Spiegazione del test di carico e dello stress test: cosa dimostra ciascuno, test di picco e di assorbimento, le metriche che contano, perché le medi…
Leggi l'articolo →Test del softwareCaso di test e scenario di test: differenze chiave, esempi e quando utilizzarli
Spiegazione del caso di test e dello scenario di test: definizioni chiare, una tabella affiancata, una funzione di reimpostazione della password pre…
Leggi l'articolo →Database e SQLOttimizzazione delle query SQL: leggi i piani di esecuzione e correggi query lente, con tempistiche
Ottimizzazione delle query SQL testata su un milione di righe: leggi i piani di esecuzione, aggiungi gli indici corretti, correggi filtri non aggior…
Leggi l'articolo →Database e SQLSQL UNION vs UNION ALL: differenze, esempi e prestazioni testate
SQL UNION vs UNION ALL spiegati con le query che abbiamo eseguito: duplicati, regole seguite da entrambi, un vero bug di dati, prestazioni misurate,…
Leggi l'articolo →Sviluppo softwareTutorial sull'API di recupero JavaScript: GET, POST, gestione degli errori e timeout
Un tutorial sull'API JavaScript Fetch testato su un server locale: GET e POST, perché 404 non genera eccezioni, un helper riutilizzabile, stringhe d…
Leggi l'articolo →Sviluppo softwareGestione dei file Python: lettura, scrittura, CSV, JSON e pathlib con esempi
Gestione dei file Python spiegata con il codice che abbiamo eseguito: modalità aperte, con, lettura di file di grandi dimensioni, CSV, JSON, pathlib…
Leggi l'articolo →Sviluppo softwareClassi e oggetti Python: tutorial OOP con esempi reali
Classi e oggetti Python spiegati con il codice che abbiamo eseguito: __init__, metodi, attributi di classe e istanza, ereditarietà, proprietà, metod…
Leggi l'articolo →Intelligenza artificialeChe cos'è un modello linguistico di grandi dimensioni? Come funzionano i LLM, spiegato senza esagerazioni
Cos’è un modello linguistico ampio? LLM spiegati in un linguaggio semplice: token, incorporamenti, attenzione, formazione, finestre di temperatura e…
Leggi l'articolo →DevOpsComandi Linux per principianti: la guida essenziale del terminale con esempi
Comandi Linux per principianti, raggruppati per attività: navigazione, file, visualizzazione log, grep, pipe, permessi, processi e archivi, con un e…
Leggi l'articolo →Automazione dei testSelenio vs drammaturgo: differenze chiave, codice a confronto e quale scegliere
Selenium vs Playwright a confronto: architettura, attesa, supporto per browser e linguaggio, debug, lo stesso test in entrambi gli strumenti, consig…
Leggi l'articolo →Test del softwarePartizionamento di equivalenza: tecnica di progettazione dei test spiegata con esempi pratici
Spiegazione del partizionamento di equivalenza: come trovare partizioni valide e non valide, esempi funzionanti per età, password e coupon, test che…
Leggi l'articolo →Test del softwareGravità vs priorità nel test del software: differenze, matrice ed esempi reali
Spiegazione della gravità e della priorità nei test del software: definizioni chiare, una matrice a quattro vie con esempi, scale di livello, chi im…
Leggi l'articolo →Database e SQLEsercitazione sulle sottoquery SQL: tipi, sottoquery correlate ed EXISTS con esempi
Un tutorial sulle sottoquery SQL con le query che abbiamo eseguito: sottoquery scalari, IN, FROM e SELECT, sottoquery correlate, EXISTS, trap NOT IN…
Leggi l'articolo →Database e SQLSpiegazione di transazioni SQL e ACID: COMMIT, ROLLBACK e livelli di isolamento
Transazioni SQL e ACID spiegate con un bonifico bancario eseguito: COMMIT, ROLLBACK, punti di salvataggio, blocchi, livelli di isolamento, letture s…
Leggi l'articolo →Sviluppo softwareGit merge vs rebase: differenze, esempi e quando usare ciascuno
Git merge vs rebase spiegato con output reale del log, una tabella di confronto, la regola d'oro del rebase e un flusso di lavoro sicuro per i team.
Leggi l'articolo →Sviluppo softwareList comprehension in Python: sintassi, esempi e quando evitarla
List comprehension in Python spiegata: sintassi, filtri, if-else, cicli annidati, tempi misurati e i casi in cui un normale ciclo for è meglio.
Leggi l'articolo →Database e SQLSQL JOIN spiegati con esempi (Inner, Left, Right, Full)
Capisci i JOIN SQL passo dopo passo con tabelle e query di esempio: INNER, LEFT, RIGHT, FULL, CROSS e SELF, con errori comuni e consigli sulle prest…
Leggi l'articolo →