Cosillas que debemos saber de Linux (II Parte)

Todo lo que tengas que decir sobre Gnu/Linux y SSOO alternativos.

Moderador: Moderadores

Cosillas que debemos saber de Linux (II Parte)

Notapor Bit69 » Jue Oct 26, 2006 9:06 pm

En esta parte intentaré dejar claros varios conceptos generales y otros no tan generales, ya que hemos practicado al estilo Redmond unas cuantas cosas en la primera parte, ahora ya no somos los chic@s que empezamos ayer con Linux y debemos saber más. Entender conceptos y procesos (La teoría y como aplicarla)

Por las ayudas, críticas, sugerencias y por las palabras de apoyo y reconocimiento, tanto de este trabajo como del anterior; a todos GRACIAS.


Posts agrupados por temáticas de esta sección - by Popolous


Curso de Introducción a Linux para Alumnos (CILA) en la web del Grupo de Usuarios de Linux de Canarias

descárgalo en formato pdf (Vínculo en http://www.ofdnews.com/comentarios/497_0_1_0_C/)



Cosillas que debemos saber de Linux (I PARTE)

Indice


Última edición por Bit69 el Jue Ene 24, 2008 10:28 pm, editado 29 veces en total
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Jue Oct 26, 2006 9:07 pm

¿Qué es el árbol de directorios y cómo está distribuido?


La mayoría de los sistemas operativos siguen el estándar FHS, este estándar especifica las principales características que debería tener cualquier sistema operativo.

Entre estas características tenemos la distribución en directorios para tenerlos correctamente organizados nuestros archivos y así poder localizarlos de forma rápida y sencilla.


La mayoría de las distribuciones de Linux presentan este o un muy similar árbol

/bin/: comandos básicos para todos los usuarios del sistema.


/boot/: archivos estáticos necesarios para el arranque del sistema.

/dev/: dispositivos del sistema.


/etc/: archivos de configuración del sistema y de las aplicaciones
instaladas en el mismo.


/home/: directorio para poner las carpetas home de los usuarios.


/lib/: librerías esenciales para el núcleo del sistema y módulos
del mismo.


/mnt/: punto de montaje temporal para dispositivos.


/proc/: procesos y variables del núcleo del sistema.


/root/: directorio home para el root del sistema.

/sbin/: comandos especiales para el root del sistema.

/tmp/: archivos temporales. Según la distribución o la
configuración utilizada se borran al arrancar el sistema o
cada cierto tiempo.

/usr/: segunda estructura jerárquica, utilizada para almacenar
todo el software instalado en el sistema.

/var/: directorio para los spoolers de impresión, ficheros de log,
etc.

Pueden leer el estándar oficial en:

http://www.pathname.com/fhs/
http://www.pathname.com/fhs/pub/fhs-2.3.pdf
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Vie Oct 27, 2006 9:27 am

¿Cómo movernos dentro del árbol del directorios?

A través de una consola utilizaremos comandos para listar los contenidos de los directorios y movernos de uno a otro


Normalmente cuando entramos en el sistema, el login nos sitúa en nuestro directorio home,

Código: Seleccionar todo
bit@bit-desktop:~$


Observa el carácter “~” al final de l prompt de la línea de comandos. Este carácter es el que denota la referencia al directorio home (el nuestro)

Código: Seleccionar todo
bit@bit-desktop:~$ ls
Desktop  Examples  pendrive  vmware  websites
bit@bit-desktop:~$


Para ver lo que hay en el directorio en donde estamos situados, utilizamos el comando ls. (no muestra los archivos ocultos). Con el parámetro “-a” nos mostraría absolutamente todos los ficheros (incluyendo los que comienzan por punto).

Código: Seleccionar todo
bit@bit-desktop:~$ ls -a
.                     .fonts.cache-1     .ICEauthority        .recently-used
..                    .gaim                    .kde                 .Skype
.aMule             .gconf                   .lesshst      .sudo_as_admin_successful
.bash_history   .gconfd                 .local                .thumbnails
.bash_logout    .gftp                     .mcop               .Trash
.bash_profile    .gimp-2.2              .mcoprc             .update-notifier
.bashrc            .gksu.lock             .metacity             vmware
.config             .gnome                 .mozilla              .vmware
Desktop           .gnome2               .nautilus              websites
.dmrc              .gnome2_private    .openoffice.org2  .wine
.esd_auth        .gstreamer-0.10    .opera                 .Xauthority
.evolution        .gtkrc-1.2-gnome2  pendrive             .xsession-errors
Examples        .httrack.ini             .qt                      .yafc
bit@bit-desktop:~$


Con el parámetro -l obtendremos un listado con formato largo

Código: Seleccionar todo
bit@bit-desktop:~$ ls -a -l
total 264
drwxr-xr-x 34 bit  bit   4096 2006-10-27 08:12 .
drwxr-xr-x  3 root root  4096 2006-09-12 19:55 ..
drwxr-xr-x  4 bit  bit   4096 2006-10-23 21:24 .aMule
-rw-------  1 bit  bit   3394 2006-10-26 22:04 .bash_history
-rw-r--r--  1 bit  bit    220 2006-09-12 19:55 .bash_logout
-rw-r--r--  1 bit  bit    414 2006-09-12 19:55 .bash_profile
-rw-r--r--  1 bit  bit   2227 2006-09-12 19:55 .bashrc
drwxr-xr-x  3 bit  bit   4096 2006-09-14 17:44 .config
drwxr-xr-x  3 bit  bit   4096 2006-10-26 22:05 Desktop
-rw-------  1 bit  bit     26 2006-09-12 19:38 .dmrc
-rw-------  1 bit  bit     16 2006-09-12 19:38 .esd_auth
drwxr-xr-x  3 bit  bit   4096 2006-10-13 18:14 .evolution
lrwxrwxrwx  1 bit  bit     26 2006-09-12 19:55 Examples -> /usr/share/example-content
-rw-r--r--  1 bit  bit  44596 2006-10-13 17:51 .fonts.cache-1
drwx------  3 bit  bit   4096 2006-10-25 19:32 .gaim
drwx------  4 bit  bit   4096 2006-10-27 08:12 .gconf
drwx------  2 bit  bit   4096 2006-10-27 08:22 .gconfd
drwx------  3 bit  bit   4096 2006-09-27 19:59 .gftp
drwxr-xr-x 21 bit  bit   4096 2006-10-26 21:17 .gimp-2.2
-rw-r-----  1 bit  bit      0 2006-10-25 18:21 .gksu.lock
drwxr-xr-x  3 bit  bit   4096 2006-09-12 19:38 .gnome
drwx------ 12 bit  bit   4096 2006-10-26 22:05 .gnome2
drwx------  2 bit  bit   4096 2006-09-12 19:38 .gnome2_private
drwxr-xr-x  2 bit  bit   4096 2006-09-12 20:46 .gstreamer-0.10
-rw-r--r--  1 bit  bit     85 2006-09-12 19:38 .gtkrc-1.2-gnome2
-rw-r--r--  1 bit  bit     33 2006-09-29 20:43 .httrack.ini
-rw-------  1 bit  bit   1215 2006-10-27 08:12 .ICEauthority
drwx------  3 bit  bit   4096 2006-09-28 09:39 .kde
-rw-------  1 bit  bit      0 2006-10-16 21:48 .lesshst
drwx------  3 bit  bit   4096 2006-09-14 18:43 .local
drwxr-xr-x  3 bit  bit   4096 2006-09-28 09:40 .mcop
-rw-------  1 bit  bit     31 2006-10-06 18:52 .mcoprc
drwx------  3 bit  bit   4096 2006-09-12 19:38 .metacity
drwx------  3 bit  bit   4096 2006-09-12 19:44 .mozilla
drwxr-xr-x  3 bit  bit   4096 2006-09-12 19:38 .nautilus
drwx------  3 bit  bit   4096 2006-10-27 08:12 .openoffice.org2
drwxr-xr-x  9 bit  bit   4096 2006-09-29 20:49 .opera
drwxr-xr-x  2 root root  4096 2006-10-23 19:11 pendrive
drwxr-xr-x  2 bit  bit   4096 2006-09-28 09:39 .qt
-rw-------  1 bit  bit  35660 2006-10-27 08:19 .recently-used
drwx------  3 bit  bit   4096 2006-10-02 21:41 .Skype
-rw-r--r--  1 bit  bit      0 2006-09-12 19:39 .sudo_as_admin_successful
drwx------  4 bit  bit   4096 2006-09-12 19:43 .thumbnails
drwx------  2 bit  bit   4096 2006-09-12 19:38 .Trash
drwx------  2 bit  bit   4096 2006-09-12 20:40 .update-notifier
drwxr-xr-x  2 bit  bit   4096 2006-09-12 22:02 vmware
drwxr-xr-x  2 bit  bit   4096 2006-10-23 20:36 .vmware
drwxr-xr-x  3 bit  bit   4096 2006-09-29 20:43 websites
drwxr-xr-x  4 bit  bit   4096 2006-09-27 08:34 .wine
-rw-------  1 bit  bit    122 2006-10-27 08:12 .Xauthority
-rw-r--r--  1 bit  bit   1117 2006-10-27 08:12 .xsession-errors
drwx------  4 bit  bit   4096 2006-09-27 19:40 .yafc
bit@bit-desktop:~$


En todos los directorios existe una entrada “.” (es la referencia al directorio actual, un puntero de direccionamiento) y otra “..” (hacen referencia al directorio inmediato superior en el árbol jerárquico, otro puntero).

Obviamente, cuando estamos situados en la raíz del sistema de ficheros (/), los “..” no existen por que nos encontramos justamente allí, en la raíz, que es en el nivel superior del árbol.
Para cambiar de directorio podemos utilizar el comando cd, si no le pasamos ningún parámetro nos situará en nuestra carpeta home

Para ir a un directorio específico lo pasamos como parámetro de forma absoluta o relativa.

Forma relativa
Significa que partimos del directorio donde estamos.

Por ejemplo, si estamos en /usr/bin/ y queremos ir al /root/, debemos utilizar el comando: cd ../../root (los dos primeros puntos indican /usr/ y los siguientes la raíz “/” del sistema, a partir de la cual ya podemos acceder a /root/).

Visto de otra forma, utilizamos los “..” como un ascensor para subir y/o bajar niveles desde donde nos encontramos hasta donde queremos llegar.

Forma absoluta
Significa que partimos siempre de la raíz,

Para el ejemplo anterior el comando sería cd /root



Para saber en qué directorio estamos se utiliza el comando pwd

Código: Seleccionar todo
bit@bit-desktop:~$ pwd
/home/bit
bit@bit-desktop:~$
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Vie Oct 27, 2006 12:44 pm

¿Qué es y cómo se crea un enlace?

Un enlace es un puente a un archivo o directorio. También podemos decir que es una referencia que podemos poner en cualquier sitio y que funciona como un acceso directo hacia un archivo o directorio

Supongamos que queremos acceder con frecuencia al directorio /var/cache/apt/archives, para visualizar los archivos que hemos descargado en instalaciones o actualizaciones.

En lugar de escribir cd /var/cache/apt/archives podemos crear un enlace en nuestro propio directorio que nos redireccione directamente hacia allí. El comando ln -s /var/cache/apt/archives down nos crearía este acceso directo o puente llamado “down”.

Código: Seleccionar todo
bit@bit-desktop:~$ ln -s /var/cache/apt/archives down


Veamos el enlace
Código: Seleccionar todo
bit@bit-desktop:~$ ls
Desktop  down  Examples  pendrive  vmware  websites


Ahora sólo debemos teclear cd dowm y automáticamente el sistema nos desplaza a posiciona en /var/cache/apt/archives/.

Código: Seleccionar todo
bit@bit-desktop:~$ cd down
bit@bit-desktop:~/down$ ls
flashplugin-nonfree_7.0.68~ubuntu2~dapper1_i386.deb  lock
gsfonts-x11_0.17ubuntu4_all.deb                      partial


Lógicamente si tecleamos cd o bien cd .. iremos al directorio home, y no como podría pensarse al inmediato superior /var/cache/apt/

Al crear el enlace ln -s /var/cache/apt/archives down hemos pasado el parámetro “-s” al comando, esto indica que queremos crear un enlace simbólico.

Los enlaces simbólicos significan que sólo estamos creando un apuntador o puente hacia el fichero o directorio, de forma que si borrásemos el fichero destino, el enlace no apuntaría a ninguna parte.

Sin el parámetro “-s” se crearía un enlace fuerte (hard link) que hace un “duplicado” del fichero.

Esto implica que la modificación de uno de ellos afecta al otro, y por supuesto ambos quedan “iguales”.

En único pro de este tipo de enlace es que al borrar uno de los ficheros aun conservamos una copia.

Un enlace fuerte a un directorio implica que todos los archivos y subdirectorios deben enlazarse (un enlace fuerte sólo lo puede realizar el root).

Por último hay hacer notar otra una diferencia entre los enlaces simbólicos y los fuertes. A través de los primeros podemos ver a que fichero estamos apuntando mientras que con los enlaces fuertes no.
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Lun Oct 30, 2006 2:13 pm

¿Qué son y cómo se administran los procesos? - I Parte

Cuando nos referimos a un sistema operativo multitarea, nos estamos refiriendo a un sistema capaz de ejecutar varios programas (procesos) a la vez.

Realmente, el CPU (gobernado por el sistema operativo) es el encargado de distribuir los tiempos de ejecución de cada proceso dando así la impresión de que se ejecutan simultáneamente. Claro está, este concepto hace referencia a los procesadores mononúcleo.

Proceso: Programa que está ejecutándose en la memoria RAM, dicho de otra forma, es un programa cargado en RAM y en proceso de ejecución.


Tomado de: http://www.gui.uva.es/login/login/15/process.html. Contenidos bajo licencia Creative Commons

1. Concepto de proceso o tarea

Un proceso, o tarea, es un programa en ejecución. Los procesos en un sistema operativo tradicional multiproceso (como en los antiguos UNIX) se caracterizan por:

* Un proceso para empezar su ejecución ha de residir completamente en memoria y tener asignados todos los recursos que necesite.

* Cada proceso está protegido del resto de procesos, ningún otro proceso podrá escribir en las zonas de memoria pertenecientes a ese proceso.

* Los procesos pertenecientes a los usuarios se ejecutan en el modo usuario del procesador (con restricciones de acceso a los recursos), los que pertenecen al sistema se ejecutaran en el modo kernel del procesador (podrán acceder a cualquier recurso).

* Para que un proceso de usuario acceda a los recursos tendrá que hacerlo por medio de llamadas al sistema.

* Cada proceso tendrá una estructura de datos llamada bloque de control de proceso (BCP), donde se almacenará información acerca del proceso, como:

    - Identificación del proceso (pid).
    - Prioridad.
    - Estado del proceso (ejecución, preparado, suspendido o zombie).
    - Estado hardware (registros y flags del procesador).
    - Información de planificación y estadísticas de uso.
    - Información de gestión de memoria.
    - Estado de E/S (dispositivos asignados, operaciones pendientes).
    - Información de gestión de archivos (archivos abiertos, derechos).
    - Información de mantenimiento.

* Los procesos se podrán comunicar, sincronizarse y colaborar entre ellos. Estas operaciones se realizan por:
    - Comunicación: memoria compartida e intercambio de mensajes.
    - Sincronización: semáforos.
    - Colaboración: por LPC y RPC (llamadas a procedimientos locales y remotos).

La razón principal de estas operaciones es que, al residir cada proceso en zonas de memoria independientes, se ha de llamar al sistema para compartir los datos entre los procesos.

* Espacio de direcciones lógicas. En este espacio de direcciones reside el proceso (en la parte baja) y las llamadas al sistema (en la parte alta), esto es así para tener un acceso directo a los recursos del sistema. Este espacio de memoria es igual al máximo que nuestro sistema operativo es capaz de gestionar (en un sistema operativo de 32 bits se llegrá hasta 4 GB), y aquí entra en juego la memoria virtual:

* Los procesos se dividen en trozos de igual tamaño, llamados páginas, cuando se carga un proceso lo que se hace es llevarlo a la memoria virtual y asignarle un número máximo de páginas en memoria real a emplear (working set).

Cuando el proceso es ejecutado, si quiere acceder a una página que no está en memoria real, se la busca en memoria virtual y se carga en memoria real. Cuando se llega al numero máximo de páginas utilizadas en memoria real por un proceso se procederá a descargar una página de memoria real a la virtual, normalmente se descarga la más antiguamente utilizada.

Los problemas de este sistema es que, si tenemos un programa mal programado, pueden ocurrir problemas de hiperpaginación (se da un gran número de faltas de página que serán utilizadas prontamente).



2. Sistemas operativos multiproceso

Un sistema operativo multiproceso o multitarea es aquel que permite ejecutar varios procesos de forma concurrente, la razón es porque actualmente nuestras CPUs sólo pueden ejecutar un proceso cada vez. La única forma de que se ejecuten de forma simultánea varios procesos es tener varias CPUs (ya sea en una máquina o en varias, en un sistema distribuido).

La magia de un sistema operativo multiproceso reside en la operacíon llamada cambio de contexto. Esta operación consiste en quitar a un proceso de la CPU, ejecutar otro proceso y volver a colocar el primero sin que se entere de nada.


2.1 Mi CPU me la pega con otro

Supongamos que estamos en una máquina con un sistema operativo multiproceso (como UNIX; Windows NT, OS/2, NeXTStep ...), y supongamos que queremos ejecutar el programa Ejecutame que ha sido compilado de forma estática.

Cuando introducimos en el indicador de comandos del shell (o lo lanzamos con un doble click del ratón) el nombre de un fichero ejecutable binario lo que ocurre es que un proceso del sistema (cargador) lo prepara para que posteriormente sea ejecutado. La función que realiza el cargador es:

* Crea el BCP. Se le asigna un identificador (pid) y una prioridad base (como máximo la misma que para el usuario, y se le van asignando todos los recursos a excepción de la CPU.

* Se le inserta en la tabla de procesos del sistema.

* Se carga en memoria virtual. Cuando ya tiene todos los recursos asignados (menos la CPU) se pone el campo de estado del proceso del BCP en preparado y se le ingresa en la cola de procesos listos de la CPU. Al proceso del sistema que controla la cola de la CPU se llama planificador, que es el encargado de elegir que proceso será el siguiente a ocupar la CPU. La elección se realiza mediante prioridades.

El problema reside en que, si un proceso tiene una prioridad muy baja, puede darse el caso que nunca se ejecute. Para evitar esto se emplea us sistema de prioridades dinámicas, es decir, se irán aumentando las prioridades a medida que esperen en la cola. Los pasos del planificador serán los siguientes:

* Asignar nuevas prioridades a los procesos en la cola de la CPU.

* Elegir aquel proceso con prioridad más alta.

* Poner el campo de estado del proceso elegido en ejecución.

* Llamar a la rutina de cambio de contexto, que lo que hará será cargar el proceso en la CPU. Es decir, volcará el estado hardware en los registros de la CPU, el último registro a actualizar será el PC (contador de programa), para que la próxima instrucción a ejecutar sea la siguiente donde se quedó el proceso.


2.2 Expulsión de un proceso de la CPU

A cada proceso se le asigna un número determinado de quantums (unidades de tiempo) de utilización de CPU. Este tiempo podrá ser estático o dinámico dependiendo de la prioridad del proceso. Cuando este tiempo acaba se producirá una interrupción de fin de tiempo de ejecución. Cuando ocurre una interrupción (software o hardware) se llama al gestor de interrupciones que a su vez llamará al proceso correspondiente para que la gestione. Las principales interrupciones son:

* Interrupción por E/S.

* Interrupción por fin de tiempo (en la que se llama al planificador).

* Interrupción por error (como la división por 0).

Cuando un proceso solicita una operación de E/S se le pone en estado suspendido y se le coloca en la cola del dispositivo de E/S que quiere utilizar. Cuando ya se ha satisfecho esta operación se le vuelve a poner en estado preparado colocándole en la cola de la CPU.

A nuestro proceso le ha llegado la hora de ejecutarse, la misión del proceso es escribir un mensaje en el dispositivo de salida estándar. Al concederle la CPU se le pone en estado de ejecución y se realiza el cambio de contexto. Se empieza a ejecutar en la dirección n (que es la primera instrucción de nuestro programa) y quiere acceder al distpositivo de salida, por lo cual se pone en estado suspendido y espera en la cola del dispositivo. Cuando deja la CPU los registros del procesador tenían una valores distintos a los originales que teniamos guardados, al realizarse el cambio de contexto se actualizan los campos del BCP con los nuevos valores.

Ya ha obtenido la salida que quería, así que se vuelve a poner en estado preparado e ingresa en la cola de la CPU. Cuando vuelva a la CPU se seguirá ejecutando donde lo dejó. Cuando se ejecute la última instrucción abandonará la CPU (antes que acabe el tiempo asignado), y pasará a un estado zombie donde se irán quitando los recursos asignados.


2.3 Problemas de los procesos

En un sistema operativo tradicional (UNIX, OS/2) al emplear la llamada al sistema de creación de un nuevo proceso (fork en UNIX), lo que el sistema realiza es una copia exacta del padre en el hijo. Se crean 2 procesos iguales y a la hora de programar tendremos el mismo código para ambos procesos, por lo cual tendremos que saber que proceso se ejecuta en ese momento.

int espera;

if(fork()==0) printf("Hola papa!!!!\n");

wait(&espera);

El padre espera hasta que el hijo le salude. El problema reside en que, si el padre es un proceso grande, al crear el hijo tendrá que volcar todo su contenido en el hijo, y si éste no realiza una labor grande estaríamos perdiendo eficiencia.

Al ser padre e hijo dos procesos independientes, su comunicación y compartición de datos será complicada y poco eficiente. Normalmente se crea un proceso hijo para que realice una subtarea, sobre todo para aprovechar tiempo cuando se espera una E/S. Supongamos que realizamos un programa que adquiere ficheros via red y va sumando la cantidad de datos obtenida, mientras los vamos editando. Necesitaremos:

* Proceso que nos traiga los ficheros de la red.

* Proceso que lanze un editor cada vez que se traiga un fichero entero.

* Proceso para que realice la suma de los ficheros.

Los problemas que surgen son:

* Necesidad de semáforos para sincronizar los procesos:
Suma<- Traigo fichero -> Edito

* Además necesitaremos una zona de memoria compartida de tamaño indeterminado (es decir varias zonas) para que el proceso que está en la red nos diga la cantidad de datos que son traídos.

* Y, por supuesto, tenemos tres procesos iguales y con una complicada gestión.

Con este ejemplo se ven los problemas principales de los sistemas operativos multiproceso. Aunque aún falta un problema importante:

Cuando dos procesos (padre e hijo) se ejecutan de forma seguida en la CPU, al ser procesos iguales solo cambian algunos datos del BCP, por lo cual con una nueva gestión podríamos salvar algunas operaciones innecesarias.

Para solucionar estos problemas se han creado una serie de procesos ligeros llamados threads.


3. Concepto de hebras y sistemas operativos Multithread y Multiproceso

Una hebra es un punto de ejecución de un proceso. Un proceso tendrá una o más hebras. Las hebras representan un método software para mejorar el rendimiento de los sistemas operativos reduciendo el recargo por el cambio de contexto entre procesos. Las hebras de un mismo proceso compartirán recursos, como memoria, archivos ... Las hebras asumirán el papel de los procesos como unidad de planificación. Un proceso será una unidad propietaria de recursos para una serie de hebras.

Un proceso clásico será aquel que solo posea una hebra. Las hebras siempre pertenecerán a un proceso y no podrán existir por ellas mismas. Los procesos serán estáticos y tan solo las hebras podrán ser planificadas por ejecución. Las hebras tendrán un flujo separado de control (o punto de ejecución) y tienen su propia pila y estado hardware. Como todos los recursos (exepto la CPU) son gestionados por el proceso, la comunicación entre sus hebras será mucho más rápida y eficiente, porque todas las hebras de un proceso comparte un mismo espacio de memoria. Cuando se realice un cambio de contexto entre hebras de procesos diferentes se realizará un cambio de contexto entero.

Con las hebras hacemos a los sistemas operativos mucho más rápidos, pero siempre habrá que tener cuidado con la planificación entre hebras, ya que varias hebras podrán acceder a cualquier variable compartida y puede haber problemas de inconsistencia de datos.

Otro detalle interesante es que simplifica algo la tarea de programación.

Si el ejemplo de antes lo hubieramos hecho con hebras, tendríamos un proceso con tres hebras. Ocuparíamos menos memoria y se simplificaría la comunicación entre las subtareas del proceso.

La gestión de las tareas se hará igual que en un sistema operativo multiproceso tradicional, con la salvedad de que, en vez de planificar procesos planificamos hebras de procesos.

Existen varios sistemas operativos multitarea y multithread: Windows NT, OS/2, NeXTStep, Solaris ... Los UNIX tradicionales poco a poco irán adoptando el API de las hebras de POSIX (documento disponible en ftp://ftp.gui.uva.es/pub/windows/winNT/doc/varios ).
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Mar Oct 31, 2006 1:38 pm

¿Qué son y cómo se administran los procesos? - II Parte

Bien antes de seguir avanzando en este tema es conveniente hacer alguna práctica, en este otro post hay varias

¿Cómo visualizar y administrar procesos en Linux? - Gnome Parte I - Parte II - Parte III


Bien, pues ya tenemos más que claro que cada proceso posee un número que lo identifica inequívocamente el Process Identification o PID

También sabemos que para listar los procesos utilizamos el comando ps.

Ampliemos el uso del comando ps

ps, ps T o ps -T. Opción por defecto, Muestra sólo los procesos que se ejecutan en el terminal actual (TTY) o los que se hayan ejecutado desde él

Código: Seleccionar todo
bit@bit-desktop:~$ ps
  PID TTY          TIME CMD
 6288 pts/0    00:00:00 bash
 6409 pts/0    00:00:00 ps

bit@bit-desktop:~$ ps T
  PID TTY      STAT   TIME COMMAND
 6288 pts/0    Ss     0:00 bash
 6412 pts/0    R+     0:00 ps T

bit@bit-desktop:~$ ps -T
  PID  SPID TTY          TIME CMD
 6288  6288 pts/0    00:00:00 bash
 6413  6413 pts/0    00:00:00 ps
bit@bit-desktop:~$



ps -A Muestra procesos de todos los terminales del sistema

Código: Seleccionar todo
bit@bit-desktop:~$ ps -A
  PID TTY          TIME CMD
    1 ?        00:00:01 init
    2 ?        00:00:00 ksoftirqd/0
    3 ?        00:00:00 watchdog/0
    4 ?        00:00:00 events/0
    5 ?        00:00:00 khelper
    6 ?        00:00:00 kthread
    8 ?        00:00:00 kblockd/0
    9 ?        00:00:00 kacpid
  133 ?        00:00:00 pdflush
  134 ?        00:00:00 pdflush
  136 ?        00:00:00 aio/0
  135 ?        00:00:00 kswapd0
  723 ?        00:00:00 kseriod
 1737 ?        00:00:00 ata/0
 1738 ?        00:00:00 ata_hotplug/0
 1739 ?        00:00:00 scsi_eh_0
 1744 ?        00:00:00 scsi_eh_1
 1850 ?        00:00:00 khubd
 1983 ?        00:00:00 kjournald
 2213 ?        00:00:00 udevd
 3180 ?        00:00:00 hda_codec/0
 3529 ?        00:00:00 kjournald
 3540 ?        00:00:00 kjournald
 3541 ?        00:00:00 kjournald
 3959 ?        00:00:00 acpid
 4078 ?        00:00:00 dd
 4080 ?        00:00:00 klogd
 4399 ?        00:00:00 gdm
 4411 ?        00:00:00 gdm
 4433 tty7     00:00:34 Xorg
 4442 ?        00:00:00 hpiod
 4466 ?        00:00:00 python
 4538 ?        00:00:00 dbus-daemon
 4553 ?        00:00:00 hald
 4554 ?        00:00:00 hald-runner
 4559 ?        00:00:00 hald-addon-acpi
 4613 ?        00:00:00 hald-addon-keyb
 4626 ?        00:00:00 hald-addon-stor
 4627 ?        00:00:00 hald-addon-stor
 4722 ?        00:00:00 xinetd
 4723 ?        00:00:00 hcid
 4727 ?        00:00:00 sdpd
 4741 ?        00:00:00 krfcommd
 4757 ?        00:00:00 mdadm
 4791 ?        00:00:00 atd
 4804 ?        00:00:00 cron
 4846 ?        00:00:00 vmnet-bridge
 4860 ?        00:00:00 vmnet-natd
 4866 ?        00:00:00 vmnet-netifup
 4882 ?        00:00:00 vmnet-netifup
 4894 ?        00:00:00 vmware-serverd
 4929 ?        00:00:00 vmnet-dhcpd
 4933 ?        00:00:00 vmnet-dhcpd
 4961 tty1     00:00:00 getty
 4962 tty2     00:00:00 getty
 4963 tty3     00:00:00 getty
 4964 tty4     00:00:00 getty
 4965 tty5     00:00:00 getty
 4966 tty6     00:00:00 getty
 4983 ?        00:00:00 x-session-manag
 5025 ?        00:00:00 ssh-agent
 5028 ?        00:00:00 dbus-launch
 5029 ?        00:00:00 dbus-daemon
 5031 ?        00:00:00 gconfd-2
 5034 ?        00:00:00 gnome-keyring-d
 5036 ?        00:00:00 bonobo-activati
 5038 ?        00:00:00 gnome-settings-
 5040 ?        00:00:00 esd
 5050 ?        00:00:01 metacity
 5055 ?        00:00:01 gnome-panel
 5057 ?        00:00:00 nautilus
 5064 ?        00:00:00 gnome-volume-ma
 5066 ?        00:00:00 update-notifier
 5072 ?        00:00:00 notification-da
 5075 ?        00:00:00 gnome-vfs-daemo
 5077 ?        00:00:15 gnome-cups-icon
 5088 ?        00:00:00 trashapplet
 5100 ?        00:00:00 gnome-power-man
 5110 ?        00:00:00 mapping-daemon
 5112 ?        00:00:00 clock-applet
 5114 ?        00:00:00 mixer_applet2
 5117 ?        00:00:31 firefox-bin
 5141 ?        00:00:00 gnome-screensav
 5338 ?        00:00:10 cupsd
 5706 ?        00:00:00 syslogd
 9619 ?        00:00:04 evince
 9632 ?        00:00:00 soffice
 9643 ?        00:00:04 soffice.bin
 9759 ?        00:00:00 gnome-terminal
 9760 ?        00:00:00 gnome-pty-helpe
 9761 pts/0    00:00:00 bash
 9814 pts/0    00:00:00 ps
bit@bit-desktop:~$


ps -l Muestra información extendida para cada proceso,tiempo de CPU que ha utilizado, terminal donde se ejecuta, etc.


Código: Seleccionar todo
bit@bit-desktop:~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  9761  9759  0  75   0 -  1406 wait   pts/0    00:00:00 bash
0 R  1000 10109  9761  0  76   0 -   550 -      pts/0    00:00:00 ps


ps -A -l Usemos la lógica

Código: Seleccionar todo
ps -A -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  76   0 -   391 -      ?        00:00:01 init
1 S     0     2     1  0  94  19 -     0 ksofti ?        00:00:00 ksoftirqd/0
5 S     0     3     1  0 -40   - -     0 -      ?        00:00:00 watchdog/0
1 S     0     4     1  0  70  -5 -     0 worker ?        00:00:00 events/0
1 S     0     5     1  0  71  -5 -     0 worker ?        00:00:00 khelper
1 S     0     6     1  0  70  -5 -     0 worker ?        00:00:00 kthread
1 S     0     8     6  0  70  -5 -     0 worker ?        00:00:00 kblockd/0
1 S     0     9     6  0  80  -5 -     0 worker ?        00:00:00 kacpid
1 S     0   133     6  0  75   0 -     0 pdflus ?        00:00:00 pdflush
1 S     0   134     6  0  75   0 -     0 pdflus ?        00:00:00 pdflush
1 S     0   136     6  0  77  -5 -     0 worker ?        00:00:00 aio/0
1 S     0   135     1  0  75   0 -     0 kswapd ?        00:00:00 kswapd0
1 S     0   723     6  0  70  -5 -     0 serio_ ?        00:00:00 kseriod
1 S     0  1737     6  0  70  -5 -     0 worker ?        00:00:00 ata/0
1 S     0  1738     6  0  71  -5 -     0 worker ?        00:00:00 ata_hotplug/1 S     0  1739     6  0  71  -5 -     0 scsi_e ?        00:00:00 scsi_eh_0
1 S     0  1744     6  0  71  -5 -     0 scsi_e ?        00:00:00 scsi_eh_1
1 S     0  1850     6  0  70  -5 -     0 hub_th ?        00:00:00 khubd
1 S     0  1983     1  0  75   0 -     0 kjourn ?        00:00:00 kjournald
5 S     0  2213     1  0  74  -4 -   608 -      ?        00:00:00 udevd
1 S     0  3180     6  0  71  -5 -     0 worker ?        00:00:00 hda_codec/0
1 S     0  3529     1  0  75   0 -     0 kjourn ?        00:00:00 kjournald
1 S     0  3540     1  0  75   0 -     0 kjourn ?        00:00:00 kjournald
1 S     0  3541     1  0  75   0 -     0 kjourn ?        00:00:00 kjournald
1 S     0  3959     1  0  76   0 -   538 -      ?        00:00:00 acpid
4 S     0  4078     1  0  75   0 -   420 syslog ?        00:00:00 dd
1 S   103  4080     1  0  79   0 -   602 pipe_w ?        00:00:00 klogd
1 S     0  4399     1  0  76   0 -  2727 -      ?        00:00:00 gdm
5 S     0  4411  4399  0  76   0 -  2838 -      ?        00:00:00 gdm
4 R     0  4433  4411  0  75   0 -  4997 -      tty7     00:00:46 Xorg
1 S   105  4442     1  0  76   0 -  3217 stext  ?        00:00:00 hpiod
1 S   105  4466     1  0  75   0 -  2353 -      ?        00:00:00 python
5 S   104  4538     1  0  76   0 -   548 -      ?        00:00:00 dbus-daemon
5 S   108  4553     1  0  76   0 -  1722 -      ?        00:00:00 hald
0 S     0  4554  4553  0  76   0 -   680 -      ?        00:00:00 hald-runner
4 S   108  4559  4554  0  77   0 -   501 -      ?        00:00:00 hald-addon-a4 S   108  4613  4554  0  75   0 -   501 evdev_ ?        00:00:00 hald-addon-k4 S   108  4626  4554  0  76   0 -   502 -      ?        00:00:00 hald-addon-s4 S   108  4627  4554  0  76   0 -   502 -      ?        00:00:00 hald-addon-s5 S     0  4722     1  0  78   0 -   554 -      ?        00:00:00 xinetd
5 S     0  4723     1  0  78   0 -   493 -      ?        00:00:00 hcid
1 S     0  4727     1  0  78   0 -   404 -      ?        00:00:00 sdpd
1 S     0  4741     1  0  70 -10 -     0 rfcomm ?        00:00:00 krfcommd
1 S     0  4757     1  0  76   0 -   407 -      ?        00:00:00 mdadm
1 S     1  4791     1  0  76   0 -   450 -      ?        00:00:00 atd
1 S     0  4804     1  0  76   0 -   530 -      ?        00:00:00 cron
1 S     0  4846     1  0  85   0 -   353 pause  ?        00:00:00 vmnet-bridge5 S     0  4860     1  0  76   0 -   415 -      ?        00:00:00 vmnet-natd
1 S     0  4866     1  0  81   0 -   352 pause  ?        00:00:00 vmnet-netifu1 S     0  4882     1  0  78   0 -   352 pause  ?        00:00:00 vmnet-netifu5 S     0  4894     1  0  75   0 -  4075 -      ?        00:00:00 vmware-serve1 S     0  4929     1  0  78   0 -   431 -      ?        00:00:00 vmnet-dhcpd
1 S     0  4933     1  0  78   0 -   431 -      ?        00:00:00 vmnet-dhcpd
0 S     0  4961     1  0  76   0 -   390 -      tty1     00:00:00 getty
0 S     0  4962     1  0  76   0 -   390 -      tty2     00:00:00 getty
0 S     0  4963     1  0  76   0 -   391 -      tty3     00:00:00 getty
0 S     0  4964     1  0  76   0 -   390 -      tty4     00:00:00 getty
0 S     0  4965     1  0  76   0 -   390 -      tty5     00:00:00 getty
0 S     0  4966     1  0  76   0 -   391 -      tty6     00:00:00 getty
4 S  1000  4983  4411  0  75   0 -  5081 -      ?        00:00:00 x-session-ma1 S  1000  5025  4983  0  76   0 -  1083 -      ?        00:00:00 ssh-agent
1 S  1000  5028     1  0  76   0 -   679 -      ?        00:00:00 dbus-launch
1 S  1000  5029     1  0  77   0 -   548 -      ?        00:00:00 dbus-daemon
0 S  1000  5031     1  0  76   0 -  1615 -      ?        00:00:00 gconfd-2
1 S  1000  5034     1  0  78   0 -   585 -      ?        00:00:00 gnome-keyrin0 S  1000  5036     1  0  75   0 -  1590 -      ?        00:00:00 bonobo-activ0 S  1000  5038     1  0  75   0 -  6896 stext  ?        00:00:00 gnome-settin0 S  1000  5040     1  0  76   0 -  1452 -      ?        00:00:00 esd
0 S  1000  5050     1  0  75   0 -  3907 -      ?        00:00:03 metacity
0 S  1000  5055     1  0  75   0 - 10020 stext  ?        00:00:02 gnome-panel
0 S  1000  5057     1  0  75   0 - 20566 stext  ?        00:00:06 nautilus
1 S  1000  5064     1  0  75   0 -  4373 -      ?        00:00:00 gnome-volume0 S  1000  5066     1  0  75   0 -  8199 -      ?        00:00:00 update-notif0 S  1000  5072     1  0  75   0 -  7330 -      ?        00:00:00 notification0 S  1000  5075     1  0  75   0 -  2187 stext  ?        00:00:00 gnome-vfs-da0 S  1000  5077     1  0  76   0 - 13611 -      ?        00:00:16 gnome-cups-i0 S  1000  5088     1  0  75   0 - 16349 stext  ?        00:00:00 trashapplet
1 S  1000  5100     1  0  75   0 -  4485 -      ?        00:00:00 gnome-power-0 S  1000  5110     1  0  76   0 -   571 -      ?        00:00:00 mapping-daem0 S  1000  5112     1  0  76   0 -  5889 -      ?        00:00:00 clock-applet0 S  1000  5114     1  0  75   0 -  8412 -      ?        00:00:00 mixer_applet0 S  1000  5117     1  0  75   0 - 25227 stext  ?        00:00:31 firefox-bin
1 S  1000  5141     1  0  75   0 -  3758 -      ?        00:00:00 gnome-screen5 S   100  5338     1  0  86  10 -  1052 -      ?        00:00:11 cupsd
5 S   102  5706     1  0  86  10 -   442 -      ?        00:00:00 syslogd
0 S  1000  9619     1  0  75   0 - 27160 stext  ?        00:00:11 evince
0 S  1000  9632     1  0  76   0 -  1046 wait   ?        00:00:00 soffice
0 S  1000  9643  9632  0  75   0 - 42427 stext  ?        00:00:07 soffice.bin
0 R  1000  9759     1  0  76   0 - 13505 stext  ?        00:00:03 gnome-termin0 S  1000  9760  9759  0  78   0 -   571 -      ?        00:00:00 gnome-pty-he0 S  1000  9761  9759  0  75   0 -  1406 wait   pts/0    00:00:00 bash
0 S  1000 10180  9761  0  75   0 -  8638 -      pts/0    00:00:00 gcalctool
0 R  1000 10251  9761  0  76   0 -   551 -      pts/0    00:00:00 ps
bit@bit-desktop:~$



ps - -help Muestra la ayuda

Nota: ps --h Muestra la ayuda debido a un error en el pase de parámetros, no porque el --h sea un parámetro válido para el comando ps

Código: Seleccionar todo
bit@bit-desktop:~$ ps --help
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy
bit@bit-desktop:~$


para consultar otras opciones man ps

Podemos ver de forma interactiva los procesos del sistema con el comando top

También podemos enviar señales de control a los procesos, esto lo logramos con el comando kill

Normalmente todos los programas pueden recibir las señales del comando kill

Las señales más utilizadas son las que nos sirven para obligar a un proceso a que termine o pause su ejecución.

kill -15 PID, con esta señal de indicamos al proceso PID que termine, el programa al recibir esta señal debe guardar todo lo necesario y acabar su ejecución.

Si el programa no está preparado para recibir la señal TERM y/o existe algún problema, podemos utilizar kill -9 PID, que "matará" el proceso, expulsándolo de la cola de ejecución (a lo bestia).

killall sirve para referirnos al nombre de uno o varios procesos en lugar de utilizar su PID como referencia

Código: Seleccionar todo
bit@bit-desktop:~$ ps
  PID TTY          TIME CMD
 9761 pts/0    00:00:00 bash
10180 pts/0    00:00:00 gcalctool
11186 pts/0    00:00:00 top
11558 pts/0    00:00:00 ps

bit@bit-desktop:~$ killall gcalctool

bit@bit-desktop:~$ ps
  PID TTY          TIME CMD
 9761 pts/0    00:00:00 bash
11186 pts/0    00:00:00 top
11564 pts/0    00:00:00 ps
[1]-  Terminado               gcalctool
bit@bit-desktop:~$


skill También permite enviar señales a los procesos

Señales posibles

Código: Seleccionar todo
bit@bit-desktop:~$ skill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
bit@bit-desktop:~$


Por ejemplo, vamos a parar la calculadora

Código: Seleccionar todo
bit@bit-desktop:~$ gcalctool &
[3] 11772
bit@bit-desktop:~$ ps
  PID TTY          TIME CMD
 9761 pts/0    00:00:00 bash
11186 pts/0    00:00:00 top
11772 pts/0    00:00:00 gcalctool
11775 pts/0    00:00:00 ps
bit@bit-desktop:~$ skill -STOP gcalctool

[3]+  Stopped                 gcalctool
bit@bit-desktop:~$


Vamos a revivir el proceso

Código: Seleccionar todo
bit@bit-desktop:~$ skill -CONT gcalctool
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Mar Nov 14, 2006 11:56 am

¿Qué son y cómo se administran los procesos? - III Parte

Los procesos también poseen un orden jerárquico; dicho de otra forma, todo proceso es lanzado (ejecutado) a partir de otro proceso, de esta forma se que se crea una relación de padres a hijos.

Con el comando pstree podemor visualizar nuestro árbol de procesos

Observa en el siguiente listado como el "padre" de todos los procesos es el proceso denominado init.


Código: Seleccionar todo
psbit@bit-desktop:~$ pstree
init─┬─acpid
     ├─atd
     ├─bonobo-activati
     ├─clock-applet
     ├─cron
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─dbus-launch
     ├─dd
     ├─esd
     ├─events/0
     ├─evince───{evince}
     ├─firefox-bin───2*[{firefox-bin}]
     ├─gconfd-2
     ├─gdm───gdm─┬─Xorg
     │           └─x-session-manag───ssh-agent
     ├─gedit
     ├─6*[getty]
     ├─gnome-cups-icon
     ├─gnome-keyring-d
     ├─gnome-panel───{gnome-panel}
     ├─gnome-power-man
     ├─gnome-screensav
     ├─gnome-settings-───{gnome-settings-}
     ├─gnome-terminal─┬─bash───pstree
     │                ├─gnome-pty-helpe
     │                └─{gnome-terminal}
     ├─gnome-vfs-daemo───{gnome-vfs-daemo}
     ├─gnome-volume-ma
     ├─hald───hald-runner─┬─hald-addon-acpi
     │                    ├─hald-addon-keyb
     │                    └─2*[hald-addon-stor]
     ├─hcid
     ├─hpiod───{hpiod}
     ├─khelper
     ├─4*[kjournald]
     ├─klogd
     ├─krfcommd
     ├─ksoftirqd/0
     ├─kswapd0
     ├─kthread─┬─aio/0
     │         ├─ata/0
     │         ├─ata_hotplug/0
     │         ├─hda_codec/0
     │         ├─kacpid
     │         ├─kblockd/0
     │         ├─khubd
     │         ├─kseriod
     │         ├─2*[pdflush]
     │         ├─scsi_eh_0
     │         └─scsi_eh_1
     ├─mapping-daemon
     ├─mdadm
     ├─metacity
     ├─mixer_applet2
     ├─nautilus───{nautilus}
     ├─notification-da
     ├─python
     ├─sdpd
     ├─syslogd
     ├─trashapplet───{trashapplet}
     ├─udevd
     ├─update-notifier
     ├─vmnet-bridge
     ├─2*[vmnet-dhcpd]
     ├─vmnet-natd
     ├─2*[vmnet-netifup]
     ├─vmware-serverd
     ├─watchdog/0
     └─xinetd
bit@bit-desktop:~$


Lancemos (ejecutemos) la calculadora desde un terminal
Código: Seleccionar todo
bit@bit-desktop:~$ gcalctool &
[1] 8020


Obseva que el proceso 8020 (la calculadora) es dependiente el terminal

Código: Seleccionar todo
bit@bit-desktop:~$ pstree
init─┬─acpid
     ├─atd
     ├─bonobo-activati
     ├─clock-applet
     ├─cron
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─dbus-launch
     ├─dd
     ├─esd
     ├─events/0
     ├─evince───{evince}
     ├─firefox-bin───4*[{firefox-bin}]
     ├─gconfd-2
     ├─gdm───gdm─┬─Xorg
     │           └─x-session-manag───ssh-agent
     ├─gedit
     ├─6*[getty]
     ├─gnome-cups-icon
     ├─gnome-keyring-d
     ├─gnome-panel───{gnome-panel}
     ├─gnome-power-man
     ├─gnome-screensav
     ├─gnome-settings-───{gnome-settings-}
[color=green]
     ├─gnome-terminal─┬─bash─┬─gcalctool
     │                │      └─pstree
     │                ├─gnome-pty-helpe
     │                └─{gnome-terminal}
[/color]
     ├─gnome-vfs-daemo───{gnome-vfs-daemo}
     ├─gnome-volume-ma
     ├─hald───hald-runner─┬─hald-addon-acpi
     │                    ├─hald-addon-keyb
     │                    └─2*[hald-addon-stor]
     ├─hcid
     ├─hpiod───{hpiod}
     ├─khelper
     ├─4*[kjournald]
     ├─klogd
     ├─krfcommd
     ├─ksoftirqd/0
     ├─kswapd0
     ├─kthread─┬─aio/0
     │         ├─ata/0
     │         ├─ata_hotplug/0
     │         ├─hda_codec/0
     │         ├─kacpid
     │         ├─kblockd/0
     │         ├─khubd
     │         ├─kseriod
     │         ├─2*[pdflush]
     │         ├─scsi_eh_0
     │         └─scsi_eh_1
     ├─mapping-daemon
     ├─mdadm
     ├─metacity
     ├─mixer_applet2
     ├─nautilus───{nautilus}
     ├─notification-da
     ├─python
     ├─sdpd
     ├─syslogd
     ├─trashapplet───{trashapplet}
     ├─udevd
     ├─update-notifier
     ├─vmnet-bridge
     ├─2*[vmnet-dhcpd]
     ├─vmnet-natd
     ├─2*[vmnet-netifup]
     ├─vmware-serverd
     ├─watchdog/0
     └─xinetd
bit@bit-desktop:~$


La dependencia entre procesos (relación padres-hijos) constituye una estructura jerárquica muy útil ya que, por ejemplo, nos sirve para matar un proceso padre y a la vez todos los procesos hijos (dependientes).

También nos sirve para averiguar de dónde parten los procesos (prengúntate si a alguien interesado en la seguridad del sistema le será útil esto).
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Mié Feb 07, 2007 12:05 pm

Comandos útiles - Linux


Tomado de la guia de referencia Debian

pwd: Muestra el nombre del directorio actual/de trabajo.

whoami: Muestra el nombre del usuario actual.

file loquesea: Muestra el tipo de archivo de un archivo loquesea.

type -p nombre_comando Muestra la ubicación del comando nombre_comando.

[b]which nombre_comando:
Muestra la ubicación del comando nombre_comando.

type nombre_comando: Muestra información sobre el comando nombre_comando.

apropos palabra_clave: Busca comandos relacionados con la palabra_clave.

man -k palabra_clave: Busca comandos relacionados con la palabra_clave.

whatis nombre_comando: Explica en una línea el comando nombre_comando.

man -a nombre_comando: Explica el comando nombre_comando. (estilo Unix)

info nombre_comando: Muestra información detallada del comando nombre_comando. (GNU style)

ls: Lista el contenido de un directorio (archivos comunes y directorios)

ls -a: Lista el contenido de un directorio (todos los archivos y directorios)

ls -A: Lista el contenido de un directorio (casi todos los archivos y directorios, es decir, omite los ".." y ".")

ls -la: Lista todo el contenido de un directorio con información detallada.

ls -d: Lista todos los directorios del directorio actual.

mkd¡r loquesea: Crea un directorio nuevo loquesea en el directorio actual.

rmd¡r loquesea: Borra el directorio loquesea del directorio actual.

cd loquesea: Cambia al directorio loquesea del directorio actual o del directorio que figura en la variable CDPATH.

cd /: Cambia al directorio raíz.

cd: Cambia al directorio personal del usuario actual.

cd /loquesea: Cambia al directorio /loquesea.

cd ..: Cambia al directorio padre.

cd ~loquesea: Cambia al directorio loquesea del directorio personal del usuario.

cd -: Cambia al directorio anterior.

touch loquesea: Crea un archivo vacío loquesea.

cp loquesea loquefuera : Copia el archivo loquesea en un nuevo archivo loquefuera.

rm loquesea: Borra el archivo loquesea.

mv loquesea loquefuera: Cambia el nombre un archivo existente loquesea en loquefuera.

mv loquesea loquefuera/cualquiera: Mueve el archivo loquesea a una nueva ubicación con el nombre loquefuera/cualquiera. El directorio loquefuera debe existir.

top: Muestra información de los procesos a pantalla completa. Pulse "q" para salir.

ps aux | pager: Muestra información de todos los procesos que se están ejecutando usando el estilo BSD.

ps -ef | pager: Muestra la información de todos los procesos que se están ejecutando usando el estilo Unix del system-V.

ps aux | grep -e "[e]xim4*": Muestra todos los procesos que ejecutan exim o exim4.

ps axf | pager: Muestra la información de todos los procesos ejecutándose usando una salida ASCII.

kill 1234: Mata un proceso identificado por el ID: 1234.

grep -e "patrón" *.html: Busca un "patrón" en todos los archivos que terminan en .html situados en el directorio actual y los muestra a todos.

gzip loquesea: Comprime loquesea para crear loquesea.gz usando el algoritmo Lempel-Ziv (LZ77).

gunzip loquesea.gz: Descomprime loquesea.gz para crear loquesea.

bzip2 loquesea: Comprime loquesea para crear loquesea.bz2 usando el algoritmo de compresión Burrows-Wheeler y Huffman (mejor compresión que gzip)

bunzip2 loquesea.bz2: Descomprime loquesea.bz2 para crear loquesea.

tar -xvvf loquesea.tar: Extrae los archivos de loquesea.tar.

tar -xvvzf loquesea.tar.gz: Extrae los archivos loquesea.tar.gz .

tar -xvvf --bzip2 loquesea.tar.bz2: Extrae los archivos de loquesea.tar.bz2. [25]

tar -cvvf loquesea.tar loquesea/: Empaqueta el contenido de la carpeta loquesea/ en loquesea.tar.

tar -cvvzf loquesea.tar.gz loquefuera/: Empaqueta el contenido de la carpeta loquesea/ en el archivo comprimido loquefuera.tar.gz.

tar -cvvf --bzip2 loquesea.tar.bz2 loquefuera/: Empaqueta el contenido de la carpeta loquefuera/ en el archivo comprimido loquesea.tar.bz2. [26]

zcat README.gz | pager: Muestra el contenido del archivo comprimido README.gz usando el paginador predeterminado.

zcat README.gz > loquesea: Crea el archivo loquesea con el contenido descomprimido de README.gz.

zcat README.gz >> loquesea: Agrega el contenido descomprimido de README.gz al final del archivo loquesea (si no existe, primero lo crea)

find . -name patrón: Busca los nombres de archivo coincidentes con el patrón. (lento)

locate -d . patrón: Busca los nombre de archivo coincidentes con el patrón. (más rápido si se usa la base de datos generada frecuentemente)
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Lun Ago 06, 2007 10:37 am

UUID de una partición


En este disco duro existen varias particiones:

Código: Seleccionar todo
root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda1[/color]
A8D8CD50D8CD1E06

root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda2[/color]
/dev/sda2: unknown volume type

root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda3[/color]
/dev/sda3: error open volume

root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda4[/color]
/dev/sda4: error open volume

root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda5[/color]
B1C5-6D59

root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda6[/color]
e38a1697-ed0d-4cda-8a9e-c071f354bf60

root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda7[/color]
1d485fe3-db71-41a6-b470-d7ac766c059c

root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sda8[/color]
8b52159b-8afa-42bd-9c9c-cc9239c9e393



Analizando un poco los resultados vemos que:

sda1 es una partición primaria
sda2, sda3, sda4 no existen (ya que no hay más particiones primarias)

sda5 es la partición extendida que contiene a sda6, sda7 y sda8




Veamos otro disco:

Código: Seleccionar todo
root@bit69-desktop:/home/bit69# [color=darkred]vol_id -u /dev/sdb1[/color]
d479d141-83f1-4c4f-b225-c0c9e2a37d10


root@bit69-desktop:/home/bit69#[color=darkred]vol_id -u /dev/sdb2[/color]
47d79cf8-3cb7-4ce9-bb72-2bd8a5172090


En este otro dos particiones primarias
Última edición por Bit69 el Mié Dic 19, 2007 1:07 pm, editado 1 vez en total
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Lun Ago 27, 2007 10:28 am

¿Cómo buscar una cadena de caracteres en un archivo?

Código: Seleccionar todo
find /ruta/archivo -type f | xargs grep cadena


Ejemplo:
Queremos buscar y listar los usuarios que se encuentran dentro del grupo administradores

bit69@bit69-desktop:~$ find /etc/group -type f | xargs grep administradores
administradores:x:1001:root,bit69
bit69@bit69-desktop:~$


Como podéis observar /etc/group representa /ruta/archivo y administradores a la cadena de caracteres a buscar
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Jue Ago 30, 2007 10:41 am

Paginadores

more divide la salida en pantallas individuales y esperando a oprimas la barra espaciadora antes de continuar con la próxima pantalla, con Enter avanza una línea



bit69@deb-bit69:~$ ls -1 /etc | more



less, con el comando more no puedes regresar a una página anterior que ya hayas visualizado, con less es posible mediante el udo de las flechas de cursor, pg up, pg dw.


bit69@deb-bit69:~$ ls -1 /etc | less
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Mié Ene 02, 2008 11:04 am

Dando permisos: STICKY BIT

Permite que un usuario sólo pueda borrar los ficheros que son de su propiedad en un directorio.

Si tenemos un directorio común, como puede ser el caso de /tmp, el sticky bit permitirá que sólo el usuario XYZ (propietario) pueda borrar sus archivos temporales


Sintaxis:
chmod +t directorio
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Jue Ene 10, 2008 7:58 pm

Versión del nucleo y módulos instalados

¿Qué versión del núcleo posees? uname -r

bit69@deb-bit69:~$ uname -r
2.6.18-5-686
bit69@deb-bit69:~$


¿Cuáles módulos están activos en tu núcleo? lsmod

bit69@deb-bit69:~$ lsmod
Module Size Used by
ipv6 226272 10
i915 17728 2
drm 61332 3 i915
xt_limit 2752 8
xt_tcpudp 3136 10
...
...
...
processor 28840 1 thermal
fan 4804 0
bit69@deb-bit69:~$



Filtar la búsqueda lsmod | grep lo_que_quieras_buscar

Ejemplos:

bit69@deb-bit69:~$ lsmod | grep usb
usbhid 37248 0
usbcore 112644 4 usbhid,ehci_hcd,uhci_hcd
bit69@deb-bit69:~$



bit69@deb-bit69:~$ lsmod | grep snd
snd_intel8x0 30332 1
snd_ac97_codec 83104 1 snd_intel8x0
snd_ac97_bus 2400 1 snd_ac97_codec
snd_pcm_oss 38368 0
snd_mixer_oss 15200 1 snd_pcm_oss
snd_pcm 68676 3 snd_intel8x0,snd_ac97_codec,snd_pcm_oss
snd_timer 20996 1 snd_pcm
snd 47012 8 snd_intel8x0,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
soundcore 9248 1 snd
snd_page_alloc 9640 2 snd_intel8x0,snd_pcm
bit69@deb-bit69:~$
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits

Notapor Bit69 » Jue Ene 24, 2008 10:14 pm

Conocer los 13 Servidores DNS Primarios


bit69@debian-pc:~$ dig

; <<>> DiG 9.3.4 <<>>
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22527
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;. IN NS

;; ANSWER SECTION:
. 406708 IN NS J.ROOT-SERVERS.NET.
. 406708 IN NS K.ROOT-SERVERS.NET.
. 406708 IN NS L.ROOT-SERVERS.NET.
. 406708 IN NS M.ROOT-SERVERS.NET.
. 406708 IN NS A.ROOT-SERVERS.NET.
. 406708 IN NS B.ROOT-SERVERS.NET.
. 406708 IN NS C.ROOT-SERVERS.NET.
. 406708 IN NS D.ROOT-SERVERS.NET.
. 406708 IN NS E.ROOT-SERVERS.NET.
. 406708 IN NS F.ROOT-SERVERS.NET.
. 406708 IN NS G.ROOT-SERVERS.NET.
. 406708 IN NS H.ROOT-SERVERS.NET.
. 406708 IN NS I.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
J.ROOT-SERVERS.NET. 580589 IN A 192.58.128.30
K.ROOT-SERVERS.NET. 580589 IN A 193.0.14.129
L.ROOT-SERVERS.NET. 580589 IN A 199.7.83.42
M.ROOT-SERVERS.NET. 580589 IN A 202.12.27.33
A.ROOT-SERVERS.NET. 580589 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 580589 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 580589 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 580589 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 580589 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 580589 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 580589 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 580589 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 580589 IN A 192.36.148.17

;; Query time: 174 msec
;; SERVER: 80.58.61.250#53(80.58.61.250)
;; WHEN: Thu Jan 24 20:08:20 2008
;; MSG SIZE rcvd: 436


Por supuesto:

man dig



Opciones más comunes

dig dominio.com+trace --> tracert TCP/IP para dns

dig dominio.com.NS ---> Muestra servidores dns de dominio.com

bit69@debian-pc:~$ dig rae.es .NS
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40601
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;rae.es. IN A

;; ANSWER SECTION:
rae.es. 2889 IN A 193.145.222.100

;; Query time: 109 msec
;; SERVER: 80.58.61.250#53(80.58.61.250)
;; WHEN: Thu Jan 24 20:19:41 2008
;; MSG SIZE rcvd: 40



En
; ANSWER SECTION:
rae.es. 2889 IN A 193.145.222.100

2889 es el tiempo de vida de la consulta en el caché DNS (TTL)
Conecto... luego existo. No conecto... luego insisto
-------------------------------------------------------------------
Bit al derecho, Bit al revés: Bit1000101 - Bit45h - Bit69 (The Profanator)
Portador del único y legitimísimo embudo de enormérrima indulgencia plenaria -<|:P
Wadalbertia member #313 - KarroZILLAS!!! Founder Member #001
Miembro del movimiento anticastellanización de palabras técnicas.
Bit69
<|:-)
<|:-)
 
Mensajes: 492
Registrado: Mié Jun 07, 2006 10:23 am
Ubicación: Entre bits


Volver a Gnu/Linux y SSOO alternativos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron