| (No se muestran 20 ediciones intermedias realizadas por 4 usuarios) | |||
| Línea 1: | Línea 1: | ||
| − | + | Los '''procesos''' que se encuentren en ejecución en un determinado momento serán, en general, de diferente naturaleza. Podemos encontrar: | |
| − | + | * Procesos de sistema, o bien procesos asociados al funcionamiento local de la máquina y del [[kernel]], o bien procesos (denominados [[daemon|daemons]]) asociados al control de diferentes servicios, ya sean locales, o de red, porque estamos ofreciendo el servicio (actuamos de [[servidores|servidor]]) o estamos recibiendo el servicio (actuamos de clientes). La mayoría de estos procesos aparecerán asociados al usuario root, aunque no estemos presentes en ese momento como usuarios. Puede haber algunos servicios asociados a otros usuarios de sistema (lp, bin, www, mail, etc.), estos son usuarios “virtuales” que utiliza el sistema para ejecutar ciertos procesos. | |
| − | + | * Procesos del usuario administrador: en caso de actuar como root, nuestros procesos interactivos o aplicaciones lanzadas también aparecerán como procesos asociados al usuario root. | |
| − | + | * Procesos de usuarios del sistema: asociados a la ejecución de sus aplicaciones, ya sea tareas interactivas en modo texto o en modo gráfico. | |
| − | : | + | |
| − | + | Como comandos rápidos y más útiles podemos utilizar: | |
| − | + | * '''ps''': el comando estándar, lista los procesos con sus datos de usuario, tiempo, identificador de proceso y línea de comandos usada. Una de las opciones utilizada es ps ef, pero hay muchas opciones disponibles (ver man). | |
| − | + | * '''top''', '''htop''': una versión que nos da una lista actualizada a intervalos. | |
| − | + | * '''kill''': permite enviar señales a procesos como, por ejemplo, la de terminación kill -9 PID,donde indicamos el identificador del proceso. Útil para procesos con comportamiento inestable o programas interactivos que han dejado de responder. | |
| − | + | ||
| − | + | == Redireccionamientos == | |
| − | + | ||
| − | :: | + | Cualquier proceso tiene una entrada estándar (stdin) y una salida hacia dos archivos conocidos como stdout y stderr. |
| − | :: | + | Veamos un ejemplo: |
| − | + | * Ejecutamos un comando por medio del teclado. En este caso la entrada estándar es el teclado. | |
| − | : | + | * Una vez que el proceso comienza tendremos una salida con dos archivos, stdout y stderr, aunque uno de los dos estará vacío y por lo tanto solo veremos el otro. |
| − | : | + | Normalmente la salida stdout es la pantalla, pero si hubo un error en la ejecución del proceso la salida por pantalla corresponderá a stderror con un mensaje de error. Normalmente ambas salidas están unificadas hacia la pantalla. |
| − | : | + | Para comprender mejor qué es lo que sucede vamos a redireccionar la salida a otro archivo. Para esto utilizamos como redireccionador el símbolo `>`. Con esto conseguimos redireccionar a otro archivo el contenido de la salida. Este tipo de redireccionamiento borra lo que hubiese anteriormente en el archivo. Si queremos copiar el nuevo contenido debajo de la información ya existente sin borrar nada, podemos usar `>>` en lugar de `>` |
| + | |||
| + | === Redireccionando un proceso a un archivo === | ||
| + | |||
| + | Vamos a listar todo lo que haya en directorio raíz de la siguiente manera: | ||
| + | |||
| + | ls / | ||
| + | |||
| + | En este caso la salida nos mostrará algo así como: | ||
| + | |||
| + | bin dev initrd lib mnt root sys var | ||
| + | boot etc initrd.img lost+found opt sbin tmp vmlinuz | ||
| + | cdrom home initrd.img.old media proc srv usr vmlinuz.old | ||
| + | |||
| + | Para redireccionar esta salida (o sea que en lugar de salir por pantalla lo haremos hacia un archivo) debemos ejecutar el siguiente comando: | ||
| + | ls / > listar.txt | ||
| + | |||
| + | Si ahora quisiéramos ver el resultado por pantalla no veríamos nada ya que fue redireccionado al archivo `listar.txt` | ||
| + | Para ver el contenido de este archivo podemos hacer lo siguiente: | ||
| + | cat listar.txt | ||
| + | |||
| + | Y veremos lo siguiente | ||
| + | boot cdrom dev etc home initrd initrd.img initrd.img.old lib lost+found | ||
| + | media mnt opt proc root sbin srv sys tmp usr var vmlinuz vmlinuz.old | ||
| + | |||
| + | Si comparamos el resultado veremos que es el mismo que obtuvimos cuando hicimos `ls`antes de redireccionar. | ||
| + | |||
| + | === Error de proceso === | ||
| + | |||
| + | ¿Qué pasaría si pedimos al sistema que nos muestre un proceso que tiene un error? Hagamos una prueba | ||
| + | |||
| + | ls /xxx | ||
| + | |||
| + | Como el directorio/archivo xxx no existe, se va a generar un error. | ||
| + | |||
| + | ls: xxx: No existe el fichero o directorio | ||
| + | |||
| + | Podemos hacer lo siguiente: | ||
| + | ls /xxx >pepe.txt 2>>xerror.log | ||
| + | root@losindios:~# cat xerror.log | ||
| + | ls: /xxx: No existe el fichero o directorio | ||
| + | |||
| + | Esto significa que hemos redireccionado la salida del error de 'ls / xxx' a un archivo llamado pepe.txt y mediante el número 2 estamos redirigiendo a un archivo xerror.log la salida de error estándar. | ||
| + | Mientras que el número 0 indica entrada estándar, el número 1 indica salida estándar y el número 3 indica error estándar | ||
| + | |||
| + | === Procesos en primer y segundo plano === | ||
| + | |||
| + | Un proceso que corre en primer plano (`fg` de foreground) normalmente es aquél que ingresamos por teclado y podemos ver por pantalla. Los procesos tipo demonio no corren en primer plano, sino en segundo, no son llamados desde una terminal (tty) sino desde un puerto, y no aparecen en pantalla. Si queremos pasar un proceso que está corriendo en primer plano a segundo plano, podemos utilizar el símbolo `&`Veamos un ejemplo: | ||
| + | top& | ||
| + | |||
| + | Y el sistema nos devuelve algo como | ||
| + | [1] 11068 | ||
| + | |||
| + | Vemos que no apareció por pantalla el resultado de `top`con los procesos que hay corriendo en el sistema sino un número de trabajo asignado y el PID (Process ID) correspondiente. No es que `top` no esté corriendo sino que lo está haciendo en background. | ||
| + | |||
| + | === Usando jobs === | ||
| + | |||
| + | Si utilizamos `jobs`podremos ver los procesos que están corriendo en 2do.plano. Veamos cómo: | ||
| + | jobs | ||
| + | |||
| + | Y el sistema nos devolverá | ||
| + | jobs | ||
| + | [1]+ Stopped top | ||
| + | |||
| + | === Capturando ambas salidas en un solo archivo === | ||
| + | |||
| + | Podemos capturar stdout y stderr en un solo archivo mediante el siguiente comando: | ||
| + | ls /xxx > listar.txt 2>&1 | ||
| + | root@losindios:~# cat listar.txt | ||
| + | |||
| + | Y el 'cat' nos devuelve: | ||
| + | |||
| + | ls: /xxx: No existe el fichero o directorio | ||
| + | |||
| + | De esta manera podremos ver ambas salidas pero solo de la última vez que ejecutamos este comando. Si quisiéramos contar con un log completo de procesos podríamos utilizar un comando llamado `cron` para automatizar el comando anterior y que se repita cada cierta cantidad de veces en distintos horarios. Para que la captura no borre los resultados anteriores debemos escribir el comando en la siguiente forma | ||
| + | ls /xxx >> listar.txt 2>&1 | ||
| + | |||
| + | De esta forma el archivo conservará las entradas anteriores sin borrar nada. | ||
| + | |||
| + | === Redirecciones, usando pipes (tuberías, fontanerías) === | ||
| + | |||
| + | Lo que hace 'pipes' es tomar una salida de un proceso y convertirla en la entrada estándar de otro proceso. El símbolo para hacerlo es '|' que normalmente se obtiene mediante la combinación de teclas AltGr + 1 (puede ser diferente en otros teclados.) | ||
| + | A veces cuando queremos ver un archivo demasiado grande por pantalla, estamos frente a un problema. Si el archivo tiene más contenido que lo visible en la pantalla, éste pasará muy rápido y solo veremos la parte final. Veamos un ejemplo: | ||
| + | |||
| + | ls -R / | ||
| + | |||
| + | La 'R' significa recursividad, es decir que nos va a mostrar todos los directorios/subdirectorios y archivos que se encuentren dentro de '/' Veremos algo que corre por la pantalla a gran velocidad y solo será visible al última parte del proceso 'ls' por tratarse de demasiado contenido para una sola pantalla. | ||
| + | Tal cual vimos en su momento, el comando 'less' imprime en pantalla solo una parte del contenido total, equivalente a lo que puede verse en una pantalla completa y no más. Mediante las teclas de dirección 'arriba' y 'abajo' es posible desplazarse por la pantalla para ver todo el contenido de un archivo. | ||
| + | |||
| + | Entonces podemos escribir lo siguiente: | ||
| + | ls -R / | less | ||
| + | |||
| + | De esta forma redireccionamos la salida del proceso 'ls' a la entrada de otro proceso llamado 'less' lo que nos permitirá ver el archivo estándar de salida 'ls' por partes. | ||
| + | Veamos otro ejemplo donde podemos utilizar 'pipes' | ||
| + | |||
| + | ==== Pipes con el comando grep ==== | ||
| + | |||
| + | Como recordamos 'grep' nos permite filtrar un archivo, su contenido, un grupo de archivos, etc que tengan coincidencia con una cadena de caracteres. Por ejemplo vamos a buscar los archivos que tengan extensión 'txt' y que se encuentren dentro del directorio 'home' | ||
| + | |||
| + | ls -R /home | grep .txt | ||
| + | |||
| + | Y el sistema nos devuelve: | ||
| + | listar.txt | ||
| + | ls.txt | ||
| + | |||
| + | Lo que hemos hecho es buscar mediante ls -R /home en forma recursiva todos los directorios, subdirectorios y archivos dentro de /home, luego enviamos la salida de este proceso a la entrada de uno nuevo llamado 'grep'. Este último actuará como filtro utilizando la cadena de caracteres '.txt' | ||
| + | |||
| + | === Utilizando bg === | ||
| + | |||
| + | Mientras que '&' lleva a segundo plano un proceso existente en primer plano, 'bg' lo reinicia en segundo plano. 'bg' no utiliza el nombre del proceso ni el PID sino el número de trabajo. | ||
| + | bg %1 | ||
| + | |||
| + | === Utilizando fg === | ||
| + | |||
| + | Mientras que 'bg' es background o segundo plano, 'fg' es foreground o primer plano. Lo que hace este comando es traer a primer plano un proceso que normalmente corre en segundo plano, utilizando también el número de trabajo. | ||
| + | Ejemplo: | ||
| + | fg %1 | ||
| + | |||
| + | === Ctrl+Z === | ||
| + | |||
| + | Para pasar a segundo plano un proceso que corre en primer plano, podemos también utilizar Ctrl + Z | ||
| + | |||
| + | == Fuentes == | ||
| + | |||
| + | *© Fundació per a la Universitat Oberta de Catalunya | ||
| + | : Av. Tibidabo, 39-43, 08035 Barcelona | ||
| + | : Material realizado por Eureca Media, SL | ||
| + | : © Autores: Josep Jorba Esteve y Remo Suppi Boldrito | ||
| + | : Depósito legal: B-7.597-2004 | ||
| + | : ISBN: 84-9788-116-8 | ||
| + | : Se garantiza permiso para copiar, distribuir y modificar este documento según los términos de la GNU Free Documentation License, | ||
| + | : Version 1.2 o cualquiera posterior publicada por la Free Software Foundation , sin secciones invariantes ni textos de cubierta | ||
| + | : delantera o trasera. Se dispone de una copia de la licencia en el apartado “GNU Free Documentation License” de este curso. Puede | ||
| + | : encontrarse una versión de la última versión de este documento en http://curso-sobre.berlios.de/introsobre. | ||
| + | |||
| + | * http://superalumnos.net/curso-gratuito-gnu-linux-intermedio | ||
| + | |||
| + | <!-- Categorías --> | ||
| + | [[Categoría:Sistema Linux]] | ||
Los procesos que se encuentren en ejecución en un determinado momento serán, en general, de diferente naturaleza. Podemos encontrar:
Como comandos rápidos y más útiles podemos utilizar:
Contenido
|
Cualquier proceso tiene una entrada estándar (stdin) y una salida hacia dos archivos conocidos como stdout y stderr. Veamos un ejemplo:
Normalmente la salida stdout es la pantalla, pero si hubo un error en la ejecución del proceso la salida por pantalla corresponderá a stderror con un mensaje de error. Normalmente ambas salidas están unificadas hacia la pantalla. Para comprender mejor qué es lo que sucede vamos a redireccionar la salida a otro archivo. Para esto utilizamos como redireccionador el símbolo `>`. Con esto conseguimos redireccionar a otro archivo el contenido de la salida. Este tipo de redireccionamiento borra lo que hubiese anteriormente en el archivo. Si queremos copiar el nuevo contenido debajo de la información ya existente sin borrar nada, podemos usar `>>` en lugar de `>`
Vamos a listar todo lo que haya en directorio raíz de la siguiente manera:
ls /
En este caso la salida nos mostrará algo así como:
bin dev initrd lib mnt root sys var boot etc initrd.img lost+found opt sbin tmp vmlinuz cdrom home initrd.img.old media proc srv usr vmlinuz.old
Para redireccionar esta salida (o sea que en lugar de salir por pantalla lo haremos hacia un archivo) debemos ejecutar el siguiente comando:
ls / > listar.txt
Si ahora quisiéramos ver el resultado por pantalla no veríamos nada ya que fue redireccionado al archivo `listar.txt` Para ver el contenido de este archivo podemos hacer lo siguiente:
cat listar.txt
Y veremos lo siguiente
boot cdrom dev etc home initrd initrd.img initrd.img.old lib lost+found media mnt opt proc root sbin srv sys tmp usr var vmlinuz vmlinuz.old
Si comparamos el resultado veremos que es el mismo que obtuvimos cuando hicimos `ls`antes de redireccionar.
¿Qué pasaría si pedimos al sistema que nos muestre un proceso que tiene un error? Hagamos una prueba
ls /xxx
Como el directorio/archivo xxx no existe, se va a generar un error.
ls: xxx: No existe el fichero o directorio
Podemos hacer lo siguiente:
ls /xxx >pepe.txt 2>>xerror.log root@losindios:~# cat xerror.log ls: /xxx: No existe el fichero o directorio
Esto significa que hemos redireccionado la salida del error de 'ls / xxx' a un archivo llamado pepe.txt y mediante el número 2 estamos redirigiendo a un archivo xerror.log la salida de error estándar. Mientras que el número 0 indica entrada estándar, el número 1 indica salida estándar y el número 3 indica error estándar
Un proceso que corre en primer plano (`fg` de foreground) normalmente es aquél que ingresamos por teclado y podemos ver por pantalla. Los procesos tipo demonio no corren en primer plano, sino en segundo, no son llamados desde una terminal (tty) sino desde un puerto, y no aparecen en pantalla. Si queremos pasar un proceso que está corriendo en primer plano a segundo plano, podemos utilizar el símbolo `&`Veamos un ejemplo:
top&
Y el sistema nos devuelve algo como
[1] 11068
Vemos que no apareció por pantalla el resultado de `top`con los procesos que hay corriendo en el sistema sino un número de trabajo asignado y el PID (Process ID) correspondiente. No es que `top` no esté corriendo sino que lo está haciendo en background.
Si utilizamos `jobs`podremos ver los procesos que están corriendo en 2do.plano. Veamos cómo:
jobs
Y el sistema nos devolverá
jobs [1]+ Stopped top
Podemos capturar stdout y stderr en un solo archivo mediante el siguiente comando:
ls /xxx > listar.txt 2>&1 root@losindios:~# cat listar.txt
Y el 'cat' nos devuelve:
ls: /xxx: No existe el fichero o directorio
De esta manera podremos ver ambas salidas pero solo de la última vez que ejecutamos este comando. Si quisiéramos contar con un log completo de procesos podríamos utilizar un comando llamado `cron` para automatizar el comando anterior y que se repita cada cierta cantidad de veces en distintos horarios. Para que la captura no borre los resultados anteriores debemos escribir el comando en la siguiente forma
ls /xxx >> listar.txt 2>&1
De esta forma el archivo conservará las entradas anteriores sin borrar nada.
Lo que hace 'pipes' es tomar una salida de un proceso y convertirla en la entrada estándar de otro proceso. El símbolo para hacerlo es '|' que normalmente se obtiene mediante la combinación de teclas AltGr + 1 (puede ser diferente en otros teclados.) A veces cuando queremos ver un archivo demasiado grande por pantalla, estamos frente a un problema. Si el archivo tiene más contenido que lo visible en la pantalla, éste pasará muy rápido y solo veremos la parte final. Veamos un ejemplo:
ls -R /
La 'R' significa recursividad, es decir que nos va a mostrar todos los directorios/subdirectorios y archivos que se encuentren dentro de '/' Veremos algo que corre por la pantalla a gran velocidad y solo será visible al última parte del proceso 'ls' por tratarse de demasiado contenido para una sola pantalla. Tal cual vimos en su momento, el comando 'less' imprime en pantalla solo una parte del contenido total, equivalente a lo que puede verse en una pantalla completa y no más. Mediante las teclas de dirección 'arriba' y 'abajo' es posible desplazarse por la pantalla para ver todo el contenido de un archivo.
Entonces podemos escribir lo siguiente:
ls -R / | less
De esta forma redireccionamos la salida del proceso 'ls' a la entrada de otro proceso llamado 'less' lo que nos permitirá ver el archivo estándar de salida 'ls' por partes. Veamos otro ejemplo donde podemos utilizar 'pipes'
Como recordamos 'grep' nos permite filtrar un archivo, su contenido, un grupo de archivos, etc que tengan coincidencia con una cadena de caracteres. Por ejemplo vamos a buscar los archivos que tengan extensión 'txt' y que se encuentren dentro del directorio 'home'
ls -R /home | grep .txt
Y el sistema nos devuelve:
listar.txt ls.txt
Lo que hemos hecho es buscar mediante ls -R /home en forma recursiva todos los directorios, subdirectorios y archivos dentro de /home, luego enviamos la salida de este proceso a la entrada de uno nuevo llamado 'grep'. Este último actuará como filtro utilizando la cadena de caracteres '.txt'
Mientras que '&' lleva a segundo plano un proceso existente en primer plano, 'bg' lo reinicia en segundo plano. 'bg' no utiliza el nombre del proceso ni el PID sino el número de trabajo.
bg %1
Mientras que 'bg' es background o segundo plano, 'fg' es foreground o primer plano. Lo que hace este comando es traer a primer plano un proceso que normalmente corre en segundo plano, utilizando también el número de trabajo. Ejemplo:
fg %1
Para pasar a segundo plano un proceso que corre en primer plano, podemos también utilizar Ctrl + Z