Cosa significa Tutto è un file in Linux?
Una delle caratteristiche che definiscono Linux e altri sistemi operativi simili a UNIX è che "tutto è un file". Questa è una semplificazione eccessiva, ma capire cosa significa aiuterà a capire come funziona Linux.
Molte cose su Linux compaiono nel tuo file system, ma non sono in realtà dei 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 file system pseudo o 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 di voler 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 indichi le informazioni sulla CPU: puoi solo leggere il contenuto di questo file usando qualsiasi comando standard che funzioni con file di testo semplice. Ad esempio, potresti usare il comando cat / proc / cpuinfo per stampare il contenuto di questo file sul terminale - stampando le informazioni della CPU sul terminale. Si potrebbe 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 di 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 tuo kernel Linux - in altre parole, per quanto tempo il tuo sistema è stato acceso senza spegnere.
- / 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? Esegui il comando mount e specifica / dev / cdrom come dispositivo da 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, l'esposizione di 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 - Scarta tutti i dati scritti su di esso - pensalo come un cestino o buco nero. Se vedi un commento che ti dice di inviare reclami a / dev / null - è un modo geniale di dire "buttali nella spazzatura".
- / dev / random - Produce casualità utilizzando il rumore ambientale. È un generatore di numeri casuali che puoi attingere.
- / dev / zero - Produce zeri - un flusso costante di zeri.
Se pensi a questi tre come file, non ne vedrai l'uso. Invece, pensa a loro come strumenti.
Ad esempio, per impostazione predefinita, i comandi di Linux generano messaggi di errore e altri output che stampano sullo standard output, normalmente il terminale. Se si desidera eseguire un comando e non si preoccupa del suo output, è possibile reindirizzare tale output su / dev / null. Il reindirizzamento dell'output di un comando a / dev / null lo elimina immediatamente. Invece di far eseguire a ogni comando la sua "modalità silenziosa", puoi utilizzare questo metodo con qualsiasi comando.
comando> / dev / null
Se si desidera una fonte di casualità, ad esempio, per generare una chiave di crittografia, non è necessario scrivere il proprio generatore di numeri casuali - è possibile utilizzare / dev / random.
Per cancellare i contenuti di un disco rigido scrivendone degli 0, non è necessaria un'utilità speciale dedicata all'azzeramento di un'unità: è possibile utilizzare utilità standard e / dev / zero. Ad esempio, il dd comando legge da una posizione e scrive in un'altra posizione. Il seguente comando legge gli zeri da / dev / zero e li scrive direttamente nella prima partizione del disco rigido sul tuo sistema, cancellandone completamente il contenuto.
(avvertimento: Questo comando cancellerà tutti i dati sulla prima partizione se viene eseguita. 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 i dispositivi direttamente che per lavorare con i file.
Una precisazione
In pratica, è più accurato dire che "tutto è un flusso di byte" rispetto a "tutto è un file". / Dev / random non è un file, ma sicuramente è 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? Troverete entrambi nel file system; non è necessaria altra forma di indirizzamento.
Naturalmente, alcune cose non sono in realtà dei file: i processi in esecuzione sul sistema non fanno parte del file system. "Tutto è un file" è impreciso, ma molte cose si comportano come file.