Los datos se ingresan en la computadora a través de stdin (generalmente el teclado), y la salida resultante va a stdout (normalmente la concha). Estos caminos se llaman arroyos . Sin embargo, es posible alterar estas ubicaciones de entrada y salida, lo que hace que la computadora obtenga información de otro lugar que no sea stdin. o envíe los resultados a otro lugar que no sea stdout . Esta funcionalidad se conoce como redireccionamiento .
En este artículo, aprenderá cinco operadores de redireccionamiento, incluido uno para stderr . Proporcioné ejemplos de cada uno y presenté el material de una manera que puede duplicar en su propio sistema Linux.
Salida normal> operador
El redirector de salida es probablemente el más reconocido de los operadores. La salida estándar (stdout ) suele estar en la ventana de terminal. Por ejemplo, cuando escribe la date
comando, la salida de fecha y hora resultante se muestra en la pantalla.
[damon@localhost ~]$ date
Tue Dec 29 04:07:37 PM MST 2020
[damon@localhost ~]$
Sin embargo, es posible redirigir esta salida desde stdout a otro lugar En este caso, voy a redirigir los resultados a un archivo llamado specifications.txt
. Confirmaré que funcionó usando el cat
comando para ver el contenido del archivo.
[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ cat specifications.txt
Tue Dec 29 04:08:44 PM MST 2020
[damon@localhost ~]$
El problema con el >
redirector es que sobrescribe cualquier dato existente en el archivo. En esta etapa, ahora tiene date
información en specifications.txt
archivo, ¿verdad? Si escribe hostname > specifications.txt
, la salida se enviará al archivo de texto, pero sobrescribirá la información de fecha y hora existente de los pasos anteriores.
[damon@localhost ~]$ hostname > specifications.txt
[damon@localhost ~]$ cat specifications.txt
localhost.localdomain
[damon@localhost ~]$
Es fácil meterse en problemas con el >
redirector al sobrescribir accidentalmente la información existente.
[ Los lectores también disfrutaron:10 comandos básicos de Linux que debe conocer ]
Agregar salida normal>> operador
Agregar >>
El operador agrega la salida al contenido existente en lugar de sobrescribirlo. Esto le permite redirigir la salida de múltiples comandos a un solo archivo. Por ejemplo, podría redirigir la salida de date
usando el >
operador y luego redirigir hostname
y uname -r
al specifications.txt
archivo usando >>
operador.
[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ hostname >> specifications.txt
[damon@localhost ~]$ uname -r >> specifications.txt
[damon@localhost ~]$ cat specifications.txt
Tue Dec 29 04:11:51 PM MST 2020
localhost.localdomain
5.9.16-200.fc33.x86_64
[damon@localhost ~]$
Nota :El >>
redirector incluso funciona en un archivo vacío. Eso significa que posiblemente podrías
ignorar el >
regular redirector para aliviar el potencial de sobrescribir datos, y siempre confíe en el >>
redirector en su lugar. No es un mal hábito adquirirlo.
Entrada normal
El redirector de entrada extrae datos en un flujo de una fuente determinada. Por lo general, los programas reciben su entrada desde el teclado. Sin embargo, los datos se pueden obtener de otra fuente, como un archivo.
Es hora de construir un ejemplo usando el sort
dominio. Primero, cree un archivo de texto llamado mylist.txt
que contiene las siguientes líneas:
cat
dog
horse
cow
Observe que los animales no enumerados en orden alfabético.
¿Qué sucede si necesita enumerarlos en orden? Puede extraer el contenido del archivo en el sort
comando usando el <
operador.
[damon@localhost ~]$ sort < mylist.txt
cat
cow
dog
horse
[damon@localhost ~]$
Incluso podría ser un poco más elegante y redirigir los resultados ordenados a un nuevo archivo:
[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt
cat
cow
dog
horse
[damon@localhost ~]$
Error normal 2> operador
La salida estándar muestra los resultados esperados. Si aparecen errores, se gestionan de forma diferente. Los errores se etiquetan como descriptor de archivo 2 (la salida estándar es el descriptor de archivo 1). Cuando un programa o script no genera los resultados esperados, arroja un error. El error generalmente se envía a stdout , pero se puede redirigir a otro lugar. El stderr el operador es 2>
(para el descriptor de archivo 2).
Aquí hay un ejemplo simple, usando el ping
mal escrito comando:
[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$
Aquí está el mismo comando mal escrito con la salida de error redirigida a /dev/null
:
[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$
El mensaje de error resultante se redirige a /dev/null
en lugar de stdout , por lo que no se muestra ningún resultado o mensaje de error en la pantalla.
Nota :/dev/null
, o el cubo de bits , se utiliza como cubo de basura para la línea de comandos. La salida no deseada se puede redirigir a esta ubicación para simplemente hacerla desaparecer. Por ejemplo, tal vez esté escribiendo un script y desee probar algunas de sus funciones, pero sabe que arrojará errores que no le interesan en esta etapa de desarrollo. Puede ejecutar el script y decirle que redirija los errores a /dev/null
por conveniencia.
Tubería | operador
Ken Hess ya tiene un artículo sólido sobre el uso de la tubería |
operador, así que solo voy a mostrar una demostración muy rápida aquí.
La tubería toma la salida del primer comando y la convierte en la entrada del segundo comando. Es posible que desee ver una lista de todos los directorios y archivos en /etc
directorio. Sabe que va a ser una lista larga y que la mayor parte de la salida se desplazará por la parte superior de la pantalla. El less
El comando dividirá la salida en páginas, y luego puede desplazarse hacia arriba o hacia abajo a través de las páginas para mostrar los resultados. La sintaxis es emitir el ls
comando para listar el contenido de /etc
, y luego use la canalización para enviar esa lista a less
para que se pueda dividir en páginas.
[damon@localhost ~]$ ls /etc | less
El artículo de Ken tiene muchos más ejemplos excelentes. Personalmente, me encuentro usando command | less
y command | grep string
más a menudo.
[ Descargar ahora:una guía para administradores de sistemas sobre secuencias de comandos Bash. ]
Resumir
Los operadores de redirección son muy útiles y espero que este breve resumen le haya proporcionado algunos trucos para manipular la entrada y la salida. La clave es recordar que el >
el operador sobrescribirá los datos existentes.
El redirector de entrada extrae datos en un flujo de una fuente determinada. Por lo general, los programas reciben su entrada desde el teclado. Sin embargo, los datos se pueden obtener de otra fuente, como un archivo.
Es hora de construir un ejemplo usando el sort
dominio. Primero, cree un archivo de texto llamado mylist.txt
que contiene las siguientes líneas:
cat
dog
horse
cow
Observe que los animales no enumerados en orden alfabético.
¿Qué sucede si necesita enumerarlos en orden? Puede extraer el contenido del archivo en el sort
comando usando el <
operador.
[damon@localhost ~]$ sort < mylist.txt
cat
cow
dog
horse
[damon@localhost ~]$
Incluso podría ser un poco más elegante y redirigir los resultados ordenados a un nuevo archivo:
[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt
cat
cow
dog
horse
[damon@localhost ~]$
Error normal 2> operador
La salida estándar muestra los resultados esperados. Si aparecen errores, se gestionan de forma diferente. Los errores se etiquetan como descriptor de archivo 2 (la salida estándar es el descriptor de archivo 1). Cuando un programa o script no genera los resultados esperados, arroja un error. El error generalmente se envía a stdout , pero se puede redirigir a otro lugar. El stderr el operador es 2>
(para el descriptor de archivo 2).
Aquí hay un ejemplo simple, usando el ping
mal escrito comando:
[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$
Aquí está el mismo comando mal escrito con la salida de error redirigida a /dev/null
:
[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$
El mensaje de error resultante se redirige a /dev/null
en lugar de stdout , por lo que no se muestra ningún resultado o mensaje de error en la pantalla.
Nota :/dev/null
, o el cubo de bits , se utiliza como cubo de basura para la línea de comandos. La salida no deseada se puede redirigir a esta ubicación para simplemente hacerla desaparecer. Por ejemplo, tal vez esté escribiendo un script y desee probar algunas de sus funciones, pero sabe que arrojará errores que no le interesan en esta etapa de desarrollo. Puede ejecutar el script y decirle que redirija los errores a /dev/null
por conveniencia.
Tubería | operador
Ken Hess ya tiene un artículo sólido sobre el uso de la tubería |
operador, así que solo voy a mostrar una demostración muy rápida aquí.
La tubería toma la salida del primer comando y la convierte en la entrada del segundo comando. Es posible que desee ver una lista de todos los directorios y archivos en /etc
directorio. Sabe que va a ser una lista larga y que la mayor parte de la salida se desplazará por la parte superior de la pantalla. El less
El comando dividirá la salida en páginas, y luego puede desplazarse hacia arriba o hacia abajo a través de las páginas para mostrar los resultados. La sintaxis es emitir el ls
comando para listar el contenido de /etc
, y luego use la canalización para enviar esa lista a less
para que se pueda dividir en páginas.
[damon@localhost ~]$ ls /etc | less
El artículo de Ken tiene muchos más ejemplos excelentes. Personalmente, me encuentro usando command | less
y command | grep string
más a menudo.
[ Descargar ahora:una guía para administradores de sistemas sobre secuencias de comandos Bash. ]
Resumir
Los operadores de redirección son muy útiles y espero que este breve resumen le haya proporcionado algunos trucos para manipular la entrada y la salida. La clave es recordar que el >
el operador sobrescribirá los datos existentes.