No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

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 360

Preguntas 93

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Independiente del lenguaje, cualquier programa tiene un flujo de entrada de datos “STANDAR INPUT” = “<”, un flujo de salida “STANDAR OUTPUT” = “>” o “1>” y un modo de capturar errores “STANDAR 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: [“ok”, “warning”, “error”].
.
Es muy importante recordar que el uso del redireccionamento “STANDAR OUTPUT” = “>” hacia un archivo hace que se borre todo su contenido y se guarde el actual “STANDAR OUTPUT”, si quieres que no se borre la información actual del archivo, tendrías que agregar un doble “STANDAR OUTPUT” por ejemplo:
echo “hola, mundo!” > día.txt
echo “buenas tardes, mundo!” > día.txt
echo “buenas 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 “animals” 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 >.

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 “misDirTest1.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 “misDirTest1.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 “redirige 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

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

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”

![](

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

<comando> &> archivo.txt

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 “adduser” 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 “usuarioInfo.txt”

sudo adduser Victor < usuarioInfo.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.

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 “canal” 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.

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

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

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 “ls” 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.
.
.

¿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 >>)

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.

Bueno, lo primero que comprendí de la clase es que los comandos tienen 3 "Partes" que son esenciales. A esas partes se le llama file descriptor y las principales son: 1. ***Stdin:*** Básicamente, se refiere a todas las formas en las que el comando recibe la información. 2. ***Stdout:*** Consiste, de todas aquellas respuestas que un comando otorga cuando todo se ejecuta SIN errores. 3. ***Stderr:*** Se encarga de retener todas aquellas respuestas que no se pudieron completar de manera exitosa. *Y ahora sí llegamos al título de la clase...* **Redirecciones.** Para utilizar las redirecciones utilizaremos los símbolos de "Mayor/Menor que" (><). \>: Inicio por el más fácil de utilizar, este es como decirle a la shell: "Hey, el resultado de esto lo quiero aqui". <: Este es algo raro al principio, pero en resumen, funciona como decirle: "Hey, quiero que tome la información de aquí y me muestres la respuesta". Y si te lo estás preguntando, sí, si se pueden combinar.
Hola. Yo hice un Prompt que copiaba lo de mi archivo a otro archivo TXT→ **cat < archivo\_origen.txt > archivo\_destino.txt.** Además, comparto mis apuntes. ![](https://static.platzi.com/media/user_upload/%F0%9F%91%A9%F0%9F%92%BB%20Curso%20De%20Introduccio%CC%81n%20A%20La%20Terminal%20Y%20Li%CC%81nea%20De%20Comando%20-63-2486397c-4239-416d-ac2a-a27863f6fa00.jpg) ¡Saludos!

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

  • “STANDARD INPUT:” <
  • “STANDARD OUTPUT:” >
  • “STANDARD 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 “Pictures” en un archivo, en este caso “archivo.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 “archivo.txt”(Recomendable).
  • ls nskjadna 2> error.txt :
    Hace que el mensaje de error de la inexistencia de la carpeta, se copie al archivo “error.txt”.
    (CUIDADO PUEDE SOBREESCRIBIR LO QUE ESTABA ANTES)
    #Puedes cambiar el comando “ls” y también el nombre de la carpeta “nskjadna”(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 “error.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 “nskjadna”, pues hace lo mismo de “ls Downloads >> archivo.txt”, si no existe hace el “ls 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

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 “cat” , 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.

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

RETO ![](https://static.platzi.com/media/user_upload/image-45ce8454-e00e-4464-b102-85fdc498bb60.jpg)
Redirigiendo el stdint \- **(<):** redirige el contenido de un archivo como entrada a un comando. Ejemplo: **comando < archivo.txt.** El comando toma los datos de archivo.txt como entrada en lugar de esperar que el usuario lo proporcione manualmente. Ejemplo: **wc -w < archivo.txt.** lo que hace el comando es tomar como entrada el contenido de archivo.txt para pasarlos por el comando **wc -w** y posteriormente mostrar la salida.
les comparto un ejemplo del rediccionamiento de stdin ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/b45c09b4-dccc-40ae-9803-9bc8981d9a4c/eeab97c3-5b33-4dba-8101-15718a1b01cf/Untitled.png)![](https://static.platzi.com/media/user_upload/image-e2f55e0d-8ccc-498e-87ef-7be4747774b4.jpg)

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 “stdin” (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 “cristiano” 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 –A > procesos.txt
    ls ps –A >> 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 ‘‘colocar’’ 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

“Hwllo 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 “Hola bb” 2> prueba.txt

ls “Hola vv” 2>> prueba.txt

ls “Hola vv estoy almacenando los errores sin sobreescribir” 2>> prueba.txt

less prueba.txt

ls: cannot access ‘Hola bb’: No such file or directory
ls: cannot access ‘Hola vv’: No such file or directory
ls: cannot access ‘Hola 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