You are on page 1of 15

Cap tulo 2 Int erprete de comandos

NOTA: Este cap tulo est a reproducido parcialmente del libro: Linux: Instalaci on y primeros pasos del autor Matt Welsh. En las exploraciones en Linux, se comunicar a con el sistema a traves de un Int erprete de comandos. Un int erprete de comandos es un programa que toma la entrada del usuario y las traduce a instrucciones. Las ordenes que tecleamos son entradas de usuario. Podr amos comparar con el COMMAND.COM de MS-DOS, que hace la misma tarea. Tambien podemos decir que el interprete de comandos es solo un interface mas, como lo son tambien las X-Window, que permite ejecutar comandos usando el rat on y el teclado. Lo primero que hace el sistema cuando entramos en el es arrancar un interprete de comandos y ya podemos teclear ordenes en el sistema. Pasemos a un ejemplo. Aqu el usuario ubeda entra en el sistema y rapidamente es situado en el interprete de comandos: Debian GNU/Linux testing/unstable jupiter tty1 jupiter login: ubeda Password: Bienvenido a Jupiter amigo ;) ubeda@jupiter:\~\$ ubeda@jupiter:~$ es el prompt del interprete de comandos, esperando a que le ingresemos alguna orden. Intentemos hablar con el a ver que nos dice: ubeda@jupiter:\~$ hola bash: hola: command not found 1

CAP ITULO 2. INTERPRETE DE COMANDOS

Analicemos el mensaje obtenido: bash: es el int erprete de comandos que utilizamos. Bash es un compatible de sh. hola: es el mensaje que le hemos escrito command not found: es un mensaje de error que nos dice que el comando no ha sido encontrado. Ahora pongamos un ejemplo valido: ubeda@jupiter:\~$ mkdir hola Si ejecutamos posteriormente la siguiente orden, ubeda@jupiter:\~$ ls hola podemos comprobar que nos ha hecho caso, que no nos ha dado un error, y que ademas ha creado un directorio llamado hola. Despues de ver esto, podemos concluir de la siguiente manera: La primera palabra de la orden, mkdir, es el nombre de la orden a ejecutar. El resto de la orden es tomado como argumentos.

2.1.
2.1.1.

Comandos b asicos en Linux


Creando directorios: mkdir

Vamos a aprender a crear directorios, para posteriormente movernos por ellos. Vamos a usar el ejemplo anterior para aprender a utilizar mkdir para la creacion de directorios: ubeda@jupiter:\~$ mkdir hola Si ejecutamos posteriormente la siguiente orden, ubeda@jupiter:\~$ ls hola podemos comprobar que nos ha hecho caso, que ha creado un directorio llamado hola

2.1. COMANDOS BASICOS EN LINUX

2.1.2.

Moviendonos por el entorno: cd

Como podemos movernos por los directorios? La orden para movernos por la estructura de directorios de nuestro sistema es cd. Previamente debemos tener muy en cuenta que bajo muy pocos conceptos por no decir casi ninguno, debemos dejar escribir a un usuario fuera de su home. La eleccion de que pueda salir de su home, es personal de cada uno, pero debemos tener en cuenta que cuanto menos espacio de libertad dejemos a un usuario, menos tender a a probar cosas. La mayor a de los usuarios son movidos por la curiosidad, y estad seguros que experimentaran en vuestro sistema. La unica forma de tratar este problema es mediante una buena pol tica de permisos. Pode s imaginar un servidor como una carcel, en el que cada usuario es un preso, y no puede salir de su celda a menos que vosotros quera s. Puede ser una buena losof a para empezar a tratar a los usuarios. Esto llega a su maximo exponente con el llamado chroot, el cual pasaremos ligeramente por encima en cap tulos posteriores. Los pasos que llevamos hasta ahora, han sido la creacion de directorios y el listado de ellos. Vamos a ver cual es la sintaxis apropiada para movernos con cd por la estructura de directorio. Probemos a entrar dentro del directorio previamente creado, hola: ubeda@jupiter:\~$ cd hola Si hacemos un listado corto de cheros, comprobaremos que no tendremos nada que listar, puesto que dentro del directorio hola no hay contenido de cheros: ubeda@jupiter:\~hola$ ls En cambio, si que podemos notar que nuestro interprete de comandos sabe que nos hemos movido de directorio y que el directorio actual es hola dentro de nuestro home, como as lo reeja con el nombre del directorio. Un par de apuntes sobre cd: Si ejecutamos cd sin ningun parametro detras, nos llevara a nuestro home. Si ejecutamos cd .. iremos al directorio inmediatamente inferior al que estamos. Si ejecutamos

