Cos'è Linux: kernel, distribuzioni e file system spiegati in modo semplice
Linux è il kernel di un sistema operativo, cioè il software che gestisce processore, memoria, dischi e rete. Il kernel, insieme a shell, utility, gestore dei pacchetti e sistema di init, forma una distribuzione come Ubuntu, Debian o Fedora. La maggior parte dei server, dei container e delle macchine cloud gira su Linux, quindi saper lavorare con Linux è una competenza di base per il DevOps engineer e per l'amministratore di sistema.
Linux è il kernel di un sistema operativo open source, attorno al quale si costruiscono sistemi completi per server, desktop e dispositivi embedded. Quando si parla di «server Linux» non si intende un singolo programma, ma una distribuzione: il kernel insieme a utility, librerie, gestore dei pacchetti e sistema di init. In questo articolo spieghiamo che cos'è davvero Linux, come si incastrano le sue parti e perché ogni DevOps engineer ne ha bisogno.
Linux è un kernel, non tutto il sistema
In senso stretto, Linux è solo il kernel. Il kernel è il programma che parte per primo dopo il bootloader e resta in memoria finché il computer è acceso. Distribuisce il tempo del processore tra i processi, assegna la memoria, gestisce dischi e schede di rete tramite i driver e controlla i permessi di accesso.
I programmi normali non toccano direttamente l'hardware. Quando un editor salva un file, esegue una system call (open, write, close) e spetta al kernel decidere su quale blocco del disco scrivere i dati e se il processo ha il diritto di farlo. Questa separazione rende il sistema stabile: un programma che si blocca non fa crollare l'intero computer.
La versione del kernel si vede con un solo comando:
$ uname -r
6.8.0-45-generic
Il kernel fu creato nel 1991 da Linus Torvalds e da allora è sviluppato apertamente: il codice sorgente è distribuito con licenza GNU GPL versione 2, quindi chiunque può leggerlo, modificarlo e redistribuirlo alle stesse condizioni.
Che cos'è una distribuzione Linux
Il solo kernel non basta: servono una shell per digitare i comandi, utility per gestire i file, librerie e uno strumento per installare programmi. Gran parte delle utility di base (ls, cp, bash, grep) è stata scritta dal progetto GNU, per questo il sistema viene talvolta chiamato GNU/Linux. Il kernel insieme a questo insieme di strumenti, compilato e testato come un unico pacchetto, si chiama distribuzione.
Le distribuzioni si differenziano soprattutto per gestore dei pacchetti, politica di aggiornamento e pubblico di riferimento.
| ead> | |||
|---|---|---|---|
| Famiglia | Esempi | Pacchetti | Dove si trova |
| Debian | Debian, Ubuntu, Linux Mint | .deb, apt | server, cloud, workstation |
| Red Hat | RHEL, Fedora, Rocky Linux, AlmaLinux | .rpm, dnf | server aziendali |
| Alpine | Alpine Linux | apk | immagini Docker dove conta la dimensione |
| Arch | Arch Linux, Manjaro | pacman | appassionati, versioni dei pacchetti recenti |
La distribuzione in uso si ricava dal file /etc/os-release:
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
ID=ubuntu
ID_LIKE=debian
Per studiare e per i server si scelgono spesso Ubuntu LTS o Debian: hanno molta documentazione e i comandi trovati online funzionano quasi sempre senza modifiche.
Come è organizzato il sistema: kernel, shell e spazio utente
Linux si descrive bene a strati. In basso c'è l'hardware. Sopra di esso il kernel. Ancora più sopra lo spazio utente: servizi di sistema, librerie (ad esempio glibc) e programmi. Tra la persona e il sistema si trova la shell, di solito bash, che accetta i comandi e avvia i programmi.
- Kernel — processi, memoria, file system, rete e driver.
- Sistema di init — il primo processo, con PID 1; nella maggior parte delle distribuzioni moderne è
systemd. Avvia gli altri servizi. - Servizi (daemon) — server web, server SSH, cron, registrazione dei log.
- Shell e utility — gli strumenti con cui si lavora nel terminale.
Su un server di solito non c'è alcuna interfaccia grafica: l'amministratore si connette via SSH e lavora da riga di comando. Per questo imparare Linux significa soprattutto imparare il terminale.
File system Linux: tutto parte da /
In Linux non esistono unità C: e D:. C'è un unico albero di directory che parte dalla radice /. Tutti i dischi, le chiavette USB e le cartelle di rete vengono collegati (montati) in una directory di questo albero. Un altro principio: in Linux quasi tutto è rappresentato come file, cioè file regolari, directory, dispositivi e perfino le informazioni sui processi.
$ ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
La disposizione delle directory è descritta dallo standard FHS (Filesystem Hierarchy Standard), quindi in qualsiasi distribuzione i file di configurazione si trovano più o meno negli stessi posti.
| ead> | |
|---|---|
| Directory | Contenuto |
/etc | configurazione di sistema e dei servizi: /etc/passwd, /etc/ssh/sshd_config, /etc/fstab |
/home | directory personali degli utenti: /home/alice |
/root | directory personale del superutente root |
/var | dati variabili: log in /var/log, cache dei pacchetti, database, code di posta |
/usr | programmi e librerie installati: /usr/bin, /usr/lib |
/bin, /sbin | comandi di base; nelle distribuzioni moderne sono collegamenti a /usr/bin e /usr/sbin |
/boot | kernel (vmlinuz-*), initramfs e file del bootloader |
/dev | file dei dispositivi: /dev/sda, /dev/null |
/proc, /sys | file system virtuali: il kernel mostra attraverso di essi processi e impostazioni |
/tmp | file temporanei, spesso ripuliti al riavvio |
/opt | programmi di terze parti forniti in blocco |
/mnt, /media | punti di mount per dischi e supporti rimovibili |
Percorsi assoluti e relativi
Un percorso assoluto inizia con / e non dipende da dove ci si trova: /var/log/syslog. Un percorso relativo parte dalla directory corrente: ../logs/app.log. Il punto . indica la directory corrente, i due punti .. la directory superiore, la tilde ~ la propria home.
$ pwd
/home/alice
$ cd /var/log
$ cd ..
$ pwd
/var
$ cd ~
$ pwd
/home/alice
/proc: il sistema come insieme di file
/proc non è salvato su disco: il kernel lo genera al volo. Ad esempio cat /proc/cpuinfo mostra i processori, cat /proc/meminfo la memoria, e ogni processo ha una directory /proc/<PID> con la sua riga di comando e i file aperti. Molte utility come ps e top leggono semplicemente questi file.
Mount
df -h mostra quali file system sono montati dove e quanto spazio resta:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 12G 26G 32% /
/dev/sda1 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs 393M 1.2M 392M 1% /run
I punti di mount permanenti sono descritti in /etc/fstab, che il sistema legge all'avvio.
Come si avvia Linux: dall'accensione al prompt di login
Capire l'avvio aiuta quando un server «non torna su» dopo un riavvio. In forma semplificata la catena è questa:
- Firmware (UEFI o BIOS) verifica l'hardware e trova il bootloader.
- Bootloader GRUB mostra il menu e carica in memoria il kernel e l'immagine initramfs da
/boot. - Kernel inizializza l'hardware e, con l'aiuto di initramfs, trova e monta il file system radice.
- systemd viene avviato come processo con PID 1 e lancia i servizi nell'ordine giusto: rete, log, SSH, cron e gli altri.
- Prompt di login compare in console o via SSH.
I messaggi del kernel durante l'avvio si leggono con sudo dmesg o journalctl -k, mentre i tempi delle singole fasi con systemd-analyze.
Utenti e permessi: la sicurezza integrata
Linux è fin dall'inizio un sistema multiutente. Ogni file ha un proprietario, un gruppo e i permessi di lettura, scrittura ed esecuzione. Un utente normale non può rovinare i file di sistema, e le operazioni amministrative si eseguono con sudo. Il superutente root può fare qualsiasi cosa, quindi lavorare sempre come root non è considerato una buona pratica.
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2847 Oct 1 10:12 /etc/passwd
La riga si legge così: è un file normale, il proprietario root può leggerlo e scriverlo, gli altri solo leggerlo.
Perché un DevOps engineer ha bisogno di Linux
Per un DevOps engineer Linux non è un argomento tra gli altri, ma l'ambiente in cui si svolge quasi tutto il lavoro. Lo incontra ogni giorno:
- Server. Server web, database e code girano nella grande maggioranza dei casi su Linux.
- Container. Docker usa i meccanismi del kernel Linux: namespaces e cgroups. Un container è un processo Linux isolato, e le immagini si basano su una distribuzione come Debian o Alpine.
- Cloud e Kubernetes. Le macchine virtuali in cloud e i nodi dei cluster sono anch'essi Linux.
- CI/CD. Le build delle pipeline vengono eseguite su runner Linux e gli script di build sono scritti in bash.
- Diagnostica. Quando un servizio cade, la risposta si cerca in
journalctl,top,ss,df: senza questi strumenti un'analisi dell'incidente non è possibile.
Il minimo indispensabile: muoversi con sicurezza nel file system, capire i permessi, installare pacchetti, gestire i servizi con systemctl, leggere i log, lavorare con processi, rete e SSH, e scrivere semplici script bash.
Come iniziare a studiare Linux
Non serve installare Linux al posto del sistema principale. Ci sono diversi modi sicuri per provarlo:
- Macchina virtuale (VirtualBox, VMware) con Ubuntu Server — si può rompere tutto e ripristinare da uno snapshot.
- WSL su Windows — un ambiente Ubuntu completo nel terminale di Windows:
wsl --install. - Server cloud — l'opzione più vicina al lavoro reale, con connessione via SSH.
- Container Docker —
docker run -it --rm ubuntu bashfornisce una shell in pochi secondi.
Cominci dalla navigazione (pwd, ls, cd), poi file e permessi, poi pacchetti, processi e servizi. L'aiuto integrato è sempre disponibile: man ls oppure ls --help.
Conclusioni
Linux è il kernel, mentre una distribuzione è il kernel insieme a utility, librerie, gestore dei pacchetti e systemd. Tutto il sistema è un unico albero di directory che parte dalla radice /: le configurazioni stanno in /etc, i log in /var/log, i programmi in /usr. Capire che cos'è Linux e come si avvia dà le basi per server, container e cloud. File system, avvio e amministrazione sono trattati nel corso con esercizi pratici.
Domande frequenti
Linux è un sistema operativo o un kernel?
In senso stretto Linux è un kernel; il sistema operativo è la distribuzione, cioè il kernel con utility GNU, librerie, gestore dei pacchetti e sistema di init. Nel linguaggio comune «Linux» indica di solito l'intero sistema.
Linux è gratuito?
Il kernel e la maggior parte delle distribuzioni (Ubuntu, Debian, Fedora) sono distribuiti gratuitamente con licenze di software libero. Sono a pagamento gli abbonamenti di supporto, come quelli di Red Hat Enterprise Linux.
Quale distribuzione conviene a un principiante?
Per i server e per imparare l'amministrazione sono adatte Ubuntu LTS e Debian: hanno versioni stabili e molta documentazione. Le conoscenze si trasferiscono facilmente tra distribuzioni; la differenza principale è nel gestore dei pacchetti.
Serve conoscere Linux per usare Docker?
Sì, almeno a livello di base. I container poggiano sui meccanismi del kernel Linux, le immagini contengono distribuzioni e il debug si fa con comandi di shell.
Qual è la differenza tra Linux e Unix?
Unix è una famiglia di sistemi nata negli anni Settanta, mentre Linux è un kernel scritto indipendentemente che riprende le idee e le interfacce di Unix (standard POSIX). Per questo comandi e principi di funzionamento sono molto simili.
Questo argomento è trattato in modo approfondito, con pratica, nel corso «Linux: с нуля до уверенного администрирования».
- Linux: с нуля до уверенного администрирования
- Как устроена файловая система Linux: от корня до загрузки ядра