Colloquio

Domande su Linux al colloquio: 24 domande con risposte

Aggiornato: · Skillaria.Top

Nei colloqui su Linux si chiede soprattutto di file system e inode, collegamenti fisici e simbolici, permessi e sudo, processi e segnali, avvio del sistema e rete: come si verificano le porte aperte, come funziona la risoluzione DNS e che cosa fare quando un server non risponde.

Le domande su Linux si fanno nei colloqui per DevOps engineer, sistemisti, SRE e sviluppatori backend. Gli intervistatori raramente si aspettano che tu ricordi i flag a memoria: vogliono capire se conosci il funzionamento del sistema e se sai trovare la causa di un problema. Qui sotto trovi le domande più frequenti su Linux, dalle basi alla diagnostica, con risposte e comandi.

Consiglio: rispondendo, nomina anche il comando con cui verificheresti ciò che affermi. Dire «controllo con ss -tlnp» è molto più convincente di affermazioni generiche.

File system

1. Che cos'è l'FHS e cosa c'è nelle directory principali?

FHS (Filesystem Hierarchy Standard) è lo standard che definisce dove stanno le directory. L'intero albero parte dalla radice /; non esistono lettere di unità, e gli altri file system vengono montati nelle directory dell'albero.

  • /etc — configurazione di sistema e dei servizi;
  • /var — dati variabili: log (/var/log), cache, code, database;
  • /home — directory personali degli utenti, /root — directory personale di root;
  • /usr — programmi e librerie; nelle distribuzioni moderne /bin e /sbin sono di solito collegamenti a /usr/bin e /usr/sbin;
  • /tmp — file temporanei, /boot — kernel e bootloader;
  • /proc e /sys — file system virtuali con informazioni su processi e kernel, /dev — file dei dispositivi.

2. Che cos'è un inode?

L'inode è la struttura del file system che contiene i metadati di un file: tipo, permessi, proprietario, dimensione, date, numero di hard link e puntatori ai blocchi dei dati. Nell'inode non c'è il nome del file: il nome si trova nella directory, come voce «nome → numero di inode».

Il numero di inode si vede con ls -i, i dettagli con stat file. Il numero di inode di un file system è limitato, e df -i mostra quanti ne sono in uso. Da qui nasce una situazione classica: «c'è molto spazio su disco ma non riesco a creare file», perché milioni di file piccoli hanno esaurito gli inode.

3. Qual è la differenza tra hard link e link simbolico?

Un hard link (ln file link) è un altro nome per lo stesso inode. I due nomi sono equivalenti, e i dati vengono eliminati solo quando il conteggio dei link arriva a zero. Limiti: non si possono creare hard link alle directory e non si può uscire dal file system in cui si trova il file.

Un link simbolico (ln -s target link) è un file separato con un proprio inode, che contiene il percorso del bersaglio. Può puntare a directory e ad altri file system, ma si «rompe» se il bersaglio viene cancellato o spostato.

4. Il disco è pieno ma du mostra meno di df. Perché?

La causa più comune: un file è stato eliminato, ma un processo lo tiene ancora aperto, per esempio il log molto grande di un servizio in esecuzione. Il nome non esiste più, quindi du non lo vede, ma i blocchi restano occupati e df li conteggia.

Per trovare questi file usa lsof +L1 oppure lsof | grep deleted. Soluzione: riavviare il processo o troncare il file tramite il suo descrittore: : > /proc/PID/fd/N. In futuro, per i log usa truncate o la rotazione con logrotate, non rm.

5. Come avviene il boot di Linux?

Il firmware (BIOS o UEFI) inizializza l'hardware e passa il controllo al bootloader, di solito GRUB. Il bootloader legge la configurazione e carica in memoria il kernel e l'initramfs, un file system radice temporaneo che contiene i driver necessari per raggiungere la vera radice.

