Diviso in 2 parti, in questa prima parte introdurrò il concetto che tutto è file e presenterò i dispositivi speciali /dev/null, /dev/zero, /dev/random e /dev/full . La parte 2 sarà presentare caratteristiche didatticamente interessanti su questo, ad esempio, come trasformare un file in una partizione!
Introduzione
- Che cos'è?
Everything is File è il concetto di come il sistema registra e mantiene tutto nella sua struttura. A differenza di altri sistemi operativi, i sistemi operativi simili a UNIX trattano tutto come un file comune.
Ciò significa che non solo le partizioni vengono montate come file ma le directory di dispositivi specifici come RAM, smartphone, dischi esterni, e i dischi ottici sono tutti file. Oltre a questi, anche socket e pipe sono file!
Inoltre, ogni terminale TTY, quello quelli che apri con CTRL ALT F1 – sono “file” agli occhi del sistema.
Directory /dev
Se sfogli la directory /dev, vedrai tutti i file corrispondenti ai mount di sistema relativi ad altri media. È come se avessi collegato un telefono cellulare al computer, un disco rigido esterno o persino una chiavetta USB e tutto diventasse "un file" per il sistema operativo.
Le partizioni di sistema sono i file che iniziano con "sd ” nella cartella /dev.Nella stessa cartella, i TTY sono dispositivi TeleTypewriter, il terminale della shell a cui si accede da “CTRL ALT F1 comando ". Già in questa cartella si trovano anche i blocchi di montaggio utilizzati dal sistema di supporti ottici (DVD, CD e così via), nei file elencati “loop “.
Dispositivi speciali
La curiosità più grande di questo post è a causa di questi 4 piccoli file nella cartella /dev: full, zero, random e null. Puoi differenziare la funzione di ciascuno di essi? Ciò che hanno in comune sta nel fatto che sono "file speciali ” e non semplici directory.
Dispositivo nullo:/dev/null
Il dispositivo null (device null) viene in genere utilizzato per eliminare il flusso di output di un processo il cui risultato non ha importanza per qualche motivo. Serve anche come un file vuoto di convenienza. Di solito, questa operazione viene eseguita tramite un comando di reindirizzamento sulla console di sistema. Qualsiasi file inviato al dispositivo "/dev/null" scomparirà per sempre a causa del modo in cui opera, abbandonando i dati all'istante.
È come un grande buco nero, una spazzatura che non si riempie mai.
Poeticamente, i programmatori fanno molte battute su /dev/null a causa di questa particolarità.
Prova il seguente comando:$ echo "Hello World" Vedrai "Hello World" come output del comando.
Ora prova:
$ echo “Hello World”> /dev/null
Restituirà un output vuoto. Cioè, non accadrà nulla.
Perché l'output del comando "Hello world" è andato a Nowhere.
È stato inghiottito da un buco nero.
È andato a trovare Courage the Cowardly Dog in Nowhere! O in qualsiasi altro posto folle che la tua immaginazione ti consente.
/dev/null per i sistemi basati su UNIX funziona come un buco nero:
Ciò che viene inviato lì non torna!Tralasciando le battute, in pratica, l'output del comando del processo non è stato memorizzato, è stato uno scarto diretto come se non fosse mai stato generato.
Dispositivo pieno:/dev/full
Su Linux, il dispositivo sempre pieno è un file speciale che restituisce sempre lo stesso codice di errore quando si accede per la scrittura:ENOSPC – che significa "Non c'è spazio disponibile sul dispositivo “.
Inoltre, ha un'altra funzione:poiché è sempre pieno, fornisce un numero infinito di caratteri nulli (NULL) a qualsiasi processo che vi acceda come letto. Questo dispositivo viene comunemente utilizzato per testare il comportamento di un programma quando si verifica un errore dovuto a un disco di memoria pieno!
Prova il seguente comando:$ echo “Hello world”> /dev/fullIndicherà a questo dispositivo un errore completo, imitando un HDD affollato!
bash: echo:errore di scrittura:nessuno spazio rimasto sul dispositivo
Dispositivo zero:/dev/zero
Su sistemi operativi simili a Unix, /dev/zero è un file speciale che fornisce quanti caratteri null vengono letti da esso: il NULL della tabella ASCII, 0x00; e non il carattere "cifra zero", "0", il cui valore è 0x30–.
Il flusso di caratteri nullo generato da questo dispositivo può, ad esempio, essere utilizzato per sovrascrivere informazioni su un disco (per pulirlo) o per generare un file pulito di dimensioni da X a infinito. Il sistema BSD lo utilizza implementando la memoria condivisa tramite la funzione mmap , che mappa/dev/zero alla RAM.
Crea un grande file vuoto chiamato "test":
$ dd if=/dev/ zero of=/home/ $ USER /test count=1000 bs=1000
Se non imposti un limite al comando, ottenendo come “dd if=/dev/zero of=/home / $ USER/test”, vedrai un file che ingrasserà tendendo all'infinito; smette di crescere solo quando l'unità disco è piena, provocando un errore "spazio su disco insufficiente".
Questo comando è interessante quando si desidera recuperare una pen drive che ha la tabella delle partizioni danneggiata ed è irrecuperabile. Il dd il comando forza la scrittura e /dev /zero popolerà ogni blocco di archiviazione, con zeri. Sarà in uno stato di nuova produzione, richiedendoti di utilizzare in seguito un programma come Disks o Gparted per ricostruire la tabella delle partizioni!
Fai attenzione con questo comando, se l'output è di =/dev /sda1, azzererai l'intero disco sda1 (lo riempie di zeri) rendendo i file irrecuperabili.
Dispositivo casuale:/dev/random
Funziona utilizzando la stessa logica di /dev/zero, ma riempiendo un disco o creando un file di dimensione n con valori casuali, generati dall'elaborazione del computer, raccogliendo i caratteri delle informazioni della GPU, la memoria RAM e così via.
/Dev/random dovrebbe essere appropriato per usi che richiedono numeri casuali di alta qualità come un one-time pad o la generazione di chiavi pubbliche per SSH e altre reti di condivisione.
Veloce curiosità!
Cosa succede se mandiamo il nulla? Cioè se inviamo il contenuto di /dev/zero a /dev/null
$ sudo dd if =/dev/zero of=/dev/null
Questo comando genererà un file che tende all'infinito, che verrà registrato nel dispositivo dello spazio infinito:il nostro buco nero! In pratica, non danneggia i dischi hardware perché nessun dato viene effettivamente generato e scritto su disco. Ma dal punto di vista del kernel, c'è un trasferimento di dati lì:genererà un elevato consumo di CPU, che selezionerà uno dei core per generare tale elaborazione occupando il 100% di utilizzo.
Questo tipo di comando viene utilizzato per il test delle prestazioni, ad esempio per verificare come si comporta il computer con la CPU al 100% di utilizzo.
Conclusione
In questo post, hai appreso maggiori dettagli su come i sistemi basati su UNIX riconoscono i dispositivi e su come tutto è "file". Conoscevano anche i dettagli sui dispositivi speciali.
Nel prossimo post della serie, parlerò di alcune utilities interessanti per questi dispositivi, ad esempio la creazione di una partizione da un file, tra le altre curiosità che non voglio commentare per non spoilerare!