Was entsteht nach der Verwendung von cat auf einem Bild?

9

Angenommen, man erstellt eine Datei wie folgt:

touch myFile

Sie geben mit vim oder was auch immer Text ein und cat myFilespucken dann den Inhalt in das Terminal aus.

Was passiert nun, wenn ich Katze auf einem Bild verwende? Sagen,

cat myPNG.png

Ich bekomme nur einen Haufen Müll. Ich habe nur darüber nachgedacht, was der catBefehl versucht und woher all dieser "Müll" kommt. Nur neugierig.

Qcom
quelle

Antworten:

22

Es kann nützlich sein zu erklären, wie Dateien auf der untersten Ebene funktionieren:

Eine Datei ist ein Strom von Bytes mit einer Länge von null oder mehr. Ein Byte besteht aus 8 Bits. Da es 256 Kombinationen von 8 Bits gibt, bedeutet dies, dass ein Byte eine beliebige Zahl von 0 bis 255 ist. Jede Datei ist also auf ihrer untersten Ebene ein großer Teil von Zahlen im Bereich von 0 bis 255.

Es liegt ganz bei den Programmen und Benutzern zu entscheiden, was die Zahlen "bedeuten". Wenn wir Text speichern möchten, ist es wahrscheinlich eine gute Idee, die Zahlen als Code zu verwenden, wobei jeder Zahl ein Buchstabe zugewiesen wird. Das machen ASCII und Unicode. Wenn wir Text anzeigen möchten, ist es wahrscheinlich eine gute Idee, ein Gerät zu erstellen oder ein Programm zu schreiben, das diese Zahlen verwendet und eine Bitmap anzeigt, die dem entsprechenden ASCII / Unicode-Code ähnelt. Das machen Terminals und Terminalemulatoren.

Für Grafiken möchten wir wahrscheinlich, dass die Zahlen Pixel und ihre Farben darstellen. Dann brauchen wir ein Programm, das die Datei durchläuft, alle Bytes liest und das Bild entsprechend rendert. Ein Terminalemulator erwartet, dass die Bytes ASCII / Unicode-Nummern sind, und verhält sich für denselben Byteblock (oder dieselbe Datei) anders.

LawrenceC
quelle
Hervorragende Erklärung! Ich bin froh, dass du auf die unterste Ebene gegangen bist.
Qcom
2
@BOSS Ich würde die Definition von ein bisschen einwerfen. Ein Bit ist ein Binary DIgit oder eine Zahl, die eine Eins oder eine Null sein kann. Ein Bit hat zwei Möglichkeiten oder 2 ^ 1 = 2. Zwei Bits können vier Kombinationen haben oder 2 × 2 = 4. Richtiger ist es 2² = 4 für 2 Ziffern. 8 Binäre DIgits oder Bits können 2 ^ 8 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 mögliche Kombinationen haben.
Pinguin359
2
Kleiner Nitpick / Pedanterie: Ein Byte hat eine beliebige Größe. Möglicherweise stoßen Sie auf Situationen, in denen die Breite nicht 8 Bit beträgt. "Oktett" ist die bevorzugte Terminologie.
Chris Down
9

Cat speichert den Inhalt der Eingabedatei in der Standardausgabe, die in diesem Fall ein Textgerät ist: Ihr Terminalfenster. Da ein Bild aus Binärdaten besteht, sehen Sie die rohen Binärdaten, die so interpretiert werden, als wäre es ASCII-Text. Beispielsweise wird ein Byte mit dem Wert 65 als Großbuchstabe A, 66 als Großbuchstabe B usw. angezeigt. Wenn Sie die Datei mit einer Anwendung öffnen, die die Bilddatei korrekt interpretieren kann, wird der binäre Inhalt der Datei angezeigt als Bild.

Jongleur
quelle
OK Cool. Danke für die Antwort. Sie erwähnen einen "Textmodus". Gibt es andere Modi für ein Standardterminal? Oder ist die einzige andere Möglichkeit, es wie gesagt zu interpretieren, über eine Anwendung, die diesen Dateityp ordnungsgemäß rendern kann?
Qcom
4
@BOSS, nein, ich glaube, gordoco wollte sagen, dass ein Terminal ein Textgerät ist. Der ursprüngliche Zweck von catbesteht darin, Dateien wie in zusammenzustellen cat filea fileb > filec. Wenn Sie nicht über das Terminal übertragen (wie in diesem Beispiel), spielt es keine Rolle, ob die Datei textuell oder binär ist. In der Unix-Welt werden Binär- und Textdateien gleich gespeichert, nur Textdateien enthalten einen etwas eingeschränkten Satz von Bytes. Eine häufige Verwendung von cat besteht darin, den Dateiinhalt auf Befehle zu leiten, die keine Dateinamen als Parameter verwenden, sondern Eingaben von der Standardeingabe akzeptieren.
Asoundmove
@BOSS bedeutet, dass eine Datei eine Textdatei im Gegensatz zu einer Binärdatei ist. Dies bedeutet nur, dass der Binärinhalt der Datei als Text interpretiert werden kann. Früher waren die Dinge einfach, entweder war die Datei ASCII oder nicht. Heutzutage kann die Datei eine Reihe verschiedener Textformate haben, einschließlich ASCII, UTF8, UTF16 ... Auf der Festplatte sind sie alle binär.
Asoundmove
@asoundmove: Sie haben Recht, ich hätte Textgerät sagen sollen, anstatt den mehrdeutigen Begriff "Textmodus". Ich habe meine Antwort bearbeitet.
Jongleur
Ich habe gerade cat auf einer Bitmap verwendet und es wurde nicht nur auf ASCII-Symbolen, sondern auch auf Unicode-Zeichen (wie "ڣ" und "漥") auf dem Terminal gedruckt. Irgendeine Idee warum das so ist?
Magnus