Articulo de referencia

gato (Unix)

[[Dennis Ritchie]]"},"developer":{"wt":"[[AT&T Bell Laboratories]]"},"released":{"wt":"{{Start date and age|1971|11|3}}"},"latest release version":{"wt":""},"latest release date...

cates un comando de shell para escribir el contenido de un archivo o flujo de entrada en la salida estándar . El nombre es una abreviatura de `catenate` , una variante de `concatenate` . [ 1 ] [ 2 ] Originalmente desarrollado para Unix , está disponible en muchos sistemas operativos y shells hoy en día.

Además de combinar archivos, catse usa comúnmente para copiar archivos y, en particular, para copiar un archivo al monitor de la terminal . A menos que se redirija , muestra el contenido del archivo en pantalla. [ 3 ]cat

Historia

catfue parte de las primeras versiones de Unix , por ejemplo, la versión 1. Reemplazó a pr, un comando de PDP-7 y Multics para copiar un solo archivo a la pantalla. [ 4 ] Fue escrito por Ken Thompson y Dennis Ritchie . La implementación de catincluida en GNU coreutils fue escrita por Torbjorn Granlund y Richard Stallman . [ 5 ]

Usar

El catcomando puede utilizarse para diversas necesidades, como la concatenación y la visualización. Un caso de uso para la concatenación consiste en especificar varios archivos de entrada y redirigir la salida a otro archivo para conservar el resultado. Un caso de uso común para la visualización consiste en especificar un único archivo sin redirigir la salida, de modo que el contenido del archivo se muestre en el monitor. [ 6 ]

La Especificación Única de Unix define la operación para catleer archivos en la secuencia dada en sus argumentos, escribiendo su contenido en la salida estándar en la misma secuencia. La especificación exige la compatibilidad con una opción, -upara la salida sin búfer, lo que significa que cada byte se escribe después de haber sido leído. Algunas implementaciones, como GNU Core Utilities , hacen esto por defecto e ignoran la opción. [ 7 ]

Si uno de los nombres de archivo de entrada se especifica con un solo guion ( - ), catse leerá desde la entrada estándar en ese punto de la secuencia. Si no se especifica ningún archivo, catsolo se leerá desde la entrada estándar.

La sintaxis del comando es:

gato [opciones] [ruta...]

Las opciones incluyen: [ 8 ]

  • -b(GNU: --number-nonblank), número de líneas de salida no vacías
  • -eimplica -vpero también muestra caracteres de fin de línea como$(Solo GNU: -Elo mismo, pero sin implicar -v)
  • -n(GNU: --number), numerar todas las líneas de salida
  • -s(GNU: --squeeze-blank), comprimir varias líneas en blanco adyacentes
  • -timplica -v, pero también muestra pestañas como^Yo(GNU: -Tlo mismo, pero sin implicar -v)
  • -uUtilice E/S sin búfer para la salida estándar. POSIX no especifica el comportamiento sin esta opción.
  • -v(GNU: --show-nonprinting), muestra caracteres no imprimibles, excepto tabulaciones y el carácter de fin de línea.

Casos de uso

catSe puede usar para enviar un archivo a un programa que espera texto plano o datos binarios en su flujo de entrada. catNo destruye los bytes que no son de texto al concatenar y generar la salida. Por lo tanto, sus dos principales casos de uso son los archivos de texto y ciertos tipos de archivos binarios compatibles con el formato.

La concatenación de texto se limita a archivos de texto que utilizan la misma codificación heredada, como ASCII . catNo ofrece una forma de concatenar archivos de texto Unicode que tengan una marca de orden de bytes o archivos que utilicen codificaciones de texto diferentes entre sí.

Para 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á erróneamente. Sin embargo, para algunos formatos de contenedores digitales multimedia , el archivo resultante es válido, lo que catproporciona un medio eficaz para añadir archivos. Las secuencias de vídeo son un ejemplo significativo de archivos que catse pueden concatenar sin problemas, como las secuencias de programas MPEG (MPEG-1 y MPEG-2) y los formatos DV (vídeo digital), que son fundamentalmente secuencias simples de paquetes.

Ejemplos

Cultura Unix

Definición de archivo de jerga

El archivo de jerga versión 4.4.7 lo enumera como la definición de cat: [ 9 ]

# Para mostrar un archivo completo en la pantalla o en algún otro destino de salida sin pausa (sinónimo: blast).

  1. Por extensión, descargar grandes cantidades de datos en un objetivo no preparado o sin intención de examinarlos cuidadosamente. Uso: considerado absurdo. Poco común fuera de los sitios Unix. Véase también dd, BLT .

Entre los aficionados a Unix, cat(1)se considera un excelente ejemplo de diseño de interfaz de usuario , porque muestra el contenido de los archivos sin la verbosidad de los espacios o las cabeceras entre ellos, 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 mal diseño de interfaz de usuario, debido a su nombre lamentablemente poco obvio. Se usa 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 catpara la primera operación es tan poco intuitivo como, por ejemplo, el de LISPcdr .

Uso inútil del gato