CAP ITULO 2. INTERPRETE DE COMANDOS cd /home/ubeda/hola nos llevar a al directorio hola de nuestro home. Si ejecutamos cd - iremos a parar al directorio en el que nos encontrabamos antes de cambiar de directorio.

2.1.3.

Mirando el contenido de los directorios: ls

Ahora que ya sabemos movernos por los directorios, probablemente pensaremos: El simple movimiento por el arbol de directorios es poco util, necesitamos un nuevo comando, ls. Este comando muestra por pantalla la lista de cheros y directorios, por defecto, los del directorio activo. Por ejemplo: ubeda@jupiter:\~\$ ls hola Aqu podemos ver que en nuestro home tenemos una entrada: hola. Esto no nos dice demasiado ... son cheros o directorios?. Podemos usar la opcion -F para obtener mas informacion: ubeda@jupiter:\~\$ ls -F hola/ Vemos que nos ha a nadido un caracter nuevo en el listado: la /. Esto lo que nos indica es que es un directorio. Tambi en podr a haber a nadido un * que nos indicar a que el chero es un ejecutable. Si no se a nade nada, es que nos encontramos delante de un chero normal. Tambien podremos utilizar la siempre util opcion -l, que nos hara un listado largo o detallado del directorio en el que nos encontremos por defecto, o de uno que le indiquemos. Vamos a introducir lo siguiente en el sistema: jupiter# ls -l total 1124 drwxr-xr-x 2 root drwxr-xr-x 2 root drwxr-xr-x 2 root -rw-r--r-- 1 root

root root root root

4096 Mar 24 21:10 bin 4096 Apr 26 00:56 boot 4096 Jul 5 2000 cdrom 1041132 Apr 25 21:22 david243

2.1. COMANDOS BASICOS EN LINUX drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxrwsr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x dr-xr-xr-x drwxr-xr-x drwxr-xr-x drwxrwxrwt drwxr-xr-x drwxr-xr-x lrwxrwxrwx drwxr-xr-x 5 root root 20480 Apr 30 20:07 dev 54 root root 4096 Apr 30 20:07 etc 2 root root 4096 Jul 5 2000 floppy 2 root root 4096 Apr 25 21:07 grab 4 root staff 4096 Apr 10 01:06 home 2 root root 4096 Jul 5 2000 initrd 4 root root 4096 Mar 24 21:08 lib 2 root root 16384 Mar 24 21:48 lost+found 2 root root 4096 May 27 2000 mnt 43 root root 0 Apr 30 2001 proc 11 root root 4096 Apr 25 22:03 root 2 root root 4096 Apr 25 02:11 sbin 4 root root 4096 Apr 30 20:07 tmp 14 root root 4096 Mar 24 20:57 usr 13 root root 4096 Mar 24 21:50 var 1 root root 19 Mar 24 21:48 vmlinuz -> boot/vmlinuz 24 root root 4096 Jan 1 1970 win

Como vemos nos ha aparecido un listado largo de todos los archivos que tenemos en una determinada maquina. Si empezamos a ver de izquierda a derecha encontramos: - : Tipo de archivo (directorio [d], enlace [l], archivo normal [-], etc..) -rw-rr- : Permisos del chero 1 : Numero de enlaces duros al chero, y numero de nombres root : Propietario del chero root : Grupo del chero 1041132 : Tama no en bytes Apr 25 21:22 : Fecha y hora de la ultima modicaci on (mtime) david243 : Nombre del archivo Tambien podemos ejecutar la orden: ls -lh

CAP ITULO 2. INTERPRETE DE COMANDOS

que nos mostrara el tamano de los cheros en MegaBytes (MB) o KiloBytes (KB) segun corresponda, pero nunca en bytes. Si ejecutamos ls seguido del nombre de un directorio, nos hara un listado de los cheros que contiene. Ejemplo: ls /etc

2.1.4.

Donde estoy?: pwd

El usuario puede denir el directorio en el cual quiere trabajar, a dicho directorio se le llama directorio de trabajo, con ello, las referencias que hagamos a los archivos sin dar el camino desde la ra z son buscados en el directorio de trabajo. Cuando un usuario se conecta a su cuenta, el directorio de trabajo se dene como su directorio home como hemos comentado con anterioridad. Podemos averiguar en que directorio se esta trabajando mediante el comando: ubeda@jupiter:\~$ pwd /home/ubeda Recordemos que el s mbolo /.al comienzo del camino se nala que el directorio esta referenciado a partir de la ra z del disco.

2.1.5.

Copiando cheros: cp

La copia de cheros es efectuada por la orden cp. Primero crearemos un chero vac o con la orden touch y despu es lo copiaremos a distintos lugares: ubeda@jupiter:\~$ ubeda@jupiter:\~$ adios ubeda@jupiter:\~$ ubeda@jupiter:\~$ adios hastaluego touch adios ls cp adios hastaluego ls

Como podemos ver, hemos realizado una copia del chero adios que hab amos creado, y lo hemos copiado al mismo directorio en el que nos encontramos, es decir, nuestro home. A continuaci on vamos a copiar ese mismo chero, adios dentro del directorio hola:

2.1. COMANDOS BASICOS EN LINUX ubeda@jupiter:\~$ cp adios hola ubeda@jupiter:\~$ ls hola adios Como vemos en el listado del chero, se ha copiado correctamente.

2.1.6.

Moviendo cheros: mv

La orden mv mueve cheros en lugar de copiarlos, y es tan sencillo de utilizar como cp: ubeda@jupiter:\~$ mv adios quetal ubeda@jupiter:\~$ ls hola quetal Vemos que el chero adios ya no existe, y en su lugar tenemos el chero quetal. Tambien podemos usar esta orden para mover cheros a otros directorios. NOTA: mv y cp sobreescribiran los cheros destino (si ya existen) sin consultar. Debemos tener cuidado al mover o copiar un chero a otro directorio, ya que tal vez exista en ese directorio un chero con el mismo nombre.

2.1.7.

Borrando cheros y directorios: rm

Para borrar un chero debemos usar la orden rm. (rm viene de remove). ubeda@jupiter:\~$ rm quetal ubeda@jupiter:\~$ ls hola Vemos que hemos borrado el chero quetal. Pero... como se borra un directorio? ubeda@jupiter:\~$ rm hola ubeda@jupiter:\~$ ls Vemos que no nos aparece ningun chero ni ningun directorio, ya que con la opcion -r usamos el modo recursivo de rm y as borramos los directorios y todo su contenido.

CAP ITULO 2. INTERPRETE DE COMANDOS

2.1.8.

Mas comandos

Sintaxis: Descripcion: Ejemplo cat ch1 [...chN ] Concatena y muestra archivos: cat /etc/passwd du [-sabr ch] Reporta el tama no del directorio : du -s /home/ locate chero Muestra la ubicacion de un chero : locate adios grep [-cilnv expr archivos] Busca patrones en archivos : grep mike /etc/passwd less / more ch(s) Visualiza pagina a pagina un archivo.: more muylargo.c ln -s ch acceso Crea un acceso directo a un archivo : ln -s adios nunca rmdir dir Borra un directorio vac o : rmdir hello

