Linux Tutorial – Puntata 17

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!

La ragione per la quale stiamo esplorando cosi’ nel dettaglio il FHS – filesystem hierarchy standard – in Linux è perché in ogni directory e subdirectory sono conservate alcune informazioni importanti che riguardano l’intero sistema. L’idea quindi è di fare una descrizione sommaria per adesso per poi, una volta entrati nei dettagli, recuperare proprio alcune informazioni che abbiamo seminato qui e la’ in queste prime puntate del tutorial. Nella puntata di oggi andremo a esplorare la directory /sys, e ci renderemo conto di quanto essa sia strettamente collegata al contenuto presente in /proc/sys e /dev che abbiamo analizzato nelle precedenti due puntate.

/SYS (1/2)
Questa parte di filesystem viene comunemente chiamata sysfs, come la precedente di /proc viene chiamata procfs. Li possiamo considerare, in effetti, due filesystem virtuali che aiutano il kernel a depositare le informazioni dei devices, dei processi, dei demoni, applicazioni e molto altro. Nella fattispecie il contenuto è:

bottega@bottegadelbarbieri  /  ls -lha sys/
total 4.0K
dr-xr-xr-x 13 root root 0 Jun 26 11:52 .
drwxr-xr-x 20 root root 4.0K Apr 25 07:26 ..
drwxr-xr-x 2 root root 0 Jun 26 11:53 block
drwxr-xr-x 44 root root 0 Jun 26 11:52 bus
drwxr-xr-x 71 root root 0 Jun 26 11:52 class
drwxr-xr-x 4 root root 0 Jun 26 11:52 dev
drwxr-xr-x 16 root root 0 Jun 26 11:52 devices
drwxr-xr-x 5 root root 0 Jun 26 11:52 firmware
drwxr-xr-x 8 root root 0 Jun 26 11:52 fs
drwxr-xr-x 2 root root 0 Jun 26 12:17 hypervisor
drwxr-xr-x 14 root root 0 Jun 26 11:52 kernel
drwxr-xr-x 160 root root 0 Jun 26 11:52 module
drwxr-xr-x 3 root root 0 Jun 26 11:53 power

– /sys/block/
Come si può vedere agilmente, questa directory contiene dei link simbolici che puntano ai devices virtuali contenuti nel sistema.

bottega@bottegadelbarbieri  /  ls -lha sys/block/
total 0
drwxr-xr-x  2 root root 0 Jun 26 11:53 .
dr-xr-xr-x 13 root root 0 Jun 26 11:52 ..
lrwxrwxrwx  1 root root 0 Jun 26 11:53 dm-0 -> ../devices/virtual/block/dm-0
lrwxrwxrwx  1 root root 0 Jun 26 11:53 dm-1 -> ../devices/virtual/block/dm-1
lrwxrwxrwx  1 root root 0 Jun 26 11:53 dm-2 -> ../devices/virtual/block/dm-2
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop0 -> ../devices/virtual/block/loop0
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop1 -> ../devices/virtual/block/loop1
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop2 -> ../devices/virtual/block/loop2
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop3 -> ../devices/virtual/block/loop3
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop4 -> ../devices/virtual/block/loop4
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop5 -> ../devices/virtual/block/loop5
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop6 -> ../devices/virtual/block/loop6
lrwxrwxrwx  1 root root 0 Jun 26 11:53 loop7 -> ../devices/virtual/block/loop7
lrwxrwxrwx  1 root root 0 Jun 26 11:53 sda -> ../devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sda
lrwxrwxrwx  1 root root 0 Jun 26 16:11 sr0 -> ../devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/block/sr0

Per esempio, il dm-0, dm-1 e il dm-2 (ne abbiamo già parlato) sono i devices logici di LVM – linux volume manager – e le loro informazioni possono essere estratte in questo modo:

bottega@bottegadelbarbieri  /  sudo dmsetup info /dev/dm-0
Name:              sda6_crypt
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        2
Event number:      0
Major, minor:      253, 0
Number of targets: 1
UUID: CRYPT-LUKS2-6c45a3ec325e41cc98fb8ac9b5299a5a-sda6_crypt

bottega@bottegadelbarbieri  /  sudo dmsetup info /dev/dm-1
Name:              vgxubuntu-root
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        1
Event number:      0
Major, minor:      253, 1
Number of targets: 1
UUID: LVM-Dh5EcbhEDYM2unWApRmgStIT8NJ23hBMzmoJqfNGkjUCyuMCcfeberyiATF5qYiz

bottega@bottegadelbarbieri  /  sudo dmsetup info /dev/dm-2
Name:              vgxubuntu-swap_1
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        2
Event number:      0
Major, minor:      253, 2
Number of targets: 1
UUID: LVM-Dh5EcbhEDYM2unWApRmgStIT8NJ23hBMBHCoiGKbhP3WEyFMlULp6cXdYMJyO8a3