Il kernel inizializza i dispositivi, monta il file system radice e avvia il primo processo utente con PID 1, che nella maggior parte delle distribuzioni è systemd. systemd porta i servizi fino al target predefinito, per esempio multi-user.target. I tempi delle fasi si vedono con systemd-analyze.

6. Che cosa fa il comando mount e dove si configura il mount automatico?

mount collega il file system di un dispositivo a una directory (punto di mount): mount /dev/sdb1 /mnt/data. I mount attuali si vedono con findmnt o con mount senza argomenti.

Il mount all'avvio si configura in /etc/fstab. È meglio indicare i dispositivi con l'UUID (lo mostra blkid) e non con nomi come /dev/sdb1, che possono cambiare. Prima del riavvio verifica le modifiche con mount -a: un errore in fstab può bloccare l'avvio.

Utenti e permessi

7. Come funzionano i permessi dei file in Linux?

Ogni file ha un proprietario, un gruppo e tre insiemi di permessi: per il proprietario, per il gruppo e per gli altri. Ogni insieme contiene r (lettura), w (scrittura), x (esecuzione). In forma numerica r=4, w=2, x=1, quindi chmod 640 file dà al proprietario lettura e scrittura, al gruppo lettura, e agli altri nulla.

$ ls -l app.conf
-rw-r----- 1 deploy www-data 512 Oct 12 10:03 app.conf

Il proprietario si cambia con chown user:group file, i permessi con chmod.

8. Che cosa significano r, w, x per una directory?

Per le directory il significato è diverso: r permette di ottenere l'elenco dei nomi, w permette di creare, eliminare e rinominare file al suo interno, x permette di entrare nella directory e raggiungere i file per nome.

La conseguenza importante: per eliminare un file basta il permesso di scrittura sulla directory, anche se il file non è tuo. Senza x sulla directory, r non serve a nulla: i nomi sono visibili, ma i file non si possono aprire.

9. Che cosa sono SUID, SGID e sticky bit?

Il SUID su un file eseguibile fa sì che il programma giri con i privilegi del suo proprietario e non di chi lo avvia. L'esempio classico è /usr/bin/passwd: appartiene a root e può modificare /etc/shadow. Il SGID sul file fa lo stesso per il gruppo, mentre sulla directory fa sì che i nuovi file ereditino il gruppo della directory, utile per le cartelle condivise.

Lo sticky bit su una directory consente di eliminare un file solo al suo proprietario, anche se la directory è scrivibile da tutti. È il caso di /tmp: con ls -ld /tmp vedi drwxrwxrwt. Per trovare tutti i file SUID a fini di audit: find / -perm -4000 -type f 2>/dev/null.

10. Che cos'è umask?

umask è una maschera che toglie permessi ai nuovi file e alle nuove directory. I permessi di base sono 666 per i file e 777 per le directory, e umask sottrae dei bit. Con il valore tipico 022 i file vengono creati con 644 e le directory con 755. Il valore attuale si legge con il comando umask.

11. Dove sono memorizzati utenti e password?

Gli account si trovano in /etc/passwd: nome, UID, GID del gruppo principale, directory personale e shell. Gli hash delle password sono separati in /etc/shadow, leggibile solo da root, così gli utenti normali non possono tentare attacchi a forza bruta sugli hash. I gruppi stanno in /etc/group.

Le informazioni su un utente si ottengono con id user e getent passwd user: il secondo considera anche fonti esterne come LDAP.

12. Come funziona sudo e perché è meglio che accedere come root?

sudo esegue un comando come un altro utente (di default root) secondo le regole di /etc/sudoers e dei file in /etc/sudoers.d/. L'utente inserisce la propria password, non quella di root, e ogni azione viene scritta nel log con l'indicazione di chi l'ha compiuta.

Una regola può consentire tutto (alena ALL=(ALL:ALL) ALL) oppure solo alcuni comandi. Per modificare sudoers usa visudo: controlla la sintassi prima di salvare, e un errore non ti toglie sudo. In Ubuntu i privilegi amministrativi si ottengono facendo parte del gruppo sudo; nelle distribuzioni tipo RHEL del gruppo wheel.

