gato (Unix)

Utilidad de comandos de Unix
gato
Autor(es) original(es)Ken Thompson y
Dennis Ritchie
Desarrollador(es)Laboratorios Bell de AT&T
Lanzamiento inicial3 de noviembre de 1971 ; hace 52 años ( 03-11-1971 )
Sistema operativoUnix , similar a Unix , Plan 9 , Inferno , ReactOS
PlataformaMultiplataforma
TipoDominio
Licenciacoreutils : GPLv3+
ReactOS: GPLv2+

cates 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]

Historia

catfue 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 catincluida 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 tacy , que aportaron diferentes funciones nuevas. [7] [8]bat

Uso

La catutilidad 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 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 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 ( - ), catse lee desde la entrada estándar en ese punto de la secuencia. Si no se especifica ningún archivo, catse lee solo desde la entrada estándar.

La sintaxis del comando es:

gato [opciones] [nombres_de_archivo]

Opciones

Ejemplo de algunas catopciones: [11]

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

Casos de uso

catse puede utilizar para enviar un archivo a un programa que espera texto simple o datos binarios en su flujo de entrada. catno 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 . catno 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, catproporciona un medio eficaz para agregar archivos. Las secuencias de video pueden ser un ejemplo significativo de archivos que catse 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.

Ejemplos

CommandExplicación
cat file1.txt Mostrar el contenido del archivo
cat file1.txt file2.txtConcatenar dos archivos de texto y mostrar el resultado en la terminal
cat file1.txt file2.txt > newcombinedfile.txtConcatenar dos archivos de texto y escribirlos en un nuevo archivo
cat >newfile.txtCree un archivo llamado newfile.txt. Escriba la entrada deseada y presione CTRL+D para finalizar. El texto estará en el archivo newfile.txt.
cat -n file1.txt file2.txt > newnumberedfile.txtAlgunas implementaciones de cat, con la opción -n, también pueden numerar líneas
cat file1.txt > file2.txtCopiar el contenido de file1.txt en file2.txt
cat file1.txt >> file2.txtAñade el contenido de file1.txt a file2.txt
cat file1.txt file2.txt file3.txt | sort > test4Concatenar los archivos, ordenar el conjunto completo de líneas y escribir la salida en un archivo recién creado
cat file1.txt file2.txt | lessEjecute el programa "less" con la concatenación de file1 y file2 como entrada
cat file1.txt | grep exampleResalte las instancias de la palabra "ejemplo" en file1.txt
command | catCancelar el comportamiento especial del "comando" (por ejemplo, paginación) cuando escribe directamente en TTY (cf. UUOC a continuación)

Cultura Unix

Definición de archivo de jerga

La versión 4.4.7 del archivo de jerga incluye lo siguiente como la definición de cat:

  1. Arrojar un archivo entero a la pantalla o a algún otro receptor de salida sin pausa (sin. blast).
  2. 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 ]

Uso inútil del gato

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

Véase también

  • pasta
  • split , un comando que divide un archivo en partes que cat puede luego volver a unir.
  • zcat
  • menos
  • netcat  – Utilidad de redes informáticas

Referencias

  1. ^ "En Unix, ¿qué significan algunos comandos con nombres poco conocidos?". Servicios de Tecnología de la Información de la Universidad . Universidad de Indiana.
  2. ^ Kernighan, Brian W.; Pike, Rob (1984). El entorno de programación UNIX . Addison-Wesley. pág. 15.
  3. ^ ab Pike, Rob ; Kernighan, Brian W. Diseño de programas en el entorno UNIX (PDF) (Informe). pág. 3.
  4. ^ McIlroy, MD (1987). Un lector de Unix para investigación: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  5. ^ cat(1)  –  Manual de comandos de usuario de Linux
  6. ^ "reactos/cat.c at master · reactos/reactos · GitHub". github.com . Consultado el 28 de agosto de 2021 .
  7. ^ "tac(1) - Página del manual de Linux". man7.org .
  8. ^ "tiburón/murciélago". 2 de diciembre de 2021 – vía GitHub.
  9. ^ Manual del programador de UNIX (PDF) . bitsavers.org (Informe). 3 de noviembre de 1971. p. 32. Archivado desde el original (PDF) el 17 de junio de 2006.
  10. ^ GNU Coreutils. "Manual de GNU Coreutils", GNU , obtenido el 1 de marzo de 2017.
  11. ^ Página del manual de OpenBSD y la versión de cat de GNU Core Utiltites
  12. ^ Brian Blackmore (5 de diciembre de 1994). "¿Perl o Sed?". Grupo de noticias : comp.unix.shell . Consultado el 12 de febrero de 2024 .
  13. ^ "Definición de abuso de Merriam Webster" . Consultado el 25 de febrero de 2021 .
  14. ^ Nguyen, Dan. "Laboratorio de periodismo computacional de Stanford". stanford.edu . Consultado el 8 de octubre de 2017 .
  • cat: concatenar e imprimir archivos – Referencia de shell y utilidades, La especificación única de UNIX , versión 4 de The Open Group
  • El estilo UNIX, o cat -v, se considera perjudicial: un artículo de Rob Pike sobre el diseño adecuado de comandos Unix usando 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 sentido inverso –  Referencia de GNU Coreutils
Obtenido de "https://es.wikipedia.org/w/index.php?title=Cat_(Unix)&oldid=1246602299"