2.2.

Redireccion de entrada y salida, y pipes

Cada programa que nosotros ejecutamos puede utilizar el teclado, si necesita leer alguna informacion, y la pantalla, si necesita escribir, ellos son conocidos como la entrada standard (stdin) y la salida standard (stdout) respectivamente. Ademas, pueden ser redenidos, es decir, podemos indicar a un programa que las lecturas que hac a del teclado ahora las haga de algun archivo, o que, la salida que era dirigida a la pantalla puede ser redirigida a otro archivo, incluso a otro programa. Debe notarse ademas que Unix interpreta los dispositivos como si fueran simples archivos (todos ellos en el directorio /dev), por lo que las redirecciones de entrada y salida pueden ser hechas de la misma forma a dispositivos. La forma de realizar las redirecciones es mediante el uso de los caracteres: < Redirecciona la entrada leyendo desde un archivo. > Redirecciona la salida escribiendo en un archivo. | Conecta la salida del primer programa con la entrada del siguiente. As , si quisieramos guardar la salida del comando ls -l en el archivo salida se realiza de la forma: ls -l >salida

2.2. REDIRECCION DE ENTRADA Y SALIDA, Y PIPES

Si tuvieramos el comando prom, que calcule el promedio de una lista de numeros que son ingresados por teclado, y contamos con el archivo numeros.dat que contiene una lista de numeros, podriamos calcular su promedio con el comando: prom <numeros.dat 4.5 Notemos que la salida de dicho programa es mostrada en la pantalla, por lo que tambi en podr a ser redireccionada, por ejemplo: prom <numeros.dat >promedio De esta forma, el programa prom lee sus datos del archivo numeros.dat y su salida es guardada en el archivo promedio. Notemos que el orden en que se especiquen la entrada y la salida es irrelevante, lo importante es que el archivo de salida este luego del caracter > y el de entrada luego del caracter < sin importar el numero de espacios entre ellos, entonces, el ejemplo anterior es totalmente equivalente con: prom >promedio <numeros.dat El caracter | redirecciona la salida del comando de la izquierda con la entrada del comando de la derecha, si por ejemplo, quisieramos ver la lista de todos los usuarios conectados ordenada alfabeticamente, necesitaremos el comando who que muestra la lista de usuarios en la pantalla, y el comando sort, que ordena su entrada, y damos los comandos de la forma: who | sort ajara tt03 Nov 14 15:44 cdiaz tt01 Nov 14 10:09 jperez tt07 Nov 14 12:25 rsalas tt02 Nov 14 09:35 tvera tt05 Nov 14 16:45 Si ademas quisieramos guardar esta lista en el archivo usuarios, lo podemos indicar de la forma: who | sort >usuarios Cabe destacar que cuando hacemos una redireccion a un archivo, si este no exist a, entonces se crea, en caso de existir, se borra y se crea un archivo con la nueva informaci on. Si queremos dejar la salida de un programa al nal de un archivo que ya existe se hace de la forma:

10

CAP ITULO 2. INTERPRETE DE COMANDOS

comando >> archivo.existente Los caracteres >> agregan la salida de comando al nal del archivo archivo.existente, si este archivo no existia entonces se crea.

2.2.1.

Control de Tareas y Procesos

Control de Tareas es una utilidad incluida en muchos shells (incluidas Bash y Tcsh), que permite el control de multitud de comandos o tareas al momento. Antes de seguir, deberemos hablar un poco sobre los procesos. Cada vez que usted ejecuta un programa, usted lanza lo que se conoce como proceso, que es simplemente el nombre que se le da a un programa cuando se esta ejecutando. El comando ps visualiza la lista de procesos que se estan ejecutando actualmente, por ejemplo: ubeda@jupiter:\~$ ps PID TTY TIME CMD 400 pts/1 00:00:00 bash 463 pts/1 00:00:00 ps La columna PID representa el identicador de proceso. La ultima columna CMD, es el nombre del proceso que se esta ejecutando. Ahora solo estamos viendo los procesos que esta ejecutando ubeda. Vemos que hay dos procesos, bash (Que es el shell o interprete de comandos que usa ubeda), y el propio comando ps. Como puede observar, bash se ejecuta concurrentemente con el comando ps. bash ejecut o ps cuando ubeda tecleo el comando. Cuando ps termina de ejecutarse (despues de mostrar la tabla de procesos), el control retorna al proceso bash, que muestra el prompt, indicando que esta listo para recibir otro comando. Un proceso que esta corriendo se denomina tarea para el shell. Los terminos proceso y tarea, son intercambiables. Sin embargo, se suele denominar tarea a un proceso, cuando es usado en conjunci on con control de tareas, que es un rasgo del shell que permite cambiar entre distintas tareas. Hay muchos mas procesos aparte de estos corriendo en el sistema, para verlos todos, teclearemos el comando ps -aux

2.2. REDIRECCION DE ENTRADA Y SALIDA, Y PIPES

11

En muchos casos, los usuarios solo ejecutan un trabajo cada vez, que es el ultimo comando que ellos teclearon desde el shell. Sin embargo, usando el control de tareas, usted podra ejecutar diferentes tareas al mismo tiempo, cambiando entre cada uno de ellos conforme lo necesite. Cuan benecioso puede llegar a ser esto?. Supongamos que esta usted con su procesador de textos, y de repente necesita parar y realizar otra tarea, con el control de tareas, usted podra suspender temporalmente el editor, y volver al shell para realizar cualquier otra tarea, y luego regresar al editor como si no lo hubiese dejado nunca. Lo siguiente solo es un ejemplo, hay montones de usos practicos del control de tareas. Conceptos de primer y segundo plano Un proceso puede estar en Primer plano o en Segundo plano. Solo puede haber un proceso en primer plano al mismo tiempo, el proceso que esta en primer plano, es el que interact ua con usted recibe entradas de teclado, y envia las salidas al monitor. (Salvo, por supuesto, que haya redirigido la entrada o la salida). El proceso en segundo plano, no recibe ninguna se nal desde el teclado, por lo general, se ejecutan en silencio sin necesidad de interaccion. Algunos programas necesitan mucho tiempo para terminar, y no hacen nada interesante mientras tanto. Compilar programas es una de estas tareas, asi como comprimir un chero grande. No tiene sentido que se siente y se aburra mientras estos procesos terminan. En estos casos es mejor lanzarlos en segundo plano, para dejar el ordenador en condiciones de ejecutar otro programa. Los procesos pueden ser suspendidos. Un proceso suspendido es aquel que no se esta ejecutando actualmente, sino que esta temporalmente parado. Despues de suspender una tarea, puede indicar a la misma que continue, en primer plano o en segundo, segun necesite. Retomar una tarea suspendida no cambia en nada el estado de la misma, la tarea continuara ejecutandose justo donde se dej o. Tenga en cuenta que suspender un trabajo no es lo mismo que interrumpirlo. Cuando usted interrumpe un proceso (generalmente con la pulsacion de ctrl-C), el proceso muere, y deja de estar en memoria y utilizar recursos del ordenador. Una vez eliminado, el proceso no puede continuar ejecutandose, y debera ser lanzado otra vez para volver a realizar sus tareas. Tambien se puede dar el caso de que algunos programas capturan la interrupcion, de modo que pulsando ctrl-C no se para inmediatamente. Esto se hace para

12

CAP ITULO 2. INTERPRETE DE COMANDOS

