GNU/Linux >> Tutoriales Linux >  >> Linux

Trabajar con entrada, salida y redirección de errores en Linux

Cada proceso en Linux se proporciona con tres archivos abiertos (normalmente llamados descriptores de archivo). Estos archivos son los archivos estándar de entrada, salida y error. Por defecto:

  • Entrada estándar es el teclado, resumido como un archivo para facilitar la escritura de scripts de shell.
  • Salida estándar es la ventana de shell o el terminal desde el que se ejecuta el script, abstraído como un archivo para facilitar nuevamente la escritura de scripts y programas
  • Error estándar es lo mismo que la salida estándar:la ventana de shell o el terminal desde el que se ejecuta el script.

Un descriptor de archivo es simplemente un número que se refiere a un archivo abierto. De forma predeterminada, el descriptor de archivo 0 (cero) se refiere a la entrada estándar y, a menudo, se abrevia como stdin . El descriptor de archivo 1 se refiere a la salida estándar (stdout ) y el descriptor de archivo 2 se refiere al error estándar (stderr ). Estos números son importantes cuando necesita acceder a un archivo en particular, especialmente cuando desea redirigir estos archivos a otras ubicaciones. Los números de descriptores de archivos aumentan desde cero.

Redireccionamiento de salida estándar

Sintaxis para redirigir la salida de un comando a un archivo.

# Opciones_de_comando_y_argumentos> archivo_de_salida

Ejemplo:

[correo electrónico protegido]:~$ cat /proc/cpuinfo> comando.txt

Podemos ver los datos que habrían ido a la pantalla con más comando:

 [Correo electrónico protegido]:~ $ MÁS COMUNIDAD.TXT Procesador:0vendor_id:GenuineIntelCPU Familia:6Model:37Model Nombre:Intel (R) Core (TM) I3 CPU M 370 @ 2.40GHZStepping:5Microcode:0x616CPU MHZ:0.000 Cache Tamaño :6144 KBID físico   :0hermanos   :2id de núcleo       :0núcleos de cpu     :2apicid         :0initial apicid     :0fpu         :yesfpu_exception   :yescpuid level     :5 wp    sí pre     sí 

El operador> le dice al shell que redirija la salida del comando al archivo dado. Si el archivo existe, elimina el contenido antiguo del archivo y lo reemplaza con la salida del comando.

Redirigir la entrada de un comando

Sintaxis para redirigir la entrada de un comando para que provenga de un archivo.

# Opciones_de_comando_y_argumentos

Use el operador

[correo electrónico protegido]:~$ wc -l <​​comando.txt52

En este ejemplo, la entrada al 'wc El comando proviene del archivo llamado command.txt. El shell envía el contenido del archivo command.txt como entrada estándar para el comando wc.

Nota: También podemos combinar ambas redirecciones con la siguiente sintaxis:

# command_options_and_agruments archivo_de_salida.

Error estándar de redireccionamiento

Además de redirigir la entrada y salida estándar para un script o un comando, también podemos redirigir el error estándar. Aunque el error estándar por defecto va al mismo lugar que la salida estándar:la ventana de shell o terminal. Hay buenas razones por las que stdout y stderr se tratan por separado. La razón principal es que podemos redirigir la salida de un comando o comandos a un archivo, pero no tiene forma de saber si ocurrió un error. Separar stderr de stdout permite que el mensaje de error aparezca en su pantalla mientras la salida todavía va a un archivo.

Sintaxis para redirigir stderr de un comando a un archivo.

# command_options_and_agruments 2> archivo_de_salida.

El 2 en 2> se refiere al descriptor de archivo 2, el número de descriptor para stderr.

Ejemplo:

[email protected]:~$ lsash /usr/bin 2> commands-error.txt[email protected]:~$ cat commands-error.txtNo se encontró el comando 'lsash', quiso decir:comando 'sash' de paquete 'sash' (universo)lsash:comando no encontrado

Redirigir tanto la salida estándar como el error estándar

