No tienes acceso a esta clase

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

Redirecciones: cómo funciona la shell

7/21
Recursos

Aportes 210

Preguntas 65

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

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 “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. ✌️

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.

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.

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

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

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

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!

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”

Diagrama de como funciona la shell

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

Hola ! ! !
Acabo de descubrir algo curioso (o por lo menos para mí), no solo los comandos tienen un stdout sino tambien los programas que hacemos

Aqui un ejemplo con una app.js

console.log("hola mundo")

Redirección en Terminal

node app > appOutput.txt

Resultado de appOutput.txt

hola mundo

![](

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

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 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!

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

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

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.

También se puede hacer como:

cat < whoson

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.

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

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

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:

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

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.

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.

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

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

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

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

Con esta sintaxis hace que dependiendo de la salida, se vaya a un archivo.

 comando 1>> capture.txt  2>> error.txt  
# el uno indica stdout y el dos indica el stderr

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

¿Porqué no explicaron desde el colegio? Es de gran utilidad.

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

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.

reto
redireccionar el standar input

ls > hola.txt
order < hola.txt

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:

Yo intente de esta manera, me funciono jeje "comando < arhivo"
Este es el arhivo de texto que cree para los input

<misa.txt>
y
n
y
n
y

y estos son los comandos que ecribi en consola

< Consola>
mkdir fotos
touch fotos/img1.jpg
touch fotos/img2.jpg
touch fotos/img3.jpg
touch fotos/img4.png
touch fotos/img5.png
ls fotos > misfotos.txt
cat misfotos.txt
rm -i fotos/img* < misa.txt

basicamente borra 3 de las 5 imagenes jeje

uyyy creo que aquí falta algo, no logro entender el tema… por favor incluir algun taller o ejercicio para validar los conceptos.
gracias.

Redirigir input

Estos son mis alias favoritos:

alias ls='exa -al --color=always --group-directories-first -h '
alias c='clear’
alias x='cmatrix -C white’
alias h='history’
alias l=‘exa -lh’

Y así lucen en mi terminal:

el stdin 0 entra al comando, luego el comando tiene un stdout o standard output 1 en caso de que todo esté correcto o un stderr 2, osea un standard error, que se debe a un error en algún proceso.

Una muy interesante herramienta que nos puede servir cuando se hacen pruebas en nuestros proyectos, o también cuando estemos ejecutando cualquier script por consola para tener un log de como están funcionando, o se me ocurre también para saber el estado de un servidor en distintos puntos del día y tener un log del mismo.

Yo he usado esto bastante desarollando en python al usar el comando pip freeze. pip freeze dice que bibliotecas de python estas usando en tu entorno de desarollado y es bastente común hacer pip freeze > requirements.txt para tenerlas en ese arhivo txt y poder instalar de nuevo facilmente esas bibliotecas en otros entornos

AHORA SE QUE ESO SE LLAMA REDIRECCIÓN DE COMANDO 😂

Por lo que entendí, creo que se puede utilizar lo aprendido para automatizar test de pruebas en algún lenguaje de programación. Por ejemplo hacer un archivo de texto que tenga las entradas a colocar en un programa de python

Por ejemplo podemos ordenar una lista de un archivo y crear un nuevo archivo con esa información ordenada

sort < lista_desordenada.txt > lista_ordenada.txt 

Un ejemplo para el uso de < para la re-dirección del stdin puede ser el siguiente:

[email protected]:~$ mail user < texto.txt

El cuerpo del correo a enviar proviene desde un archivo, en vez del teclado.

les recomiendo esta lectura para entender el standarinput ->
ttp://www.linfo.org/standard_input.html es poco estética pero aclara mucho este tema

La redirección es útil para ver un archivo después y poderlo verificar de forma rápida y profunda. Su sintaxis es de la siguiente forma:

ls nombrebusqueda > archivo.txt toa tener en cuenta el standart output 1o 2, 1 salida sin error, 2 salida con error.

Para redirigir el Standard Input se usa el símbolo <.
👉 Un ejemplo es: mail user < archivo.txt
Lo que sucede aquí es que el body del correo a enviar proviene desde un archivo, en vez del teclado. 🙌

Esto es lo que se mencionaba al principio de la clase, normalmente nuestro Standard Input proviene de nuestro teclado pero también se puede redirigir desde archivos de texto. 👀

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…

El STDIN se puede usar de la siguiente manera

mail user < info.txt (en este caso envía el cuerpo del correo, el cual es un input y no proviene del teclado, y lo envía a un archivo txt.

Otra forma que hice. y no sé si haya estado mal, y es el siguiente:

cat <index.html > ejemplo.txt

lo que hice es que tomara como entrada el comando cat para que leyera el contenido de index.html y lo enviara como salida a un archivo .txt llamado ejemplo.

Si ejecuto el comando less para ver el contenido del archivo .txt, me funciona:

deduzco que lo hice bien.

Me agrada saber que en las redirecciones hablas un poco de “spanglish” aun siendo redundante ayuda a familiarizarse con los terminos en ingles; por ejemplo (file descriptors, 0,1 and 2) right on,

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.

Nombre del descriptor (fine descriptor)

  • stdin (0) refiere a “standard input”, puede provenir del teclado o redirigido de un archivo de texto
  • stdout (1) refiere a “standard output”
  • stderr (2) refiere a “standard error”

Redirigiendo

  • Se utiliza con el simbolo >
  • Ejemplo: ls directorio > lista.txt
  • Repetir el proceso sobreescribe el archivo
  • Se puede concatenar si utilizamos >>
  • Se puede redirigir el contenido de un error con su fine descriptor (ej: ls dir-no-existente 2> error.txt)
  • Para más de una redirección se hace por ejemplo así: ls dir-no-sabemos-si-existe > output.txt 2>&1
  • Nos sirve para cuando no sabemos si vamos a tener un output o un error

Muy útil a la hora de crear un archivo de requirements.txt en los proyectos de python:
pip freeze > requirements.txt

En Linux cualquier comando (o cualquier cosa) que se teclea se le conoce como que está utilizando la entrada estándar [STDIN]. La salida o resultado del comando se le conoce como la salida estándar [STDOUT] y es generalmente la terminal. Así mismo si hay errores en la ejecución estos se conocen como la salida de error estándar [STDERR] y es también por default la terminal.

File descriptor en liinux

Un file descriptor es un numerito provisto por el kernel, usualmente no muy alto, que representa algo a lo que se puede mandar bytes, o desde donde se puede leerlos.

Me encanta como lo dice tan feliz.
“Las redirecciones”
😄

Diablos he fallado, toca repasar 😦