
Una delle caratteristiche distintive di Linux e di altri sistemi operativi simili a UNIX è che “tutto è un file”. Questa è una semplificazione eccessiva, ma capire cosa significa ti aiuterà a capire come funziona Linux.
Molte cose su Linux appaiono nel tuo file system, ma in realtà non sono file. Sono file speciali che rappresentano dispositivi hardware, informazioni di sistema e altre cose, incluso un generatore di numeri casuali.
Questi file speciali possono trovarsi in pseudo o file system virtuali come / dev, che contiene file speciali che rappresentano dispositivi e / proc, che contiene file speciali che rappresentano informazioni di sistema e di processo.
/ proc
Ad esempio, supponiamo che tu voglia trovare informazioni sulla tua CPU. La directory / proc contiene un file speciale – / proc / cpuinfo – che contiene queste informazioni.

Non hai bisogno di un comando speciale che ti dica le informazioni sulla tua CPU: puoi semplicemente leggere il contenuto di questo file usando qualsiasi comando standard che funziona con file di testo semplice. Ad esempio, è possibile utilizzare il comando cat / proc / cpuinfo per stampare i contenuti di questo file sul terminale, stampando le informazioni della CPU sul terminale. Puoi anche aprire / proc / cpuinfo in un editor di testo per visualizzarne il contenuto.
Ricorda, / proc / cpuinfo non è in realtà un file di testo contenente queste informazioni: il kernel Linux e il file system proc ci espongono queste informazioni come file. Questo ci consente di utilizzare strumenti familiari per visualizzare e lavorare con le informazioni.

La directory / proc contiene anche altri file simili, ad esempio:
- / proc / uptime – Espone il tempo di attività del proprio kernel Linux – in altre parole, da quanto tempo il sistema è acceso senza spegnersi.
- / proc / version – Espone la versione del tuo kernel Linux.
/ dev
Nella directory / dev, troverai i file che rappresentano i dispositivi, nonché i file che rappresentano altre cose speciali. Ad esempio, / dev / cdrom è l'unità CD-ROM. / dev / sda rappresenta il tuo primo disco rigido, mentre / dev / sda1 rappresenta la prima partizione sul tuo primo disco rigido.
Vuoi montare il tuo CD-ROM? Eseguire il comando mount e specificare / dev / cdrom come dispositivo che si desidera montare. Vuoi partizionare il tuo primo disco rigido? Eseguire un'utilità di partizionamento del disco e specificare / dev / sda come disco rigido che si desidera modificare. Vuoi formattare la prima partizione sul tuo primo disco rigido? Esegui un comando di formattazione e digli di formattare / dev / sda1.

Come puoi vedere, esporre questi dispositivi come parte del file system ha i suoi vantaggi. Il file system fornisce uno “spazio dei nomi” coerente che tutte le applicazioni possono utilizzare per indirizzare e accedere ai dispositivi.
/ dev / null, / dev / random e / dev / zero
Il file system / dev non contiene solo file che rappresentano dispositivi fisici. Ecco tre dei dispositivi speciali più importanti che contiene:
- / dev / null – Elimina tutti i dati scritti su di esso – pensalo come un cestino o un buco nero. Se vedi mai un commento che ti dice di inviare reclami a / dev / null – questo è un modo geek di dire “gettali nella spazzatura”.
- / dev / random – Produce casualità usando il rumore ambientale. È un generatore di numeri casuali in cui puoi attingere.
- / dev / zero – Produce zeri – un flusso costante di zeri.
Se pensi a questi tre come file, non vedrai un uso per loro. Invece, pensali come strumenti.
Ad esempio, per impostazione predefinita, i comandi Linux producono messaggi di errore e altri output che stampano sull'output standard, normalmente il terminale. Se vuoi eseguire un comando e non ti interessa il suo output, puoi reindirizzare l'output su / dev / null. Il reindirizzamento dell'output di un comando su / dev / null lo scarta immediatamente. Invece di avere ogni comando implementare la propria “modalità silenziosa”, è possibile utilizzare questo metodo con qualsiasi comando.
comando> / dev / null

Se volessi una fonte di casualità – diciamo, per generare una chiave di crittografia, non avresti bisogno di scrivere il tuo generatore di numeri casuali – potresti usare / dev / random.
Per cancellare i contenuti di un disco rigido scrivendo 0 su di esso, non è necessaria un'utilità speciale dedicata allo zero di un'unità: è possibile utilizzare le utility standard e / dev / zero. Ad esempio, il dd Il comando legge da una posizione e scrive in un'altra posizione. Il seguente comando legge gli zeri da / dev / zero e li scrive direttamente sulla prima partizione del disco rigido sul sistema, cancellandone completamente il contenuto.
(avvertimento: Questo comando cancellerà tutti i dati sulla tua prima partizione se lo esegui. Esegui questo comando solo se vuoi distruggere i dati.)
dd if = / dev / zero di = / dev / sda1
Qui stiamo usando dd con file speciali (/ dev / zero e / dev / sda1), ma potremmo anche usare dd per leggere e scrivere su file reali. Lo stesso comando funziona sia per manipolare direttamente i dispositivi sia per lavorare con i file.
Una precisazione
In pratica, è più preciso affermare che “tutto è un flusso di byte” rispetto a “tutto è un file”. / Dev / random non è un file, ma certamente è un flusso di byte. E sebbene queste cose tecnicamente non siano file, sono accessibili nel file system: il file system è uno “spazio dei nomi” universale in cui tutto è accessibile. Vuoi accedere a un generatore di numeri casuali o leggere direttamente da un dispositivo? Troverai entrambi nel file system; non sono necessarie altre forme di indirizzamento.
Naturalmente, alcune cose non sono in realtà file: i processi in esecuzione sul tuo sistema non fanno parte del file system. “Tutto è un file” non è preciso, ma molte cose si comportano come file.
