Está en la página 1de 11

UT4. S.O. cliente-servidor (LINUX) 5.

Redireccionamientos - tuberías - filtros

ÍNDICE

1. REDIRECCIONAMIENTOS .......................................................................................................2
Redireccionamiento de entrada (<) ......................................................................................2
Redireccionamiento de salida (>) ..........................................................................................2
Redireccionamiento de salida - adición (>>) .........................................................................3
Redireccionamiento de errores (2> y 2>>) ............................................................................3
Redirecciones combinadas ....................................................................................................4
2. ENCADENAMIENTO DE COMANDOS (TUBERÍAS) ..................................................................4
3. FILTROS .................................................................................................................................5
more......................................................................................................................................5
tail .........................................................................................................................................6
head ......................................................................................................................................6
wc ..........................................................................................................................................6
grep .......................................................................................................................................7
Expresiones regulares ...........................................................................................................7
tr ...........................................................................................................................................7
sort ........................................................................................................................................8
cut .........................................................................................................................................8
paste .....................................................................................................................................9
join ......................................................................................................................................10
nl .........................................................................................................................................10
tee .......................................................................................................................................11

1º ASIR - Implantación de S.O. (IMSO) Página 1 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

1. REDIRECCIONAMIENTOS
Al ejecutar un comando, normalmente espera alguna entrada de datos y produce una
salida. Las posibles entradas y salidas estándar son:

 Entrada estándar: Archivo desde el que se leerá la entrada de datos para el comando. Por
omisión es el teclado.
 Salida estándar: Archivo donde el comando dejará el resultado obtenido. Por defecto es
la pantalla.
 Salida de errores: Archivo en el que el comando escribirá cualquier error que se produzca
durante la ejecución del mismo. Por omisión es la pantalla.

Ejemplos:

$ ls /bin
La entrada estándar del comando ls es el directorio /bin. La salida estándar es la
pantalla, al igual que la salida de error.
$ cat
La entrada estándar es el teclado (la orden cat tomará lo que tecleemos) y la salida
estándar es la pantalla (repite lo que escribimos en la pantalla).

Tipos de redireccionamiento:

 Redireccionamiento de entrada (<)


 Redireccionamiento de salida (>)
 Redireccionamiento de salida - adición (>>)
 Redireccionamiento de errores (2>, 2>>)

Redireccionamiento de entrada (<)


Sirve para que un comando tome como entrada un archivo en lugar de su entrada
estándar.

Ejemplo:

$ cat < archivo


Mostrará por pantalla el contenido de archivo (ya no pide los datos por teclado).

Redireccionamiento de salida (>)


La salida del comando se redirigirá al archivo indicado después del signo >.
Si el archivo indicado como salida no existe, se creará con el contenido del resultado
del comando. Si ya existe, se borrará su contenido anterior y se sustituirá por el del comando.

Ejemplo:

$ cat > fich1


Escribiremos texto por teclado hasta pulsar ctrl + d, y guardará lo que hemos tecleado
en fich1. Si no existía, lo creará con ese contenido; si ya existía, sustituirá su contenido
por lo que hayamos tecleado.

El símbolo > también se puede emplear para mandar mensajes a un determinado


terminal, si éste no está bloqueado; para desbloquear un terminal, el fichero de dispositivo
correspondiente debe tener permiso de escritura para los usuarios.

1º ASIR - Implantación de S.O. (IMSO) Página 2 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

Ejemplo:

$ echo estoy aquí > /dev/tty3


Se mostrará el mensaje “estoy aquí” en el terminal 3 (para hacer la prueba, inicia sesión
en el terminal 3 con el mismo usuario que envía el mensaje, para evitar errores de
bloqueo de terminal).

Ejemplos de redireccionamiento de salida:

$ ls /bin > /tmp/fich


En lugar de mostrar por pantalla el resultado de la orden ls, lo guarda en el fichero fich,
dentro del directorio /tmp.

$ who > quien


Guarda en el fichero quien el resultado de la orden who (es decir, la información de los
usuarios conectados).

