Está en la página 1de 15

Guía de práctica 2: Tuberías

Carlos Geovanny Escobar Portillo

Entrada y salida estándar

Cuando ejecutamos comandos en la shell de Linux, normalmente los introducimos con


nuestro teclado y recibimos el resultado a través de nuestra pantalla, sin embargo, es posible
modificar esto y hacer que tanto la entrada como la salida reciban y emitan la información por
otra fuente. Este proceso se denomina redireccionamiento, pero antes de empezar a hablar
sobre esto, es mejor explicar unos conceptos básicos para entender bien cómo funciona la
entrada y salida estándar en la shell de Linux.

Por defecto, toda instrucción en Linux tiene tres canales básicos por donde se transmite la
información, a estos canales se les denomina como los canales de entrada, de salida y de
error.

El comando echo de Unix imprime por la salida estándar lo que la entrada estándar le entrega.

El comando wc sirve simplemente para contar líneas, palabras y caracteres que contiene un
archivo.

La entrada estándar

La Entrada Estándar, en inglés standard input (stdin) es el canal por el cual un usuario le
indica a los programas la información que estos deben procesar. Por defecto, como ya he
mencionado, es el teclado.

Cuando ejecutamos el comando echo le pasamos un argumento, este argumento tiene que
proporcionar la entrada estándar, que por defecto es el teclado. En el siguiente ejemplo este
argumento es ovtoaster.

echo ovtoaster

La salida estándar

La Salida Estándar, en inglés standard output (stdout) es el método por el cual el programa
transmite la información al usuario. Por defecto, la salida estándar es la pantalla.

En el caso de utilizar el comando echo anterior, el resultado obtenido seria :

ovtoaster

Canal de error estándar


El tercer y último canal es el de error en inglés standard error output (stderr), que sirve para
emitir los posibles errores que se den al ejecutar una instrucción. Por defecto se emiten
mediante la pantalla.

Redireccionar la salida

Existen dos métodos para redireccionar la salida a un fichero:

Mediante > se redirecciona el resultado de una instrucción a un fichero. Es necesario tener


derechos de escritura, si el archivo no existe, éste es creado, si ya existe, los contenidos
existentes generalmente se pierden sin previo aviso. Ejemplo :

echo ovtoaster > prueba1.txt

En esta instrucción el resultado de echo ovtoaster, que es ovtoaster sera almacenado en el


fichero prueba1.txt ( en la posición actual en el sistema de ficheros )

Mediante >> se añade el resultado de una instrucción a un fichero, si no existe lo crea y si


existe, lo añade al final.

Ejemplo :

echo ovtoaster >> prueba1.txt

Con esta instrucción guardamos el resultado de echo ovtoaster en el final del fichero
prueba1.txt.

Tuberías o pipelines

Las tuberías (en inglés pipelines) son una herramienta con la que vamos a poder redireccionar
la salida de un comando a la entrada de otro, de forma que creamos una tubería de
instrucciones en la que cada una va pasando el resultado a la siguiente para terminar dando
el último resultado por la salida estándar. Lo mejor para entenderlo es utilizar un ejemplo :

ls -l | sort -k5

Con este comando estamos tomando el resultado de ls -l ( listado de ficheros de la ubicación


actual en formato largo ) y lo pasamos al comando sort -k5 que va a ordenador la información
en función de la 5 tabla ( tamaño ) y después se va a imprimir en la salida estándar, que en
este caso es la pantalla.
DESARROLLO GUIA 2

1) Ejecutamos el comando $ grep “geovanny”.

El prompt queda como suspendido porque el comando grep no revido la entrada para el filtro
de texto “geovanny”. Al no darle una entrada de datos toma por defecto la entrada del teclado
por eso al dar enter devuelve la misma línea, que se escribió con el teclado.

2) El comando grep es la salida estándar de la shell por eso cuando escribimos geovanny,
envía toda la linea donde encontró la coincidencia.