Usar 2>&1 Sintaxis para redirigir el error estándar a la misma ubicación que la salida estándar.

Ejemplo:1

[correo electrónico protegido]:~$ ls /usr/bin> comando.txt 2>&1

El Comando anterior tiene tres partes.

  • ls /usr/bin es el comando ejecutar
  • > command.txt redirige la salida del comando ls
  • 2>&1 envía la salida del descriptor de archivo 2, stderr, a la misma ubicación que el descriptor de archivo 1, stdout.

Ejemplo:2

[email protected]:~$ ls /usr2222/bin> command.txt 2>&1[email protected]:~$ more command.txtls:no se puede acceder a /usr2222/bin:No existe tal archivo o directorio

Tenga en cuenta que el ejemplo anterior asume que su sistema no tiene nombres de directorio “/usr2222/bin”

Redirigir tanto stderr como stdout a la vez

[email protected]:~$ ls /usr2222/bin &> command.txt[email protected]:~$ more command.txtls:no se puede acceder a /usr2222/bin:No existe tal archivo o directorio

En el comando anterior, ls es el comando, /usr2222/bin es el argumento de 'ls ‘ comando y ‘&> comando.txt ‘ redirigir tanto stdout como stderr a un archivo llamado command.txt.

Adjuntar a archivos

Use el operador '>>' para redirigir la salida de un comando, pero agregue al archivo, si existe. La sintaxis se da a continuación:

# Comando>> archivo_a_anexar.

Ejemplo:

[email protected]:~$ uptime>> sysload.txt[email protected]:~$ uptime>> sysload.txt[email protected]:~$ uptime>> sysload.txt[email protected]:~$ más sysload.txt11:49:17 hasta 1:22, 3 usuarios, promedio de carga:0,28, 0,12, 0,1111:49:28 hasta 1:22, 3 usuarios, promedio de carga:0,40, 0,15, 0,1211:49:36 hasta 1:23, 3 usuarios, promedio de carga:0,33, 0,14, 0,12

Truncamiento de archivos:

Podemos usar una sintaxis abreviada para truncar archivos omitiendo el comando antes del operador>. La sintaxis se da a continuación:

#> nombre_archivo

También podemos usar un formato alternativo con dos puntos:

# :> nombre_archivo

Ambos comandos sin comando crearán el archivo si no existe y lo truncarán a cero bytes si el archivo existe.

[correo electrónico protegido]:~$ ls /usr/bin> comando.txt[correo electrónico protegido]:~$ ls -l comando.txt-rw-rw-r-- 1 linuxtechi linuxtechi 19713 2 de diciembre 12:18 comando .txt[correo electrónico protegido]:~$> command.txt[correo electrónico protegido]:~$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 0 2 de diciembre 12:18 command.txt

Envío rápido de resultados a ninguna parte

Hay algunos escenarios en los que no solo desea redirigir la salida de un comando, sino que desea desechar la salida. Puede hacer esto redirigiendo la salida de un comando al archivo nulo "/dev/null". El archivo nulo consume toda la salida que se le envía, como si /dev/null fuera una estrella de agujero negro.

[correo electrónico protegido]:~$ ls /usr/bin> /dev/null

Nota:el archivo /dev/null a menudo se denomina depósito de bits.

Lectura recomendada :Cómo utilizar una contraseña cifrada en el script de Linux Bash Shell


Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Lea y escriba datos desde cualquier lugar con redirección en la terminal de Linux

  3. Cómo guardar la salida del comando en un archivo en Linux

  4. Cómo capturar sesiones de terminal y salida con el comando de script de Linux

  5. Tuberías y redirección en Linux - ¡Explicado!

Explicado:entrada, salida y redirección de errores en Linux

Shell Scripting Parte 4:entrada, salida y redirección

Uso del comando Linux mv con ejemplos

Conceptos básicos de la línea de comandos de Linux:trabajar con archivos y directorios

Comando de montaje de Linux con ejemplos

Comando gawk de Linux con ejemplos