Linux è un sistema operativo solido e open-source che è diventato una pietra angolare in diversi ambienti informatici, dai desktop personali ai server enterprise. Sviluppato in collaborazione da migliaia di programmatori in tutto il mondo, Linux offre una piattaforma flessibile e sicura che può essere adattata a diverse esigenze. La sua natura open-source consente agli utenti di accedere al codice sorgente, modificarlo e distribuire le proprie versioni, favorendo l’innovazione e la personalizzazione.
Questo articolo elenca i principali comandi Linux di varie categorie, tra cui la navigazione di base, la gestione dei file, l’amministrazione del sistema, la rete, la gestione dei pacchetti, le operazioni avanzate e la personalizzazione. Ogni comando verrà accompagnato da esempi pratici per aiutare gli utenti a comprenderne le applicazioni e i vantaggi. L’obiettivo è quello di fornire ai lettori le conoscenze necessarie per migliorare le loro abilità con la riga di comando e la loro efficienza nella gestione dei sistemi Linux.
La rilevanza del terminale, oggi, in un mondo di GUI
La padronanza dell’interfaccia a riga di comando (CLI) è essenziale per gli utenti Linux, in quanto fornisce un controllo e un’efficienza senza pari. La CLI consente agli utenti di eseguire attività complesse con semplici comandi, automatizzare i processi e risolvere efficacemente i problemi.
A differenza delle interfacce grafiche, l’interfaccia CLI offre un’interazione più diretta e scriptabile con il sistema, fondamentale per gli amministratori di sistema e gli sviluppatori che richiedono precisione e velocità nei loro flussi di lavoro. Anche nelle interazioni quotidiane uomo-CLI, spesso si possono sostituire diversi minuti di clic sulle applicazioni con un’invocazione da riga di comando ben fatta e persino i lavori in batch possono essere eseguiti facilmente in questo modo.
Comandi Linux di base
Alcune note dell’operatore:
- Percorsi assoluti e relativi: In Linux i percorsi assoluti iniziano sempre con / e puntano sempre a una cartella o a un file specifico nel filesystem; i percorsi relativi non iniziano con / e sono sempre relativi alla directory di lavoro corrente.
- I nomi dei file e i file system sono case sensitive: Per esempio, /home/user, /home/User e /home/USER sono tre cartelle diverse.
- Se non sai dove ti trovi: pwd stampa la directory di lavoro corrente. (Tecnicamente, fa eco a STDOUT l’output della variabile d’ambiente PWD, a meno che non sia indirizzato altrove)
- Per ripulire lo spazio di lavoro: Premendo Ctrl+L nel terminale cancellerai lo schermo mantenendo il comando che stavi digitando, se ne stavi digitando uno. Nel caso in cui, ad esempio, l’output di un comando precedente abbia confuso il terminale.
- Hai bisogno di ulteriore aiuto?: il manuale di Linux può aiutarti. Semplicemente, utilizza il comando “man [command]”, eg. man unzip – or search by keyword with “man -k [keyword]”, per esempio man -k firewall elencherà tutte le pagine di manuale che parlano di firewall. Andiamo avanti: ogni comando qui sotto ha molte altre funzionalità pronte per essere scoperte.
Comandi di navigazione (per esempio, cd, ls, pwd):
I comandi di navigazione sono fondamentali per muoversi nel filesystem di Linux.
- cd: Cambia la directory corrente: Tutti i filesystem collegati a un sistema Linux sono collegati (montati) su un unico albero di directory unificato, quindi cd può anche cambiare il dispositivo di archiviazione montato (alias “dispositivo a blocchi”) in cui stai lavorando. (Vedi pwd)
- cd [cartella] es. cd /home/user/Documents cambia la directory di lavoro corrente nella directory Documents dell’utente da qualsiasi punto del sistema in cui ci si trovava in precedenza, a causa dell’uso di percorsi assoluti o relativi; es. cd Documents/ funzionerebbe anche, a condizione che la directory di lavoro corrente sia /home/user/.
- cd (senza parametri) o cd ~ riporta sempre alla directory $HOME dell’utente corrente (tipicamente /home/user/). In Bash, ~ (tilde) equivale alla variabile d’ambiente HOME dell’utente corrente.
- cd – (trattino/ lineetta) consente di tornare all’ultima directory di lavoro utilizzata (la più recente) prima di passare a quella corrente.
- ls: Mostra il contenuto della directory.
- ls -l visualizza informazioni dettagliate su file e directory.
- ls -lart visualizza informazioni dettagliate su tutti i file e le directory (incluse quelle nascoste/di sistema) ordinate per tempo in ordine cronologico inverso (cioè dalla più vecchia alla più nuova)
Comandi di gestione dei file (ad esempio, cp, mv, rm, touch):
I comandi di gestione dei file sono essenziali per gestire i file e le directory.
- cp: Copia file o directory.
- cp file1.txt /backups/ copia file1.txt nella directory /backups.
- cp -vR directory1/ /path/to/target/ copia ricorsivamente directory1 (una sottodirectory della directory di lavoro corrente) nel percorso assoluto /path/to/target/directory1. L’opzione -v rende l’operazione di copia verbosa per facilitare il monitoraggio e il debugging.
- mv: Sposta/rinomina file o directory. Mantiene le date originali di creazione e modifica.
- mv oldname.txt newname.txt rinomina il file.
- mv -t [target] [source1] source2 … es. mv -t /bucket/ directory1 directory2 file1.txt … sposta tutti gli argomenti di origine nella directory di destinazione.
- rm: Rimuove i file o le directory.
- rm -r cartella elimina la cartella e il suo contenuto.
- sudo rm -rf / cancellerà tutto quello che c’è sul sistema, quindi evita di farlo.
- touch: Crea file vuoti o aggiorna il timestamp dei file esistenti.
- touch newfile.txt crea un nuovo file chiamato newfile.txt.
Visualizzazione e modifica dei file (per esempio: cat, nano, vim, less):
I comandi per la visualizzazione e la modifica dei file consentono agli utenti di leggere e modificare il contenuto dei file.
- cat: Concatena e visualizza il contenuto del file.
- cat file.txt mostra il contenuto di file.txt; cat file1 file2 … concatena tutti gli output in un unico flusso di output. Non è più utilizzato nella pratica per visualizzare il contenuto dei file. (fai riferimento a less)
- nano: Un semplice editor di testo per la modifica dei file.
- nano file.txt apre file.txt nell’editor nano.
- vim: Un potente editor di testo per la modifica avanzata.
- vim file.txt apre file.txt nell’editor vim.
- vim file.txt +20 apre file.txt alla riga 20.
- :help (+ <Enter>) per ottenere aiuto, :wq per salvare e uscire e :q! per uscire senza salvare.
- less: Visualizza il contenuto del file una pagina alla volta; consente la ricerca nell’output a pagine.
- less file.txt permette di scorrere il file.txt.
- Premi h o ? per la guida, PgUp/PgDn/Spazio/Backspace per scorrere, / per cercare; premi n per cercare l’occorrenza successiva, /N per l’occorrenza precedente. Esci con q.
Comandi di amministrazione del sistema
Gestione dei gruppi e degli utenti (per esempio: adduser, usermod, passwd):
La gestione degli utenti e dei gruppi è fondamentale per l’amministrazione del sistema.
- adduser: Aggiunge nuovi utenti al sistema: adduser newuser crea un nuovo account utente.
- addgroup: Aggiunge nuovi gruppi al sistema. addgroup newgroup crea un nuovo gruppo.
- usermod: Modifica gli account utente esistenti: usermod -aG sudo user aggiunge l’utente al gruppo sudo.
- passwd: Modifica le password degli utenti.
- passwd senza parametri cambia la password dell’account corrente. Richiede prima la password corrente.
- sudo passwd newuser imposta una password per l’account newuser. Fai attenzione quando usi passwd come root o con sudo. In questo caso non verrà richiesta alcuna password corrente.
Autorizzazioni e proprietà dei file (per esempio: chmod, chown, chgrp):
Controllare le autorizzazioni e la proprietà dei file garantisce la sicurezza e l’accesso corretto.
- chmod: Modifica le autorizzazioni dei file.
- chmod 755 script.sh imposta le autorizzazioni di script.sh.
- chmod +x file1.sh rende file1.sh eseguibile
- chown: Cambia la proprietà del file.
- chown user:group file.txt assegna all’utente e al gruppo la proprietà del file.txt.
- chown -R user:group Directory1/ assegna ricorsivamente all’utente e al gruppo la proprietà della cartella Directory1.
- chgrp: Cambia la proprietà di gruppo dei file. (In pratica, chown viene usato più spesso per questo, essendo lo strumento più versatile)
- chgrp newgroup file.txt imposta il gruppo su newgroup.
Gestione dei processi (per esempio ps, top, kill, htop):
I comandi di gestione dei processi aiutano a monitorare e controllare i processi in esecuzione.
- ps: Visualizza le informazioni sui processi attivi.
-
-
- ps aux mostra tutti i processi in esecuzione. (Per maggiori dettagli: ps auxw[ww])
- Un’utile invocazione: ps aux | grep -i [pattern] | awk ‘{print $2}’ | xargs kill -9 terminerà tutti i processi che corrispondono al pattern (senza distinzione tra maiuscole e minuscole) della stringa di ricerca grep.
-
- top: Fornisce una visione in tempo reale dei processi di sistema. (Vecchio stile, piccola, inclusa nella maggior parte delle distro)
- htop: Un visualizzatore di processi interattivo; un comando top migliore e più recente. (Premere h o ? per ottenere aiuto)
- kill: Termina i processi in base al PID (ID del processo come da ps) e invia vari altri segnali alle applicazioni in esecuzione. I segnali includono:
- SIGHUP (1): Riavvia l’applicazione. Si usa per rileggere i file di configurazione senza arrestare un servizio. Per esempio, kill -s HUP <pid>
- SIGINT (2): Interrompe un processo dal terminale (Ctrl+C o kill -s INT <pid>). Utilizzato per arrestare un processo in corso.
- SIGQUIT (3): Esce da un processo e genera un core dump (Ctrl+ o kill -s QUIT <pid>). Utilizzato per il debug.
- SIGKILL (9): Arresta forzatamente un processo. Non può essere catturato o ignorato. Utilizzato quando un processo non risponde. Per esempio, kill -9 <pid>
- SIGTERM (15): Richiede l’interruzione di un processo. Segnale predefinito per il comando kill. Consente la pulizia del processo prima dell’uscita. Per esempio, kill 1234 arresta il processo con PID 1234.
Comandi di rete
Configurazione di rete e risoluzione dei problemi (per esempio, ifconfig, ping, netstat):
I comandi di rete sono fondamentali per la configurazione e la risoluzione dei problemi delle connessioni di rete.
- ifconfig: Configura le interfacce di rete.
- ifconfig eth0 up abilita l’interfaccia eth0. (Non funziona con le interfacce di rete gestite da NetworkManager)
- sudo ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0 crea l’interfaccia di rete alias eth0:0 con IP 192.168.1.100 e netmask 255.255.255.0 (nel caso in cui, per esempio, tu abbia bisogno di un NIC per rispondere a più di una sottorete)
- ping: Verifica la connettività con un host.
- ping 1.1.1.1 esegue il ping dell’indirizzo IP dell’host 1.1.1.1 senza tentare la risoluzione DNS.
- ping google.com verifica la connessione a Google. L’uso di un nome di dominio verifica implicitamente se la risoluzione DNS funziona.
- netstat: Visualizza le statistiche di rete e le connessioni.
- netstat -tulpen visualizza le seguenti informazioni dettagliate:
- -t: Mostra le connessioni TCP.
- -u: Mostra le connessioni UDP.
- -l: Visualizza solo i socket in ascolto.
- -p: Mostra il PID e il nome del programma a cui appartiene ogni socket.
- -e: Visualizza le informazioni estese, come l’utente che possiede il socket.
- -n: Mostra gli indirizzi numerici invece di risolvere i nomi di host.
Operazioni remote sicure (per esempio ssh, scp, sftp):
I comandi remoti sicuri consentono connessioni criptate e trasferimenti di file.
- ssh: Si connette in modo sicuro ai server remoti: ssh user@hostname accede al server remoto.
- scp: Copia sicura dei file tra host: È la soluzione migliore per trasferire file in modo rapido e semplice. Sintassi e vantaggi in termini di velocità.
- scp file.txt user@hostname:/path trasferisce file.txt al percorso assoluto /path sul server di destinazione.
- scp file.txt user@hostname:path/ trasferisce file.txt a /home/user/path sul server di destinazione; i percorsi relativi in scp sono sempre relativi alla home directory dell’utente remoto.
- sftp: Trasferimento sicuro di file tramite FTP su SSH: Soluzione migliore per le sessioni interattive in cui è necessario un maggiore controllo sulle operazioni sui file. sftp user@hostname avvia una sessione SFTP.
Monitoraggio del traffico di rete (per esempio tcpdump, nmap):
I comandi di monitoraggio aiutano ad analizzare il traffico di rete e la sicurezza.
- tcpdump: Cattura i pacchetti di rete: tcpdump -i eth0 cattura il traffico su eth0.
- nmap: Esegue la scansione delle reti alla ricerca di porte aperte e vulnerabilità: nmap -sP 192.168.1.0/24 esegue la scansione della rete locale.
Gestione dei pacchetti
Installazione, aggiornamento e rimozione di software (per esempio apt, yum, dnf):
I comandi di gestione dei pacchetti gestiscono l’installazione del software e gli aggiornamenti.
- apt e dpkg: Gestisce i pacchetti sui sistemi basati su Debian. Richiede sudo.
- apt install package installa un pacchetto.
- dpkg -l elenca i pacchetti installati.
- aptitude segue la sintassi di apt per le operazioni CLI. Fornisce anche un gestore di APT basato sul testo se eseguito senza parametri, per esempio sudo aptitude
- yum, RPM e dnf: Gestisce i pacchetti sui sistemi basati su RPM. A partire da RHEL8/CentOS8, i comandi yum sono stati sostituiti da dnf per questioni di retrocompatibilità
- yum update aggiorna tutti i pacchetti.
- dnf remove package rimuove un pacchetto.
- rpm: Gestisce i pacchetti RPM. rpm -qa interroga tutti i pacchetti installati.
Operazioni avanzate
Gestione e utilizzo del disco (per esempio df, du, fdisk):
I comandi di gestione del disco monitorano e gestiscono lo spazio su disco.
- df: Genera un report sull’utilizzo dello spazio su disco del filesystem: df -h mostra l’utilizzo del disco in formato leggibile dall’uomo.
- du: Stima l’utilizzo dello spazio di file e cartelle: du -sh * mostra l’utilizzo dello spazio di file e cartelle in modo ricorsivo, compresa la directory di lavoro corrente e tutte le sottodirectory.
- fdisk: Manipola le tabelle di partizione del disco: fdisk /dev/sda gestisce le partizioni su sda.
- cfdisk: Una migliore interfaccia grafica fdisk basata su testo: cfdisk /dev/sda gestisce le partizioni su sda con una bella interfaccia utente basata su ncurses.
- lsblk: Elenca [tutti] i dispositivi a blocchi indirizzabili dal sistema/su un determinato dispositivo.
- lsblk mostra tutti i dispositivi a blocchi, in genere in formato ad albero.
- lsblk [-f/-fs] /dev/sda5 mostra informazioni su un filesystem specifico.
Archiviazione e compressione (per esempio tar, gzip, zip):
I comandi di archiviazione e compressione gestiscono gli archivi di file.
- tar e gzip: Archivia più file in un unico file: Raramente usato separatamente. In realtà, gzip comprime solo un file/un flusso alla volta: di solito il file .tar (alias “tarball”).
- tar -cvzf archive.tar file1 file2 crea un archivio .tar.gz che include file1 e file2 utilizzando la compressione gzip.
- Per usare la compressione .bz2: Usa -cvjf invece di -cvzf.
- zip e unzip: Crea ed estrae gli archivi zip compressi.
- zip archive.zip file1 file2 crea un archivio zip.
- unzip archive.zip estrae un archivio zip.
- atool: Un preciso wrapper per tutti i backend di archivio installati: Il backend di archiviazione viene selezionato automaticamente in base all’estensione del file di archivio fornita in fase di esecuzione.
- apack archive.[extension] file1 file2… per mettere i file selezionati in archive.tar.gz … o .zip, .rar, .7z, o altro..
- als archive.zip mostrerà (ls) il contenuto di archive.zip.
- aunpack archive.7z estrae il contenuto di archive.7z nella directory di lavoro corrente. Se atool rileva che l’archivio contiene molti file, scaricherà automaticamente i file estratti in una sottodirectory con il nome del file di archivio.
Monitoraggio e logging del sistema (per esempio dmesg, journalctl, tail, grep):
I comandi di monitoraggio e logging aiutano a tenere traccia e a registrare l’attività del sistema
- dmesg: Visualizza i messaggi di ring buffer del kernel: dmesg | grep error Filtra i messaggi di errore.
- journalctl: Interroga e visualizza i log di systemd.
- journalctl -u apache2 mostra i log del servizio Apache.
- journalctl -xe: Mostra i log dettagliati del journal di systemd (compresi i messaggi di errore) e aggiunge nuove voci in tempo reale.
- tail: Visualizza la fine dei file.
- tail -n 10 file.txt mostra le ultime 10 righe di file.txt.
- tail -f /var/log/syslog visualizza continuamente il syslog.
- grep: Cerca il testo usando i modelli: grep “pattern” file.txt cerca la stringa esatta (case sensitive) “pattern” in file.txt.
- grep -i edit file.txt esegue una ricerca senza distinzione di maiuscole e minuscole in file.txt per edit/EDIT/Edit/etc.
- grep ‘home\|boot’ /etc/fstab cerca nel file /etc/fstab le righe che corrispondono a home OPPURE a boot.
Automatizzare le attività utilizzando cron:
Cron pianifica gli script e i comandi da eseguire in momenti specifici.
- Crea processi di cron utilizzando crontab:
- crontab -e modifica la tabella di cron.
- crontab -l mostra (visualizza) il crontab corrente.
- crontab -u [user] -e modifica il crontab di un altro utente. Utile, ad esempio, per eseguire applicazioni server senza privilegi di root.
- Pianifica le attività con una sintassi basata sul tempo: (vedere man 1 crontab e man 5 crontab per informazioni sulla sintassi).
- 0 5 * * * /path/to/script.sh esegue uno script ogni giorno alle 5 del mattino.
Personalizzazione dell’ambiente della shell (per esempio .bashrc, .profile):
La personalizzazione dell’ambiente della shell migliora l’esperienza dell’utente.
- Modifica .bashrc per le personalizzazioni di Bash: alias ll=’ls -la’ crea un alias.
- Utilizza .profile per le variabili d’ambiente: La riga export PATH=$PATH:/new/path aggiunge alla variabile PATH.
Pensare nel modo in cui lavora il terminale: un mondo tutto nuovo da scoprire
La padronanza dei comandi Linux migliora la competenza e il controllo del sistema da parte dell’utente. Questi comandi consentono di navigare, gestire e personalizzare in modo efficiente l’ambiente Linux, rendendolo uno strumento potente sia per i principianti che per gli utenti esperti. Per continuare a imparare, utilizza risorse come i tutorial online, i forum e la documentazione ufficiale.
Partecipa alla community Linux per ottenere supporto, suggerimenti e conoscenze condivise: la filosofia open source significa che ci sono intere comunità là fuori desiderose di restituire almeno in parte quello che hanno ricevuto dall’ottimo software libero e dall’aiuto che hanno ricevuto nel tempo.
Non aver paura di sperimentare! Esercitati con questi comandi e continua a imparare. Sperimentare i comandi e impararne di nuovi non solo approfondirà la tua comprensione e migliorerà le tue abilità, ma ti farà anche apprezzare in modo del tutto nuovo quella che è probabilmente la migliore interfaccia utente mai creata.