Redireccionamiento de salida - adición (>>)


Es como el símbolo >, sólo que no borra el contenido anterior del fichero destino, sino
que añade el nuevo contenido al final. También crea el archivo si éste no existe.

Ejemplos:

$ ls d* >> fich
Añade al final del fichero fich el listado de los ficheros que comienzan por d.

$ date >> quien


Añade al final del archivo quien la fecha actual. Si hacemos un cat del fichero quien,
mostrará primero el resultado de who y luego la fecha actual.

Redireccionamiento de errores (2> y 2>>)


El símbolo 2> significa que cualquier mensaje de error producido al ejecutar un
comando, en lugar de mostrarse por pantalla, se guardará en el fichero indicado a
continuación del símbolo.
Si el fichero no existe, lo crea. Si ya existía, borra su contenido anterior y lo sustituye
por el resultado de error.
El símbolo 2>> es igual que el anterior, pero si el fichero tenía contenido, añade los
errores al final del mismo en lugar de sustituir su contenido.

Ejemplos:

$ cat fich 2> error


Si el resultado es correcto, se mostrará por pantalla el contenido de fich. Si hay algún
error (como por ejemplo, que no exista fich), guardará en el fichero error los mensajes
de error del comando. Si el fichero error no existía anteriormente, lo crea; si ya existía,
sustituye su contenido por los mensajes de error.

$ cat fich 2>> error


Es como el anterior, pero no borra el contenido anterior de error, sino que añade al final
del mismo el error del comando actual.

En Linux y Unix hay un dispositivo ficticio llamado /dev/null (dispositivo nulo) que
puede utilizarse cuando no queremos que una salida o un error se muestren por pantalla, y
tampoco queremos guardarlos en un fichero.

1º ASIR - Implantación de S.O. (IMSO) Página 3 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

Ejemplo:

$ ls -lR / 2>/dev/null
Como somos un usuario normal, al intentar hacer un listado recursivo de todo el sistema
(desde el raíz) nos dará errores en directorios en los que no tenemos permiso de paso o
de lectura. Al redirigir los errores al dispositivo nulo, éstos no aparecerán en la pantalla
ni se guardarán en ningún archivo.

Redirecciones combinadas
Se pueden combinar en un mismo comando las redirecciones de entrada, salida y
errores. Los redireccionamientos pueden ir en cualquier orden.

Ejemplo:

$ cat <fich1 >fich2 2>errores


Toma el contenido de fich1 como entrada, lo guarda en fich2 y lleva los errores al
fichero errores.

Hay que tener mucho cuidado, en especial con el redireccionamiento de salida, porque
el intérprete de comandos lo primero que hace es borrar el fichero, y luego redirecciona el
resultado del comando al fichero, así que si queremos usar el mismo fichero como entrada y
como salida, perderemos su contenido antes de que lo podamos usar.

Ejemplo:

$ cat < fich1 > fich1


Primero borra fich1 y luego guarda su contenido en el mismo fichero, con lo que
obtendremos un fichero vacío.

2. ENCADENAMIENTO DE COMANDOS (TUBERÍAS)


Muchos de los comandos de Unix utilizan una entrada estándar (teclado) y una salida
estándar (pantalla) cuando no se le suministran como parámetros. Esta característica sirve
para utilizar direccionamientos y también para enlazar comandos entre sí, de manera que la
entrada de uno sea la salida del comando anterior; de esta forma se consiguen estructuras
muy potentes; a estas estructuras de comandos se les llama pipelines o tuberías.
Para enlazar los comandos entre sí se utiliza el carácter |. La estructura queda como la
siguiente:
comando1 | comando2 | comando3 ...
La salida de comando1 será la entrada de comando2, y la salida de comando2 será la
entrada de comando3.

Ejemplos:

$ ls -lR | more
Hace un listado completo recursivo, pero en lugar de mostrarlo tal cual por pantalla, le
pasa el resultado a la orden more, que hace un listado por pantallas.

$ who | cat -n
Envía la lista de usuarios conectados como entrada para la orden cat -n, que muestra
dicha lista numerada.

