Oggi andiamo a scoprire perché nel mondo Linux o per meglio dire nel mondo Unix è molto usato il detto “everything is a file” cioé “ogni cosa è un file”. Diciamo che di per se la frase lascia poco all’interpretazione e racchiude l’essenza di quello che avviene realmente nei sistemi unix.
Adesso molti di voi si staranno chiedendo o staranno pensando che è soltanto un detto anche perché avviando la propria distro ognuno riesce a vedere i propri device, le cartelle, le informazioni di sistema e tutto questo sembra davvero lontano dal poter essere schematizzato tutto in semplici file; mi duole contraddire il vostro pensiero ma è proprio così tutto quello che vedete sono semplici file.
Ovviamente ogni file è diverso da un altro e alcuni file sono “speciali” perché contengono delle informazioni particolari che servono magari a rappresentare un device (penna usb), a mantenere le info di sistema di un determinato componente hardware, o magari a mantenere le informazioni per poter rappresentare una cartella.
Per quanto riguarda linux noi troviamo alcuni file speciali in specifiche cartelle, infatti possiamo trovare i file per i device in /dev, oppure i file per le informazioni di sistema in /proc ma vediamo un po’ più nel dettaglio.
/proc
Mettiamo che vogliate trovare le informazioni sullo stato della vostra CPU, nella cartella /proc troverete un file dedicato a mantenere tutte le info riguardanti la vostra CPU e nello specifico troverete il file /proc/cpuinfo
In questo file sono contenute tutte le informazioni che vi possono servire, inoltre per ottenerle non vi serviranno particolari programmi di rilevamento o quant’altro, ma soltanto conoscere qualche comando per la lettura dei file oppure saper utilizzare un qualsiasi editor grafico; infatti se volete da terminale leggere il contenuto del file potete scrivere il seguente comando:
- sudo cat /proc/cpuinfo
in questo modo avrete stampate a video tutte le info che si trovavano dentro il file, infatti se non vi piace molto il terminale e volete vedere le stesse cose in modo più semplice vi basterà aprire il file con un editor (es. gedit) per trovarvi davanti le info desiderate in questo modo:
Come potete vedere il file si aprirà come un normalissimo file testo, ovviamente il file sarà in sola lettura perché riservato al sistema, ed inoltre potrete avere un messaggio che vi dirà che il file è cambiato, visto che mano mano che il sistema è in esecuzione lo stato, in questo caso della CPU, si evolve quindi dovrete riaprirlo o aggiornarlo.
Nella cartella /proc troviamo molti file interessanti e utili per capire lo stato del sistema ve ne cito altri due come esempio:
- /proc/uptime il quale mantiene il tempo dall’ultima volta che il vostro sistema è stato spento;
- /proc/version il quale mantiene la versione del vostro kernel Linux
/dev
Nella cartella /dev troverete tutti i file che rappresentano i vostri Device. Per esempio potrete trovare:
- /dev/cdrom che rappresenta il vostro CD-ROM drive
- /dev/sda che rappresenta il primo hard disk
- /dev/sda1 che invece rappresenta la prma partizione del vostro primo hard disk.
La stessa cosa varrà a seconda dei casi per tutti i tipi di device, inoltre quando vorrete per esempio utilizzare uno di questi o interagire con esso potrete montarlo tramite lo specifico comando, o per esempio formattarlo ecc ecc semplicemente riferendolo tramite il suo file speciale.
Nel file system Linux troviamo alcuni nomi speciali riservati sotto /dev per avere alcune funzionalità particolari che possono rivelarsi molto utili e molto potente anche se proprio perché potenti da utilizzare con le dovute precauzioni.
Citiamo:
- /dev/null Impratica è una specie di cestino, o per meglio dire buco nero in cui ogni cosa che gli si mette va butta persa
- /dev/random Questo come si può capire dal nome produce stream di numeri a caso
- /dev/zero Produce uno stream di zeri
Tutti questi vanno visti come un albero di radice /dev.
I comandi sopra possono essere sfruttati in vari modi per esempio il /dev/null si può utilizzare per non visualizzare l’output prodotto da certe applicazioni lanciate tramite terminale che a volte risulta molto prolisso; infatti ridirezionando l’output sul /dev/null questo non sarà visualizzato ma andrà buttato:
- Comando>/dev/null
mentre per esempio il secondo può essere utilizzato per generare codici che possono esserci utili magari per creare key; per quanto riguarda infine il terzo invece è da usare con cautela e può essere utilizzato anche per formattare o cmq eliminare ogni cosa da una partizione o da un file sostituendo il contenuto con tutti zeri, il tutto facendosi aiutare dal comando dd che in pratica copia blocchi di byte.
Attenti non date questo comando almeno che non volete formattare la vostra prima partizione:dd if=/dev/zero of=/dev/sda1
In pratica diciamo al comando dd di prendere tutto quello che si trova in /dev/zero e metterlo al posto di quello che si trova in /dev/sda1, visto che in /dev/zero troviamo uno stream di zeri in questo caso sovrascriviamo tutta la partizione sda1 con zeri.
Conclusioni e appunti
In conclusione vorrei fare un piccolo appunto specialmente riguardante gli ultimi tre “file”, infatti penso che sia più preciso dire “che ogni cosa è uno stream” piuttosto che “ogni cosa è un file”, infatti /dev/random non è un vero è proprio file ma è sicuramente uno stream, noi lo vediamo come file perché fa parte dell’albero del file system.