permitir al programa realizar operaciones necesarias de limpieza antes de terminar. De hecho, algunos programas simplemente no se dejan matar por ninguna interrupci on. Envio a segundo plano y eliminacion de procesos Empecemos con un ejemplo sencillo. El comando yes es un comando aparentemente inutil que envia una serie interminable de y-es a la salida estandar. (Realmente es muy util. Si se utiliza una tuber a (o pipe) para unir la salida de yes con otro comando que haga preguntas del tipo si/no, la serie de y-es conrmara todas las preguntas.) Pruebe con esto. ubeda@jupiter:\~$ yes y y y y y La tecla de interrupci on puede denirse usando el comando stty. Por defecto, en la mayor a de sistemas es ctrl-C, pero no se puede garantizar que sea la misma en su sistema. La serie de y-es continuara hasta el innito, a no ser que usted la elimine, pulsando la tecla de interrupcion, generalmente ctrl-C. Tambien puede deshacerse de esta serie de y-es redigiriendo la salida estandar de yes hacia /dev/null, que como recordara es una especie de agujero negro o papelera para los datos. Todo lo que usted envie alli, desaparecera. ubeda@jupiter:~$ yes >/dev/null Ahora va mucho mejor, el terminal no se ensucia, pero el prompt de la shell no retorna. Esto es porque yes sigue ejecut andose y enviando esos inutiles y-es a /dev/null. Para recuperarlo, pulse la tecla de interrupcion. Supongamos ahora que queremos dejar que el comando yes siga ejecutandose, y volver al mismo tiempo a la shell para trabajar en otras cosas. Para ello nos enviaremos a yes a segundo plano, lo que nos permitira ejecutarlo, pero sin necesidad de interaccion. Una forma de mandar procesos a segundo plano es a nadiendo un caracter & al nal de cada comando.

2.2. REDIRECCION DE ENTRADA Y SALIDA, Y PIPES ubeda@jupiter:~$ yes >/dev/null & [1] 164

13

Como podra ver, ha regresado a la shell. Pero que es eso de [1] 164, se esta ejecutando realmente el comando yes? [1] representa el numero de tarea del proceso yes. La shell asigna un numero a cada tarea que se este ejecutando. Como yes es el u nico comando que se esta ejecutando, se le asigna el numero de tarea 1. El numero 164 es el numero de identicaci on del proceso, o PID, que es el numero que el sistema le asigna al proceso. Ambos numeros pueden usarse para referirse a la tarea como veremos despues. Ahora usted tiene el proceso yes corriendo en segundo plano, y enviando constantemente la se nal y hacia el dispositivo /dev/null. Para chequear el estado del proceso, utilice el comando interno de la shell jobs: ubeda@jupiter:\~$jobs [1]+ Running yes >/dev/null & Ah est a!. Tambien puede usar el comando ps, como mostramos antes, para comprobar el estado de la tarea. Para eliminar una tarea, utilice el comando kill. Este comando toma como argumento un numero de tarea o un numero de ID de un proceso. Esta era la tarea 1, as que usando el comando kill \%1 matar a la tarea. Ahora que ya hemos matado la tarea, podemos usar el comando jobs de nuevo para comprobarlo: ubeda@jupiter:\~$jobs [1]+ Terminated yes >/dev/null La tarea esta, en efecto, muerta, y si usa el comando jobs de nuevo, no mostrara nada. Tambien podr a matar la tarea usando el numero de ID de proceso (PID), el cual se muestra conjuntamente con el ID de tarea cuando arranca la misma. En nuestro ejemplo el ID de proceso es 164, as que el comando ubeda@jupiter:~$kill 164 es equivalente a ubeda@jupiter:~$kill %1 No es necesario usar el % cuando nos referimos a una tarea a traves de su ID de proceso

14

CAP ITULO 2. INTERPRETE DE COMANDOS

