Linux Tutorial – Puntata 16

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 a tutti. Ci eravamo lasciati la scorsa settimana parlando del /proc fs e cercando di descrivere, perlomeno per sommi capi, alcuni dei files contenuti all’interno della dir /proc/1 che significava fare riferimento al primo processo del sistema, ovvero init. Ci siamo anche detti che la nostra analisi era stata sommaria e che ci saremmo riservati, con una seconda parte, di analizzare i processi controllati direttamente dal kernel. Dunque, cercando di rispettare le promesse, eccoci qui pronti per ripartire. Di cose da dire ce ne sono ancora molte, e su tante sorvoleremo (altrimenti ci vorrebbe un intero corso di informatica) ma una su tutte è da ripetere: su linux tutto è considerato come un file e quindi non ci si deve stupire che l’output di alcuni comandi rispecchierà quasi esattamente il contenuto dei file presenti in /proc. A proposito: anche per oggi preparate due tazze di the…

/PROC (2/2)

bottega@bottegadelbarbieri  /proc  ls -lha -p | grep -v '/$'
total 4.0K
-r--r--r--   1 root             root                0 Jun 19 10:01 bootconfig
-r--r--r--   1 root             root                0 Jun 19 10:01 buddyinfo
-r--r--r--   1 root             root                0 Jun 19 10:01 cgroups
-r--r--r--   1 root             root                0 Jun 19 10:01 cmdline
-r--r--r--   1 root             root                0 Jun 19 10:01 consoles
-r--r--r--   1 root             root                0 Jun 19 10:01 cpuinfo
-r--r--r--   1 root             root                0 Jun 19 10:01 crypto
-r--r--r--   1 root             root                0 Jun 19 10:01 devices
-r--r--r--   1 root             root                0 Jun 19 10:01 diskstats
-r--r--r--   1 root             root                0 Jun 19 10:01 dma
-r--r--r--   1 root             root                0 Jun 19 10:01 execdomains
-r--r--r--   1 root             root                0 Jun 19 10:01 fb
-r--r--r--   1 root             root                0 Jun 19 10:01 filesystems
-r--r--r--   1 root             root                0 Jun 19 10:01 interrupts
-r--r--r--   1 root             root                0 Jun 19 10:01 iomem
-r--r--r--   1 root             root                0 Jun 19 10:01 ioports
-r--r--r--   1 root             root                0 Jun 19 10:01 kallsyms
-r--------   1 root             root             128T Jun 19 10:01 kcore
-r--r--r--   1 root             root                0 Jun 19 10:01 keys
-r--r--r--   1 root             root                0 Jun 19 10:01 key-users
-r--------   1 root             root                0 Jun 19 10:01 kmsg
-r--------   1 root             root                0 Jun 19 10:01 kpagecgroup
-r--------   1 root             root                0 Jun 19 10:01 kpagecount
-r--------   1 root             root                0 Jun 19 10:01 kpageflags
-r--r--r--   1 root             root                0 Jun 19 10:01 loadavg
-r--r--r--   1 root             root                0 Jun 19 10:01 locks
-r--r--r--   1 root             root                0 Jun 19 10:01 mdstat
-r--r--r--   1 root             root                0 Jun 19 10:01 meminfo
-r--r--r--   1 root             root                0 Jun 19 10:01 misc
-r--r--r--   1 root             root                0 Jun 19 10:01 modules
lrwxrwxrwx   1 root             root               11 Jun 19 10:01 mounts -> self/mounts
-rw-r--r--   1 root             root                0 Jun 19 10:01 mtrr
lrwxrwxrwx   1 root             root                8 Jun 19 10:01 net -> self/net
-r--------   1 root             root                0 Jun 19 10:01 pagetypeinfo
-r--r--r--   1 root             root                0 Jun 19 10:01 partitions
-r--r--r--   1 root             root                0 Jun 19 10:01 sched_debug
-r--r--r--   1 root             root                0 Jun 19 10:01 schedstat
lrwxrwxrwx   1 root             root                0 Jun 19 10:01 self -> 3791
-r--------   1 root             root                0 Jun 19 10:01 slabinfo
-r--r--r--   1 root             root                0 Jun 19 10:01 softirqs
-r--r--r--   1 root             root                0 Jun 19 10:01 stat
-r--r--r--   1 root             root                0 Jun 19 10:01 swaps
--w-------   1 root             root                0 Jun 19 10:01 sysrq-trigger
lrwxrwxrwx   1 root             root                0 Jun 19 10:01 thread-self -> 3791/task/3791
-r--------   1 root             root                0 Jun 19 10:01 timer_list
-r--r--r--   1 root             root                0 Jun 19 10:01 uptime
-r--r--r--   1 root             root                0 Jun 19 10:01 version
-r--r--r--   1 root             root                0 Jun 19 10:01 version_signature
-r--------   1 root             root                0 Jun 19 10:01 vmallocinfo
-r--r--r--   1 root             root                0 Jun 19 10:01 vmstat
-r--r--r--   1 root             root                0 Jun 19 10:01 zoneinfo