1º ASIR - Implantación de S.O. (IMSO) Página 4 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

No se debe confundir redireccionamiento con tuberías:


 En el redireccionamiento se relacionan comandos con archivos, la salida o la
entrada de un comando se redirecciona a un archivo
 En las tuberías se relacionan comandos entre sí, siendo la salida de uno la
entrada del siguiente.

Las tuberías y los Redireccionamientos se pueden combinar. Por ejemplo:


comando1 | comando2 > archivo1
Comando2 toma la salida de comando1 como entrada, y su salida la redirecciona al
fichero archivo1.

comando1 < archivo1 | comando2


Comando1 toma como entrada los datos contenidos en archivo1, y su salida es
transferida como entrada a comando2. Al no tener comando2 redireccionada su salida, ésta
irá a la estándar.

La cantidad de comandos en una tubería es, en principio, ilimitada. Si no es suficiente


una línea de comandos, puede ponerse al final de la línea el carácter \, pulsar intro y continuar
en la línea siguiente.

3. FILTROS
Los filtros son unos comandos que normalmente trabajan con la entrada estándar, y
por eso se pueden utilizar en secuencias de redireccionamientos y tuberías.
Todos los comandos filtro que veremos a continuación, además de con su propia
sintaxis, se pueden utilizar con las tuberías:
comando | comando_filtro
more
Permite visualizar uno o más archivos pantalla a pantalla.
Por omisión, el número de líneas que muestra en cada pantalla son 23 de texto, y una
última línea de mensaje donde aparece la palabra -More-.
Una vez mostrada la primera pantalla, si pulsamos:
 Intro: Se muestra una línea más.
 Barra espaciadora: Se muestra una pantalla más.

Sintaxis:

more [opciones] [+número_línea] [+/cadena] [archivo...]

El comando more cuenta con una colección de comandos propios, que podemos
ejecutar cuando se para la pantalla. Pulsando la tecla h mientras estamos ejecutando more
podemos ver la ayuda de estos subcomandos.

Existe una orden similar a more, llamada less.

Ejercicios:

1) Mira la ayuda de more y prueba las opciones y los comandos internos.


2) Mira la ayuda de less y prueba las opciones y los comandos internos.

1º ASIR - Implantación de S.O. (IMSO) Página 5 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

tail
Visualiza las últimas 10 líneas de un fichero o de la entrada estándar.

Sintaxis:

tail [opciones] [archivo...]

Opciones:
-n nº Muestra el número de líneas indicado
-c nº Muestra el número de caracteres indicado

Ejemplos:

$ ls -l | tail -15
Muestra las últimas 15 líneas del listado.

$ ls -l | tail -n +15
Muestra desde la línea 15 del listado del directorio, hasta el final.

$ tail -c20 fichero


Muestra los últimos 20 caracteres del fichero indicado.

head
Como la anterior, pero muestra las diez primeras líneas del archivo o entrada estándar.

Sintaxis:

head [opciones] [archivo...]

wc
Cuenta las líneas, palabras y caracteres que contengan los archivos referenciados o la
entrada estándar.

Sintaxis:

wc [opciones] [archivo...]

Opciones:
-l Cuenta líneas
-w Cuenta palabras
-c Cuenta bytes
-m Cuenta caracteres (en archivos de texto, -c y -m son equivalentes)

Sin opciones, muestra por pantalla el número de líneas, palabras y caracteres, y el


nombre del archivo.

Ejemplo:

$ who | wc -l
Cuenta el número de usuarios conectados.

1º ASIR - Implantación de S.O. (IMSO) Página 6 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

grep
Busca un patrón de datos en las líneas de los archivos especificados. Cada línea que lo
contiene se muestra en la salida estándar.
Si en el patrón a buscar hay algún carácter especial como $ o *, que tienen un
significado para el shell, hay que encerrar el patrón entre comillas simples o dobles.

Sintaxis:

grep [opciones] patrón [archivo...]

Ejercicio: Mira la ayuda de grep y prueba sus opciones.

Expresiones regulares
Son metacaracteres que se pueden utilizar para localizar información dentro de un
archivo. Se suelen utilizar en el patrón de datos de grep.
No deben confundirse con los metacaracteres utilizados en los nombres de los
archivos.

Los más destacados son:


. (punto) Cualquier carácter en esa posición
[] (corchetes) Un carácter de los incluidos entre los corchetes
[^ ] Exclusión de los caracteres incluidos entre los corchetes
^ Comienzo de línea
$ Final de línea

tr
Se utiliza para comprimir, reducir a una o sustituir las repeticiones de una cadena de
caracteres.
Es muy útil para separar campos en ficheros.

Sintaxis1:

tr -s cadena1 [cadena2]

Si no aparece cadena2, toma cada línea de la entrada estándar y sustituye todas las
repeticiones contiguas de cadena1 por una sola (si, por ejemplo, hay varios espacios seguidos
y queremos que se quede uno solo).
Si aparece cadena2, sustituye las repeticiones de cadena1 por una sola cadena2 (en el
caso anterior, en lugar de dejar un solo espacio lo sustituimos, por ejemplo, por un guión).

Sintaxis2:

tr -d cadena

Borra en la salida la cadena especificada.

Ejercicio: Ejecuta las siguientes órdenes y comprueba la diferencia entre ellas.

$ who
$ who | tr -s “ “
$ who | tr -s “ “ “*”
$ who | tr -d “ “

1º ASIR - Implantación de S.O. (IMSO) Página 7 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

sort
Ordena y/o fusiona archivos. Su resultado lo muestra en la salida estándar, o lo
almacena en el archivo de salida (especificado con la opción -o). Si no se especifica nombre de
archivo, asume la entrada estándar.

Sintaxis:

sort [opciones] [fichero...]

Opciones:

-o fichero Para que el resultado de la ordenación se archive en el fichero


especificado
-r Realiza la ordenación en orden inverso, de la Z a la A
-t carácter Permite indicar el carácter separador de campos
-m Fusiona los archivos previamente clasificados
-u Elimina las líneas en las que el campo por el que se está ordenando
estén repetidas
-k pos1[,pos2] Ordena cada línea del fichero entre el campo pos1 y pos2. Si pos2 es
ignorado, ordena hasta el final de la línea. El primer campo se considera 1. En
lugar de -k se puede utilizar +posición -posición; en este caso, comienza en el
campo 0.

Ejemplos:

$ sort -t “ ” -k 2 fichero
Ordena el fichero a partir del segundo campo hasta el final.

$ sort -t “ ” +1 -1 fichero
Ordena el fichero por el segundo campo.

$ sort -t “ ” -k 1,3 fichero


Ordena el fichero por campo 1, luego por campo 2 y por último por campo 3

$ sort -t “ ” -k1 -k3 fichero


Igual que el anterior.

$ sort -t “ ” -k1,1 -k 3 fichero


Ordena el fichero por campo 1, salta campo 2 y sigue la ordenación por campo 3.

$ sort -t “ ” -k3,3 fichero


Ordena el fichero sólo por el campo 3.

$ sort -t “ ” -k2.1 -k2.4 fichero


Ordena el fichero por los primeros 4 caracteres del campo 2.

$ ls -l | sort -k 9
Ordena el listado del directorio activo por el nombre de fichero (campo 9).

cut
Extrae columnas o campos de todas las líneas de un fichero o de la entrada estándar.
La salida estándar es la pantalla. Los campos pueden ser de longitud fija o variable (carácter
separador).

1º ASIR - Implantación de S.O. (IMSO) Página 8 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

Sintaxis:

cut -opción... [fichero...]

Opciones:

-dcarácter Permite indicar el carácter separador de campos


-clista Selecciona columnas; indicaremos la posición de comienzo y fin de la
columna que queremos seleccionar
-flista Selecciona campos mediante carácter separador. Indicamos los
campos que queremos seleccionar

Ejemplos:

$ cut -d: -f1,4,6 fichero


Selecciona los campos 1, 4 y 6 del fichero, tomando como carácter separador los dos
puntos.

$ ls -l | cut -c 1-10
Selecciona los 10 primeros caracteres de cada línea del listado del directorio activo (el
tipo de fichero y los permisos).

$ who | tr -s “ ” | cut -f2 -d“ ”


Visualiza la lista de terminales activos.

paste
Es opuesto al comando cut. Une líneas de archivos, o líneas consecutivas de un mismo
archivo, en una línea. Por omisión, se utiliza el tabulador como elemento de unión entre las
líneas unidas.

Sintaxis:

paste [-opciones] fichero1 ...

Opciones:

-dcarácter Permite indicar el carácter separador de campos, si es distinto de Tab


-s Mezcla líneas consecutivas en lugar de una de cada archivo de entrada
- Si se utiliza el guión como nombre de alguno de los archivos, se acepta
la entrada estándar como archivo de entrada de líneas a unir. Se deberá pulsar
ctrl + d para indicar el final de la entrada por teclado.

Ejemplo: Tenemos los siguientes ficheros, nombres y teléfonos.

nombres telefonos
ALBERTO 630987654
ANA 619123456
ANGEL 628986342

Si ejecutamos el siguiente comando:

$ paste nombres telefonos

1º ASIR - Implantación de S.O. (IMSO) Página 9 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

El resultado sería el siguiente:

ALBERTO 630987654
ANA 619123456
ANGEL 628986342

Y si ejecutamos:

$ paste -s nombres telefonos

El resultado sería:

ALBERTO ANA ANGEL


630987654 619123456 628986342

join
Permite la unión de dos ficheros, registro a registro, si el contenido de un campo
común coincide.

Sintaxis:

join [opciones] fichero1 fichero2

Los archivos a unir deben estar clasificados en orden ascendente, según los campos
por los que se desee unir los archivos.
Las líneas del resultado constan del campo común, del resto de la línea de archivo1 y
del resto de la línea de archivo2.
Generalmente, los campos están separados por un blanco, tabulador o línea nueva
(\n). El carácter blanco es el separador por omisión.

Opciones:

-jnm El campo común será el campo m del archivo n, con el campo 1 del otro
archivo. Si no se especifica n, será el campo m de ambos archivos.
-tc Utiliza el carácter c como separador de campos.
-o n.m La salida del comando será el campo m del fichero n.

nl
Numera las líneas de un archivo o texto introducido por teclado.

Sintaxis:

nl [opciones] fichero

Opciones:

-ba Numera también las líneas en blanco


-bt Numera las líneas con texto imprimible
-bn Sin numerar
-bpcadena Numera sólo las líneas que contienen la cadena especificada
-vn Comienza a numerar las líneas a partir del número n
-sc Especifica un carácter separador, c, entre el número de línea y la línea en sí
-in Indica el incremento, n, utilizado para numerar las líneas; si no se especifica
esta opción, por defecto es 1

1º ASIR - Implantación de S.O. (IMSO) Página 10 de 11


UT4. S.O. cliente-servidor (LINUX) 5. Redireccionamientos - tuberías - filtros

tee
Cuando se utilizan estructuras de tuberías, se generan ficheros intermedios que al
terminar se pierden. Con el comando tee podemos conservar un fichero intermedio en una
estructura de tuberías.
Si el fichero no existe, lo crea. Si ya existe, sustituye su valor por el nuevo, a no ser que
utilicemos la opción -a, que añade los datos al final del fichero.

Sintaxis:

tee [-a] [fichero...]

También se puede utilizar un terminal como fichero, especificando la ruta del


correspondiente fichero de dispositivo (/dev/tty...).

Ejemplos:

$ ls -l | grep alumno | tee fich-alumno | wc -l


El fichero fich-alumno guardará las líneas del listado del directorio activo que contengan
la cadena alumno. Aunque el resultado de esta estructura es el número de ficheros que
pertenecen a alumno, podemos consultar cuáles son esos ficheros haciendo un cat de
fich-alumno.

1º ASIR - Implantación de S.O. (IMSO) Página 11 de 11

También podría gustarte