El uso inútil de cat ( UUOC ) es una expresión común en la jerga de Unix para referirse a las construcciones de la línea de comandos que solo ofrecen una función de conveniencia al usuario. [ 10 ] En informática, la palabra "abuso", en el sentido de "uso inapropiado o excesivo", [ 11 ] 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 cat". Un ejemplo de abuso común de cat es:

cat nombre_archivo | comando arg1 arg2 argn

Esto se puede reescribir utilizando la redirección de stdin en su lugar, en cualquiera de las siguientes formas (la primera es la más tradicional):

comando arg1 arg2 argn < nombre de archivo
< comando de nombre de archivo arg1 arg2 argn

Además de otras ventajas, las formas de redirección de entrada permiten que el comando acceda aleatoriamente al archivo, mientras que los ejemplos de `cat` no lo permiten. Esto se debe a que la forma de redirección abre el archivo como el descriptor de archivo de entrada estándar (`stdin`), al que el comando puede acceder completamente, mientras que la forma de `cat` simplemente proporciona los datos como una secuencia de bytes.

Otro caso común en el que `cat` es innecesario es cuando un comando opera por defecto en la entrada estándar (stdin), pero leerá desde un archivo si se proporciona el nombre del archivo como argumento. Este es el caso de muchos comandos comunes; los siguientes ejemplos

archivo cat | patrón grep
archivo de gato | menos

en cambio se puede escribir como

archivo de patrones grep
menos archivo

Un uso interactivo común de `cat` para un solo archivo es mostrar su contenido en 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 seguir siendo preferible por razones de legibilidad, ya que leer un flujo canalizado de izquierda a derecha podría ser más fácil de conceptualizar. [ 12 ] Además, un uso incorrecto del símbolo de redirección > en lugar de < (a menudo adyacentes en los teclados) puede borrar permanentemente el contenido de un archivo, es decir, sobrescribirlo , y una forma de evitar esto es usar cat con tuberías. Comparar:

comando < entrada | comando2 > salida
< comando de entrada | comando2 > salida

con:

cat in | command | command2 > out

Véase también

  • Less (Unix) – Buscapersonas de terminal 
  • netcat – Utilidad de red informática 
  • paste – Comando de shell para unir archivos horizontalmente 
  • split – programa de utilidad para el procesamiento de texto en UNIX 
  • TIPO (comando de DOS)
  • zcat – Programa de formato y compresión de archivos. Páginas que muestran breves descripciones de destinos de redirección. 

Referencias

  1. "¿Qué significan algunos comandos con nombres poco claros en Unix?" . Servicios de Tecnología de la Información de la Universidad . Universidad de Indiana. Archivado del original el 16 de julio de 2024.
  2. Kernighan, Brian W.; Pike, Rob (1984). El entorno de programación UNIX . Addison-Wesley. pág. 15. 
  3. Pike, Rob ; Kernighan, Brian W. Diseño de programas en el entorno UNIX (PDF) (Informe). pág. 3. Archivado (PDF) del original el 10-12-2024 . Recuperado el 13-08-2025 . 
  4. McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  5. Manual de comandos de usuario de Linuxcat(1)  
  6. Manual del programador de UNIX (PDF) . bitsavers.org (Informe). 3 de noviembre de 1971. pág. 32. Archivado del original (PDF) el 17 de junio de 2006. 
  7. GNU Coreutils. "Manual de GNU Coreutils" Archivado el 9 de marzo de 2023 en Wayback Machine , GNU , Recuperado el 1 de marzo de 2017.
  8. Página del manual de OpenBSD y la versión de cat de las utilidades principales de GNU
  9. "gato" . www.catb.org . Archivado del original el 8 de diciembre de 2024. Consultado el 10 de mayo de 2025 .
  10. Brian Blackmore (5 de diciembre de 1994). "¿Perl o Sed?" . Grupo de noticias : comp.unix.shell . Archivado del original el 12 de diciembre de 2024. Consultado el 12 de febrero de 2024 . 
  11. "Definición de abuso según Merriam-Webster" . Archivado del original el 5 de octubre de 2023. Consultado el 25 de febrero de 2021 .
  12. Nguyen, Dan. "Laboratorio de Periodismo Computacional de Stanford" . stanford.edu. Archivado del original el 25 de marzo de 2023. Consultado el 8 de octubre de 2017 .
  • cat: concatenar e imprimir archivos Referencia de shell y utilidades, Especificación única de UNIX , Versión 5 de The Open Group   
  • Estilo UNIX, o cat -v considerado perjudicial : un artículo de Rob Pike sobre el diseño adecuado de comandos Unix utilizando cat como ejemplo.
  • cat(1) página del manual original en la Primera Edición de Unix .
  • cat(1): concatenar y escribir archivos Referencia de GNU Coreutils   
  • cat(1): concatenar e imprimir archivos Manual de comandos generales de OpenBSD   
  • cat(1) Manual de comandos generales de FreeBSD 
  • cat(1) Manual del programador de Plan 9 , Volumen 1 
  • tac(1): concatenar y escribir archivos en orden inverso Referencia de GNU Coreutils