Homepage » come » Cosa significa Tutto è un file in Linux?

    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.