Basi

Cos'è Linux: kernel, distribuzioni e file system spiegati in modo semplice

Aggiornato: · Skillaria.Top

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>
FamigliaEsempiPacchettiDove si trova
DebianDebian, Ubuntu, Linux Mint.deb, aptserver, cloud, workstation
Red HatRHEL, Fedora, Rocky Linux, AlmaLinux.rpm, dnfserver aziendali
AlpineAlpine Linuxapkimmagini Docker dove conta la dimensione
ArchArch Linux, Manjaropacmanappassionati, 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>
DirectoryContenuto
/etcconfigurazione di sistema e dei servizi: /etc/passwd, /etc/ssh/sshd_config, /etc/fstab
/homedirectory personali degli utenti: /home/alice
/rootdirectory personale del superutente root
/vardati variabili: log in /var/log, cache dei pacchetti, database, code di posta
/usrprogrammi e librerie installati: /usr/bin, /usr/lib
/bin, /sbincomandi di base; nelle distribuzioni moderne sono collegamenti a /usr/bin e /usr/sbin
/bootkernel (vmlinuz-*), initramfs e file del bootloader
/devfile dei dispositivi: /dev/sda, /dev/null
/proc, /sysfile system virtuali: il kernel mostra attraverso di essi processi e impostazioni
/tmpfile temporanei, spesso ripuliti al riavvio
/optprogrammi di terze parti forniti in blocco
/mnt, /mediapunti 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:

  1. Firmware (UEFI o BIOS) verifica l'hardware e trova il bootloader.
  2. Bootloader GRUB mostra il menu e carica in memoria il kernel e l'immagine initramfs da /boot.
  3. Kernel inizializza l'hardware e, con l'aiuto di initramfs, trova e monta il file system radice.
  4. systemd viene avviato come processo con PID 1 e lancia i servizi nell'ordine giusto: rete, log, SSH, cron e gli altri.
  5. 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 bash fornisce 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.

Impara l’argomento in video

Questo argomento è trattato in modo approfondito, con pratica, nel corso «Linux: с нуля до уверенного администрирования».

Vai al corso