Al abrir un archivo se asigna un integral (file descriptor) que se gestiona en una tabla (fdtable) que lleva el kernel.
Al abrir un archivo fopen() existe una capa de abstracción para las llamadas al sistema denominada como stdio interface.
Funciones de C como fprintf(), fscanf(), fclose(), tienen funcionalidad extra que se conoce como stdin, stdout y stderr.
En UNIX se representa esta funcionalidad como file descriptors 0, 1 y 2.
vagrant@server:~$ ls -l /dev/std* lrwxrwxrwx 1 root root 15 Oct 13 19:43 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 Oct 13 19:43 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 Oct 13 19:43 /dev/stdout -> /proc/self/fd/1
Operator | FD | std | |
---|---|---|---|
Output | > >> | 1 or 2 | pantalla |
&> | 1+2 | pantalla | |
2>&1 | Stderr > Stdin | ||
Input | < | 0 | teclado |
$ echo 'goot tay!' > output.txt
$ tr < output.txt t d good day!
$ ( echo "linuxconfig"; ls -l; ) > output.txt
$ echo "An error occurred, bye!" >&2
Es posible hacer que el stdout de un comando sea el stdin de otro comando.
Se puede hacer múltiples veces, haciendo que los comandos sean filtros que "mejoran" la salida (stdout) cada vez.
Es posible desviar este flujo de datos con el comando tee
cmd
cmd
|
stdin
stdin
stdout
stdout
pipe
cmd
cmd
|
stdin
stdin
stdout
stdout
pipe
|
pipe
tee
archivo.txt
stdout
stdin
stdout
xargs permite recibir una lista por stdin y pasarlo como parámetro a un comando.
Es útil para recibir el stream de un pipe y ejecutar comandos como echo, rm, mkdir o touch
find
$ find [dónde empezar a buscar] [qué buscar]
[-opciones] [que hacer con lo encontrado]
wc tree
Variable especial: $?
cmd ; cmd ; cmd
cmd && cmd && cmd
cmd || cmd || cmd
https://creativecommons.org/licenses/by/4.0/deed.es