13. Come aggiungo un utente a un gruppo, e perché le modifiche non si sono applicate?

usermod -aG docker alena aggiunge l'utente a un gruppo supplementare. L'opzione -a è obbligatoria: senza di essa -G sostituisce tutto l'elenco dei gruppi.

Le modifiche valgono dal prossimo accesso, perché la sessione attuale conserva l'elenco vecchio. Riconnettiti, oppure apri una shell con il nuovo gruppo con newgrp docker. La verifica si fa con id.

Processi

14. Che cos'è un processo e un PID, e come si vedono i processi?

Un processo è un programma in esecuzione, con il proprio spazio di indirizzi, i file aperti e un identificatore PID. Ogni processo ha un genitore (PPID), e l'antenato comune è il processo con PID 1. L'elenco dei processi si ottiene con ps aux e ps -ef, l'albero con pstree o ps -ef --forest, la visualizzazione in tempo reale con top e htop.

15. Qual è la differenza tra SIGTERM e SIGKILL?

kill PID invia per default SIGTERM (15): una richiesta cortese di terminare. Il processo può intercettarla, chiudere le connessioni, salvare i dati e uscire. SIGKILL (9, kill -9) non può essere intercettato: il kernel termina il processo immediatamente, senza pulizia.

L'ordine corretto è prima SIGTERM, e solo se il processo non reagisce, SIGKILL. Un altro segnale comune è SIGHUP: molti demoni lo usano per rileggere la configurazione.

16. Che cos'è un processo zombie?

Uno zombie è un processo già terminato, ma il cui genitore non ha ancora letto il codice di uscita con la chiamata wait(). Occupa quasi nessuna risorsa, ma resta una voce nella tabella dei processi. In ps lo stato è Z.

Lo zombie non si può uccidere, perché è già morto. Bisogna che il genitore lo «seppellisca»: si corregge il programma genitore, oppure si termina il genitore, e lo zombie passa a PID 1 che lo ripulisce.

17. Che cosa indica il load average?

I tre numeri in uptime e top indicano il numero medio di processi pronti per l'esecuzione negli ultimi 1, 5 e 15 minuti. In Linux vi rientrano anche i processi in attesa non interrompibile (stato D), di solito in attesa del disco.

Il valore si confronta con il numero di core (nproc): un load di 4 su 4 core è carico pieno, su 16 core è un quarto. Un load alto con poca CPU in uso fa sospettare problemi di I/O; si verifica con iostat o con il campo wa di top.

Rete

18. Come si vedono indirizzi IP, route e porte aperte?

Gli indirizzi delle interfacce si vedono con ip a, la tabella di routing con ip r. I vecchi ifconfig e netstat del pacchetto net-tools in molte distribuzioni non sono installati di default.

Le porte in ascolto e i processi che le aprono si mostrano con ss -tlnp: t — TCP, l — solo quelle in ascolto, n — senza tradurre in nomi, p — con il processo. Per UDP si usa ss -ulnp.

$ sudo ss -tlnp
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0      511          0.0.0.0:80        0.0.0.0:*     users:(("nginx",pid=812,fd=6))
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*     users:(("sshd",pid=640,fd=3))

19. Il servizio ascolta su 127.0.0.1:8080: si può raggiungere dall'esterno?

No. L'indirizzo 127.0.0.1 è l'interfaccia di loopback, raggiungibile solo dalla stessa macchina. Per accettare connessioni esterne il servizio deve ascoltare sull'indirizzo dell'interfaccia esterna oppure su 0.0.0.0 (tutti gli indirizzi IPv4). È una causa frequente del caso «la porta è aperta ma da fuori non funziona», insieme al firewall.

20. Come trasforma Linux un nome host in un indirizzo IP?