3) En los ejercicios anteriores mostraban lo que son las entradas estándar(stdin) y las salidas
estándar (stdout). Ahora probaremos hacer una carpeta con el nombre prohibido y le
daremos permisos chmod 000, cuando queramos entrar o listar su contenido nos devolvera
un error, esta salida es llamada salida de error (stderr).

5) Redirigimos la salida de errores a un archivo resultado, el archivo es creado pero no se


escribe el resultado.

Cambiamos el comando por ls -l prohibido 2> resultado.


Al especificar el tipo de salida agregando el número en este caso 2(stderr), escribe el
archivo con el contenido de la salida.

6) El comando cat es usado para concatenar ficheros, de esta forma cat archivo1, archivo2,
archivo3. También puede usarse como una forma de escribir archivos, cuando escribamos
cat > ciudades al no tener una entrada usará, la entrada del teclado para ir concatenando lo
que escribamos en solo archivo ciudad.

7) Comprobamos que en el fichero ciudades estén entradas que escribimos con el teclado.
Escribimos less ciudades:

8) ejecutaremos el siguiente comando cat > ciudades.

Como podemos ver el fichero fue sobreescribido con la nueva entrada que le escribimos
con el teclado.

9) echo es otro método de mandar mensajes a la terminal o un fichero. Ejecutamos el


comando echo “El usuario activo es $USER”.
Como vemos echo mandó el mensaje que escribimos a la terminal y sustituyó $USER por
el usuario activo. Podemos mandar el mensaje a un archivo escribiendo el siguiente
comando: echo Soyapango>>ciudades.

La orden mando a agregar Soyapango al final del archivo.

10) Para ordenar el contenido de un fichero de manera alfabética usamos la orden sort.

11) Si se quiere ordenar de forma descendente agregamos una -r después de la orden sort.

12) Pasamos a un archivo el resultado que nos tira la orden sort. A la vez comprobamos si
el contenido es el mismo que el archivo original.

Los archivos difieren por en nuevo archivo el contenido se escribe en orden alfabético y en
el original esta como fue ingresado el contenido.
13) Concatenamos el contenido del /etc/passwd y /ect/group usando la orden cat.

Usaremos el comando grep para filtrar las líneas donde aparece el usuario geovanny

La primera línea nos muestra la configuración del usuario y al grupo que pertenece, y la
segunda la línea identifica al grupo del usuario geovanny.

14) Usaremos grep para filtrar el contenido del fichero /etc/protocols para que muestre las
líneas que contenga la palabra ip.

Primero vemos su contenido con less:

Ejecutamos el comando grep “ip” /etc/protocols.


15) Buscaremos nuestro nombre de usuario (geovanny) en todos los ficheros de la carpeta
etc/. Usaremos grep para que busque la cadena de geovanny dentro todos los archivos:

El resultado son mensajes de error porque no tenemos los permisos de root para abrir estos
archivos.

16) Del ejercicio anterior vamos a crear dos ficheros donde guardaremos en uno la salida
estándar y en otro la salida de errores. Usaremos el número que identifica tipo salida antes
del >, con esto le decimos al shell que tipo de salida queremos.