– /sys/bus/
Un bus in informatica è un collegamento che permette di connettere due componenti fra loro per inviare e ricevere segnali. Ci sono bus interni, come i bus di memoria e di sistema, e bus esterni che connettono per esempio stampanti e memorie usb. Per noi la cosa importante è ricordare che tutte le informazioni di questi bus son contenute proprio in questa directory:

bottega@bottegadelbarbieri  /  ls -lha sys/bus/ |head -n 20
total 0
drwxr-xr-x 44 root root 0 Jun 26 11:52 .
dr-xr-xr-x 13 root root 0 Jun 26 11:52 ..
drwxr-xr-x  4 root root 0 Jun 26 11:53 ac97
drwxr-xr-x  4 root root 0 Jun 26 11:52 acpi
drwxr-xr-x  4 root root 0 Jun 26 11:52 cec
drwxr-xr-x  4 root root 0 Jun 26 11:52 clockevents
drwxr-xr-x  4 root root 0 Jun 26 11:52 clocksource
drwxr-xr-x  4 root root 0 Jun 26 11:52 container
drwxr-xr-x  4 root root 0 Jun 26 11:52 cpu
drwxr-xr-x  4 root root 0 Jun 26 11:52 dax
drwxr-xr-x  4 root root 0 Jun 26 11:52 edac
drwxr-xr-x  4 root root 0 Jun 26 11:52 eisa
drwxr-xr-x  4 root root 0 Jun 26 11:52 event_source
drwxr-xr-x  4 root root 0 Jun 26 11:52 gpio
drwxr-xr-x  4 root root 0 Jun 26 11:53 hid
drwxr-xr-x  4 root root 0 Jun 26 11:52 i2c
drwxr-xr-x  4 root root 0 Jun 26 11:52 isa
drwxr-xr-x  4 root root 0 Jun 26 11:52 machinecheck
drwxr-xr-x  4 root root 0 Jun 26 11:52 mdio_bus

La cosa interessante è che, se proviamo a listare il contenuto di una delle subdir, contiene sempre due directory principali (devices e drivers), numerose subdir e altri file. Verifichiamo:

bottega@bottegadelbarbieri  /  tree sys/bus/cpu/ |head -n 40
sys/bus/cpu/
├── devices
│   ├── cpu0 -> ../../../devices/system/cpu/cpu0
│   └── cpu1 -> ../../../devices/system/cpu/cpu1
├── drivers
│   └── processor
│       ├── bind
│       ├── cpu0 -> ../../../../devices/system/cpu/cpu0
│       ├── cpu1 -> ../../../../devices/system/cpu/cpu1
│       ├── uevent
│       └── unbind
├── drivers_autoprobe
├── drivers_probe
└── uevent

7 directories, 6 files

Facciamo una prova. Sembrerebbe che il sistema stia lavorando soltanto su due cpu virtuali (cpu0 e cpu1). Installiamo il pacchetto hwinfo e verifichiamo:

bottega@bottegadelbarbieri  /  sudo apt install hwinfo
[sudo] password for bottega: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libhd21 libx86emu2
The following NEW packages will be installed
[...]

bottega@bottegadelbarbieri  /  hwinfo --cpu --short 
cpu:                                                            
                       Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz, 2712 MHz
                       Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz, 2712 MHz

– /sys/class/
Stesso identico discorso lo possiamo fare per class/ , che sono in sostanza altri devices divisi pero’ in categorie (classi):

 bottega@bottegadelbarbieri  /  ls -lha sys/class/ |head -n 20 
total 0
drwxr-xr-x 71 root root 0 Jun 26 11:52 .
dr-xr-xr-x 13 root root 0 Jun 26 11:52 ..
drwxr-xr-x  2 root root 0 Jun 26 11:52 ata_device
drwxr-xr-x  2 root root 0 Jun 26 11:52 ata_link
drwxr-xr-x  2 root root 0 Jun 26 11:52 ata_port
drwxr-xr-x  2 root root 0 Jun 26 11:52 backlight
drwxr-xr-x  2 root root 0 Jun 26 11:52 bdi
drwxr-xr-x  2 root root 0 Jun 26 11:52 block
drwxr-xr-x  2 root root 0 Jun 26 11:52 bsg
drwxr-xr-x  2 root root 0 Jun 26 11:52 dax
drwxr-xr-x  2 root root 0 Jun 26 11:52 devcoredump
drwxr-xr-x  2 root root 0 Jun 26 11:52 devfreq
drwxr-xr-x  2 root root 0 Jun 26 11:52 devfreq-event
drwxr-xr-x  2 root root 0 Jun 26 11:52 dma
drwxr-xr-x  2 root root 0 Jun 26 11:52 dma_heap
drwxr-xr-x  2 root root 0 Jun 26 11:52 dmi
drwxr-xr-x  2 root root 0 Jun 26 11:52 drm
drwxr-xr-x  2 root root 0 Jun 26 11:52 drm_dp_aux_dev
drwxr-xr-x  2 root root 0 Jun 26 11:52 extcon

