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