Cosa viene prodotto dopo aver utilizzato cat su un'immagine?


9

Diciamo che uno crea un file in questo modo:

touch myFile

Si inserisce del testo in esso con vim o altro, quindi si utilizza cat myFileper sputare il contenuto nel terminale.

Ora, cosa succede quando uso cat su qualsiasi immagine? Dire,

cat myPNG.png

Prendo solo un mucchio di immondizia. Mi ha fatto solo pensare a ciò che il catcomando sta tentando di fare e da dove proviene tutta questa "spazzatura". Solo curioso.

Risposte:


22

Può essere utile spiegare come funzionano i file al livello più basso:

Un file è un flusso di byte, zero o più di lunghezza. Un byte è 8 bit. Poiché ci sono 256 combinazioni di 8 bit, ciò significa che un byte è un numero qualsiasi compreso tra 0 e 255. Quindi ogni file è, al suo livello più basso, un grosso numero di numeri che vanno da 0 a 255.

Spetta ai programmi e agli utenti decidere cosa significano i numeri. Se vogliamo archiviare del testo, probabilmente è una buona idea usare i numeri come codice, in cui a ogni numero viene assegnata una lettera. Questo è ciò che fanno ASCII e Unicode. Se vogliamo visualizzare il testo, allora è probabilmente una buona idea costruire un dispositivo o scrivere un programma in grado di prendere questi numeri e visualizzare una bitmap simile al corrispondente codice ASCII / Unicode. Questo è ciò che fanno i terminali e gli emulatori di terminali.

Naturalmente, per la grafica, probabilmente vogliamo che i numeri rappresentino i pixel e i loro colori. Quindi avremo bisogno di un programma che attraversi il file, legga tutti i byte e renda l'immagine di conseguenza. Un emulatore di terminale si aspetta che i byte siano numeri ASCII / Unicode e si comporterà in modo diverso, per lo stesso blocco di byte (o file).


Spiegazione eccellente! Sono contento che tu sia sceso al livello più basso.
Qcom,

2
@BOSS Darei un po 'la definizione. Un bit è un DIgit binario o un numero che può essere uno o uno zero. Un bit ha due possibilità o 2 ^ 1 = 2. Due bit possono avere quattro combinazioni o 2 × 2 = 4. Più correttamente, è 2² = 4 per 2 cifre. 8 DIgit o bit binari possono avere 2 ^ 8 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 combinazioni possibili.
penguin359,

2
Minore nitpick / pedanteria: un byte ha una dimensione arbitraria. Potresti imbatterti in situazioni in cui non è largo 8 bit. "Ottetto" è la terminologia preferita.
Chris Down,

9

Cat scarica il contenuto del file di input nell'output standard, che in questo caso è un dispositivo di testo: la finestra del terminale. Poiché un'immagine è composta da dati binari, ciò che vedi sono i dati binari grezzi interpretati come se fosse un testo ASCII. Ad esempio, un byte con il valore 65 verrà visualizzato come maiuscolo A, 66 è maiuscolo B, ecc. Se si apre il file con un'applicazione in grado di interpretare correttamente il file di immagine, verranno visualizzati i contenuti binari del file come immagine.


Ok bello. Grazie per la risposta. Citi una "modalità testo". Esistono altre modalità per un terminale standard? Oppure, è l'unico altro modo per interpretarlo come hai detto tu, tramite un'applicazione in grado di renderizzare correttamente quel tipo di file?
Qcom,

4
@BOSS, no, credo che gordoco intendesse dire che un terminale è un dispositivo di testo. Lo scopo originale di catè quello di mettere insieme i file come in cat filea fileb > filec, se non si transita attraverso il terminale (come in questo esempio), non importa se il file è di testo o binario. Nel mondo unix, i file binari e di testo sono archiviati allo stesso modo, solo i file di testo contengono un insieme piuttosto limitato di byte. Un uso comune di cat è indirizzare il contenuto del file a comandi che non accettano nomi di file come parametri, ma accettano l'input dall'input standard.
asoundmove,

@BOSS, dicendo che un file è un file di testo anziché binario, significa solo che il contenuto binario del file può essere interpretato come testo. Le cose erano semplici, o il file era ASCII o non lo era. Al giorno d'oggi il file potrebbe essere un numero di diversi formati di testo, tra cui ASCII, UTF8, UTF16 ... Sul disco rigido sono tutti binari.
asoundmove,

@asoundmove: hai ragione, avrei dovuto dire dispositivo di testo, piuttosto che il termine ambiguo "modalità testo". Ho modificato la mia risposta.
giocoliere

Ho usato cat su una bitmap proprio ora e ha stampato sul terminale non solo simboli ASCII, ma anche caratteri unicode (come "ڣ" e "漥"). Qualche idea sul perché questo sia?
Magnus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.