introducción a la consola de comandos · interactuar con el bash shell y comandos desde una...

58
Introducción a la consola de comandos (23-07-2006) - Autor Yaco - Última modificación () Este artículo explica uno a uno los comandos más relevantes para el manejo dentro de la consola, comandos para la edición y manioulación de texto, control de procesos, expresiones regulares y manejo del editor vi. Introducción a la consola de comandos Por Franco Iacomella, Guido Accardo y Román Gelbort Licenciado bajo: Creative Commons Argentina [by-sa] 2.0 Trabajo en la línea de comandos Los estudiantes deberían poder interactuar con el bash shell y comandos desde una consola virtual. Objetivos clave Usar comandos simples y secuencias de comandos para ejecutar tareas básicas en una consola virtual. Usar y modificar el entorno del shell, incluyendo definición, referencia y exportación de variables de entorno. Usar y editar el comando history. Invocar comandos dentro y fuera del path definido. Usar comandos recursivos dentro de un arbol de directorios. Archivos, términos y utilidades . bash echo env exec export pwd set unset ~/.bash_history ~/.profile Comandos básicos http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires Central Powered by Mambo Open Source Generated: 22 October, 2006, 23:03

Upload: duonganh

Post on 30-Sep-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Introducción a la consola de comandos(23-07-2006) - Autor Yaco - Última modificación ()

Este artículo explica uno a uno los comandos más relevantes para el manejo dentro de la consola, comandos para laedición y manioulación de texto, control de procesos, expresiones regulares y manejo del editor vi.Introducción a la consola de comandos

Por Franco Iacomella, Guido Accardo y Román Gelbort Licenciado bajo: Creative Commons Argentina [by-sa] 2.0 Trabajo en la línea de comandos

Los estudiantes deberían poder interactuar con el bash shell y comandos desde una consola virtual. Objetivos clave Usar comandos simples y secuencias de comandos para ejecutar tareas básicas en una consola virtual. Usar y modificar el entorno del shell, incluyendo definición, referencia y exportación de variables de entorno. Usar y editar el comando history. Invocar comandos dentro y fuera del path definido. Usar comandos recursivos dentro de un arbol de directorios. Archivos, términos y utilidades . bash echo env exec export pwd set unset ~/.bash_history ~/.profile

Comandos básicos

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 2: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

pwd Descripción

Este comando nos devuelve la ruta completa sobre la cual estamo trabajando: PWD viene de Print Working Directory.

Su utilización es muy simple y en su forma básica no requiere de argumentos. Ejemplos

Un pequeño ejemplo: $ pwd /home/yaco/gnu-informes

echo Descripción

Este comando nos permite "imprimir" cosas en la pantalla (o cualquier otra interfaz de salida de datos). Esas cosas pueden ser cadenas de texto ingresadas por el teclado (o cualquier otra interfaz de entrada de datos) variables o incluso podremos efectuar operaciones aritméticas básicas.

El comando echo recibe las cadenas de texto entre comillas (simples o dobles), y saca por defecto a la pantalla lo que le pasamos como argumento; aunque puede enviar la salida a otros sitios, como podrás comprobar más adelante. Ejemplos

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 3: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Mostramos una cadena simple de texto: usuario@maquina ~ $ echo "Hola, alumno de Gleducar" Hola, alumno de Gleducar

Ahora probemos hacer algun cálculo sencillo: usuario@maquina ~ $ echo $[5*3] 15

Como mencionamos antes, es posible usar echo para mostrar el valor contenido en una variable. Para hacer esto es necesario colocar un $ (signo de moneda) antes del nombre de la variable. $ echo $PWD /home/yaco/gnu-admin

Generalmente en la consola de Linux usamos lo que comunmente se conocen como Variables de entorno

env Descripción

El comando env se utiliza para listar o mostrar las distintas variables de entorno definidas por el usuario con su respectivo valor.

Existen una serie de variables básicas que siempre estan presentes en la configuración del usuario, por eso es muy importante tener una noción acerca de la información que contienen: - EDITOR : Variable que almacena el editor que usará el usuario por defecto. - http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 4: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

ENV : Variable que almacena el archivo en donde el usuario ha definido sus aliases y funciones. - HOME : Variable que almacena el directorio del usuario, desde el que arrancará la shell cuando entra en el sistema. - HOSTNAME : Variable que almacena el nombre de la máquina. - LOGNAME : Variable que almacena el nombre o login del usuario. - MAIL : Variable que almacena el archivo que contiene el correo de usuario. - MAILCHECK : Variable que indica cada cuantos segundos debe comprobarse si el usuario tiene correo. - PATH : Variable en la que se encuentran almacenados los paths de aquellos directorios a los que el usuario tiene acceso directo, pudiendo ejecutar comandos o programas ubicados en ellos sin necesidad de acceder a dicho directorio. - PS1 : Variable que almacena el prompt que se empleará por defecto en la shell. - PS2, PS3, etc. : Variable que almacena el prompt que se empleara en la 2ª, 3ª, etc. Subshells, lo cual se hace invocando a la shell,es decir, ejecutando por ejemplo, ksh. - PWD : Variable que almacena el directorio actual, puede ser útil para modificar el prompt (PS1) dinámicamente. - SHELL : Variable que almacena el interprete de comandos que usa el usuario. - TERM : Variable que almacena el tipo de terminal desde el que se está trabajando. - http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 5: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

TMOUT : Variable que almacena el tiempo de inactividad que se permite al usuario antes de que el sistema le cierre la sesión. Ejemplos

Veamos el ejemplo básico para la utilización de env: $ env HISTORY=100 HOME=/home/guadalajara/pancho HZ=100 LOGNAME=pancho MAIL=/var/mail/pancho MANSECTS=1:1m:1c:1f:1s:1b:2:3:3c:3i:3n:3m:3k:3g:3e:3x11:3xt:3 w:3b:9:4:5:7:8 PATH=/usr/bin SHELL=/bin/sh TERM=sun TZ=EST5EDT

set Descripción

Este comando nos permite redefinir el valor de una variable de forma volátil

set es utilizado dentro de scripts shells como variables locales que sólo existen durante la ejecución del script, si quieres que tu variable alcance el nivel global, debes usar export Ejemplos

Probemos asignar una variable con set desde nuestra consola de comandos (no dentro de un script): $ set INFO="informacion" $ echo $INFO http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 6: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

$

El nuevo valor de la variable no a sido asignado de forma estática. Por eso no da nada como salida.

Ahora usemos set sin ningún parámetro: $ set HISTORY=100 HOME=/home/guadalajara/pancho HZ=100 LOGNAME=pancho MAIL=/var/mail/pancho MANSECTS=1:1m:1c:1f:1s:1b:2:3:3c:3i:3n:3m:3k:3g:3e:3x11:3xt:3 w:3b:9:4:5:7:8 PATH=/usr/bin SHELL=/bin/sh TERM=sun TZ=EST5EDT

Nos muestra las variables y sus diferentes valores. Lo mismo que el comando env.

Con los conocimientos adquiridos hasta ahora, el comando set parece un tanto inservible o dispensable, pero comprenderemos su importancia cuando hagamos algunos scripts.

unset Descripción

Este comando remueve una o varias variables.

Debemos tener en cuenta que unset no solo quita el valor de una variable sino que tambien elimina la variable. Ejemplos

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 7: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Un ejemplo sencillo en el cual removemos una variable. Nótese que no antecedemos el nombre de la misma con $ ya que no estamos haciendo referencia a su valor, sino a la variable en sí. $ echo $VAR1 123 $ unset VAR1 $ echo $VAR1 $

export Descripción

Este comando es utilizado para asignar un valor a una variable.

Hasta ahora sabemos como ver el contenido de una variable en particular (mediante echo) o del conjunto de variables de entorno del usuario (mediante env). Si la variable ya existia, usamos set para cambiarle el valor. Ahora usando el comando export podremos crear una nueva variable con un valor definido. Ejemplos

Creamos una variable nueva y le damos un valor: $ export VARIABLENUEVA=123 $ echo $VARIABLENUEVA 123

exec Descripción http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 8: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Este comando nos permite ejecutar un comando o acción en la consola.

A simple vista exec no presenta gran diferencia con el simple acto de escribir el nombre del comando o aplicación y ejecutarlo directamente. En sí, la diferencia radíca en que exec nos permite hacer subejecuciones de programas, todo dentro de un mismo hilo de proceso. Esto implica que exec hará mutar el proceso que le dió origen, tomando el control de la acción. Generalmente luego de ejecutar un exec la aplicación que lo generó se cerrará al finalizar el comando que libera el exec.

Este concepto puede parece complicado, pero será más comprensible cuando tratemos temas como Procesos (en esta misma unidad) y scripting. Ejemplos

La mejor forma de entender el funcionamiento de exec es probandolo uno mismo (el ejemplo asume que estamos en una terminal en modo texto): $ exec date Tue Jul 17 17:25:05 PDT 2006 Arch Linux Gimmick 0.7.2 (vc/3) GNU login:

En el ejemplo anterior se ejecuta el comando date, nos devuelve la fecha y hora actual; y luego, una vez concluido el proceso date, se cierra automaticamente la sesión del usuario.

Configuración http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 9: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

básica

~/.bash_history

El historial de bash (history) es un archivo que almacena todo lo que fuimos haciendo en la linea de comandos, es decir guarda cada cosa que fuimos escribiendo, hasta los errores de tipeo que cometemos. Este archivo se encuentra en el directorio de cada usuario , el archivo en cuestion se llama .bash_history.

Podemos ver su contenido simplemente usando el comando cat: $ cat /home/yaco/.bash_history gparted umount /dev/hda6 pacman -S ruby pacman -S ruby-gtk2 pacman -S ruby-gtktrayicon pacman -S ruby ruby-gtk2 ruby-gtktrayicon pacman -S ca-certificates mc -b date

De todas formas, podemos sacarle más provecho al historial usando el comando history que nos permitirá reutilzar los comandos almacenados: $ history 400 gparted 401 umount /dev/hda6 402 pacman -S ruby 403 pacman -S ruby-gtk2 404 pacman -S ruby-gtktrayicon 405 pacman -S ruby ruby-gtk2 ruby-gtktrayicon 406 pacman -S ca-certificates 407 mc -b 408 date

El número de la columna que acompaña a cada linea nos servira para reutilizar el comando. Si escribimos dicho número precedido por un ! (signo de exclamación) en la consola, dicho comando se ejecutará: $ !408 Tue Jul 17 17:39:52 PDT 2006

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 10: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

~/.profile

Este fichero compone el esquema de archivos de configuración del profile (perfil) del usuario. Cuando BASH se inicia, lee y ejecuta órdenes desde el archivo /etc/profile (global para todos los usuarios), si existe. Después, busca ~/.bash_profile, ~/.bash_login, y ~/.profile, en este orden, y lee y ejecuta las órdenes desde el primero que existe y es legible.

En un archivo de profile generalmente encontramos la definición de muchas variables de entorno y tambien de ciertos alias. Esto varia segun la distribución.

Para ver el contenido del archivo .profile o .bash_profile de nuestro usuario ejecutamos: $ cat .profile . $HOME/.bashrc export CVS_RSH=ssh export MANPATH="/usr/man:/usr/X11R6/man" export LESSCHARSET="latin1" export INPUTRC="/etc/inputrc" export LESS="-R" export EDITOR="joe" alias renzo='ssh 192.168.1.5'

Podemos facilmente editar el valor de nuestras variables al arranque simplemente editando este archivo.

Procesamiento de flujo de texto usando filtros

Los estudiantes deberían poder aplicar filtros a flujos de texto. Objetivos clave Enviar archivos de texto y flujos de salida, a través de utilidades de filtro, para modificar la salida, http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 11: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

usando los comandos estándar de Unix que se encuentran en el paquete de utilidades de texto GNU. Archivos, términos y utilidades cat cut expand fmt head hexdump join nl paste pr sed sort split tac tail tr unexpand uniq wc

cat Descripción

Este comando, como ya hemos comprobado, se utiliza para mostrar el contenido de uno o mas archivos. Ejemplos

Ejecutamos cat para ver el contenido de un arhivo: $ cat archivo1 Este es el contenido del archivo 1

Ahora ejecutamos cat para ver el contenido de varios archivos: $ cat archivo1 archivo2 archivo3 Este es el contenido del archivo 1 Este es el contenido del archivo 2 Este es el contenido del archivo 3

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 12: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

cut Descripción

Este comando permite cortar y filtrar una sección determinada de una cadena de texto basandose en un patrón único.

cut se usa para separar de cada linea de un archivo uno o mas campos, o una parte del archivo. Los campos se delimitan, por defecto, por espacio en blanco; pero se puede especificar el contenido. Ejemplos

Supongamos que el archivo prueba tenga la siguiente apariencia: 1 blancos 250 2 negros 350 3 jacksons 125

Entonces al hacer $ cut -f2 prueba

produce: blancos negros jacksons

Es decir, separa el segundo campo ( -f2). Si en cambio hacemos: $ cut -c1-6 prueba

esto separa las primneras seis columnas y por lo tanto produce: 1 bla 2 neg 3 jac

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 13: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Como mencione antes, el delimitador de campos puede cambiar: $cut -d: -f1,2 /etc/passwd root:x bin:x daemon:x mail:x ftp:x nobody:x dbus:x hal:x avahi:x bruno:x

Esto como se ve produce los dos primeros campos de /etc/passwd, los cuales (verifiquelo) estan separados por los dos puntos.

expand Descripción

Este comando se usa para convertir las tabulaciones en un archivo a una cantidad de espacio determinada por el usuario. Ejemplos

Teniendo el arhivo prueba, el cual contiene lo siguiente: yaco 1 10 adrian 3 12 roman 8 20

Queremos convertir las tabulaciones en espacios de 25 cáracteres, entonces hacemos: $ cut -t25 prueba yaco 1 10 adrian 3 12 roman 8 20

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 14: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

fmt Descripción

Este comando reformatea cada párrafo en el (los) archivo(s) especificado(s).

fmt siempre es acompañado de algún parámetro, los mas comunes suelen ser: -

-w anchura Especifica la anchura de la línea a rellenar -

-c Conserva la indentación de las primeras dos líneas -

-s Evita que las líneas cortas se junten en la salida. Ejemplos

Partiendo del archivo prueba que contiene lo siguiente: http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 15: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Hola a todos yo soy el leon. Rugio la bestia en medio de la avenida. Todos huyeron sin entender, panic show a plena luz del dia.

Probamos aplicar primero el fmt sin parámetros: $ fmt prueba Hola a todos yo soy el leon. Rugio la bestia en medio de la avenida. Todos huyeron sin entender, panic show a plena luz del dia.

Ahora especificamos la anchura: $ fmt -w 30 prueba Hola a todos yo soy el leon. Rugio la bestia en medio de la avenida. Todos huyeron sin entender, panic show a plena luz del dia.

Ahora le agregamos -s para evitar que las lineas cortas queden juntas: $ fmt -sw 30 prueba Hola a todos yo soy el leon. Rugio la bestia en medio de la avenida. Todos huyeron sin entender, panic show a plena luz del dia.

head Descripción

Este comando nos muestra las primeras 10 líneas (cabecera) de un archivo.

Es posible tambien especificar la cantidad de líneas a mostrar e incluso mostrar bytes en vez de lineas usando parámetros: - http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 16: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

-n número Proporciona el número de líneas a visualizar (por omisión son 10) -

-c número Muestra los primeros números bytes Ejemplos

Teniendo el archivo prueba que contiene el siguiente texto (fragmento de una joya de Poe): ¡Ah, recuerdo tan claramente aquel desolado diciembre! Cada chispa resplandeciente dejaba un rastro espectral. Yo esperaba ansioso el alba, pues no había hallado calma en mis libros, ni consuelo a la pérdida abismal de aquella a quien los ángeles Leonor podrán llamar y aquí nadie nombrará.

Queremos mostrar solo las 2 primeras líneas, enteonces ejecutamos: $ head -n 2 prueba ¡Ah, recuerdo tan claramente aquel desolado diciembre! Cada chispa resplandeciente dejaba un rastro espectral.

Si en cambio queremos incluir todo el documento excepto una cantidad n de lineas (empezando por abajo) agregamos un signo - (menos) antecediendo al número de líneas: $ head -n -3 prueba ¡Ah, recuerdo tan claramente aquel desolado diciembre! Cada chispa resplandeciente dejaba un rastro espectral. Yo esperaba ansioso el alba, pues no había hallado calma en mis libros,

hexdump http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 17: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Descripción

Este comando muestra un fichero en un formato especificado por el usuario (ASCII, decimal, hexadecimal, octal). Por defecto se muestra en formato hexadecimal. Ejemplos

Si intentamos visualizar un archivo binario con el comando cat, por ejemplo, obtendremos algo ilegible e inútil: $ cat /bin/ls Æÿÿé=ÿÿÿ$¶ÀD$è÷Åÿÿéòüÿÿ$¹,L$èáÅÿÿéÁüÿÿ$» $èËÅÿÿéfüÿÿ¶UåSìÛtBÇ$¸D¸8D$è$ÆÿÿD$¡T$èéÅÿÿ$èñÈÿÿÇ$¸D¸`D$èâÅÿÿ$T$èÐÇÿÿÇ$¹¸ L$Dè²Åÿÿ$T$è`ÅÿÿÇ$ºTD$èÅÿÿ$T$è0ÅÿÿÇ$¸D¸TD$èRÅÿÿ$T$èÅÿÿÇ$¸D¸XD$è"Åÿÿ$T$èÐÄÿÿÇ$¹ä¸ L$DèòÄÿÿ$T$è ÄÿÿÇ$º¸TD$èÂÄÿÿ$T$èpÄÿÿÇ$¸D¸ðD$èÄÿÿ$T$è@ÄÿÿÇ$¸D¸$D$èbÄÿÿ$T$èÄÿÿÇ$¹

En cambio, al usar hexdump obtenemos la información en hexadecimal del binario: $ hexdump /bin/ls 000cd80 f089 75f7 d3f4 f065 d689 c789 458b f7e4 000cd90 39e7 89f2 77c1 0f13 c094 d231 4d3b 0ff0 000cda0 c297 d085 840f ff17 ffff e94f ff11 ffff 000cdb0 8955 8de5 f04d 5657 ec83 8b38 1045 45c7 000cdc0 00e0 0000 8b00 1455 45c7 00e4 0000 8900

join Descripción

Este comando nos permite comparar dos o más archivos y encontrar sus lineas con carácteres coincidentes. Ejemplos

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 18: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Tenemos dos archivos de prueba. El primero, prueba-1 contiene: Del mar hacia las calles corre la vaga niebla como el vapor de un buey enterrado en el frío, y largas lenguas de agua se acumulan cubriendo el mes que a nuestras vidas prometió ser celeste.

El archivo prueba-2 contiene: Pasan huyendo los pájaros. El viento. El viento. Yo sólo puedo luchar contra la fuerza de los hombres. El temporal arremolina hojas oscuras y suelta todas las barcas que anoche amarraron al cielo.

Ahora comparamos ambos archivos con join: $ join prueba-1 prueba-2 y suelta todas las barcas que anoche amarraron al cielo. largas lenguas de agua se acumulan cubriendo

nl Descripción

Este comando permite numerar las líneas de nuestro documento. Ejemplos

El uso de nl es realmente simple. Partiendo de un archivo prueba de ejemplo con un par de líneas: La noche que rompe la copa, vendiendo ilusiones dejándote retazos de sueños por los rincones "pero, nena, tu risa es la magia de los rocanrroles tatuada llevo la marca de tus aguijones".

Obtenemos mediante nl la numeración de sus líneas: http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 19: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

$ nl prueba 1 La noche que rompe la copa, vendiendo ilusiones 2 dejándote retazos de sueños por los rincones 3 "pero, nena, tu risa es la magia de los rocanrroles 4 tatuada llevo la marca de tus aguijones".

Podemos obtener el mismo resultando usanto cat -n en vez de nl.

paste Descripción

Este comando nos permite unir el contenido de dos documentos de forma inteligente. Ejemplos

Tenemos dos archivos con columnas, prueba-1 y prueba-2, el primero contiene: 10 20 50 40 70 80 05 10

Y en prueba-2: 15 20 60 70 40 30

Al usar paste podemos pegarlos manteniendo el formato de las columnas: $ paste prueba-1 prueba-2 10 20 15 20 50 40 60 70 70 80 40 30 05 10

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 20: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

pr Descripción

Este comando convierte un archivo y le asigna un formato para que sea imprimible. Permite añadilr cabeceras y pies de página, formatearlo con columnas, cambiarle el espaciado, etc.

Algunas opciones: -

pr --columnes=n <archivo> Formatea el texto con n cantidad de columnas. -

pr -t <archivo> Suprime las 5 líneas del encabezamiento y las del final de página. -

pr -wn <archivo> Ajusta la anchura de la línea a n posiciones. -

pr -d <archivo> http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 21: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Lista el fichero con espaciado doble. Ejemplos

Al usar pr sin argumentos adicionales, se produce una salida estándar de 66 líneas por página, con un encabezamiento de 5 líneas (2 en blanco, una de identificación y otras 2 líneas en blanco). El encabezado se ve así: 2006-07-19 06:38 trigo Page 1 El trigo (Triticum spp) es el término que designa al conjunto de cereales tanto cultivados como silvestres pertenecientes al género Triticum, que son plantas anuales de la familia de las gramíneas, ampliamente cultivadas en todo el mundo.

sed Descripción

Este comando es un editor estilo "batch" que aplica unos subcomandos a todas las lineas de un archivo. Esto implica que para usar a sed, hay que aprenderse estos subcomandos. Lamentablemente, el manual correspondiente es casi indescifrable. Afortunadamente, los comandos se parecen a los de vi (lo veremos al final del módulo).

Este comando tiene su mayor utilidad en shell scripts. Lo veremos en detalle en otra leccion. Ejemplos

Algunos ejemplos para tener una noción mínima de la capacidad de sed: $ sed '500,600pq' prueba

Con esto filtramos las lineas de prueba entre las numero 500 y la 600 (esto es print o p) y luego sed termina debido al q (quit). Esto se puede utilizar para seleccionar grupos de http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 22: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

lineas de un archivo.

Otro ejemplo, un "buscar y reemplazar" en una línea: $ sed 's/patron1/patron2/g' arch1

Cambia todas las ocurrencias de "patron1" en arch1 por "patron2".

sort Descripción

Este comando nos permite ordenar las lineas de un archivo. Las lineas (registros o records en la terminologia de sort) se pueden subdividir en campos; el ordenamiento puede ser alfabetico o numerico y el orden ascendiente o descendiente. Ejemplos

En este primer ejemplo aplicamos el orden alfabético descendente en el archivo prueba-1 que contiene originalmente: vaca casa perro

Aplicamos ahora sort: $ sort prueba-1 casa perro vaca

Aplicamos el orden numérico agregando el parámetro -n. Tambien es posible inveritr la salida usando -r (aplicariamos un ascendente en el ejemplo anterior) http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 23: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

split Descripción

Este comando permite dividir un arhivo en otros de una x cantidad de bytes. Ejemplos

Dividimos el archivo prueba en partes de 100000 bytes: $ split -b 100000 prueba

las partes quedarán en archivos con nombres como xaa, xab, etc..

tac Descripción

Este comando funciona de la misma forma que cat, solo que su salida es invertida. Ejemplos

El srchivo pueba contiene el estribillo del "himno GNU": I'm a gnu&mdash;I'm a gnu The g-nicest work of g-nature in the zoo I'm a gnu&mdash;how do you do? You really oughtta g-know w-who's w-who http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 24: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

I'm a gnu&mdash;spelt G - N - U I'm not a camel or a kangaroo So let me introduce, I'm neither man nor moose Oh, g-no, g-no, g-no, I'm a gnu!"

Al usar tac invertimos el texto: $ tac prueba Oh, g-no, g-no, g-no, I'm a gnu!" So let me introduce, I'm neither man nor moose I'm not a camel or a kangaroo I'm a gnu-spelt G - N - U You really oughtta g-know w-who's w-who I'm a gnu-how do you do? The g-nicest work of g-nature in the zoo I'm a gnu-I'm a gnu

tail Descripción

Este comando funciona de forma muy similar a head, solo que muestra las 10 últimas lineas del archivo.

Al igual que head, podemos usar los siguientes parámetros: -

-n número Proporciona el número de líneas a visualizar (por omisión son 10) -

-c número Muestra los últimos números bytes http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 25: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Ejemplos

El archivo de prueba contiene: Sintió sobre el vientre un leve picor, con la espalda se deslizó lentamente más cerca de la cabecera de la cama para poder levantar mejor la cabeza; se encontró con que la parte que le picaba estaba totalmente cubierta por unos pequeños puntos blancos, que no sabía a qué se debían, y quiso palpar esa parte con una pata, pero inmediatamente la retiró, porque el roce e producía escalofríos.

Usamos tail para ver sus últimas 2 líneas: $ tail -n 2 prueba debían, y quiso palpar esa parte con una pata, pero inmediatamente la retiró, porque el roce e producía escalofríos.

tr Descripción

Este comando permite intercambiar carácteres en un archivo de texto. Ejemplos

El archivo prueba-1 contiene: más adelante, Hamlet sintió que su madre había sido una mala mujer, además de que la sombra de su padre le ha aparecido y dicho la manera en que fue asesinado

Ahora usando tr cambiamos de minúculas a mayúsculas el contenido de prueba-1: $ tr 'A-Z' 'a-z' < fichero.txt MÁS ADELANTE, HAMLET SINTIÓ QUE SU MADRE HABÍA SIDO UNA MALA MUJER, ADEMÁS DE QUE LA SOMBRADE SU PADRE LE HA APARECIDO Y DICHO LA MANERA EN QUE FUE ASESINADO

unexpand http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 26: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Descripción

Este comando convierte un número fijo de espacios (por defecto 8) de un archivo en un tabulador.

Usando el comando expand obtenemos el resultado inverso. Ejemplos

El archivo de prueba contiene: 1 2 3 4 5

Usamos unexpand: $ unexpand prueba 1 2 3 4 5

uniq Descripción

Este comando elimina lineas repetidas adyacentes en un archivo entrada, permitiendo direccionar el resultado a un archivo de salida.

Algunas opciones del comando: -

-u copia en la salida solamente las lineas que no esten repetidas http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 27: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

-

-d solo escribra en la salida una copia de cada linea repetida -

-n se saltara los n primeros campos -

+n los n primeros caracteres seran ignorados Ejemplos

El archivo de prueba contiene: 2 5 8 10 5 8

Si usamos uniq de la siguiente forma por ejemplo: $ uniq -d prueba 8 5

wc http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 28: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Descripción

Este comando cuenta la cantidad de palabras, líneas y caracteres en uno o más archivos. Por defecto presenta los tres datos por cada archivo que reciba y después presenta las sumas.

Con alguna de las siguientes opciones presenta: -

-c la cuenta de caracteres -

-l la cuenta de líneas -

-w la cuenta de palabras -

-L la longitud de la línea más larga. http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 29: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Ejemplos

El archivo prueba contiene el siguient texto: La República Argentina es el segundo estado más extenso de América del Sur y el octavo en extensión de todo el planeta.

Obtendremos la cantidad de palabras del mismo: $ wc -w prueba 22 prueba

Administración básica de archivos

Los estudiantes deberían poder usar los comandos básicos de Linux para administrar archivos y directorios. Objetivos clave Copiar, mover y remover archivos y directorios individualmente. Copiar múltiples archivos y directorios recursivamente. Remover archivos y directorios recursivamente. Uso simple y avanzado de comodines en los comandos. Usar find para localizar y actuar sobre archivos basándose en el tipo, tamaño o fecha. Archivos, términos y utilidades cp find mkdir mv ls rm rmdir touch file globbing

cp http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 30: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Descripción

Este comando nos permite copiar archivos especificando su origen y destino. Ejemplos

Copiamos un archivo a un nuevo directorio sin perder el original: $ cp /home/imagenes_viejas/origen.png /home/imagenes/ $ ls /home/imagenes/ origen.png $ ls /home/imagenes_viejas/ origen.png

find Descripción

Este comando nos permite buscar archivos que contengan un nombre, extensión o que cumplan cierta condición. Ejemplos

Un ejemplo de busqueda por nombre/extensión: $ find /mnt/musica -name *.mp3 /mnt/musica/John Lennon/Wonsaponatime/01 - I'm Losing You.mp3 /mnt/musica/John Lennon/Wonsaponatime/02 - Working Class Hero.mp3 /mnt/musica/John Lennon/Wonsaponatime/03 - God.mp3

mkdir Descripción http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 31: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Este comando permite crear carpetas. Ejemplos

Creación simple de directorio: $ ls ./ Gato Perro Vaca $ mkdir Buey $ ls ./ Gato Perro Vaca Buey

mv Descripción

Este comando nos permite mover archivos especificando su origen y destino. Ejemplos

Movemos un archivo a un nuevo directorio: $ cp /home/imagenes_viejas/origen.png /home/imagenes/ $ ls /home/imagenes/ origen.png $ ls /home/imagenes_viejas/ $

ls Descripción

Este comando lista los archivos y http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 32: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

carpetas contenidos en una ruta determinada. Ejemplos

Listamos todos los archivos y subcarpetas de una carpeta, incluso los/las ocultas: $ ls -la /home/yaco -rw------- 1 root root 541 Jul 13 02:03 .gmnotify.conf drwxr-xr-x 4 root root 4096 Jul 4 01:45 .gnome drwx------ 15 root root 4096 Jul 8 21:10 .gnome2 drwxr-xr-x 2 root root 4096 Jun 2 14:04 Music drwxr-xr-x 4 root root 4096 May 31 16:56 OLPC drwxr-xr-x 25 root root 4096 Jul 13 02:26 Paquetes drwxr-xr-x 5 root root 4096 May 26 23:38 PicasaDocuments -rw-r--r-- 1 root root 4854 May 10 17:48 LocalSettings.php -rw-r--r-- 1 root root 4562 May 8 20:37 LocalSettings.php~

rm Descripción

Este comando nos permite eliminar uno o más archivos. Tambien permite eliminar carpetas. Ejemplos

Eliminamos un par de archivos con nombre común: $ ls /home Borrame1 Borrame2 Borrame3 $ rm Borrame* $ ls /home $

rmdir Descripción

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 33: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Este comando permite eliminar una carpeta. Como condición, esta carpeta deberá estar vacía. Ejemplos

Borramos una carpeta: $ ls /home MiCarpeta1 MiCarpeta2 $ rmdir MiCarpeta1 $ ls /home MiCarpeta2

touch Descripción

Este comando sirve para crear archivos o actualizar la fecha de uno ya existente. Ejemplos

Creamos un archivo vacio con touch: $ ls /home Archivo1 Archivo3 $ touch Archivo2 $ ls /home Archivo1 Archivo2 Archivo3

file globbing Descripción

El file globbing no es un comando, sino http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 34: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

más bien una técnica. El "engoblamiento" tiene que ver con el uso de carácteres comodínes. Veamos esto un poco mas a fondo:

Cuando usted ingresa un comando como ls *.txt y presiona Intro, la tarea de encontrar cuales archivos se corresponden con el patrón *.txt no la realiza el comando ls, sino el shell en sí mismo. Esto requiere de una pequeña explicación sobre como interpreta el shell la línea de comandos. Cuando usted ingresa: $ ls *.txt $ leerme.txt recetas.txt

primero la línea de comandos se separa en palabras (ls y *.txt, en este ejemplo) . Cuando el shell ve un * en una palabra, interpretará toda la palabra como un patrón de englobamiento y la reemplazará con los nombres de todos los archivos que se correspondan con el patrón. Por lo tanto, justo antes que el shell la ejecute, la línea se convirtió en la línea ls leerme.txt recetas.txt, lo que da el resultado esperado. El shell reacciona así frente a otros caracteres como: -

? se corresponde con un único caracter (uno y sólo uno), cualquiera que sea este; -

[...] se corresponde con cualquiera de los caracteres que se encuentran entre los corchetes; los caracteres pueden estar referidos por intervalos (por ejemplo, 1-9) o por valores discretos,o una mezcla de ambos. Ejemplo: [a-zBE5-7] se corresponderá con todos los caracteres desde la a hasta la z, una B, una E, un 5, un 6 o un 7; -

[!...]: se corresponde con cualquier caracter que no se encuentre en los http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 35: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

corchetes. [!a-z], por ejemplo, se corresponderá con cualquier caracter que no sea una letra minúscula[6]; -

{c1,c2} se corresponde con c1 o con c2, donde c1 y c2 también son patrones de englobamiento, lo cual significa que Usted puede escribir {[0-9]*,[acr]} por ejemplo.

Flujos, Tuberías y Redireccionamientos

Los estudiantes deberían poder redireccionar flujos y conectarlos para volver más eficientes los procesos con datos de texto. Las tareas incluyen redireccionamiento de entrada estándar, de salida estándar y de error estándar; entubar la salida de un comando a la entrada de otro usando la salida del primero como argumento del segundo y enviándo las salidas de ambos stdout a un archivo. Objetivos clave Redireccionado de la entrada estándar, salida estándar y error estándar. Entubar la salida de un comando a la entrada de otro. Usar la salida de un comando como argumento de otro comando. Enviar la salida de ambos stdout a un archivo. Archivos, términos y utilidades tee xargs < << > >> | ` ` (acento francés)

Tuberias http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 36: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Podríamos representar cada programa como una caja negra que tiene una entrada y una salida que se pueden unir entre ellos. Debido a que la entrada por defecto es el teclado y la salida por defecto es terminal, graficaremos cuando sea necesario ambos.

El ejemplo que utilizamos se encuentra esquematizado en la figura

Siendo la entrada estándar el teclado y la salida estándar el terminal o por simplicidad la pantalla.

Vamos a suponer un caso ficticio donde necesitamos todas las definiciones de cada palabra en un texto. Primero las ordenamos alfabéticamente, luego utilizamos un comando ficticio llamado diccionario que toma palabras de la entrada estándar y las reescribe junto a su significado en la salida estándar.

Su esquema se ve en la figura

En este caso nombramos por separado las entradas y salidas estándares de los dos programas, pero la unión entre ambos programas se puede considerar como un sólo tubo.

En ese tubo, el flujo está en un estado intermedio, donde está ordenado, pero no tiene las definiciones de diccionario. http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 37: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

En la línea de comandos esto se escribe de la siguiente manera: $ sort | dicccionario

Donde el caracter " | " representa la conexión entre la salida estándar de un programa y la entrada estándar de otro.

Con este fuerte y simple concepto se pueden concatenar gran cantidad de programas como si fuera una línea de producción en serie para generar resultados complejos.

Para mejorar nuestro ejemplo sacaremos las palabras repetidas, antes de mostrarlas con definiciones. Suponiendo que exista un programa llamado sacar-repetidas, la línea de comando sería: $ sort | sacar-repetidas | diccionario

Simple, utilizando herramientas sencillas logramos algo un poco más complicado. El inconveniente que tenemos en este ejemplo es que hay que escribir aquello a procesar. Normalmente queremos utilizar archivos como entrada de nuestros datos.

Es necesario un comando que envíe a la salida estándar un archivo, así se procesa como la entrada estándar del sort y continúa el proceso normalmente. Este comando es cat. La sintaxis es simple cat nombre-de-archivo

Quedando nuestro ejemplo: $ cat archivo.txt | sort | sacar-repetidas | diccionario

... esto crea un glosario de las palabras que se encuentren en archivo.txt http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 38: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

La combinación de comandos es incalculable y brinda posibilidades enormes. Veamos algunos ejemplos.

En el caso que se quieran buscar procesos con el string http: $ ps ax | grep http 3343 ? S 0:00 httpd -DPERLPROXIED -DHAV 3344 ? S 0:00 httpd -DPERLPROXIED -DHAV 3975 ? S 0:00 httpd -DPERLPROXIED -DHAV 12342 pts/6 S 0:00 grep http

Si queremos eliminar la ultima linea podemos volver a usar grep con la opcion -v $ ps ax | grep http | grep -v grep 3343 ? S 0:00 httpd -DPERLPROXIED -DHAV 3344 ? S 0:00 httpd -DPERLPROXIED -DHAV 3975 ? S 0:00 httpd -DPERLPROXIED -DHAV

Se pueden filtrar las líneas que contengan la palabra linux del archivo arch1.txt y luego mostrarlas en un paginador como less. $ cat arch1.txt | grep linux | less

Podemos enviar los resultados por correo a un amigo, con un asunto que diga "Tu archivo". $ cat arch1.txt | grep linux | mail -s 'Tu archivo' [email protected]

Redirección

En repetidas ocaciones en la vida de un sistema es mejor tener todo en archivos, ya sea para guardar algún historial o para automatizar ciertas funciones dentro de scripts.

Para almacenar o sacar información de archivos y vincularlas con entradas o salidas estándares se utilizan las Redirecciones. http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 39: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

La redirección se expresa con los símbolos "Mayor" > y "Menor" <. Y se pueden utilizar en forma simple o doble.

Utilizando el comando cat se puede hacer una copia de arch1.txt a arch2.txt utilizando redirección. $ cat arch1.txt > arch2.txt

O se puede redireccionar un archivo para visualizarlo con el comando less. $ less < arch1.txt

Redirección de escritura (salida)

Para escribir un archivo se utiliza >. Hay que tener mucho cuidado de no borrar un archivo sobreescribiéndolo. Cuando se utilizan redirecciones, debido a su utilidad en los scripts, "no se realizan confirmaciones".

Si el archivo a escribir ya existe desde antes, el redireccionador > lo sobreescribe con flujo de texto nuevo.

En cambio el operador >> realiza un agregado de texto en el flujo existente.

No hay nada mejor que un ejemplo clarificador: $ escribe-en-salida-estandar > archivo.txt

El (falso) comando escribe-en-salida-estándar http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 40: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

justamente hace eso, escribe unas cuantas cosas en salida estándar.

Puede ser un comando ls, un comando cal (calendario) o cualquier comando antes visto, así como también una combinación de comandos por tuberías.

En este punto, el contenido de archivo.txt es lo mismo que saldría en pantalla. Si ejecutamos otro comando redireccionado a archivo.txt (nuevamente), éste pierde su contenido y el resultado de la operación pasa a estar en el mismo.

Cuando se necesita tener una lista de acontecimientos, no se quiere que un acontecimiento nuevo borre a todos los anteriores. Para lograr esto agregamos en vez de sobreescribir. $ echo Este es el acontecimiento Nro. 1 > bitacora.log $ echo Este es el segundo acontecimiento >> bitacora.log

Va a escribir dos líneas en el archivo bitacora.log sin eliminar nada.

Ejemplo: Si queremos combinar el ejemplo de las tuberías con lo aprendido recientemente podríamos escribir: $ cat archivo.txt | sort | sacar-repetidas | diccionario >> glosario.txt

Redirección de lectura (entrada)

Para la lectura es el símbolo menor < y se utiliza de la siguiente manera: $ comando-que-acepta-stdin < archivo-de-entrada.txt

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 41: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Como por ejemplo: $ mail [email protected] [email protected] < correo.txt

Dónde correo.txt podría ser un archivo que se genere automáticamente... así como su contenido.

Otra facilidad para redireccionar entrada estándar es <<, que después de un comando, permite ingresar, por teclado, un texto que se constituirá en la entrada estándar.

A continuación de << debe ponerse una palabra, que indicará fin de entrada (en nuestro ejemplo, chau). La entrada estándar constará de las líneas que se digiten a continuación hasta la primera que contenga sólo la palabra que indicaba fin de entrada. Por ejemplo: $ sort <<chau > Perú > Argentina > Brasil > chau Argentina Brasil Perú

ordenará las palabras dadas (excepto chau que indica el fin de la entrada). Así, << es equivalente a editar un archivo y después redireccionarlo a la entrada estándar de un programa.

Crear, monitorear y matar procesos

Los estudiantes deberían poder administrar básicamente procesos. http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 42: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Objetivos clave Correr trabajos en primer y segundo plano. Comenzar un proceso que corra sin estar asociado a una terminal. Marcar un programa para que continue después del logout. Monitorear procesos activos. Seleccionar y ordenar procesos para verlos. Enviar señales a los procesos. Matar procesos, incluso aquellos que terminaron correctamente después que una sesión X se haya cerrado. Archivos, términos y utilidades & bg fg jobs kill nohup ps top killall

& Descripción

Este comando sirve para ejecutar un programa no interactivo en segundo plano. Agregando & al final del comando, bash comienza a ejecutarlo de una forma especial devolviendonos el control de prompt para seguir trabajando.. Ejemplos scp usuario@servidor:/home/usuario/imagen.iso . &

La salida standar nos va a indicar el número de proceso [1] 8962

En este caso el número de proceso es el 8962 http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 43: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

jobs Descripción

Este comando muestra una lista con las tareas detenidas mediante & o Control+Z. Ejemplos jobs [1]+ Stopped scp usuario@servidor:/home/usuario/imagen.iso [2]+ Stopped cdrecord -v -eject dev=0,0,0 speed=48 imagen2.iso

bg Descripción

bg es un comando que permite ejecutar en segundo plano una tarea anteriormente detenida mediante Control+Z, es decir, puede ser re-arancado en segundo plano. Ejemplos scp usuario@servidor:/home/usuario/imagen.iso . Control+Z jobs [1]+ Stopped scp usuario@servidor:/home/usuario/imagen.iso .

El [1] indica el numero de tarea detenida bg 1 [1]+ scp usuario@servidor:/home/usuario/imagen.iso .

Reiniciada la tarea 1 en segundo plano

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 44: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

fg Descripción

fg a difencia de bg es un comando que permite ejecutar en primer plano una tarea anteriormente detenida. Ejemplos

scp usuario@servidor:/home/usuario/imagen.iso . Control+Z jobs [1]+ Stopped scp usuario@servidor:/home/usuario/imagen.iso .

El [1] indica el numero de tarea detenida fg 1 scp usuario@servidor:/home/usuario/imagen.iso . password:

Como ven scp se vuelve interactivo nuevamente.

ps Descripción

El comando ps nos permite observar todos los procesos que se están ejecutando en la pc, el mismo es muy adaptable ya que tiene muchas opciones para mostrarnos los datos. La forma mas común de utilizarlo es ps aux. Además de mostrar la lista de procesos, nos indica: - Número http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 45: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

de proceso - Quien es el dueño - Cantidad de memoria consumida por el mismo - Cantidad de procesador consumida por el mismo - Hora de iniciado - Terminal desde la cual fue lanzado -

Estado Ejemplos ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 156 80 ? S 18:09 0:00 init [5] root 2 0.0 0.0 0 0 ? S 18:09 0:00 [migration/0] root 3 0.0 0.0 0 0 ? SN 18:09 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S 18:09 0:00 [watchdog/0] root 5 0.0 0.0 0 0 ? S< 18:09 0:00 [events/0] root 6 0.0 0.0 0 0 ? S< 18:09 0:00 [khelper] root 7 0.0 0.0 0 0 ? S< 18:09 0:00 [kthread] root 9 0.0 0.0 0 0 ? S< 18:09 0:00 [kblockd/0] root 10 0.0 0.0 0 0 ? S< 18:09 0:00 [kacpid] root 116 0.0 0.0 0 0 ? S 18:09 0:00 [pdflush] root 117 0.0 0.0 0 0 ? S 18:09 0:00 [pdflush] root 119 0.0 0.0 0 0 ? S< 18:09 0:00 [aio/0] root 118 0.0 0.0 0 0 ? S 18:09 0:00 [kswapd0] root 706 0.0 0.0 0 0 ? S< 18:09 0:00 [kseriod] root 767 0.0 0.0 0 0 ? S< 18:09 0:00 [kpsmoused] root 1069 0.0 0.0 0 0 ? S< 18:09 0:00 [khubd] root 1501 0.0 0.0 0 0 ? S 18:09 0:00 [khpsbpkt] root 2072 0.0 0.0 0 0 ? S< 18:09 0:00 [scsi_eh_0] root 2221 0.0 0.0 0 0 ? S 18:09 0:00 [shpchpd_event] root 3035 0.0 0.0 0 0 ? S< 18:09 0:00 [kgameportd] root 3596 0.0 0.2 1792 724 ? Ss 18:10 0:00 pump -i eth0 root 3898 0.0 0.2 1652 572 ? Ss 18:10 0:00 /sbin/syslogd root 3901 0.0 0.1 1600 380 ? Ss 18:10 0:00 /sbin/klogd root 3953 0.0 1.8 11108 4712 ? S 18:10 0:00 /usr/sbin/apache root 4041 0.0 0.2 1744 672 ? Ss 18:10 0:00 /usr/sbin/automount --pid-file=/var/run/autofs/_mnt_auto.pid --timeout=2 /mn root 4049 0.0 0.7 5972 1920 ? Ss 18:10 0:00 /usr/sbin/cupsd www-data 4053 0.0 0.6 11108 1724 ? S 18:10 0:00 /usr/sbin/apache www-data 4054 0.0 0.6 11108 1716 ? S 18:10 0:00 /usr/sbin/apache www-data 4055 0.0 0.6 11108 1716 ? S 18:10 0:00 /usr/sbin/apache www-data 4056 0.0 0.6 11108 1716 ? S 18:10 0:00 /usr/sbin/apache www-data 4057 0.0 0.6 11108 1716 ? S 18:10 0:00 /usr/sbin/apache http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 46: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

root 4508 0.0 0.5 2700 1336 ? S 18:10 0:00 /bin/sh /usr/bin/mysqld_safe mysql 4569 0.0 7.6 127260 19636 ? Sl 18:10 0:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid- root 4570 0.0 0.1 1584 504 ? S 18:10 0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld root 4634 0.0 0.4 3636 1024 ? Ss 18:10 0:00 /usr/sbin/sshd root 4733 0.0 0.8 8568 2276 ? Ss 18:10 0:00 sendmail: MTA: accepting connections root 4753 0.0 0.3 4436 812 ? Ss 18:10 0:00 /usr/sbin/squid -D -sYC proxy 4755 0.0 2.1 7416 5420 ? S 18:10 0:00 (squid) -D -sYC proxy 4757 0.0 0.1 1444 280 ? Ss 18:10 0:00 (unlinkd) daemon 4761 0.0 0.1 1852 416 ? Ss 18:10 0:00 /usr/sbin/atd root 4764 0.0 0.3 1868 820 ? Ss 18:10 0:00 /usr/sbin/cron root 4771 0.0 0.2 2640 620 ? Ss 18:10 0:00 /usr/bin/kdm root 4776 0.0 1.9 8788 4864 ? Ss 18:10 0:00 /usr/bin/perl /usr/share/webmin/miniserv.pl/etc/webmin/miniserv.conf root 4788 0.0 0.1 1596 496 tty1 Ss+ 18:10 0:00 /sbin/getty 38400 tty1 root 4800 0.0 0.1 1600 500 tty3 Ss+ 18:10 0:00 /sbin/getty 38400 tty3 root 4801 0.0 0.1 1600 492 tty4 Ss+ 18:10 0:00 /sbin/getty 38400 tty4 root 4802 0.0 0.1 1596 496 tty5 Ss+ 18:10 0:00 /sbin/getty 38400 tty5 root 4803 0.0 0.1 1596 496 tty6 Ss+ 18:10 0:00 /sbin/getty 38400 tty6 root 4854 4.2 8.6 23640 22012 ? S< 18:10 3:03 /usr/X11R6/bin/X -nolisten tcp -dpi 72 -br :0 vt7 -auth/var/run/xauth/A:0-3 root 4856 0.0 0.4 3256 1220 ? S 18:10 0:00 -:0 root 5045 0.0 0.1 1600 496 tty2 Ss+ 18:11 0:00 /sbin/getty 38400 tty2 guido 5095 0.0 0.6 5148 1628 ? Ss 18:11 0:00 /bin/sh /usr/bin/startkde guido 5126 0.0 0.2 3132 576 ? Ss 18:11 0:00 /usr/bin/ssh-agent /usr/bin/startkde guido 5149 0.0 2.7 25180 6996 ? Ss 18:11 0:00 kdeinit Running... guido 5152 0.0 0.9 24612 2412 ? S 18:11 0:00 dcopserver [kdeinit] --nosid guido 5154 0.0 3.0 26196 7696 ? S 18:11 0:00 klauncher [kdeinit] guido 5157 0.2 5.1 47140 13096 ? Sl 18:11 0:09 kded [kdeinit] guido 5173 0.0 3.3 26092 8588 ? S 18:11 0:00 kaccess [kdeinit] guido 5176 0.0 4.5 27872 11504 ? S 18:11 0:00 kxkb [kdeinit] guido 5177 0.0 0.1 1584 344 ? S 18:11 0:00 kwrapper ksmserver guido 5179 0.0 3.6 26296 9196 ? S 18:11 0:00 ksmserver [kdeinit] guido 5180 0.1 4.7 28720 12256 ? S 18:11 0:07 kwin [kdeinit] -session101a11bc130c1000114832797800000053190000_1153332512_ guido 5189 0.2 7.2 37300 18596 ? S 18:11 0:08 kdesktop [kdeinit] guido 5191 0.5 5.6 31936 14520 ? S 18:11 0:21 kicker [kdeinit] guido 5195 0.0 6.2 34228 15884 ? S 18:11 0:01 knotes -session101a11bc130c1000114951593800000052350081_1153332512_207602 guido 5198 0.1 5.3 30024 13756 ? S 18:11 0:07 kmix [kdeinit] -session101a11bc130c1000115144101400000117950006_1153332512_ guido 5199 1.6 4.7 35512 12052 ? S 18:11 1:11 gkrellm --sm-client-id101a11bc130c1000115283560600000054350008 guido 5201 0.0 2.7 25904 6912 ? S 18:11 0:00 kio_file [kdeinit] file /tmp/ksocket-guido/klauncherBBbA0a.slave-socket /tmp guido 5203 0.3 6.4 26236 16556 ? S 18:11 0:16 /usr/bin/gaim --session101a11bc130c1000115283550100000054350006 guido 5210 5.5 17.3 115224 44196 ? Sl 18:11 3:55 /usr/lib/mozilla-firefox/firefox-bin -a firefox guido 5214 0.0 4.1 33220 10680 ? S 18:11 0:00 knotify [kdeinit] guido 5238 0.0 0.9 6060 2372 ? S 18:11 0:00 /usr/lib/libgconf2-4/gconfd-2 9 guido 9915 2.7 3.6 52056 9448 ? Sl 19:04 0:30 xmms guido 11104 0.4 5.4 30972 14016 ? R 19:17 0:01 konsole [kdeinit] guido 11106 0.1 1.6 7660 4228 pts/1 Ss 19:17 0:00 /bin/bash ¿Cómo buscar un proceso específico con ps?

Se puede utilizar ps para buscar un proceso utilizando un tuberia de la siguiente forma ps aux | grep "nombre del proceso" http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 47: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

pstree Descripción

Este comando es muy similar a ps, solo que pstree nos muestra la información en modo de árbol. Es muy útil para acostumbrarse al concepto de procesos. Ejemplos $ pstree init-+-5*[agetty] |-bonobo-activati |-crond |-esd |-events/0 |-firefox---run-mozilla.sh---firefox-bin---5*[{firefox-bin}] |-gaim |-gconfd-2 |-gnome-keyring-d |-gnome-panel---{gnome-panel} |-gnome-settings----{gnome-settings-} |-gnome-terminal-+-bash---pstree | |-gnome-pty-helpe | `-{gnome-terminal} |-gnome-vfs-daemo---{gnome-vfs-daemo} |-gnome-volume-co |-gweather-applet |-jfsCommit |-jfsIO |-jfsSync |-kIrDAd |-khelper |-kjournald |-ksoftirqd/0 |-kswapd0 |-kthread-+-aio/0 | |-ata/0 | |-kacpid | |-kblockd/0 | |-kgameportd | |-khubd | |-kpsmoused | |-kseriod | |-2*[pdflush] | |-xfsdatad/0 | `-xfslogd/0 |-login---bash---gnome-session-+-Xgl---Xorg | |-compiz | `-gnome-window-de |-mapping-daemon |-migration/0 http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 48: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

|-mixer_applet2 |-nautilus---{nautilus} |-noip2 |-notification-ar |-pure-ftpd |-shpchpd_event |-stickynotes_app |-syslog-ng |-udevd |-urxvt---bash |-watchdog/0 `-wnck-applet

kill Descripción

Este comando es utilizado para enviar señales a los procesos ejecutandose, generalmente las señales mas utilizadas son para terminar procesos. Vamos a ver dos formas de utilizar este comando: - SIGTERM (-15), envia una petición al proceso para que este termine, es decir, no fuerza la detención. -

SIGKILL (-9), envia la señal para forzar las detención del proceso. Ejemplos kill -9 <número de proceso>

o kill -15 <número de proceso>

killall Descripción

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 49: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Este comando es muy similar al kill, solo que este puede terminar procesos mediante el nombre y al eliminar un proceso determinado elemina a todos los hijos Ejemplos killall apache

Envia la señal SIGKILL al servicio apache

nohup Descripción

nohup es utilizado para correr un comando suprimiendo la acción de la señal HUP (hangup), permitiendo al proceso seguir corriendo después de que el usuario que llamó al proceso se halla desconectado del sistema. El comando nohup produce un archivo con un detalle de sus usos. Ejemplos nohup wget http://www.gleducar.org.ar/imagen.iso

Después de esta linea, podemos desconectarnos del sistema sin dejar de bajar imagen.iso desde gleducar

Prioridades de ejecución de los procesos

Los estudiantes deberían poder administrar las prioridades de ejecución de los procesos. http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 50: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Objetivos clave Conocer la prioridad por defecto cuando un trabajo es creado. Correr un programa con prioridad más alta o más baja que la que viene por defecto. Cambiar la prioridad de procesos que están corriendo. Archivos, términos y utilidades nice ps renice top

nice Descripción

Este comando nos permite especificar el valor NI de un proceso deteterminado. Siendo superusuario podemos subir y bajar este valor (dando o quitando prioridad al proceso), y en caso de que seamos un usuario no priviligeado solo podremos quitarle prioridad al proceso. -

¿Qué es NI? NI es llamado el numero gentil o "nice number" , este numero es especificado por el "superusuario"("root") o dueño del proceso y afecta el orden final del PRI, le da prioridad a los menos gentiles.Sus valores oscilan desde -20 (menos gentil=mas prioridad) y 20 (mas gentil=menos prioridad). Ejemplos nice -10 <proceso> Esto bajaría la prioridad de <proceso> en 10 unidades.(Si estaba en -10, pasará a -20). nice +10 <proceso> Esto incrementaría la prioridad de <proceso> en 10 unidades.(Si estaba en 0, pasaría a +10).

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 51: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

ps Descripción

Este comando lista los procesos que estan teniendo lugar en el sistema con abundante información sobre ellos. Ejemplos

Usamos el comando ps para listar los procesos de forma completa: $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 4016 1.8 3.2 24640 16720 ? S 08:38 1:17 gaim

Ahora, para trabajar concretamente en conjunto con la demas herramientas de prioridad de procesos (nice, renice, snice) usamos ps de la siguiente forma: $ ps -la F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 3903 3902 5 75 0 - 24601 - tty1 00:04:48 Xgl

Usando -la se despliegan dos parámetros PRI y NI. El parámetro PRI indica la prioridad actual del proceso, que es calculada por el sistema operativo, el valor de NI es tomado en cuenta cuando se determina el PRI.

renice Descripción

Este comando nos permite reasignar la prioridad de un proceso que ya se encuentra en ejecución. http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 52: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Ejemplos

Veamos un ejemplo claro donde vamos a hacer que un proceso se ejecute con menos prioridad. Primero listamos los procesos con un simple ps: $ ps PID TTY TIME CMD 4096 pts/0 00:00:00 bash 4293 pts/0 00:00:00 analog

Ahora vamos a quitarle prioridad a la ejecución del proceso analog, con PID 4293: $ renice +10 4239 4293: old priority 0, new priority 10

top Descripción

Este comando lista, actualizandose cada 5 segundos, la actividad de la máquina (procesos que ocupan más memoria o CPU).

Una vez invocado, puede actualizarse inmediatamente (en lugar de esperar al intervalo) pulsando la barra espaciadora. Ejemplos

Ejecutamos el comando top y vemos en pantalla la información de los procesos en tiempo real: $ top top - 10:10:15 up 1:48, 3 users, load average: 0.12, 0.21, 0.26 Tasks: 68 total, 1 running, 67 sleeping, 0 stopped, 0 zombie Cpu(s): 23.2% us, 4.6% sy, 0.0% ni, 71.5% id, 0.0% wa, 0.3% hi, 0.3% si Mem: 515148k total, 502384k used, 12764k free, 12404k buffers Swap: 488336k total, 12k used, 488324k free, 260680k cached http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 53: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3903 root 16 0 108m 83m 10m S 21.9 16.5 5:35.15 Xgl 4094 root 15 0 29084 11m 8348 S 4.3 2.3 0:04.57 gnome-terminal 3906 root 15 0 9168 4272 3032 S 1.3 0.8 0:10.13 compiz

Archivos de texto y expresiones regulares

Los estudiantes deberían poder manipular archivos y texto usando expresiones regulares. Este objetivo incluye la creación de expresiones regulares simples que contengan los más importantes elementos no textuales. También incluye usar expresiones regulares para ejecutar búsquedas en el sistema de archivos o el contenido de los archivos. Objetivos clave Crear expresiones regulares simples conteniendo los más importantes elementos no textuales. Usar expresiones regulares para realizar búsquedas en el sistema de archivos o dentro de los archivos. Archivos, términos y utilidades grep sed

grep

sed

Edición de archivos de texto

Los estudiantes deberían poder editar http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 54: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

archivos de texto usando vi. Este objetivo incluye navegación con vi, modos básicos de vi, inserción, edición, borrado, copia y búsqueda de texto. Objetivos clave Navegar un documento usando vi. Uso de los modos básicos de vi (comandos, inserción y reemplazo) Insertar, editar, borrar, copiar y buscar texto. Archivos, términos y utilidades vi /, ? h,j,k,l G, H, L i, c, d, dd, p, o, a ZZ, :w!, :q!, :e! :!

vi

Vi es un editor de texto que se encuentra en (casi) todo sistema de tipo Unix, de forma que conocer rudimentos de Vi es una salvaguarda ante operaciones de emergencia en diversos sistemas operativos.

Abrir un archivo

Simplemente pasamos como parámetro el nombre del archivo a editar. Si no existe un archivo con tal nombre, al grabar nuestor trabajo en vi se guardará con dicho nombre: $ vi archivo

Modo Comando y Modo Inserción

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 55: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Vi es un editor con dos modos: edición y comandos. En el modo de edición el texto que ingrese será agregado al texto, en modo de comandos las teclas que oprima pueden representar algún comando de vi.

Edición simple

Posicionáte sobre el area del texto que quieras editar y presiona la tecla i o <Insertar>. Ahora estarás en condicione de agregar o eliminar texto. Para volver al modo comando tan solo presiona <Escape>.

En el modo comando, puedes efectuar alguna de las siguientes operaciones básicas: - x borra caracter - dw borra palabra - dd borra línea - r reemplaza un caracter sobre el cursor - R reemplaza un string de caracteres (sobreescribe) - cw cambia una palabra - s sustituye un caracter por un string -

. repite el ultimo cambio http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 56: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

Guardar el trabajo

Si lo que quieres es guardar los cambios en otro archivo, escribe :w nombrearchivo.txt para guardarlo como nombrearchivo.txt. Si quieres guardar y salir, teclea :x o :wq

Salir de vi

Escribiendo :q saldrás de vi. Si no funciona, seguramente se deberá a que, de alguna forma, has modificado el archivo accidentalmente. Para decirle a vi que queremos salir y descartar todos los cambios, escribiremos :q!. En estos momentos deberías estar en la línea de comandos.

Copiar, cortar y pegar Copiar y pegar

El procedimiento para copiar una ó más líneas, es el siguiente: - Colocarse en la primera línea a copiar. - Escribir el número de líneas que se desea copiar. - Teclear yy ó Y (comando yank ). http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 57: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

- Colocarse en la línea a donde se desean copiar -

Teclear p ó P (comando pegar ) Cortar y pegar

El procedimiento para mover una ó varias líneas es el siguiente: - Colocarse en la primera línea a cortar. - Escribir el número de líneas que se desea cortar. - Teclear dd (comando delete ). - Colocarse en la línea a donde se desean pegar -

Teclear p ó P (comando pegar)

Buscar y reemplazar Buscando

Para encontrar un string, hay que escribir una barra hacia la derecha (/) seguida por el string que se desea buscar, y pulsar return.

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03

Page 58: Introducción a la consola de comandos · interactuar con el bash shell y comandos desde una consola virtual. ... Probemos asignar una variable con set desde nuestra consola de comandos

El vi posiciona el cursor en la siguiente ocurrencia del string. Tecleando n se va a la siguiente ocurrencia del string, y pulsando N a la anterior.

Si en lugar de una barra se escribiese una interrogación (?), la búsqueda sería hacia atrás, y las direcciones de las órdenes n y N se invertirían. Reemplazando texto

El procedimiento para reemplazar un string está es similar al de búsqueda arriba mencionado. Todos los caracteres especiales de emparejamiento se pueden usar también en una búsqueda+reemplazamiento.

La forma básica de la orden es: :g/string_buscado/s//string_cambiado/g

Se puede modificar el comando para parar la búsqueda y hacer que el vi pida confirmación antes de realizar el reemplazo, mediante la orden gc (consult), respondiendo y (sí) o n (no).

Para terminar el proceso bastaría con pulsar Ctrl-C

http://www.gulbac.com.ar - gulBAC - Grupo de Usuarios GNU/Linux Buenos Aires CentralPowered by Mambo Open Source Generated: 22 October, 2006, 23:03