Linux Tutorial – Puntata 8
di jolek78
Care/i fruitrici e fruitori del blog, in questi post – ogni domenica mattina – si parlerà del sistema operativo GNU/Linux e degli strumenti per utilizzarlo al massimo delle potenzialità. Cercheremo di spiegare come funziona, cosa è il kernel, come costruirsi una vpn, come settare un firewall e giocare col terminale, usare adb e altro. Se il capitalismo della sorveglianza ci vuole passivi consumatori-consumatrici di servizi noi si risponde con un po’ di “cultura informatica” e un MARAMEO (quasi affettuoso). Buona lettura!
Bentornati anche questa domenica. Quest’oggi centreremo la nostra attenzione su un classico fra i classici: la struttura delle directory all’interno di Linux. Ha un nome che suona un po’ strano. Si chiama FHS, acronimo che sta per Filesystem Hirarchy Standard, ed è storicamente mantenuto dalla Linux Foundation. Lentamente in questa, nelle prossime puntate, le esploreremo dalla prima all’ultima per capire quale sia il loro significato, cosa contengano, e il perché della struttura in questa modalità. Per prima cosa pero’ attiviamo la nostra macchina virtuale, apriamo il terminale, muoviamoci nella / directory e listiamo il contenuto.
bottega@bottegadelbarbieri ~ bottega@bottegadelbarbieri ~ pwd /home/bottega bottega@bottegadelbarbieri ~ cd / bottega@bottegadelbarbieri / ls -lha total 84K
BIN
bottega@bottegadelbarbieri / cd bin/ /bin bottega@bottegadelbarbieri /bin ls -lha |more total 175M drwxr-xr-x 2 root root 36K Apr 8 06:30 . drwxr-xr-x 14 root root 4.0K Feb 9 18:52 .. -rwxr-xr-x 1 root root 59K Sep 5 2019 [ -rwxr-xr-x 1 root root 39 Aug 9 2019 7z -rwxr-xr-x 1 root root 40 Aug 9 2019 7za -rwxr-xr-x 1 root root 40 Aug 9 2019 7zr -rwxr-xr-x 1 root root 31K May 19 2020 aa-enabled -rwxr-xr-x 1 root root 35K May 19 2020 aa-exec [...]
Originariamente la bin directory era destinata a quei programmi che facevano parte della lista a cui si doveva poter accedere in runlevel 1, ossia in caso di accesso al sistema in single user mode. Oggi invece, come si può vedere, bin è soltanto un link simbolico a /usr/bin
lrwxrwxrwx 1 root root 7 Feb 27 08:53 bin -> usr/bin
Prima premessa: ricordate la scorsa puntata quando abbiamo parlato del init process, quel primo fra i programmi, che, praticamente, fa da radice per tutti gli altri? Bene, se ricordate quello, aggiungiamo ora un altro piccolo tassello. init, quando gli inviamo un segnale, cerca lo stato di runlevel a cui desideriamo assegnare il sistema. La lista è qui elencata:
init 0 – segnale per interrompere il sistema
init 1 – segnale per attivare il sigle user mode
init 2 – segnale per attivare il multi user mode – ma senza nfs
init 3 – segnale per attivare il multi user mode – ma senza xorg
init 4 – definibile dall’utente
init 5 – segnale per attivare il multi user mode – con server xorg
init 6 – segnale per interrompere il sistema
Quindi, andare in single user mode significa, banalmente, assegnare ad init lo stato 1.
La seconda premessa è ora cosa sia questo stato del sistema, e a cosa serva. Di norma, il nostro sistema parte in init 5, cioe’ sistema multiutente, programmi, demoni, terminale, e sistema grafico. Ci sono dei momenti invece a cui non possiamo accedere – un kernel panic è uno di questi – e, dunque, a quel punto, e’ necessario dover accedere al sistema per modificare alcune configurazioni, alcuni parametri del kernel, aggiungere una partizione etc.
Quindi non abbiamo bisogno di tutto in realtà, ma soltanto di alcune cose:
un terminale
un utente di root
alcuni programmi (come mount, chmod, cd, vi, fdisk etc)
Cosa contenga ora bin è piuttosto chiaro: soltanto files eseguibili, programmi cioè eseguibili dal sistema. Ma poiché ora tutto è stato inserito in /usr/bin li’ dentro c’e’ tanta ma tanta roba.
bottega@bottegadelbarbieri / ls -lha /bin/ | wc -l 1421
BOOT
Se il motore hardware di un computer è la cpu, quello che, metaforicamente, possiamo definire come il motore software è senza dubbio il kernel. Nel primo episodio di questa serie, ci eravamo soffermati su quel pezzetto di memoria che incastona linux nella storia, ovvero di quella semplice mail di Linus Torvalds apparsa nel 1991 sulla mailing list os.comp.minix “I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready[…]“. Ma esattamente dove risiede? Qual è la sua casa? Il kernel risiede in una directory ben specifica: /boot nella home tree del sistema. Nel momento in cui si scrive, il kernel in longterm e’ il 5.8, con tante e innumerevoli variazioni (moduli attivati e non, funzioni attivate e non) a seconda della distribuzione che utilizziamo.
Sulla macchina virtuale che stiamo utilizzando per questo “esperimento divulgativo”
bottega@bottegadelbarbieri ~ uname -r 5.8.0-48-generic
Ma dentro /boot cosa c’e’?
config-5.8.0-48-generic
Questo e’ “banalmente” il file di configurazione del kernel, una sorta di todo list che ricorda cosa e’ permesso fare o no. Ogni config su ogni sistema e’ differente, e viene generato all’atto dell’installazione, sia che l’abbiate compilato manualmente (buona fortuna!) sia che abbiate deciso di installarlo con un package manager (dnf, apt etc).
initrd.img-5.8.0-48-generic
Init (initial ramdisk) e’ il file che contiene la lista dei dev drivers che devono partire all’atto del boot. Tanto per essere chiari, se il sistema parte da disco rigido, non e’ assurdo trovarci lo scsi o il raid. Se il sistema e’ in lvm, partira’ in lvm, se il sistema ha il network attivato in dhcp partira’ in dhcp, e cosi’ via.
System.map-5.8.0-48-generic
E’ la “mappa geografica” del sistema. Dove sta cosa e come si chiama chi e come lo posso richiamare. Attraverso simboli e directory, linux in questo modo sa dove trovare tutto
bottega@bottegadelbarbieri /boot sudo head System.map-5.8.0-48-generic [sudo] password for bottega: 0000000000000000 D __per_cpu_start 0000000000000000 D fixed_percpu_data 00000000000001d9 A kexec_control_code_size 0000000000001000 D cpu_debug_store 0000000000002000 D irq_stack_backing_store 0000000000006000 D cpu_tss_rw 000000000000b000 D gdt_page 000000000000c000 d exception_stacks 0000000000010000 d entry_stack_storage 0000000000011000 D espfix_waddr
vmlinuz-5.8.0-48-generic
È proprio il file eseguibile del kernel, compresso (la z alla fine significa zipped) quello che vedete insomma alla partenza dal grub (grand unified bootloader). Contiene tutto, ed è la prima cosa che parte del sistema dopo il bios e il boot manager.
Alla prossima settimana!
jolek78
>> | Indice | << |
Puntata 7 | < > | Puntata 9 |
Il logo “Tux Linux” e’ stato realizzato e distribuito dall’artista deiby-ybied su Deviantart in licenza Creative Commons BY-NC-SA 3.0