L’elenco che abbiamo listato precedentemente altro non è che la lista di alcuni “kernel data files”, ovvero alcuni file che rappresentano informazioni provenienti direttamente dal kernel. Esploriamone dunque qualcuno:

cmdline >> il comando con cui e’ partito il sistema al boot:

bottega@bottegadelbarbieri  /proc  more cmdline 
BOOT_IMAGE=/vmlinuz-5.8.0-55-generic root=/dev/mapper/vgxubuntu-root ro quiet splash

Verifichiamo la versione del kernel che stiamo utilizzando:

bottega@bottegadelbarbieri  /proc  uname -a ; date
Linux bottegadelbarbieri 5.8.0-55-generic #62~20.04.1-Ubuntu SMP Wed Jun 2 08:55:04 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Sat 19 Jun 10:36:01 BST 2021

diskstats >> statistiche di utilizzo I/O (scrittura/lettura) dei dischi:

bottega@bottegadelbarbieri  /proc  cat diskstats 
   7       0 loop0 12 0 36 31 0 0 0 0 0 40 31 0 0 0 0 0 0
   7       1 loop1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   7       2 loop2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   7       3 loop3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   7       4 loop4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   7       5 loop5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   7       6 loop6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   7       7 loop7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  11       0 sr0 31 0 144 11 0 0 0 0 0 40 11 0 0 0 0 0 0
   8       0 sda 20654 14190 1208587 29867 7200 9873 867073 20225 0 26772 58276 0 0 0 0 1485 8184
   8       1 sda1 155 1013 13184 48 2 0 9 0 0 132 48 0 0 0 0 0 0
   8       2 sda2 2 0 4 0 0 0 0 0 0 12 0 0 0 0 0 0 0
   8       5 sda5 144 20 10626 79 29 16 360 117 0 272 196 0 0 0 0 0 0
   8       6 sda6 20240 13157 1179825 29699 6302 9857 866704 14024 0 23072 43724 0 0 0 0 0 0
 253       0 dm-0 33344 0 1178082 69308 16931 0 866704 121964 0 27308 191272 0 0 0 0 0 0
 253       1 dm-1 33057 0 1165530 69248 16651 0 871552 89456 0 27212 158704 0 0 0 0 0 0
 253       2 dm-2 243 0 10712 76 0 0 0 0 0 88 76 0 0 0 0 0 0

meminfo >> informazioni sulla memoria in uso (in kb):

bottega@bottegadelbarbieri  /proc  cat meminfo |head -n 20 
MemTotal:        2034740 kB
MemFree:          940920 kB
MemAvailable:    1624972 kB
Buffers:           99664 kB
Cached:           671348 kB
SwapCached:            0 kB
Active:           434272 kB
Inactive:         462044 kB
Active(anon):     126276 kB
Inactive(anon):     4152 kB
Active(file):     307996 kB
Inactive(file):   457892 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1003516 kB
SwapFree:        1003516 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:        125324 kB
Mapped:           125000 kB

bottega@bottegadelbarbieri  /proc  sar -r 4 4 
Linux 5.8.0-55-generic (bottegadelbarbieri) 	19/06/21 	_x86_64_	(2 CPU)
11:34:45    kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
11:34:49       941408   1625984    167068      8.21     99892    671636    755448     24.86    434592    462164       216
11:34:53       941156   1625732    167312      8.22     99900    671636    755448     24.86    434616    462164        32
11:34:57       941156   1625732    167304      8.22     99908    671636    755448     24.86    434616    462164        40
11:35:01       941156   1625732    167304      8.22     99908    671636    755448     24.86    434616    462164        44
Average:       941219   1625795    167247      8.22     99902    671636    755448     24.86    434610    462164        83

vmstat >> informazioni sulla memoria virtuale in uso (in kb):

bottega@bottegadelbarbieri  /proc  cat vmstat |head -n 20 
nr_free_pages 235356
nr_zone_inactive_anon 1038
nr_zone_active_anon 31577
nr_zone_inactive_file 114445
nr_zone_active_file 77035
nr_zone_unevictable 0
nr_zone_write_pending 0
nr_mlock 0
nr_page_table_pages 938
nr_kernel_stack 2984
nr_bounce 0
nr_zspages 0
nr_free_cma 0
numa_hit 2234232
numa_miss 0
numa_foreign 0
numa_interleave 67285
numa_local 2234232
numa_other 0
nr_inactive_anon 1038

