L’idea di strutturare il filesystem Linux attraverso un approccio a gerarchia di directory simile a quello attuale risale al 1996. Venne elaborata una visione d’insieme per tutti i S.O. che derivavano da Unix o con questo assimilabili. La convenzione prese il nome di Filesystem Hierarchy Standard (FHS). Il Filesystem in Linux è quindi nativamente gerarchico, parte da / e da esso fa discendere tutti i suoi rami. E’ importante notare che questi rami possano far riferimento, pur risiedendo a livello logico sullo stesso filesystem, anche a diverse partizioni, dischi e persino differenti device.
Ecco un elenco non esaustivo delle principali directory nella root di un filesystem Linux:
- /bin e /bin64 Contiene alcuni eseguibili disponibili per il single user mode.
- /boot Qui vengono ospitati i file del boot loader come ad esempio i kernel.
- /dev In questa directory troviamo i file di device.
- /etc Contiene i file di configurazione nella loro versione testuale.
- /home La directory in cui di norma vengono conservati i file personali degli utenti comuni.
- /lib e /lib64 Librerie per gli eseguibili di /bin e /bin64
- /local Contenitore di software o versioni di software derivati e compilati localmente. Utile per distinguerli da quelli di provenienza esterna.
- /lost+found Directory contenente i dati recuperati attraverso il File System Consistency Check (fsck).
- /media Qui sono ospitati i punti di montaggio dei dispositivi removibili come le chiavette usb.
- /mnt Directory contenente punti di montaggio da utilizzare in modo temporaneo.
- /opt Posizione di installazione per suite e collezioni di utilità o applicazioni.
- /proc Un filesystem generato automaticamente in cui sono presentate tutta una serie di informazioni sui processi, il processore e molto altro.
- /root La directory in cui sono contenuti i file personali dell’utente root.
- /run Altro filesystem generato automaticamente per veicolare tutta una serie di informazioni sugli utenti e sui demoni attivi.
- /sbin Contenitore per file binari essenziali per adoperare il sistema.
- /srv La directory che contiene i dati dei servizi che la macchina presenta verso l’esterno come a esempio il server web.
- /sys Ospita dati sul kernel, i driver e i device.
- /tmp Contenitore temporaneo per file e directory.
- /usr In essa possiamo trovare gli eseguibili dei principali comandi adoperati quando il sistema è in modalità multi utente.
- /var Qui vengono conservati i log e molti file modificati di continuo.
Occorre precisare che queste directory nel filesystem di Linux sono spesso ulteriormente modulate in sottodirecotory con funzioni specifiche, in particolare /etc e /usr. Consigliamo di effettuare una veloce esplorazione all'interno di esse per comprendere la pletora di differenti contenuti che possono essere ospitati.
Una delle risorse più interessanti presenti in un filesystem Linux che rispetti lo Filesystem Hierarchy Standard è la directory /proc . Opportuno sottolineare che la directory in questione faccia in realtà primariamente riferimento ai processi in corso. Facendo un parallelo fra quanto visibile attraverso un comando concepito per ottenere informazione sui processi attivi, ovvero top, potremo meglio dare percezione della cosa. Eseguitelo e lasciatelo in esecuzione.
Tasks: 89 total, 1 running, 88 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1525480 total, 1034796 free, 72808 used, 417876 buff/cache
KiB Swap: 1572860 total, 1572860 free, 0 used. 1305192 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1441 fprinci+ 20 0 105604 4528 3500 S 0.3 0.3 0:00.07 sshd
1 root 20 0 72456 8292 6412 S 0.0 0.5 0:00.97 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:00.10 kworker/u2:0
6 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.07 rcu_sched
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
[...]
1847 fprinci+ 20 0 46204 3864 3324 R 0.0 0.3 0:00.18 top
Ora esplorate /proc attraverso un’altra console.
fprincipe@html1:~$ ls /proc
1 1750 23 403 7 consoles kpagecgroup stat
10 1770 24 404 76 cpuinfo kpagecount swaps
11 1772 25 405 768 crypto kpageflags sys
112 18 26 409 769 devices loadavg sysrq-trigger
12 1825 27 410 77 diskstats locks sysvipc
13 1826 28 454 78 dma mdstat thread-self
1340 183 285 460 79 driver meminfo timer_list
1347 1847 30 463 8 execdomains misc tty
1363 1849 32 518 80 fb modules uptime
1378 19 33 6 804 filesystems mounts version
14 2 34 650 81 fs mtrr version_signature
1441 20 341 651 834 interrupts net vmallocinfo
1442 203 342 652 87 iomem pagetypeinfo vmstat
15 204 392 655 9 ioports partitions zoneinfo
16 208 397 656 acpi irq sched_debug
163 209 399 657 asound kallsyms schedstat
1671 21 4 658 buddyinfo kcore scsi
1672 211 400 665 bus keys self
17 213 401 666 cgroups key-users slabinfo
1748 22 402 683 cmdline kmsg softirqs
fprincipe@html1:~$ ls /proc/1847
attr cwd map_files oom_adj schedstat task
autogroup environ maps oom_score sessionid timers
auxv exe mem oom_score_adj setgroups timerslack_ns
cgroup fd mountinfo pagemap smaps uid_map
clear_refs fdinfo mounts patch_state stack wchan
cmdline gid_map mountstats personality stat
comm io net projid_map statm
coredump_filter limits ns root status
cpuset loginuid numa_maps sched syscall
fprincipe@html1:~$ more /proc/1847/cmdline
top
Per il momento concentriamoci solo sulle directory con nomi formati da sequenze numeriche. Sono in relazione con i PID ovvero i Process IDentifier. Possiamo notare che nella directory corrispondente al PID 1847 su /proc il file cmdline è un file testuale contente, per l’appunto, il comando che ha generato il processo in questione.