Parada y relanzamiento de tareas Hay otra manera de poner una tarea en segundo plano. Usted puede lanzarlo como un proceso normal (en primer plano), pararlo, y despues relanzarlo en segundo plano. Primero, lance el proceso yes en primer plano como lo har a normalmente: ubeda@jupiter:~$yes >/dev/null De nuevo, dado que yes corre en primer plano, no debe retornar el prompt de la shell. Ahora, en vez de interrumpir la tarea con ctrl-C, suspenderemos la tarea. El suspender una tarea no la mata: solamente la detiene temporalmente hasta que Ud. la retoma. Para hacer esto usted debe pulsar la tecla de suspender, que suele ser ctrl-Z. ubeda@jupiter:\~$yes > /dev/null ctrl-Z [1]+ Stopped yes >/dev/null Mientras el proceso esta suspendido, simplemente no se esta ejecutando. No gasta tiempo de CPU en la tarea. Sin embargo, usted puede retomar el proceso de nuevo como si nada hubiera pasado. Continuara ejecutandose donde se dejo. Para relanzar la tarea en primer plano, use el comando fg (del ingles foreground). ubeda@jupiter:\~$ fg yes >/dev/null La shell muestra el nombre del comando de nuevo, de forma que tenga conocimiento de que tarea es la que ha puesto en primer plano. Pare la tarea de nuevo, con ctrl-Z. Esta vez utilice el comando bg para poner la tarea en segundo plano. Esto hara que el comando siga ejecut andose igual que si lo hubiese hecho desde el principio con & como en la secci on anterior. ubeda@jupiter:\~$ bg [1]+ yes >/dev/null & Y tenemos de nuevo el prompt. El comando jobs deber a decirnos que yes se esta ejecutando, y podemos matar la tarea con kill tal y como lo hicimos antes.

2.2. REDIRECCION DE ENTRADA Y SALIDA, Y PIPES

15

C omo podemos parar la tarea de nuevo? Si pulsa ctrl-Z no funcionara, ya que el proceso esta en segundo plano. La respuesta es poner el proceso en primer plano de nuevo, con el comando fg, y entonces pararlo. Como puede observar podr a usar fg tanto con tareas detenidas, como con las que est en segundo plano. Hay una gran diferencia entre una tarea que se encuentra en segundo plano, y una que se encuentra detenida. Una tarea detenida es una tarea que no se esta ejecutando, es decir, que no usa tiempo de CPU, y que no esta haciendo ningun trabajo (la tarea aun ocupa un lugar en memoria, aunque puede ser volcada a disco). Una tarea en segundo plano, se esta ejecutando, y usando memoria, a la vez que completando alguna acci on mientras usted hace otro trabajo. Sin embargo, una tarea en segundo plano puede intentar mostrar texto en su terminal, lo que puede resultar molesto si esta intentando hacer otra cosa. Por ejemplo, si usted uso el comando ubeda@jupiter:~$yes & sin redirigir stdout a /dev/null, una cadena de y-es se mostraran en su monitor, sin modo alguno de interrumpirlo (no puede hacer uso de ctrl-C para interrumpir tareas en segundo plano). Para poder parar esas interminables y-es, tendr a que usar el comando fg para pasar la tarea a primer plano, y entonces usar ctrl-C para matarla. Otra observaci on: Normalmente, los comandos fg y bg actuan sobre el ultimo proceso parado (indicado por un + junto al numero de tarea cuando usa el comando jobs). Si usted tiene varios procesos corriendo a la vez, podra mandar a primer o segundo plano una tarea especica indicando el ID de tarea como argumento de fg o bg, como en: ubeda@jupiter:~$fg %2 (para la tarea de primer plano numero 2). Solo recordarle que el uso de control de tareas es una utilidad de la shell. Los comandos fg, bg y jobs son internos de la shell. Si por algun motivo usted utiliza una shell que no soporta control de tareas, no espere disponer de estos comandos. Y adem as, hay algunos aspectos del control de tareas que dieren entre Bash y Tcsh. De hecho, algunas shells no proporcionan ning un control de tareas, sin embargo, la mayor a de las shells disponibles para Linux soportan control de tareas.