Proviamo a questo punto a listare la subdir class/tty/ (ricordate cosa sono le tty vero?) e vedremo un qualcosa di molto interessante:

 bottega@bottegadelbarbieri  /  sudo tree sys/class/tty/ |head -n 20
sys/class/tty/
├── console -> ../../devices/virtual/tty/console
├── ptmx -> ../../devices/virtual/tty/ptmx
├── tty -> ../../devices/virtual/tty/tty
├── tty0 -> ../../devices/virtual/tty/tty0
├── tty1 -> ../../devices/virtual/tty/tty1
├── tty10 -> ../../devices/virtual/tty/tty10
├── tty11 -> ../../devices/virtual/tty/tty11
├── tty12 -> ../../devices/virtual/tty/tty12
├── tty13 -> ../../devices/virtual/tty/tty13
├── tty14 -> ../../devices/virtual/tty/tty14
├── tty15 -> ../../devices/virtual/tty/tty15
├── tty16 -> ../../devices/virtual/tty/tty16
├── tty17 -> ../../devices/virtual/tty/tty17
├── tty18 -> ../../devices/virtual/tty/tty18
├── tty19 -> ../../devices/virtual/tty/tty19
├── tty2 -> ../../devices/virtual/tty/tty2
├── tty20 -> ../../devices/virtual/tty/tty20
├── tty21 -> ../../devices/virtual/tty/tty21
├── tty22 -> ../../devices/virtual/tty/tty22

Sono tutti link simbolici che vanno ancora una volta alla directory devices. E questo ci porta all’ultima subdir da trattare oggi:

– /sys/devices/

bottega@bottegadelbarbieri  /  ls -lha sys/devices/
total 0
drwxr-xr-x 16 root root 0 Jun 26 11:52 .
dr-xr-xr-x 13 root root 0 Jun 26 11:52 ..
drwxr-xr-x  3 root root 0 Jun 26 11:52 breakpoint
drwxr-xr-x  3 root root 0 Jun 27 00:11 isa
drwxr-xr-x  4 root root 0 Jun 26 11:52 kprobe
drwxr-xr-x  9 root root 0 Jun 26 11:52 LNXSYSTM:00
drwxr-xr-x  5 root root 0 Jun 26 11:52 msr
drwxr-xr-x 17 root root 0 Jun 26 11:52 pci0000:00
drwxr-xr-x 14 root root 0 Jun 26 11:52 platform
drwxr-xr-x  5 root root 0 Jun 26 11:52 pnp0
drwxr-xr-x  5 root root 0 Jun 26 11:53 power
drwxr-xr-x  3 root root 0 Jun 26 11:52 software
drwxr-xr-x 10 root root 0 Jun 26 11:52 system
drwxr-xr-x  3 root root 0 Jun 26 11:52 tracepoint
drwxr-xr-x  4 root root 0 Jun 26 11:52 uprobe
drwxr-xr-x 19 root root 0 Jun 26 11:52 virtual

e guardando la tty0

bottega@bottegadelbarbieri  /  tree sys/devices/virtual/tty/
[...]
├── tty0
│   ├── active
│   ├── dev
│   ├── power
│   │   ├── async
│   │   ├── autosuspend_delay_ms
│   │   ├── control
│   │   ├── runtime_active_kids
│   │   ├── runtime_active_time
│   │   ├── runtime_enabled
│   │   ├── runtime_status
│   │   ├── runtime_suspended_time
│   │   └── runtime_usage
│   ├── subsystem -> ../../../../class/tty
│   └── uevent

Vi domanderete: perche’ tanta confusione? Perche’ i devices son presenti sia in /dev che in /sys/devices, e perche’ i link simbolici delle loro classificazioni son presenti in /sys/block, /sys/class e in /sys/bus?

No, non c’e’ nessuna confusione. I devices presenti in /dev sono file creati da udev al runtime, mentre la directory sys/devices e’ esportata dal kernel nella creazione del sysfs tutte le volte che parte la vostra macchina. Per quanto riguarda le tre directory /sys/block, /sys/class e /sys/bus, si e’ vero, sono ridondanti. Ma, come si legge direttamente nella pagina relativa di kernel.org, e’ pianificato creare una sottodirectory unica, /sys/subsystem, mentre tutti i devices finiranno dentro /sys/devices.

 

Alla prossima settimana!
jolek78

>> Indice <<
Puntata 16 < > Puntata 18

Il logo “Tux Linux” e’ stato realizzato e distribuito dall’artista deiby-ybied su Deviantart in licenza Creative Commons BY-NC-SA 3.0

jolek78
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.