bottega@bottegadelbarbieri  /proc  vmstat 4 4 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 941684  99728 771272    0    0    63    45  183   49  0  0 99  0  0
 0  0      0 941676  99728 771272    0    0     0     0  309   30  0  0 100  0  0
 0  0      0 941676  99736 771272    0    0     0     3  282   30  0  0 100  0  0
 0  0      0 941676  99736 771272    0    0     0     0  269   25  0  0 100  0  0

cpuinfo >> informazioni sulla cpu (tenete a mente che questa e’ una macchina virtuale, e lavora in memoria):

bottega@bottegadelbarbieri  /proc  cat cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 142
model name	: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping	: 9
cpu MHz		: 2711.998
cache size	: 3072 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase avx2 invpcid rdseed clflushopt md_clear flush_l1d
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips	: 5423.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual

bottega@bottegadelbarbieri  /proc  sar 4 4 
Linux 5.8.0-55-generic (bottegadelbarbieri) 	19/06/21 	_x86_64_	(2 CPU)
11:35:40        CPU     %user     %nice   %system   %iowait    %steal     %idle
11:35:44        all      0.00      0.00      0.13      0.00      0.00     99.87
11:35:48        all      0.00      0.00      0.00      0.00      0.00    100.00
11:35:52        all      0.00      0.00      0.00      0.00      0.00    100.00
11:35:56        all      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.00      0.00      0.03      0.00      0.00     99.97

interrupts >> informazioni sugli interrupts, ovvero, essenzialmente, i momenti in cui il sistema smette per un istante di lavorare per leggere e interpretare il comando impartito attraverso la tastiera (IRQ):

bottega@bottegadelbarbieri  /proc  cat interrupts 
           CPU0       CPU1       
  0:         29          0   IO-APIC   2-edge      timer
  1:          0         31   IO-APIC   1-edge      i8042
  8:          0          0   IO-APIC   8-edge      rtc0
  9:          0          0   IO-APIC   9-fasteoi   acpi
 12:        158          0   IO-APIC  12-edge      i8042
 14:          0          0   IO-APIC  14-edge      ata_piix
 15:          0       5491   IO-APIC  15-edge      ata_piix
 18:        375         67   IO-APIC  18-fasteoi   vmwgfx
 19:       6349       1864   IO-APIC  19-fasteoi   ehci_hcd:usb1, enp0s3
 20:          0          0   IO-APIC  20-fasteoi   vboxguest
 21:        793      23690   IO-APIC  21-fasteoi   ahci[0000:00:0d.0], snd_intel8x0
 22:          0         28   IO-APIC  22-fasteoi   ohci_hcd:usb2
NMI:          0          0   Non-maskable interrupts
LOC:      57249    1736371   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          0          0   Performance monitoring interrupts
IWI:          0          0   IRQ work interrupts
RTR:          0          0   APIC ICR read retries
RES:       3734       2136   Rescheduling interrupts
CAL:      42918      63464   Function call interrupts
TLB:       1098       1223   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
DFR:          0          0   Deferred Error APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:         18         18   Machine check polls
ERR:          0
MIS:          7
PIN:          0          0   Posted-interrupt notification event
NPI:          0          0   Nested posted-interrupt event
PIW:          0          0   Posted-interrupt wakeup event

Davvero ogni file presente all’interno di /proc meriterebbe una puntata a parte, sia per quanto riguarda il suo significato, sia per quanto riguarda la sua interpretazione. Il concetto che deve rimanere in testa, alla fine di questa piccola esplorazione, e’ solo e soltanto uno: tutte le informazioni dei processi, sia per quanto riguarda i programmi, sia per quanto riguarda il kernel, sono scritte qui, in questa directory. Niente di piu’, niente di meno.

Solo un’ultima cosa. Provate a listare la sub-directory /proc/sys/:

bottega@bottegadelbarbieri  /proc  ls -lha sys/
total 0
dr-xr-xr-x   1 root root 0 Jun 19 10:01 .
dr-xr-xr-x 196 root root 0 Jun 19 10:01 ..
dr-xr-xr-x   1 root root 0 Jun 19 10:04 abi
dr-xr-xr-x   1 root root 0 Jun 19 10:04 debug
dr-xr-xr-x   1 root root 0 Jun 19 10:01 dev
dr-xr-xr-x   1 root root 0 Jun 19 10:01 fs
dr-xr-xr-x   1 root root 0 Jun 19 10:01 kernel
dr-xr-xr-x   1 root root 0 Jun 19 10:01 net
dr-xr-xr-x   1 root root 0 Jun 19 10:04 sunrpc
dr-xr-xr-x   1 root root 0 Jun 19 10:04 user
dr-xr-xr-x   1 root root 0 Jun 19 10:01 vm

e poi, compiti a casa: cliccate questo link e dateci una lettura. Potrete vedere quanto e’ profonda la tana dal bianconiglio…

Alla prossima settimana!
jolek78

>> Indice <<
Puntata 15 < > Puntata 17

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 *