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-by-deiby-ybied” e’ stato realizzato da laboratoriolinux in licenza Creative Commons BY-NC-SA 2.0

Fabio
Un tizio che pensava di essere uno scienziato. Si ritrovò divulgatore scientifico. Poi si addormentò e si svegliò informatico. Ma era sempre lui.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *