No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

1D
13H
16M
1S

Redirecciones: c贸mo funciona la shell

8/23
Recursos

Ya aprendiste qu茅 es un comando, Ahora, para entender qu茅 son las redirecciones vamos a aprender c贸mo manejar entradas y salidas a trav茅s de operadores especiales.

Qu茅 son las entradas y salidas de la terminal

En la consola nosotros generamos una entrada cuando escribimos y una salida casi siempre que ejecutamos un comando.

A las entradas t铆picamente se les suele llamar Standard Input y a las salidas Standard Output, adem谩s se les suele abreviar como stdin y stdout respectivamente.

Qu茅 son file descriptors

Los file descriptors son n煤meros que identifican un recurso. Funciona asociando un n煤mero con una acci贸n, archivo o programa, en el caso de la shell tenemos 3 file descriptors:

image.png

El 2 es Standard Error.

C贸mo usar el operador de redirecci贸n (>)

A veces queremos guardar la informaci贸n de una salida porque nos puede interesar almacenar lo que esa salida contiene. Veamos el siguiente ejemplo, si utilizas el comando:

ls -l image.png

Lo que sucede aqu铆 es que le diste un Standard Input (el comando) y obtuviste un Standard Output (la lista de archivos).

Si quieres que el Standard Output no vaya a la consola sino hacia un archivo, entonces puedes usar el operador > seguido del nombre del archivo en el que quieres guardar la salida.

ls -l > output.txt

image.png

C贸mo concatenar (>>)

Suponiendo que ya tienes el archivo output.txt y ahora tambi茅n quieres guardar la informaci贸n de la carpeta de documentos, entonces no puedes volver a ejecutar: ls -l > output.txt Esto lo que har谩 es reescribir el contenido del documento, lo que necesitas es concatenar el contenido del documento con el de la salida, para eso ejecutas: ls -l >> output.txt image.png

Como puedes ver, la salida del comando ls -l se concaten贸 con la salida del comando ls -l ./SecretosDeEstado. Te puedes dar cuenta porque la palabra total se repite dos veces.

Por cierto, esa palabra total es el tama帽o total de la carpeta en kilobytes y dice que la carpeta SecretosDeEstado pesa 0, porque los archivos y carpetas vac铆as no ocupan espacio.

Redirecci贸n de errores (2>|2>&1)

El operador de redirecci贸n por defecto solo redirecciona el file descriptor 1 (es decir, el Standard Output). Pero, 驴qu茅 tal si queremos redirigir un error? Pues tenemos que especificar que queremos el Standar Error, que tiene el file descriptor 2.

Vamos a generar un error ejecutando un comando que saldr谩 mal para redirigirlo a un archivo llamado "error.txt".

image.png

En este caso la opci贸n "帽" no existe, por lo que produce un error.

Tambi茅n podemos especificar que no importa lo que pase si me da un Standar Ouput o un Standar Error, igual tiene que guardar la salida en un archivo. Esto lo hacemos as铆:

ls -l > output.txt 2>&1 La orden 2>&1 significa que debe redirigir el file descriptor 2 y el file descriptor 1.

image.png

En la primera ejecuci贸n del comando, se ejecuta correctamente y guarda el Standar Output, pero en la segunda ejecuci贸n, el comando falla y guarda el Standar Error.

Tabla de operadores

| Operador | Funci贸n | | --- | --- | | > | Redirecciona la salida. Por defecto redirecciona el Standar Output | | >> | Concatena la salida con lo que ya tenga el archivo a donde se est谩 redirigiendo la salida | | 2> | Redirecciona el file descriptor 2 (En este caso Standar Error) | | 2>&1 | Redirecciona el file descriptor 2 y 1 |

Contribuci贸n creada con los aportes de: Miguel Gonzalez.

Aportes 320

Preguntas 92

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Ejercicios, ejemplos y tests para practicar el STANDAR INPUT, STANDAR OUTPUT y STANDAR ERROR:
https://linuxjourney.com/lesson/stdout-standard-out-redirect

![](

Independiente del lenguaje, cualquier programa tiene un flujo de entrada de datos 鈥淪TANDAR INPUT鈥 = 鈥<鈥, un flujo de salida 鈥淪TANDAR OUTPUT鈥 = 鈥>鈥 o 鈥1>鈥 y un modo de capturar errores 鈥淪TANDAR ERROR鈥 = 鈥2>鈥. En la terminal, podemos tener este mismo flujo de datos gracias a: 鈥<鈥 , 鈥>鈥 y 鈥2>鈥.
TIP: esto es muy utilizado en los logs para definir los estados: [鈥渙k鈥, 鈥渨arning鈥, 鈥渆rror鈥漖.
.
Es muy importante recordar que el uso del redireccionamento 鈥淪TANDAR OUTPUT鈥 = 鈥>鈥 hacia un archivo hace que se borre todo su contenido y se guarde el actual 鈥淪TANDAR OUTPUT鈥, si quieres que no se borre la informaci贸n actual del archivo, tendr铆as que agregar un doble 鈥淪TANDAR OUTPUT鈥 por ejemplo:
echo 鈥渉ola, mundo!鈥 > d铆a.txt
echo 鈥渂uenas tardes, mundo!鈥 > d铆a.txt
echo 鈥渂uenas noches, mundo!鈥 >> d铆a.txt
cat d铆a.txt
buenas tardes, mundo!
Buenas noches, mundo!

stdin (0): Entrada est谩ndar.
stdout (1): Salida est谩ndar.
stderr (2): Salida de errores.

Redirige el input de un comando hacia un archivo.

comando < archivo

Redirige la salida de un comando a un archivo. El mismo sobrescribe el contenido del archivo a donde se redirige la salida.

comando > archivo

Concatena la salida de un comando a un archivo. Si no existe el archivo lo crea.

comando >> archivo

Redirige la salida de error de un comando a un archivo.

comando 2> archivo

Redirige la salida de un comando, que se ejecuto satisfactoriamente o un comando que presento errores, a un archivo.

comando > archivo 2>&1

Los comandos son los que el profe dejo en el PDF de la clase anterior, gracias profe Enrique. 鉁岋笍

El standard input es la forma en la que capturamos informaci贸n de un comando, ya sea por medio de pipes, redirecci贸n, teclado, etc. Se identifica con el descriptor de archivo 鈥0鈥. Ejemplo. vemos lo que hay dentro del archivo animals.txt

Ahora ejecutamos el standard input
a ese archivo.

Lo que sucedio fue que tomamos toda la informaci贸n que se encuetra en el archivo 鈥渁nimals鈥 en este caso los nombres de animales escritos de forma aleatoria y al redireccionar el archivo al comando sort, este ordena la lista alfabeticamente.

La redirecci贸n input se puede emplear para pasar datos de entrada a un archivo de Python a ejecutar.

Por ejemplo si tenemos un programa que convierte d贸lares a pesos colombianos:

  1. Archivo de texto con el valor de 100 d贸lares a convertir.

  2. Ahora empleamos el archivo input_dollars.txt como entrada para el programa in_out.py, recibe los 100 d贸lares y continua con el algoritmo.

Redirecciones: C贸mo funciona la shell.

  • Normalmente, cuando pones un comando en la terminal, la salida se muestra ah铆 mismo, pero se puede redirigir la salida a un archivo 馃憖. Si la salida es correcta tiene file descriptor 1, si no, file descriptor 2.
  • La entrada est谩ndar es nuestro teclado que tiene file descriptor 0, pero tambi茅n puede venir de otro lado 馃.
  • Para redirigir algo usamos >. Por ejemplo ls > misarchivos.txt, entonces la salida del comando se guarda en ese archivo de texto. Siempre crea este archivo (si ya existe, lo reescribe).鉁嶐煆
  • Para que se concatene la salida en un archivo preexistente usa "comando" >> "archivo". Esto ambos solo redirigen los stdout.
  • Para redirigir stderr, agregas su file descriptor "comando" 2> "archivo". 馃懡
  • Si quiere redirigir cualquiera de las dos opciones "comando" >> "archivo" 2>&1.
  • Esto nos puede servir para, por ejemplo, guardar los mensajes de error que manda un servidor 馃く.
  • Para redirigir stdin se usa <. Esto te permite tener de entrada de comandos alg煤n archivo.

La siguiente tabla detalla todas las posibles formas de direccionamiento y los s铆mbolos que se utilizan para lograrlo.

hola estuve investigando y me incontre con una pagina que explica como utilizar las redirecciones de forma correcta, en que momentos se deben utilizar y una tabla con los comandos explicados
https://www.linuxtotal.com.mx/index.php?cont=redireccionamiento-en-linux

鉁 Las redirecciones nos permiten trasladar informaci贸n, haciendo uso del s铆mbolo >.

Para los que somos novatos y repetimos el video varias veces y solo entendimos el 15%鈥 este video explica m谩s detalladamente el tema:
https://www.youtube.com/watch?v=wGfD5NyZrcs&ab_channel=JavierPedrero

WOWW eSTOY APRENDIENDO MUCAHS COSAS PARA MI VIDA LABORAL QUE EN LA UNIVERSIDAD NUNCA SE ENSE脩AN. GRACIAS PLATZI

Les dejo mi aporte de uso de standar input para un programa de python.

Explicaci贸n: Tengo un archivo .txt que solo tiene un n煤mero, y en python solicito que el usuario ingrese un valor con un input. Por lo tanto ejecuto mi programa de python y le paso como input el archivo de txt.
Saludos desde Uruguay!

7. Redirecciones: c贸mo funciona la shell

El stdin es 0, el stdout es 1, y el stderror 2

Les comparto los comandos aprendidos en esta clase:

  1. ls dirTest1 > misDirTest1.txt : En vez de listar en pantalla, lo que hace es mandar el resultado en texto al archivo 鈥渕isDirTest1.txt鈥, y si no existe ese archivo lo crea. Si vuelvo a usar el mismo archivo, siempre crea nuevamente el archivo y lo sobreescribe
  2. ls downloads >> misDirTest1.txt : En vez de listar en pantalla, lo que hace es mandar el resultado en texto al archivo 鈥渕isDirTest1.txt鈥, agregando el output al final del archivo, si este ya tiene contenido, es decir concatenando el texto.
  3. ls f2q3fdfsd 2> error.txt : Adem谩s de mostar el error en pantalla, este comando env铆a el texto del error a un archivo, si el archivo no existe lo crea. Si vuelvo a usar el mismo archivo, siempre crea nuevamente el archivo y lo sobreescribe

2>&1 驴 c贸mo ++interpretarlo ?++
El n煤mero 1 representa a la salida est谩ndar stdout y el n煤mero 2 representa a la salida de errores stderr.

utilizar 2>1 鈥渞edirige la salida de errores a un archivo llamado 1鈥. As铆 que gracias al s铆mbolo & podemos distinguir los archivos normales de los descriptores especiales: 1 es un archivo llamado 1 y &1 es el descriptor de la salida est谩ndar (stdout).

Por todo esto, redirigir los errores a la salida normal se indica como 2>&1.

Otra forma de explicarlo ser铆a la siguiente:

El s铆mbolo > redirige la salida est谩ndar (stdout). Por ejemplo a un archivo: echo ... > archivo.txt
Poniendo un n煤mero por delante de > rediriges s贸lo la salida indicada: 1> es la salida est谩ndar y 2> es la salida de errores. Ejemplo: echo ... 2> archivo.txt
Para distinguir los archivos de los descriptores, se pone el s铆mbolo & delante del n煤mero del descriptor. Ejemplo: echo ... 2> &1

en la Shell nosotros tenemos una entrada que es un Standard Input(0) entra a nuestro comando, y ahora solo tiene dos opciones, que nos muestra un standard output(1) que es una salida convencional de un comando pero tambi茅n hay un standard error(2), que es cuando el fichero que buscamos no existe o cualquier error de este tipo.

Las redirecciones sirven por si queremos guardar la salida de un comando, como un ls que nos muestra todos los archivos, pues estos se rediccionaran a un archivo.

ls Pictures > nombreArchvo.txt

Este comando se ejecuta pero en vez de mostrar salida, hace que todo lo que nos muestra se guarda en el archivo que pongamos despu茅s. Si este archivo no existe, se crea autom谩ticamente.

Si nosotros solo ponemos el operador de 鈥>鈥 no concatena, solo crea el archivo y lo sobrescribe. Si queremos concatenar mas texto lo tenemos que hacer con 鈥>>鈥. Si este comando nos muestra un error, la salida no se guardara en ning煤n lado. Pero si queremos guardar el error y redirigirlo, tenemos que usar el numero asignado. 鈥2>鈥. Si queremos combinar un standard output y un standard error, tenemos que poner:

ls carpeta > archivo.txt 2>&1

Donde lo importante para poder abarcar los dos es: 鈥2>&1鈥

Diagrama de como funciona la shell

Streams y redirecciones IO

馃挕 Los streams son flujos de informaci贸n relacionadas con alg煤n instrucci贸n realizada, en proceso o terminada.
.
Definici贸n

*Cuando se interact煤a con la bash, hay tres flujos importantes:

  • stdin o standard input stream, el cual provee comandos de entrada, descritos con 0.
  • stdout o standard output stream, el cual muestra comandos de salida, descritos con 1.
  • stderr o standard error stream, el cual provee salidas de errores de los comandos, descritos con 2.*

.
Redirecciones de salida
Hay dos formas de redireccionar la salida a un archivo
n> Redirecciona la salida para con un archivo.
n>> Redirecciona la salida para con un archivo, concatenando contenido.
.
Considere que se deber谩 tener permisos de escritura en el destino del archivo.
.
Algunas veces, pudiera necesitar el redirigir el stdout y el stderr para con un archivo. Esto es a menudo hecho para automatizar procesos o trabajos en background, generando un log o registro. Por ello, usamos &> &>> donde indicamos el orden u el tipo de salida.

Cabe mencionar que el orden es importante, por ejemplo:

# 1
command 2> &1>output.txt
# 2
command >output.txt 2>&1
  1. stderr es redirigido al actual localizaci贸n del stdout y, luego, stdout es redirigido al output.txt pero esta segunda redirecci贸n, solamente afecta al stdout ignorando al stderr
  2. stderr es redirigido a la actual localizaci贸n del stdout que es el stdout

![](

El est谩ndar input lo podemos usar para cambiar entradas de ciertos comandos, que esperan una entrada a trav茅s del teclado y utilizar informaci贸n que se tiene en ficheros.

Yo utilice cre茅 un usuario nuevo utilizando el comando 鈥渁dduser鈥 y luego la informaci贸n que me solicitaba de entrada (nombre de usuario, contrase帽a, conf. de contrase帽a, etc鈥), se la otorgue de un fichero 鈥渦suarioInfo.txt鈥

sudo adduser Victor < usuarioInfo.txt

Para redirigir ambos, tanto el stdout como el stderr se puede usar una forma reducida:

<comando> &> archivo.txt

Tengo unos 500 archivos en Descargas y con lo ense帽ado en la clase, pude copiar los nombres de cada uno de los archivos en un documento txt. Me llev贸 menos de un minuto y se organizan en orden alfab茅tico鈥 Genial!

Creo que la parte que no queda 100% clara es el uso de 2>&1. En este link lo explican en forma breve y detallada.

Operadores de redirecci贸n

( > ) Redirecciona stdout hac铆a un archivo. Lo crea si no existe, si existe lo sobreescribe.

( >> ) Redirecciona stdout hac铆a un archivo. Lo crea si no existe, si existe concatena la salida al final de este.

( < ) Redirecciona stdin desde un archivo. El contenido de un archivo es la entrada o input del comando.

2> o 2>> Redirecciona stderr hac铆a un archivo. Crea (>) o concatena (>>) la salida de errores a un archivo.

1>&2 Redirecciona stdout hac铆a donde stderr apunte.

2>&1 Redirecciona stderr hac铆a donde stdout apunte.

Para quienes no tengan claro que hace el comando 鈥渃at鈥, sirve para leer datos de archivos y mostrar sus contenidos.
Ej: cat archivo.txt --> El output seria el contenido de archivo.txt

驴Porqu茅 no explicaron desde el colegio? Es de gran utilidad.

Encontre este cuadro y me parece super util para entender mejor:
![](

Lo saque de: Pagina

ls [1]* Para encontrar archivos q comiencen con el numero 1

Me estaba encantando el curso hasta que llegamos a esta clase.

Tambi茅n se puede hacer como:

cat < whoson

Genial clase

.
El comando para redirigir el standar input en general es:

command [arguments] < filename

Puede escribir el contenido de un correo electr贸nico con el teclado, pero si deseas adjuntar un archivo al correo electr贸nico, puede usar el operador de redirecci贸n de entradade la siguiente manera:

ls comando < archivo.txt Redirecciona stdin desde un archivo. El contenido del archivo es la entrada o input del comando

Ejemplos de uso:
ALIMENTAR UN COMANDO DESDE UN ARCHIVO

sort < lista_de_servidores.txt
uniq < lista_ips.txt

REDIRECCIONADO ENTRADA Y SALIDA EN EL MISMO COMANDO

+
sort < lista_desordenada.txt > lista_ordenada.txt    <---- sort recibe (stdin) desde un archivo
                                                           y redirecciona su salida a otro archivo 

EL FILE DESCRIPTOR 1 ES EL DEFAULT
En los ejemplos anteriores no es necesario especificar el file descriptor (FD) ya que el FD 1 es el default. Los siguientes ejemplos son equivalentes:

$> date > fecha.txt
$> date 1> fecha.txt

Para el caso del stderr, FD 2, si es necesario indicarlo siempre. Como veremos en los siguientes ejemplos.

Este link recomiendo unicamente la tabla resumen, ya que las explicaciones me parecieron un tanto confusas.
https://www.linuxtotal.com.mx/index.php?cont=redireccionamiento-en-linux

Representaci贸n de entradas y salidas:

  • stdin (standard input o entrada) 鈫 0
  • stdout (standard output o salida) 鈫 1
  • stderr (standard error) 鈫 2

.
Redirecciones

  • Permiten almacenar el contenido de las entradas o salidas en un archivo de texto
  • < 鈫 redirecciona el input
  • 鈫 redirecciona el output (1 por defecto)

  • Para redireccionar un error usamos en nro 2 antes de redirigir el contenido (2>)
  • Para almacenar el output independientemente de si hay un error o no colocamos 2>&1 al final del comando
  • El uso de un solo s铆mbolo de redirecci贸n (< o >) sobreescribe el archivo al que estamos dirigiendo, para concatenar el conatnido usamos el doble signo (<< o >>)

Les comparto mi apunte de la clase que complement茅 con informaci贸n extra acerca de STDERR:

驴C贸mo funcionan las entradas y salidas de un comando en el shell?

  • Entrada est谩ndar (stdin, 0): Es el medio por el cual el shell recibe datos desde el teclado, archivos o la salida de otros comandos.
    La entrada est谩ndar de un comando es el teclado por defecto. Sin embargo, podemos redirigirlo a un archivo de la siguiente manera:

    $ <comando> < <archivo>
    
  • Salida est谩ndar (stdout, 1): A trav茅s de esta, el shell nos muestra la salida de un comando en la terminal.
    La salida est谩ndar por defecto de un comando es la terminal. Pero podemos redirigirla hacia un archivo u otro comando como sigue:

    • Hacia un archivo
      $ <comando> > <archivo>
      
      En este caso debemos tener cuidado, ya que redirigiendo la salida de esta manera, el archivo siempre ser谩 sobrescrito con la salida del comando. Para concatenar la salida del comando al contenido del archivo lo hacemos de la siguiente manera:
      $ <comando> >> <archivo>
      
    • Hacia otro comando
      $ <comando 1> | <comando 2>
      
  • Error est谩ndar (stderr, 2): Por medio este, el shell nos muestra un error de salida en la terminal.
    La salida de error est谩ndar por defecto de un comando es la terminal. Podemos redirigirla a un archivo con:

    $ <comando> 2> <archivo>
    

    Tambi茅n podemos hacer algo como lo siguiente

    $ <comando> > <archivo> 2>&1
    

En los sistemas basados en Unix (Linux, MacOS), estos tres componentes se representan por medio de archivos. A cada proceso que ejecutamos en el sistema (un comando, por ejemplo) se le asigna su propia triada de archivos para enviar o recibir datos.

驴Por qu茅 se necesita una salida de error est谩ndar?


Si nosotros quisi茅ramos redireccionar la salida de un comando 1 a la entrada de un comando 2, esperar铆amos que la salida del primero sea la adecuada para que el segundo pueda ser ejecutado correctamente.

$ <comando 1> > <comando 2>

Sin embargo, si por alguna raz贸n la ejecuci贸n del comando 1 fallara y este nos retorna un error, no queremos que el error de salida se redireccione a la entrada del comando 2. Para ello, la salida de error est谩ndar nos otorga otro 鈥渃anal鈥 a trav茅s del cual podemos enviar los errores a la salida, de modo que no estar铆amos enviando el error a la salida est谩ndar sino a la salida de error est谩ndar, es decir, no enviamos el error a la entrada est谩ndar del segundo comando sino a la terminal.

Para ahorrar espacio podemos usar el 鈥>鈥 mas el nombre del archivo.

(> archivo.txt)
Con esto borraremos el contenido del archivo. Dicho contenido que consideramos que ya no nos es 煤til claro esta.

Hola muchachos鈥 si depronto alguien tuvo problemas para instalar el WLS para windows鈥 les recomiendo instalar una m谩quina virtual con linux, y practican las clases desde ahi. Con darle 2 de ram y 20Gb de disco funcion贸 de maravilla. saludos desde cali colombia

En Standar Input (<) se utiliza regularmente cuando a alg煤n comando le queremos pasar informaci贸n de un archivo.

Lo que no me gusta es que defrente pasa a ense帽arnos a redireccionar los standard input, std oupt y std error. Sin embargo, no ahonda en que es un std oupt y std error. Se me hace todo muy abstracto y no termino de comprender lo que estamos haciendo dentro de la terminal. Alguien tiene alg煤n link o algo para ahondar en estos conceptos y entender mejor lo que estamos haciendo. Gracias 馃槂

Diablos he fallado, toca repasar 馃槮

Entrada est谩ndar (explicaci贸n)

Si al igual que a mi, no entendiste muy bien esta clase, aca les dejo un link que me ayudo a entenderlo mucho mejor.
https://www.youtube.com/watch?v=oeJwZ1_iPo0

Otra forma de redirigir tanto el Standard output como el Standard Error es de la siguiente manera:

ls asdasdas &> output.txt

Es una forma mas sencilla y facil de recordar

Cosas a tener en cuenta

  • 鈥淪TANDARD INPUT:鈥 <
  • 鈥淪TANDARD OUTPUT:鈥 >
  • 鈥淪TANDARD ERROR:鈥 2>

ls > archivos.txt: nos permite en un documento txt (este creado o no) almacenar es formato texto todos los archivos existentes en la carpeta donde estemos.

ls jajaja 2> archivos.txt: Si no esta creado el archivo jajaja la terminal nos arrojar谩 error y esa linea de error se nos guardar谩 en el documento archivos.txt eliminando lo que ten铆amos antes guardado ah铆.

ls jajaja 2>> archivos.txt: nuevamente, si no est谩 creado un documento llamado jajaja nos arrojar谩 error en la terminal y esa l铆nea de error se agregar谩 en nuestro documento archivos.txt junto con lo que tenemos all铆 escrito鈥

Espero haberme hecho entender鈥

REDIRECCIONES:

  • ls Pictures > archivo.txt :
    Este guarda el nombre de todos los archivos que existen en la carpeta 鈥淧ictures鈥 en un archivo, en este caso 鈥渁rchivo.txt鈥. El cual puede existir y si no, se crea autom谩ticamente. (CUIDADO PUEDE SOBRESCRIBIR LO QUE ESTABA ANTES)
  • ls Downloads >> archivo.txt :
    Lo mismo de antes, pero el doble 鈥>>鈥 hace que se conserve lo que guardamos antes en 鈥渁rchivo.txt鈥(Recomendable).
  • ls nskjadna 2> error.txt :
    Hace que el mensaje de error de la inexistencia de la carpeta, se copie al archivo 鈥渆rror.txt鈥.
    (CUIDADO PUEDE SOBREESCRIBIR LO QUE ESTABA ANTES)
    #Puedes cambiar el comando 鈥渓s鈥 y tambi茅n el nombre de la carpeta 鈥渘skjadna鈥(por uno que existe o no existe)
  • ls nskjadna 2>> error.txt :
    Hace lo mismo que el anterior, pero conserva lo que estaba antes en el archivo 鈥渆rror.txt鈥 (RECOMENDABLE).
  • ls nskjadna >> error.txt 2>&1 :
    Si quieres redirigir cualquiera de las 2 opciones, es decir
    Sea uno correcto (1) o incorrecto (2). Lo que hace es que en el caso de que exista la carpeta 鈥渘skjadna鈥, pues hace lo mismo de 鈥渓s Downloads >> archivo.txt鈥, si no existe hace el 鈥渓s nskjadna 2>> error.txt鈥. Los cu谩les ya revisamos.

Diferencia entre 2> y 2>&
Primero tenemos que entender que si tengo un output usamos:

  • > para las salidas correctas, ya que los errores no nos lo redireccionar谩.
  • 2> para los errores, puesto que las salidas correctas no nos la redireccionar谩
    Esto nos dice que de antemano sabemos si es una salida correcta o un error 驴Pero si no sabemos si es error o salida correcta?
  • 2>&1 nos permite abordar los 2 casos, pues si fue correcta nos dar谩 enviara lo correcto y si fue un erro lo har谩 tambi茅n a diferencia de las otras

Mi aporte para los operadores de redireccionamiento.


Recuperado de:
https://www.linuxtotal.com.mx/index.php?cont=redireccionamiento-en-linux

Hola a todos, fui **recopilando todos los comandos ** y sus descripciones, las compart铆 en Github para que puedas verlas, copiarlas y/o modificarlas
https://github.com/SuKuShaing/ComandosDeGit/blob/main/ComandosTerminalLinux.txt

Las redirecciones permiten a los archivos de comandos manipular para duplicar, abrir, cerrar, o referir a un archivo diferente otro archivo. Las redirecciones son procesadas en el orden en que aparecen, de izquierda a derecha.

Cada redirecci贸n puede ser precedida por un numero file descriptor . Si el _file descriptor es omitido, y el primer caracter de la redirecci贸n es 鈥<鈥 la redirecci贸n refiere al standar input, si el operador es 鈥>鈥 la redirecci贸n refiere al standar output

m谩s informaci贸n https://www.gnu.org/software/bash/manual/bash.html

Cuando ingresamos un comando en la terminal, este produce una salida, normalmente hacia la terminal, mostr谩ndonos el resultado de ese comando. Por ejemplo: Si utilizamos el comando 鈥渓s鈥 el resultado de ese comando sera mostrarnos una lista de los archivos y directorios que tenemos EN LA TERMINAL.

La finalidad de la redirecciones es la de, justamente, redireccionar el resultado o informaci贸n del comando hacia por ejemplo un archivo txt. Para que nos sirve esto? Nos permite guardar la informaci贸n ofrecida por el comando para a posterior, verlo, analizarlo, etc, y asi no usar este meme cada que ejecutemos un comando y limpiemos pantalla.
.
.

MIS APUNTES

Las redirecciones utilizan > para mandar informaci贸n de un lugar a otro, esta informaci贸n puede ser exitosa (stdout) o puede ser el error como tal(stderr). El problema es que al usar > s贸lo sobrescribimos el archivo cada vez que lo vayamos a utilizar, en caso de querer meterlo todo dentro del mismo hay que concatenar >>

ls stdin 2 > error.txt

Redirecciones

Podemos manejar las entradas y salidas de los comandos y procesos para encadenar unas con otras.

stdin (standard input) [0]: comando que ingresa a la shell
stdout (standard output) [1]: comando exitoso de salida
stderr (standard error) [2]: comando de error de la salida

[file descriptor]: es un identificador unico para recursos de entrada/salida.

>  //redirige la salida de un comando como entrada para otro, sobreescribiendo el anterior si existe
ls Pictures > listaArchivos.txt

>>  //redirige la salida de un comando como entrada para otro, concatenando el anterior si existe
ls Pictures >> listaArchivos.txt

2> /redirige una salida de error como entrada, por ejemplo si queremos loguear un error.

ls asdasdasd 2> error.txt

Podemos utilizar ambas redirecciones, por ejemplo si queremos loguear un error en caso de que ocurra.

ls Pictures > output.txt 2> error.txt

Lo que puedo agregar para el std in es que al ejecutar el siguiente c贸digo:

command < NameFile
  • Ejemplo:
echo holaMundo > file.txt
cat < file.txt 

El file.txt servir谩 como un argumento para el comando 鈥渃at鈥 , por ello, como la funci贸n del 鈥cat鈥 es leer, la salida que ver谩s ser谩 la lectura del archivo llamado file.txt.

  • Resultado a la salida:
holaMundo
  • NOTA:
    Por ello, es recomendado usarlo cuando hay comandos que se est谩n relacionando con FICHEROS.

Reto.
stdin, re dirigimos con < .
Ejemplo:

Tenemos un archivo con una lista de nombres de frutas llamado:
lista.txt

Manzana
Pi帽a
Uva
Sand铆a

la ordenamos con el comando sort y guardamos en el archivo: lista_ordenada.txt

$sort < lista.txt > lista_ordenada.txt

visualizamos el archivo lista_ordenada.txt y nos devuelve la lista ordenada:


cat lista_ordenada.txt

Manzana
Pi帽a
Sand铆a
Uva

La verdad no entend铆 nada nada nada nada nada nada nada de este video. lo he visto varias veces pero es como si se hablara en koreano. Espero poder aclararlo con practica.

Reto completado, est谩ndar input, primera forma de usarlo:

<:~$ explorer.exe .
:~$ cat Hi.txt
Ryaa
Merlijaj
Mirai
Moshie
Ember
Annie
Anastasia
Kyomi
:~$ sort < Hi.txt
Anastasia
Annie
Ember
Kyomi
Merlijaj
Mirai
Moshie
Ryaa
:~$
> 

鈥 Para redirigir un standard output se utiliza el operador > y el nombre del archivo que se crear谩 y almacenar谩 el output del comando
鈥 Si quiero concatenar varios outputs en el mismo archivo debo usar >> ya que si s贸lo uso > lo sobrescribir谩
鈥 El identificador de standard error es 2, para que el archivo almacene el standard error hay que poner 2> (por defecto es 1>)
鈥 Para redirigir al archivo el resultado sin importar si es un error(2) o un output correcto(1) hay que usar 2>&1

Sobre el reto de stdin
wc -l < principios_de_usabilidad.md
dando como salida 21

Con el operador 鈥<鈥 lo que se busca en pasar un archivo o entrada al comando descrito en la parte derecha del operador.
El comando wc - l, imprime el n煤mero de l铆neas dentro del archivo.

Saludos

Entiendo lo que hace el 煤ltimo ejemplo, pero no encuentro su finalidad鈥

Jejejeje, hasta el momento en mi terminal en Windows solo he podido ejecutar el cd . y cd 鈥 De resto nada me ha servido. Tocar谩 instalar maquina con Linux para poder aprender

Esto lo usar谩n en Python cuando usen entornos virtuales.

Creo que la manera correcta de explicar 2>&1 es que se redirige el descriptor de error estandar hacia el descriptor de salida estandar, no que redirecciona ambos. Por eso si se requiere mandar ambos a un archivo se usa:
algun_comando > archivo.txt 2>$1

Esto es, la salida estandar se redirige hacia archivo.txt y el error estandar se redirige hacia la salida estandar (que ya est谩 redirigida al archivo).

Saludos

algunas cosas que hice el en curso de programacion basica

entonces
input = <
output = >

Muy bueno, pero a la vez que peligroso usar el << porque te terminas comiendo un <, reescribiste tu archivo ja.

Standard input - commando - standard output or standard error

esto me recordo mucho al log::info teh laravel

Reto: Redirigir stdin
Para el ejemplo cree un archivo que contiene nombres de manera desordenada. Luego utilizo sort y redirecciono la salida a otro archivo, donde se guardan ordenados alfab茅ticamente.

Podemos hacer un 鈥渟tdin鈥 (standar input) a trav茅s de un comando o archivo y est茅 nos puede regresar ya sea un standar output o un error. Para redirigir algo usamos el s铆mbolo 鈥>鈥 y luego ponemos el nombre del archivo al que lo queremos mandar. Sin embargo esto va a sobreescribir los cambios, si queremos que se concatenen tenemos que usar 鈥>>鈥.

  • standar input tiene el valor de 0
  • standar output tiene el valor de 1
  • standar error tiene el valor de 2

Para redigir un error, podemos hacer por ejemplo: ls asfgsah 2>error.txt

Para redigir tanto un error como un ouput, debemos hacer, por ejemplo: ls -l> output.txt 2>&1

Nota:

En esta pagina viene mucha informacion de las redirecciones

https://www.informit.com/articles/article.aspx?p=2854374&seqNum=5

Les comparto mis notas de esta clase

Creo que para adentrarse un poco mas en lo que se esta explicando aqui ya que no me parece que fuera muy claro el contenido les dejo este video que deja mas claro lo que son las redirecciones https://youtu.be/V3_71elmThQ

Redirecciones

Cuando escribimos un comando existente en la terminal, en nuestra pantalla se imprime la ejecuci贸n de este. Y lo que nos arroja es a lo que llamamos un output.

Pero, 驴qu茅 sucede cuando no queremos que la ejecuci贸n de un comando se imprima en nuestra pantalla (terminal), sino en un nuevo fichero o en uno existente?

Bueno, lo que tendr铆amos que hacer es redireccionarlo de esta manera: $ comando > fichero.txt. Esto en 鈥渃ristiano鈥 lo podemos entender as铆: lo que me ibas a imrpimir en la terminal con este comando quiero que lo hagas en el fichero. Adem谩s, si queremos concatenar este comando con alguno otro, lo que tendr铆amos que hacer es colocar >> (redirecci贸n doble) . Y se ver铆a de esta manera: $ new_comando >> fichero.txt.

Pero, 驴por qu茅 no lo podemos concatenar con > (redirecci贸n simple)?
Porque si lo hacemos as铆, lo que sucede es que el nuevo comando sobrescribe al primero que pusimos, es decir, lo borra por completo.
S茅 que puede ser muy confuso de entender esto al inicio. Por ello planteo un ejemplo muy did谩ctico:

"""Lo que el comando echo hace es imprimir en la terminal 
el mensaje que queramos, que en esta caso es la palabra hola """

$ echo hola 

"""Pero, resulta que nosotros no queremos que aparezca en nuestra pantalla, 
sino redireccionarlo a un fichero llamado saludo.txt .
Por ello, debemos escribir lo siguiente:"""

$ echo hola > saludo.txt

"""Y si nosotros revisamos el contenido de saludo.txt
lo que nos saldr谩 es la palabra hola. 
(El comando cat nos ayuda ver el contenido de un archivo)"""

$ cat saludo.txt
hola

"""Y si ahora queremos a帽adir el nombre de una persona, lo
que tenemos que haceres lo siguiente: """

$ echo Carlos >> saludo.txt

"""Y si revisamos el contenido"""

$ cat saludo.txt
hola
Carlos

``
Espero que haya sido 煤til.

  • Entrada (Perif茅ricos, Archivos) <(redirecci贸n entrada).
  • Salida (Monitor, Archivo) >(redirecci贸n salida).
  • >> Para concatenar las salidas.
  • stdin:0, stdout:1, stderr:2
  • comand > output 2>&1redirecciona el salida a un archivo output, en caso de error este sera redireccionado al mismo archivo.

-La redirecci贸n consiste en cambiar la forma de ver el resultado de un comando.
-Por defecto siempre la salida o el resultado lo vemos por la pantalla.
-Con la redirecci贸n podemos guardar ese resultado en un archivo texto, para fines posteriores, uno de ellos podr铆a ser usar este archivo texto como entrada de otro comando.
Esto se logra con la ayuda del s铆mbolo mayor que >
-Si usamos > una sola vez creamos el archivo texto, en caso que no exista,

  • Si el archivo texto existe los sobrescribe鈥 (Borra el existente y crea uno nuevo)
    -Si colocamos dos veces el s铆mbolo >> agregara el resultado al final de archivo texto.
    Ejemplo :(listar todos los procesos activos y guarda el resultado en procesos.txt)
    ls ps 鈥揂 > procesos.txt
    ls ps 鈥揂 >> procesos.txt
    Con esto estar铆amos redireccionando la salida de un comando (stdout)

-Para redireccionar la entrada de un comando, (generalmente es por teclado) podemos usar un archivo
tenemos que usar el s铆mbolo contrario 贸sea menor que <
cat procesos.txt

Aqu铆 les dejo uno de los enlaces que me ayudo a terminar de entender la redirecci贸n en la terminal.
https://atareao.es/tutorial/terminal/redirigir-entrada-y-salida-en-linux/

Me fallo desde que estoy en el windows terminal y no tengo im谩genes, hubiera sido genial para los que utilizamos windows como 鈥樷榗olocar鈥欌 im谩genes y desde ah铆 iniciar, esta clase no la pude hacer, trate de mover carpetas o con archivos pero no me salio, igual con la practica si lo necesito lo podre aprender creo, vamos con fe

Hola amigos, tengo la duda de por que no imprime en terminal el error cuando usamos el comando que @codevars us贸.
2>&1
Suponiendo que deberia de mostrar en terminal el resultado y a demas guardarlo en un archivo (por eso el orden 2>&1)

A lo cual intent茅 el siguiente comando y me funcion贸 tanto para guardar el stdout y el stderr sin necesidad de priorizar el orden de ejecucion ya que parece un poco confuso por que el profe no lo demostro en el video.
&>

Creo que es la manera mas facil de capturar la salida de un comando cuando no sabemos sin sera un stderr o un stdout.

Comando Funci贸n
> redireccionar ciertos archivos seleccionados a un archivo a conveniencia (siempre crea un nuevo archivo y lo sobreeescribe
>> adiciona y redirecciona al mismo archivo si ya se ha creado uno antes

Te explicaste muy mal con el 煤ltimo ejemplo

Pueden agregar texto nomal y comun y corriente como

鈥淗wllo World鈥 de la siguiente forma:

echo "Hello World" >> hola_mundo.txt

o tambien

echo " This text will appear with Hello world" >> hola_mundo.txt

A mi me sive eso para agregar variables de entorno en instancias o servidores y si no quiero usar vim o nano. Copio y pego y solo se las paso a un archivo .env y listo.

Para redirigir:

> 

Para concatenar:

>>

Para captar error o salida:

2>&1

No me quedaba claro acerca de redirigir el STANDAR INPUT, porque pens茅 que serv铆a para ejecutar c贸digo, por ejemplo:

Tengo un archivo ruta.txt que contiene la ruta 鈥渵/repositories/鈥, y ejecutando:

cd < ruta.txt

esperaba que me llevara al directorio que se encuentra en el archivo, pero no.

Leyendo los aportes, me di cuenta que estaba mal, en realidad, un uso que se le puede dar al redirigir un STANDAR INPUT es el de pasar datos. Por ejemplo tengo un archivo languages.txt que contiene:

css
html
javascript
java
angular
c#
c++
python

y al ejecutar:

sort < languages.txt

lo que obtengo es una lista ordenada de los elementos:

angular
c#
c++
css
html
java
javascript
python

Resumen de la clase

Clase 1 鈥 Redirecciones: c贸mo funciona la Shell

驴Qu茅 necesitamos entender para poder manejar las redirecciones?

  • Debemos aprender a manipular las entradas y salidas de los comandos, por medio de unos operadores especiales.

驴Cu谩les son las partes que conforman el ciclo de ejecuci贸n de un comando?

  • Standart input - stdin
  • Comando
  • Standart output - stdout
  • Standart error - stderr

驴Qu茅 es standart input?

  • Representa las entradas realizadas por medio del teclado.

驴Podemos redirigir el standart input a archivos de texto?

  • Si.

驴C贸mo describe la terminal al standart input?

  • Con un n煤mero 0

驴C贸mo conocemos a los n煤meros con los que identifica la terminal al Est谩ndar input, output y error?

  • File Descriptor.

驴En d贸nde entra el Standart input en la terminal?

  • Al comando.

驴Cu谩les son las posibilidades que podemos obtener al ejecutar un comando?

  • Standart output.
  • Standart error.

驴Qu茅 es standart output?

  • Una salida que obtenemos al ejecutar un comando de manera correcta.

驴Qu茅 es Standart error?

  • Un error que obtenemos al ejecutar un comando de manera err贸nea.

驴Con que n煤meros interpreta la Shell a standart output y el standart error?

  • Output 鈥 1
  • Error 鈥 2

驴C贸mo puedo guardar el contenido de un directorio en un archivo de texto?

  • Podemos usar el comando ls nombre-directorio > nombre-archivo:
    • ls ejercicios > contenido.txt

驴Qu茅 pasa cuando redireccionamos el contenido de un directorio a un archivo que no existe?

  • Autom谩ticamente el archivo se crear谩.

驴Cu谩ndo enviamos el contenido de un directorio a un archivo de texto plano a qu茅 nos referimos?

  • Lo que realmente enviamos no son los archivos, sino enviamos los nombres de los archivos que est谩n contenidos en el directorio.

驴Cu谩ndo enviamos nuevo contenido de un directorio a un archivo de texto qu茅 le pasa al contenido previamente almacenado en dicho archivo?

  • Este se sobrescribe, eliminando el contenido viejo y 煤nicamente guardando el nuevo.

驴C贸mo podemos concatenar contenido viejo de un directorio con uno nuevo al enviarlo a un archivo de texto?

  • Podemos hacerlo con el comando ls directorio-nuevo >> nombre-archivo:
    • ls download >> contenido.txt

驴C贸mo le indicamos a la terminal que lo que queremos redireccionar es el est谩ndar output?

  • Con el operador >

驴C贸mo le indicamos a la terminal que lo que queremos redireccionar es el est谩ndar error?

  • Con el operador 2>

驴C贸mo podemos redirigir el Standart output y el Est谩ndar error a un archivo de texto al mismo tiempo?

  • Lo podemos hacer con el comando:
    • ls comando > nombre-archivo 2>&1

驴Por qu茅 son 煤tiles las redirecciones?

  • Porque cuando estamos ejecutando un Script (c贸digo) y queremos tener un registro de todo el proceso es muy bueno reenviar esto a un archivo ya que de esta manera tendremos de una manera tangible los posibles errores que aparezcan en su ejecuci贸n.

A la primera entrada, se le conoce como Standard Input o stdin 0, la que proviene de nuestro teclado (normalmente), pero tambi茅n se puede redireccionar.

Para encontrar un archivo que empiece con un numero:
ls [[:digit:]]*

Cuando quieres redireccionar un stderr usas: comando 2> prueba.txt
Para redireccionar un error stderr sin sobrescribir usa:
comando 2>> prueba.txt

DE ESTA FORMA NO SOBRESCRIBES UN ARCHIVO YA EXISTENTE. SOLO A脩ADES INFORMACION AL MISMO.

EJEMPLO:

ls 鈥淗ola bb鈥 2> prueba.txt

ls 鈥淗ola vv鈥 2>> prueba.txt

ls 鈥淗ola vv estoy almacenando los errores sin sobreescribir鈥 2>> prueba.txt

less prueba.txt

ls: cannot access 鈥楬ola bb鈥: No such file or directory
ls: cannot access 鈥楬ola vv鈥: No such file or directory
ls: cannot access 鈥楬ola vv estoy almacenando los errores sin sobreescribir鈥: No such file or directory
prueba.txt (END)

EXPLICACI脫N DE STANDAR INPUT

Intente redirigir el comando tree

tree -L 2 > tree.txt

STANDAR INPUT
Consiste en los datos que son enviados al programa.
Su s铆mbolo es <

explicaci贸n de los file descriptor que se utilizan en la shell

No estuvo muy claro al final pero el 煤ltimo que explic贸 鈥2>&1鈥 entend铆 que sirve para que guarde ya sea el error o el stdout en cualquiera que sea el caso.