Que signifie la sortie lorsque vous faites cat image.png
?
Est-ce que l'image est réellement faite?
L'extension de fichier de l'image est-elle importante?
cat
imprimera le contenu du fichier (les zéros et ceux qui seront mappés à des caractères sans signification, car ils ne sont pas vraiment des caractères exacts?) Dans stdout
qui est par défaut votre terminal.
L'extension de fichier est pour nous (humains), pour comprendre facilement quel est le type de fichier; certains programmes l'utilisent aussi pour l'ouvrir, mais la plupart des programmes détectent le type de fichier en utilisant un en-tête à l'intérieur du fichier.
Utilisez file file.png
pour obtenir le type de fichier ou xxd file.png
:
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
00000010: 0000 0002 0000 0002 0800 0000 0057 dd52 .............W.R
00000020: f800 0000 0e49 4441 5478 9c63 6c60 6062 .....IDATx.cl``b
00000030: 6000 0002 9200 84f7 7ca3 5800 0000 0049 `.......|.X....I
00000040: 454e 44ae 4260 82 END.B`.
pour obtenir un vidage hexadécimal du contenu du fichier, notez le "PNG" dans la première ligne.
Également de cette référence de signatures de fichier nous pouvons voir que la signature PNG est:
PNG 89 50 4E 47 0D 0A 1A 0A PNG image
cat
affiche simplement le contenu du fichier dans stdout
stream , qui dans votre cas se trouve être terminal. Qu'est-ce qui se passe avec la séquence de 0 et 1 qui composent le fichier est à la hauteur du terminal. Dans le cas d'un fichier binaire, les séquences de bits qui ne sont pas du texte ne seront pas reconnues en tant que texte.
Considérez par exemple cat
ing un fichier contenant des caractères UTF, tel que le chinois dans deux terminaux différents - un qui prend en charge les caractères UTF (terminator
dans la capture d'écran ci-dessous) et un autre qui ne contient pas support (xterm
dans la capture d'écran ci-dessous). Comme vous pouvez le voir, certains caractères ne sont pas interprétés. cat
affichera le contenu dans les deux cas, mais comment interpréter ce contenu - cela dépend de chaque terminal.
Maintenant, si vous redirigez stdout
stream vers un fichier, vous créez effectivement une copie, à peu près la même chose que cp original copy
ou mv old new
. Dans de rares cas, vous voudrez peut-être scinder deux fichiers - binaire ou texte - ce qui est également possible avec cat
. L'idée est la même. Conformément à définition POSIX , "[les] fichiers d'entrée peuvent être n'importe quel type de fichier", ce qui signifie que cat
peut lire n'importe quel fichier. Cependant, dans certains cas, cat
prendra le mode texte. Dans le cas de la cat
d'Ubuntu (fournie par le paquetage GNU coreutils), fournie dans info cat
, on peut lire:
"Cat" lit en mode texte si l’une des options "-bensAE" est utilisée ou si "cat" lit une entrée standard et que cette entrée est un terminal. De même, ‘cat’ écrit en mode texte si l’une des options ‘-bensAE’ est utilisée ou si la sortie standard est un terminal.
Bien sûr, si nous voulons réellement visualiser le contenu des fichiers binaires dans un format lisible, nous pouvons utiliser des éditeurs hexadécimaux ou tout type de programme "dump", le gestionnaire de fichiers Midnight Commander , ou même vi
éditeur de texte . Il y a une bonne liste de ces ici et ici déjà.
Les images sont composées d'octets. Ainsi sont des fichiers texte
Lorsqu'une application logicielle, par exemple cat
veut lire des fichiers texte, elle commence à lire des octets et recherche ces octets dans des codages de caractères tels que ascii ou unicode. Il trouve le caractère dans la table et le restitue.
Mais les images n'ont pas de caractères (ce n'est peut-être pas le cas mais ce n'est pas ce qui construit l'image) et vous pouvez deviner ce qui se passe lorsque vous essayez de traiter les octets formatés comme s'ils étaient des caractères. vous obtenez des caractères aléatoires pour chaque fichier.
Si vous voulez voir les chaînes d'un fichier, utilisez la commande strings
.