L'ordine delle fonti è definito dalla riga hosts: in /etc/nsswitch.conf, di solito prima il file /etc/hosts, poi il DNS. Gli indirizzi dei server DNS vengono letti da /etc/resolv.conf; nei sistemi con systemd-resolved vi compare l'indirizzo locale 127.0.0.53, mentre i server reali si vedono con resolvectl status.

Per verificare si usano dig example.com o dig @1.1.1.1 example.com per interrogare un server specifico. Una sottigliezza: dig e nslookup interrogano il DNS direttamente e non leggono /etc/hosts, mentre getent hosts example.com segue lo stesso percorso usato dalle applicazioni.

21. Qual è la differenza tra TCP e UDP?

TCP stabilisce una connessione (handshake a tre vie SYN, SYN-ACK, ACK), garantisce consegna e ordine, e ritrasmette i pacchetti persi. Su TCP girano HTTP, SSH e la maggior parte dei database. UDP invia datagrammi senza connessione né garanzie, ma con minore latenza: lo usano le query DNS, le videochiamate e i giochi.

22. Un sito non si apre. Come cerchi la causa?

Procedi per livelli, dal nome all'applicazione:

  1. Il nome si risolve: dig site.example, l'indirizzo corrisponde a quello atteso.
  2. L'host è raggiungibile: ping (può essere bloccato), traceroute o mtr.
  3. La porta è aperta: nc -zv host 443 oppure curl -v https://site.example.
  4. Sul server: il servizio è attivo (systemctl status nginx), la porta è in ascolto (ss -tlnp), il firewall non blocca (sudo nft list ruleset, sudo ufw status).
  5. Log dell'applicazione e journalctl -u del servizio.

Per l'intervistatore conta soprattutto l'ordine sistematico, non un elenco preciso di strumenti.

23. Che cos'è lo stato TIME_WAIT?

Dopo la chiusura di una connessione TCP, il lato che la chiude per primo mantiene il socket in TIME_WAIT per un po', così che i pacchetti ritardati della vecchia connessione non finiscano in una nuova connessione con gli stessi indirizzi e porte. Un numero elevato di TIME_WAIT è normale su un server molto carico o su un client che apre molte connessioni brevi. Il conteggio si fa con ss -tan state time-wait | wc -l.

24. Qual è la differenza tra /etc/hosts e DNS, e quando serve il primo?

/etc/hosts è una tabella statica «indirizzo — nome» su una singola macchina. Con la configurazione standard di nsswitch viene consultata prima del DNS, ed è utile per i test: per esempio per indirizzare un dominio al nuovo server prima di cambiare i record DNS. Il DNS è un sistema distribuito, le cui risposte valgono per tutti i client. Un errore in /etc/hosts è una causa frequente della situazione «da me il sito si apre, da tutti gli altri no».

Conclusioni

Le domande tipiche sul Linux dei colloqui verificano tre cose: se capisci il modello del sistema (inode, permessi, processi, avvio), se conosci gli strumenti di diagnostica (ss, dig, journalctl, lsof) e se sai cercare la causa per passi. Rispondi con comandi ed esempi tratti dall'esperienza. File system, permessi e rete sono trattati in dettaglio nel corso con esercizi pratici.

Domande frequenti

Che cosa chiedono di Linux ai colloqui per un DevOps junior?

Di solito le basi: navigazione e permessi, processi e systemctl, lettura dei log, comandi di rete come ip, ss, dig e curl, fondamenti degli script bash. Spesso viene assegnato un piccolo compito pratico, per esempio «trova che cosa sta riempiendo il disco».

Bisogna ricordare a memoria tutti i flag dei comandi?

No: è accettabile dire che verificherai il flag con man. È più importante capire quale strumento risolve un problema e che cosa significa il suo output.

Come mi preparo alla parte pratica del colloquio?

Crea una macchina virtuale e risolvi compiti reali: configura un web server come servizio systemd, imposta l'accesso SSH con chiave, configura un firewall, trova il processo che usa una porta. Spiegare ad alta voce i propri passaggi è parte della preparazione.