cat
es una utilidad estándar de Unix que lee archivos secuencialmente y los escribe en la salida estándar . El nombre se deriva de su función de (con) encadenar archivos (del latín catenare , "encadenar"). [1] [2]
Se ha adaptado a varios sistemas operativos.
El otro propósito principal de cat
, además de la concatenación, es la impresión de archivos, lo que permite al usuario de la computadora ver el contenido de un archivo. La impresión en archivos y la terminal son los usos más comunes de cat
. [3]
cat
fue parte de las primeras versiones de Unix , por ejemplo, la versión 1 , y reemplazó a pr
, una utilidad de PDP-7 y Multics para copiar un solo archivo a la pantalla. [4] Fue escrito por Ken Thompson y Dennis Ritchie . La versión de cat
incluida en GNU coreutils fue escrita por Torbjorn Granlund y Richard Stallman . [5] La versión de ReactOS fue escrita por David Welch, Semyon Novikov y Hermès Bélusca. [6]
Con el tiempo, también aparecieron utilidades alternativas como tac
y , que aportaron diferentes funciones nuevas. [7] [8]bat
La cat
utilidad tiene un doble propósito: concatenar e imprimir. Con un único argumento, se suele utilizar para imprimir un archivo en el emulador de terminal del usuario (o históricamente en un terminal de ordenador o teletipo ). Con más de un argumento, concatena varios archivos. El resultado combinado se imprime también en el terminal de forma predeterminada, pero a menudo los usuarios redirigen el resultado a otro archivo. [9] Por lo tanto, la impresión de un único archivo en el terminal es un caso de uso especial de este programa de concatenación. Sin embargo, este es su uso más común. [3]
La Especificación Única de Unix define la operación de cat
leer archivos en la secuencia dada en sus argumentos, escribiendo su contenido en la salida estándar en la misma secuencia. La especificación exige el soporte de una opción, u para salida sin búfer, lo que significa que cada byte se escribe después de haber sido leído. Algunos sistemas operativos, como los que usan GNU Core Utilities , hacen esto por defecto e ignoran la opción. [10]
Si uno de los nombres de archivo de entrada se especifica como un solo guion ( - ), cat
se lee desde la entrada estándar en ese punto de la secuencia. Si no se especifica ningún archivo, cat
se lee solo desde la entrada estándar.
La sintaxis del comando es:
gato [opciones] [nombres_de_archivo]
Ejemplo de algunas cat
opciones: [11]
cat
se puede utilizar para enviar un archivo a un programa que espera texto simple o datos binarios en su flujo de entrada. cat
no destruye bytes que no sean de texto al concatenar y enviar por salida. Por lo tanto, sus dos casos de uso principales son los archivos de texto y ciertos tipos de archivos binarios compatibles con el formato.
La concatenación de texto está limitada a archivos de texto que utilizan la misma codificación heredada, como ASCII . cat
no proporciona una forma de concatenar archivos de texto Unicode que tienen una marca de orden de bytes o archivos que utilizan codificaciones de texto diferentes entre sí.
En el caso de muchos conjuntos de datos binarios estructurados, el archivo combinado resultante puede no ser válido; por ejemplo, si un archivo tiene un encabezado o pie de página único, el resultado los duplicará de forma falsa. Sin embargo, en el caso de algunos formatos de contenedores digitales multimedia , el archivo resultante es válido y, por lo tanto, cat
proporciona un medio eficaz para agregar archivos. Las secuencias de video pueden ser un ejemplo significativo de archivos que cat
se pueden concatenar sin problemas, por ejemplo, los formatos de secuencia de programa MPEG (MPEG-1 y MPEG-2) y DV (video digital), que son secuencias de paquetes fundamentalmente simples.
La versión 4.4.7 del archivo de jerga incluye lo siguiente como la definición de cat
:
- Arrojar un archivo entero a la pantalla o a algún otro receptor de salida sin pausa (sin. blast).
- Por extensión, volcar grandes cantidades de datos a un objetivo no preparado o sin intención de examinarlo con cuidado. Uso: se considera tonto. Es poco común fuera de los sitios Unix. Véase también ddBLT.
Entre los fanáticos de Unix, cat(1)se considera un excelente ejemplo de diseño de interfaz de usuario , porque entrega el contenido de los archivos sin detalles tales como espaciado o encabezados entre los archivos, y porque no requiere que los archivos consistan en líneas de texto, sino que funciona con cualquier tipo de datos.
Entre los críticos de Unix, cat(1)se considera el ejemplo canónico de un mal diseño de interfaz de usuario, debido a su nombre lamentablemente poco obvio. Se utiliza mucho más a menudo para enviar un solo archivo a la salida estándar que para concatenar dos o más archivos. El nombre catde la primera operación es tan poco intuitivo como, por ejemplo, el de LISPcdr . [ cita requerida ]
El uso inútil de cat ( UUOC ) es una jerga común de Unix para las construcciones de línea de comandos que solo proporcionan una función de conveniencia para el usuario. [12] En informática, la palabra "abuso", [13] en el segundo sentido de la definición, se utiliza para menospreciar el uso excesivo o innecesario de una construcción del lenguaje; por lo tanto, el abuso de cat a veces se denomina "abuso de gato". En el laudo se da un ejemplo de un abuso común de cat :
cat nombre_archivo | comando arg1 arg2 argn
Esto se puede reescribir utilizando la redirección de stdin en cualquiera de las siguientes formas (la primera es más tradicional):
comando arg1 arg2 argn < nombre_archivo
<nombre de archivo comando arg1 arg2 argn
Además de otros beneficios, los formularios de redirección de entrada permiten que el comando realice un acceso aleatorio al archivo, mientras que los ejemplos de cat no lo hacen. Esto se debe a que el formulario de redirección abre el archivo como descriptor de archivo stdin al que el comando puede acceder completamente, mientras que el formulario cat simplemente proporciona los datos como un flujo de bytes.
Otro caso común en el que cat no es necesario es cuando un comando opera de manera predeterminada en la entrada estándar, pero lee desde un archivo si el nombre del archivo se proporciona como argumento. Este es el caso de muchos comandos comunes; los siguientes ejemplos
archivo cat | patrón grep
archivo de gato | menos
en cambio puede escribirse como
archivo de patrón grep
menos archivo
Un uso interactivo común de cat para un solo archivo es enviar el contenido de un archivo a la salida estándar. Sin embargo, si la salida se canaliza o se redirige, cat no es necesario.
Un cat escrito con UUOC podría ser preferible por razones de legibilidad, ya que leer un flujo canalizado de izquierda a derecha podría ser más fácil de conceptualizar. [14] Además, un uso incorrecto del símbolo de redirección > en lugar de < (a menudo adyacente en los teclados) puede eliminar permanentemente el contenido de un archivo, en otras palabras, aplastarlo , y una forma de evitarlo es usar cat con tuberías. Compare:
comando < in | comando2 > out
<comando en | comando2 > salida
con:
gato en | comando | comando2 > fuera