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

Cada proceso en Linux se proporciona con tres archivos abiertos (generalmente llamados descriptores de archivos). 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. Por defecto, descriptor de archivo 0 (cero) se refiere a la entrada estándar y, a menudo, se abrevia como Entrada estándar. El descriptor de archivo 1 se refiere a la salida estándar (salida estándar) y el descriptor de archivo 2 se refiere al error estándar (estándar). 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.

Redirigir la salida estándar

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

# Opciones_de_comando_y_argumentos > archivo_de_salida

Ejemplo :

[email protected]:~$ cat /proc/cpuinfo > command.txt

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

[email protected]:~$ more command.txt 
processor         : 0
vendor_id         : GenuineIntel
cpu family        : 6
model             : 37
model name        : Intel(R) Core(TM) i3 CPU       M 370  @ 2.40GHz
stepping          : 5
microcode         : 0x616
cpu MHz           : 0.000
cache size        : 6144 KB
physical id       : 0
siblings          : 2
core id           : 0
cpu cores         : 2
apicid            : 0
initial apicid    : 0
fpu               : yes
fpu_exception     : yes
cpuid level       : 5
wp                : yes

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.

# Command_options_and_arguments < archivo_entrada

Use el operador < para redirigir la entrada de un comando, el ejemplo se muestra a continuación:

[email protected]:~$ wc -l < command.txt
52

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_entrada > archivo_de_salida.

Error estándar de redirección

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 aún 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 estándar

Ejemplo:

[email protected]:~$ lsash /usr/bin 2> commands-error.txt
[email protected]:~$ cat commands-error.txt
No command 'lsash' found, did you mean:
Command 'sash' from package 'sash' (universe)
lsash: command not found

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

[email protected]:~$ ls /usr/bin > command.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.txt
ls: cannot access /usr2222/bin: No such file or directory

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.txt
ls: cannot access /usr2222/bin: No such file or directory

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

Anexando 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_agregar.

Ejemplo:

[email protected]:~$ uptime >> sysload.txt
[email protected]:~$ uptime >> sysload.txt
[email protected]:~$ uptime >> sysload.txt
[email protected]:~$ more sysload.txt
11:49:17 up 1:22, 3 users, load average: 0.28, 0.12, 0.11
11:49:28 up 1:22, 3 users, load average: 0.40, 0.15, 0.12
11:49:36 up 1:23, 3 users, load average: 0.33, 0.14, 0.12

Truncar 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.

[email protected]:~$ ls /usr/bin > command.txt
[email protected]:~$ ls -l command.txt
-rw-rw-r-- 1 linuxtechi linuxtechi 19713 Dec 2 12:18 command.txt
[email protected]:~$ > command.txt
[email protected]:~$ ls -l command.txt
-rw-rw-r-- 1 linuxtechi linuxtechi 0 Dec 2 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 hacerlo 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.

[email protected]:~$ ls /usr/bin > /dev/null

Nota: el archivo /dev/null a menudo se denomina bit bucket.

Lectura recomendada : Cómo usar una contraseña cifrada en Linux Bash Shell Script

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *