Que produit-on après avoir utilisé cat sur une image?


9

Disons que l'on crée un fichier comme ceci:

touch myFile

Vous entrez du texte avec vim ou autre chose, puis utilisez cat myFilepour cracher le contenu dans le terminal.

Maintenant, que se passe-t-il lorsque j'utilise cat sur une image? Dire,

cat myPNG.png

Je reçois juste un tas d'ordures. Cela m'a juste fait réfléchir à ce que la catcommande tente de faire, et d'où viennent toutes ces "ordures". Juste curieux.

Réponses:


22

Il peut être utile d'expliquer comment les fichiers fonctionnent au niveau le plus bas:

Un fichier est un flux d'octets de zéro ou plus. Un octet fait 8 bits. Puisqu'il y a 256 combinaisons de 8 bits, cela signifie qu'un octet est n'importe quel nombre de 0 à 255. Ainsi, chaque fichier est, à son niveau le plus bas, un gros morceau de nombres allant de 0 à 255.

Il appartient entièrement aux programmes et aux utilisateurs de décider de la signification des chiffres. Si nous voulons stocker du texte, alors c'est probablement une bonne idée d'utiliser les chiffres comme code, où chaque numéro est affecté d'une lettre. C'est ce que font ASCII et Unicode. Si nous voulons afficher du texte, alors c'est probablement une bonne idée de construire un périphérique ou d'écrire un programme qui peut prendre ces nombres et afficher un bitmap ressemblant au code ASCII / Unicode correspondant. C'est ce que font les terminaux et les émulateurs de terminaux.

Bien sûr, pour les graphiques, nous voulons probablement que les nombres représentent les pixels et leurs couleurs. Ensuite, nous aurons besoin d'un programme qui parcourt le fichier, lit tous les octets et rend l'image en conséquence. Un émulateur de terminal s'attend à ce que les octets soient des nombres ASCII / Unicode et va se comporter différemment, pour le même bloc d'octets (ou fichier).


Excellente explication! Heureux que vous soyez descendu au niveau le plus bas.
Qcom

2
@BOSS Je jetterais la définition d'un peu. Un bit est un chiffre binaire ou un nombre qui peut être un ou un zéro. Un bit a deux possibilités ou 2 ^ 1 = 2. Deux bits peuvent avoir quatre combinaisons ou 2 × 2 = 4. Plus correctement, c'est 2² = 4 pour 2 chiffres. 8 Les chiffres ou bits binaires peuvent avoir 2 ^ 8 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 combinaisons possibles.
penguin359

2
Piqûre / pédanterie mineure: un octet est de taille arbitraire. Vous pouvez rencontrer des situations dans lesquelles il n'a pas une largeur de 8 bits. "Octet" est la terminologie préférée.
Chris Down

9

Cat transfère le contenu du fichier d'entrée vers la sortie standard, qui dans ce cas est un périphérique texte: votre fenêtre de terminal. Puisqu'une image est constituée de données binaires, ce que vous voyez est les données binaires brutes interprétées comme s'il s'agissait de texte ASCII. Par exemple, un octet avec la valeur 65 serait affiché en majuscule A, 66 est en majuscule B, etc. Si vous ouvrez le fichier avec une application capable d'interpréter correctement le fichier image, le contenu binaire du fichier sera affiché comme une image.


OK cool. Merci d'avoir répondu. Vous mentionnez un "mode texte". Existe-t-il d'autres modes pour un terminal standard? Ou, est-ce la seule autre façon de l'interpréter comme vous l'avez dit, via une application qui peut correctement rendre ce type de fichier?
Qcom

4
@BOSS, non, je pense que gordoco voulait dire qu'un terminal est un périphérique texte. Le but initial de catest de rassembler les fichiers comme dans cat filea fileb > filec, si vous ne transitez pas via le terminal (comme dans cet exemple), peu importe que le fichier soit texte ou binaire. Dans le monde Unix, les fichiers binaires et texte sont stockés de la même manière, seuls les fichiers texte contiennent un ensemble d'octets quelque peu restreint. Une utilisation courante de cat consiste à diriger le contenu des fichiers vers des commandes qui ne prennent pas les noms de fichiers comme paramètres, mais acceptent les entrées de l'entrée standard.
asoundmove

@BOSS, en disant qu'un fichier est un fichier texte par opposition à binaire, signifie seulement que le contenu binaire du fichier peut être interprété comme du texte. Les choses étaient simples, soit le fichier était ASCII, soit ce n'était pas le cas. De nos jours, le fichier pourrait être un certain nombre de formats de texte différents, y compris ASCII, UTF8, UTF16 ... Sur le disque dur, ils sont tous binaires.
asoundmove le

@asoundmove: Vous avez raison, j'aurais dû dire périphérique texte, plutôt que le terme ambigu "mode texte". J'ai modifié ma réponse.
jongleur le

J'ai utilisé cat sur un bitmap tout à l'heure et il a imprimé sur le terminal non seulement des symboles ascii, mais aussi des caractères unicode (comme "ڣ" et "漥"). Une idée pourquoi c'est?
Magnus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.