Para la salida estándar ejecutamos grep “geovanny” /etc/* 2> apariciones_alumnos


Para la salida de errores ejecutamos grep “geovanny” /etc/* 1> apariciones_alumnos

17) Vamos a usar el comando man wc para ver la documentación de la orden wc que se
utiliza como contador de líneas en ficheros.

Comprobamos la cantidad de líneas que tiene el fichero usuario_y_grupos:

Comprobamos la cantidad de caracteres que tiene el fichero usuario_y_grupos:

Comprobamos la cantidad de palabras que tiene el fichero usuario_y_grupos:


18) Vamos usar el caracter “|” para poder hacer que la salidad de un comando sea la
entrada de otro. Probaremos el siguiente comando cat /etc/passwd /etc/group | grep
“geovanny”

Como podemos ver nos devuelve las líneas donde aparece la cadena geovanny como en
los ejercicios anteriores. Salaida de cat /etc/passwd /etc/group se convierte en la entrada
de grep “geovanny”.

19) Ahora haremos el siguiente ejercicio vamos a concatenar el contenido de los archivos
/etc/passwod y /etc/group, filtraremos las lineas que contenga geovanny y contaremos las
líneas que nos devuelva.

El comando a usar es: cat /etc/paswwod /etc/group | grep “geovanny” | wc -l.

Nos devuelve 2 por qué es la cantidad de líneas que resulta después de filtra los archivos
concatenados y no utilizar la salida como entrada de otro comando, la shell los envía a la
salida estándar.

20)Haremos otro ejercicio para probar secuencia de comandos, vamos a volver a


concatenar los archivos anteriores y filtraremos las líneas que contenga root, lo
mostraremos en pantalla ordenado de forma descendiente.

El comando a usar es: cat /etc/paswwod /etc/group | grep “root” | sort -r.

21)Ahora ejecutaremos el comando anterior y mandaremos el resultado a un fichero


informacion_root. Solo agregaremos al final 1> informacion_root.

22)Crearemos un comando para listar el contenido de la carpeta /usr/bin y que filtre las
líneas que contenga “mk”
23)Haremos el mismo ejercicio pero con el directorio /sbin

24) Ejecutaremos dos mandatos para que muestren el contenido de las carpeta /sbin y
/usr/bin usaremos el comando ls para listar el contenido de cada carpeta y usaremos “;”
para separar los mandatos y que se ejecuten de forma secuencial.
25) Si queremos que los comandos se ejecuten al mismo tiempo reemplazamos el “;” por
“&”.

26) En este mandato en una sola línea crearemos un directorio de nombre datos/ dentro un
archivo nombre persona y dentro nuestros datos personales.
Escribimos el comando:

y vemos el resultado:

27) Usaremos el comando history que nos devuelve todos los comando que sean escrito y
los filtraremos las líneas donde aparece wc usando el comando grep.

No devuelve 9. ahora verificaremos si esta correcto:

Como vemos sale una linea mas porque está contado el ejecución anterior.

28) Vamos a listar el contenido de la carpeta usuario geovanny (ls) y filtraremos (grep) las
que tenga permisos rwx (lectura-escritura-ejecución).

29) Crearemos un archivo llamado colores usando el comando cat y le escribiremos una
lista de ellos, después los ordenaremos usando sort y mostraremos el resultado en
pantalla.
30) Usaremos el comando wget para capturar la página web de la UFG y guardarla en el
directorio donde estamos ubicado.

Como podemos ver el comando no bajo el sitio completo, si no que bajo solo el archivo
index.html.

31) Pasaremos los procesos activos que pertenezcan al usuario root. Usaremos el
comando ps -fea para ver los procesos en una tabla y grep. Despues mostremos el
resultado con cat.
32) Repetiremos el mismo comando pero ahora para los procesos del usuarios geovanny.

33) Escribiremos una serie de mandos en lo que detectaremos los errores por medio de los
mensajes que nos envía en pantalla.

echo $PATH ; echo $SHELL ecHo -> Ejecuta echo $PATH y echo $SHELL, ecHo lo toma
como cadena y solo lo muestra en pantalla.

$PATH ; echo $SHELL echo $PATH ->Solo se ejecuta el primer mandato, el siguiente da
error.
&& echo $SHELL ecHo $PATH && -> Devuelve un error de sintactico por el uso de && al
inicio.

echo $SHELL echo $PATH && ecHo -> No esta separado por “;” y ecHo no exite

$SHELL echo $PATH1 && echo -> Devuelve error por la variable $PATH1 no existe.

$SHELL echo $PATH || echo -> Se muestra el valor de $SHELL pero al no estar
separadas por “;” muestra error al ejecutar la siguiente orden

$SHELL ecHo $PATH || echo -> ecHo no es reconocido como comando

$SHELL echo $PATH1 || echo -> muestra el valor de $SHELL pero la $PATH1 no está
definida y echo no tiene una entrada

$SHELL1 ecHo $PATH1 || echo -> la orden echo esta mal escrita

$SHELL1 -> La variable tiene un 1 de más.

También podría gustarte