catest un utilitaire standard d'Unix qui lit les fichiers de manière séquentielle et les écrit sur la sortie standard . Le nom est dérivé de sa fonction de (con) caténer des fichiers (du latin catenare , « enchaîner »). Il a été porté sur un certain nombre de systèmes d'exploitation.
L'autre objectif principal de cat, outre la concaténation, est l'impression de fichiers, ce qui permet à l'utilisateur de l'ordinateur de visualiser le contenu d'un fichier. L'impression vers des fichiers et le terminal sont les utilisations les plus courantes de cat.
Histoire
catfaisait partie des premières versions d' Unix , par exemple la version 1 , et remplaçait prun utilitaire PDP-7 et Multics pour copier un seul fichier à l'écran. Il a été écrit par Ken Thompson et Dennis Ritchie . La version de catfournie avec GNU
coreutils a été écrite par Torbjorn Granlund et Richard Stallman . La version ReactOS a été écrite par David Welch, Semyon Novikov et Hermès Bélusca.
Au fil du temps, des utilitaires alternatifs tels que tacet batsont également devenus disponibles, apportant différentes nouvelles fonctionnalités.
Usage
L' catutilitaire a un double objectif : concaténer et imprimer. Avec un seul argument, il est souvent utilisé pour imprimer un fichier sur l' émulateur de terminal de l'utilisateur (ou historiquement sur un terminal d'ordinateur ou un télétype ). Avec plus d'un argument, il concatène plusieurs fichiers. Le résultat combiné est par défaut également imprimé sur le terminal, mais souvent les utilisateurs redirigent le résultat vers un autre fichier. Par conséquent, l'impression d'un seul fichier sur le terminal est un cas d'utilisation particulier de ce programme de concaténation. Pourtant, c'est son utilisation la plus courante.
La spécification Single Unix définit l'opération de catlecture de fichiers dans la séquence donnée dans ses arguments, en écrivant leur contenu sur la sortie standard dans la même séquence. La spécification impose la prise en charge d'un indicateur d'option, u pour une sortie sans tampon, ce qui signifie que chaque octet est écrit après avoir été lu. Certains systèmes d'exploitation, comme ceux qui utilisent GNU Core Utilities , le font par défaut et ignorent l'indicateur.
Si l'un des noms de fichiers d'entrée est spécifié sous la forme d'un seul tiret ( - ), catla lecture s'effectue à partir de l'entrée standard à ce point de la séquence. Si aucun fichier n'est spécifié, catla lecture s'effectue uniquement à partir de l'entrée standard.
La syntaxe de la commande est :
chat [options] [noms_de_fichiers]
Options
Exemple de quelques catoptions :
- -b(GNU : ), nombre de lignes de sortie non vides--number-nonblank
- -eimplique mais affiche également les caractères de fin de ligne comme-v$(GNU uniquement : le même, mais sans implication )-E-v
- -n(GNU : ), numéroter toutes les lignes de sortie--number
- -s(GNU : ), compresser plusieurs lignes vides adjacentes--squeeze-blank
- -timplique , mais affiche également les onglets comme-v^Je(GNU : le même, mais sans implication )-T-v
- -uutiliser des E/S sans tampon pour stdout. POSIX ne spécifie pas le comportement sans cette option.
- -v(GNU : ), affiche les caractères non imprimables, à l'exception des tabulations et du caractère de fin de ligne--show-nonprinting
Cas d'utilisation
catpeut être utilisé pour diriger un fichier vers un programme qui attend du texte brut ou des données binaires sur son flux d'entrée. catne détruit pas les octets non textuels lors de la concaténation et de la sortie. En tant que tel, ses deux principaux cas d'utilisation sont les fichiers texte et certains types de fichiers binaires compatibles avec le format.
La concaténation de texte est limitée aux fichiers texte utilisant le même codage hérité, tel que ASCII . catne fournit pas de moyen de concaténer des fichiers texte Unicode qui ont une marque d'ordre d'octet ou des fichiers utilisant des codages de texte différents les uns des autres.
Pour de nombreux ensembles de données binaires structurés, le fichier combiné résultant peut ne pas être valide. Par exemple, si un fichier possède un en-tête ou un pied de page unique, le résultat dupliquera ces derniers de manière erronée. Cependant, pour certains formats de conteneur numérique multimédia , le fichier résultant est valide et catconstitue donc un moyen efficace d'ajouter des fichiers. Les flux vidéo peuvent être un exemple significatif de fichiers qui catpeuvent se concaténer sans problème, par exemple les formats de flux de programmes MPEG (MPEG-1 et MPEG-2) et DV (vidéo numérique), qui sont fondamentalement des flux de paquets simples.
Exemples
La culture Unix
Définition du fichier Jargon
Le fichier Jargon version 4.4.7 répertorie ceci comme définition decat :
- Afficher un fichier entier sur l'écran ou sur un autre périphérique de sortie sans pause (syn. blast).
- Par extension, pour déverser de grandes quantités de données sur une cible non préparée ou sans intention de la parcourir attentivement. Utilisation : considérée comme ridicule. Rare en dehors des sites Unix. Voir aussi dd, BLT.
Parmi les fans d'Unix, cat(1)il est considéré comme un excellent exemple de conception d'interface utilisateur , car il fournit le contenu du fichier sans verbosité telle que l'espacement ou les en-têtes entre les fichiers, et parce qu'il ne nécessite pas que les fichiers soient constitués de lignes de texte, mais fonctionne avec n'importe quel type de données.
Parmi les critiques d'Unix, cat(1)est considéré comme l'exemple canonique d'une mauvaise conception d'interface utilisateur, en raison de son nom malheureusement peu évident. Il est bien plus souvent utilisé pour envoyer un seul fichier vers la sortie standard que pour concaténer deux fichiers ou plus. Le nom catde la première opération est tout aussi peu intuitif que, par exemple, celui de LISPcdr .
Utilisation inutile du chat
L'utilisation inutile de cat ( UUOC ) est un jargon Unix courant pour les constructions de ligne de commande qui ne fournissent qu'une fonction pratique à l'utilisateur. En informatique, le mot « abus », dans le deuxième sens de la définition, est utilisé pour dénigrer l'utilisation excessive ou inutile d'une construction de langage ; ainsi, l'abus de cat est parfois appelé « abus de cat ». Un exemple d' abus de cat courant est donné dans le prix :
nom de fichier cat | commande arg1 arg2 argn
Cela peut être réécrit en utilisant la redirection de stdin à la place, sous l'une des formes suivantes (la première est plus traditionnelle) :
commande arg1 arg2 argn < nom de fichier
<nom de fichier commande arg1 arg2 argn
Outre d'autres avantages, les formes de redirection d'entrée permettent à la commande d'effectuer un accès aléatoire au fichier, alors que les exemples cat ne le font pas. En effet, la forme de redirection ouvre le fichier en tant que descripteur de fichier stdin auquel la commande peut accéder entièrement, tandis que la forme cat fournit simplement les données sous forme de flux d'octets.
Un autre cas courant où cat n'est pas nécessaire est celui où une commande fonctionne par défaut sur stdin, mais lit à partir d'un fichier, si le nom du fichier est donné comme argument. C'est le cas pour de nombreuses commandes courantes ; les exemples suivants
fichier cat | modèle grep
fichier chat | moins
peut plutôt être écrit comme
fichier de modèles grep
moins de fichier
Une utilisation interactive courante de cat pour un fichier unique consiste à afficher le contenu d'un fichier vers la sortie standard. Cependant, si la sortie est canalisée ou redirigée, cat n'est pas nécessaire.
Un chat écrit avec UUOC pourrait toujours être préféré pour des raisons de lisibilité, car la lecture d'un flux canalisé de gauche à droite pourrait être plus facile à conceptualiser. De plus, une mauvaise utilisation du symbole de redirection > au lieu de < (souvent adjacent sur les claviers) peut supprimer définitivement le contenu d'un fichier, en d'autres termes, écraser , et une façon d'éviter cela est d'utiliser cat avec des canaux. Comparez :
commande < in | commande2 > out
<dans la commande | commande2 > en sortie
avec:
chat dans | commande | commande2 > sortie