Informática

Control de Procesos

Escrito por fedaikyn 05-12-2008 en General. Comentarios (0)
Bien, ya hemos visto la estructura de directorios de GNU/Linux, los comandos básicos para recorrerla, toda la gestión de permisos de archivos y como cambiarlos y el propietario de archivos y como cambiarlo, ahora veremos como ejecutar programas desde la consola y como controlarlos.

Para aprender esto, vamos a abrir una consola por supuesto y desde ella vamos a abrir otra consola escribiendo xterm y dando enter.

Vemos que ahora tenemos 2 consolas por que hemos ejecutado el programa xterm que es quien abre una consola, por lo tanto tenemos 2 instancias del programa xterm.
Cada instancia de un programa como en este caso es lo que llamamos proceso.

Si ponemos atención, en la primera consola donde ejecutamos xterm para abrir la segunda, no podemos ejecutar nada porque ésta ha quedado pendiente de la otra consola. Para liberarla debemos presionar ctrl+z

Nos aparece la siguiente linea que nos indica que hemos detenido la consola 2 para liberar la primera. Ahora podemos pasar comandos en la primera consola pero no en la segunda porque ésta está detenida.

[1]+  Stopped                 xterm

Para liberar la segunda consola, la vamos a enviar a procesarse en segundo plano de modo de tener ambas consolas libres, así que escribimos bg (back ground).

Ahora nos aparece la siguiente linea:

[1]+ xterm &

que nos indica que la consola 2 está ejecutandose en back ground es decir segundo plano. Ahora podemos escribir en ambas consolas.

Para volver la consola 2 al primer plano y capturarla en la primera escribimos fg.

Bien, cerramos la consola 2.

Ahora tenemos solo la consola 1 abierta. Lo que vamos a hacer es abrir otra consola y pasarla directamente al segundo plano escribiendo xterm &

Ahora tenemos ambas consolas libres. Vamos a ver que procesos están corriendo en la primera consola (o sea que instancias de programas), escribiendo ps

Nos aparece las siguientes lineas:

  PID TTY          TIME CMD
 8138 pts/0    00:00:00 bash
 8198 pts/0    00:00:00 xterm
 8215 pts/0    00:00:00 ps


Como podemos apreciar, está corriendo bash que es el interprete de los comandos que estamos pasandole a la consola, también está corriendo ps que acabamos de ejecutar y xterm que hace referencia en este caso a la consola 2.
Si ejecutamos ps en la consola 2 veremos que no nos muestra ninguna instancia de xterm ya que allí no hemos abierto otra terminal.
Si vamos a la consola 1 y ejecutamos jobs nos mostrará las tareas que se están realizando desde la consola 1:

[1]+  Running                 xterm &

El número entre corchetes [1] indica el número la tarea, Running quiere decir que está en ejecución y luego viene el nombre del programa instanciado y el símbolo & que indica que se está ejecutando en segundo plano.

Si ejecutamos otra terminal desde la consola 1 con xterm & y volvemos a escribir jobs, veremos lo siguiente:

[1]-  Running                 xterm &
[2]+  Running                 xterm &


Lo que vemos son las consolas 2 y 3 corriendo desde la terminal 1.

Ahora podemos pasar al primer plano (fg) la consola 2 escribiendo fg 1 o la consola 2 escribiendo fg 2.

Bien, suponiendo que tengo las tres consolas abiertas y libres, en la primera consola vuelvo a ejecutar ps y me aparece esto:

 PID TTY          TIME CMD
 8138 pts/0    00:00:00 bash
 8198 pts/0    00:00:00 xterm
 8230 pts/0    00:00:00 xterm
 8249 pts/0    00:00:00 ps


Los números a la izquierda identifican a cada proceso, lo cual nos permite trabajar con ellos a través de éstos, por ejemplo, podemos cerrar la consola 2 matando su proceso escribiendo kill 8198 (es decir el número que a ti te aparezca en esa linea).
Con eso, habremos matado la consola 2, pero no su ventana, si te fijas, la ventana de la consola 2 sigue estando allí pero si intentas escribir no podrás hacerlo, para matar la ventana escribes xkill  y te aparecerá una cruz como puntero del mouse, entonces vas a la ventana y le haces click y la ventana se cerrará.

Bien, resumiendo, desde una consola, si tienes los permisos necesarios puedes ejecutar comandos del bash de gnu/linux, abrir programas o ejecutar archivos.
Puedes ver los procesos de esa consola con ps y matarlos con kill nºdeproceso, puedes matar cualquier ventana con xkill, ver todos los procesos de la pc con ps xa, e incluso puedes entubar la salida de la terminal hacia un archivo para verlo más tarde (ps xa >nombredearchivo.txt).
Puedes ver las tareas con jobs y mandar procesos a segundo plano con bg o con nombredeproceso & y volver a traerlos con fg o fg nºdetarea, etc, para aprender más, puedes consultar el manual de cada comando desde la misma consola escribiendo man nombredecomando.

Propietario de archivos (Chown)

Escrito por fedaikyn 05-12-2008 en General. Comentarios (0)
En Linux, cada archivo tiene un propietario, de modo que siempre se sabe quien creó dicho archivo y además se mantiene la información segura ya que con el sistema de permisos que vimos anteriormente se puede gestionar quien puede modificar leer o ejecutar cada archivo.

Además de esto, cada usuario pertenece a un grupo de usuarios, por lo cual, podemos gestionar los permisos tanto para el propietario del archivo, para el grupo de usuarios al que este pertenece y para el resto de usuarios del sistema.

Acá se explica como hacer para cambiar el grupo de usuarios y el propietario de un archivo existente en el sistema para lo cual utilizaremos el comando chown.

Supongamos que tenemos un usuario llamado flavio que pertenece a un grupo llamado flavio y vamos a modificar los archivos y directorios que pertenecen al root para que su propietario sea flavio:flavio (usuario:grupo), de forma que él, luego pueda hacer lo que desee con ellos.

Obviamente todo lo que sigue, se hace en una terminal y debe escribirse tal cual se muestra, es decir que hay que respetar espacios, mayúsculas etc, de lo contrario cometerás error de sintaxis y no funcionará.

Primero que nada, te haces root en la terminal, escribiendo "su root" y dando enter, te pedirá la contraseña y listo, comienzas con lo que sigue:

 

(cambia el usuario propietario del archivo, a flavio):

chown flavio archivo

 

(cambia el usuario propietario del archivo y el grupo propietario del mismo, a flavio:flavio respectivamente):

chown flavio:flavio archivo

 

(cambia el usuario propietario de la carpeta y todo lo que hay dentro, a flavio):

chown -R flavio carpeta 

 

(cambia el usuario propietario de la carpeta y el grupo propietario de la misma y de todo lo que hay dentro, a flavio:flavio respectivamente):

chown -R flavio:flavio carpeta 

 

para aprender más sobre chown escribe man chown.

Permisos de archivos y directorios

Escrito por fedaikyn 09-11-2008 en General. Comentarios (1)
En cualquier sistema operativo multiusuario necesitamos que losficheros que guardamos en nuestro disco puedan tener una serie depropiedades que nos permitan verlos, modificarlos o ejecutarlos paralos usuarios que nosotros definamos. Aunque hay varias alternativaspara hacer esto, GNU/Linux utiliza el sistema clásico de UNIX, quecombinado con todos los mecanismos de gestión de usuarios y grupos nospermite cualquier configuración posible. La idea es definir, para cadafichero o directorio, a qué usuario y grupo pertenece y qué permisostiene para cada uno de ellos y para el resto de usuarios del sistema.Ejecutando “ls -l” veremos como por cada archivo del directorio dondeestemos aparece una línea parecida a la siguiente:

-rwxr-xr-x 1 user1 grupo1 128931 Feb 19 2000 gpl.txt

Los primeros diez caracteres (empezando por la izquierda) nos indican los permisos del fichero de la siguiente forma:

Caracter 1:

Esta entrada nos indica si es un fichero o un directorio. En caso deser un fichero aparece el caracter “-”, mientras que para losdirectorios aparece una “d”.

Caracteres 2,3,4:

Nos indican, respectivamente, los permisos de lectura, escritura yejecución para el propietario del fichero. En caso de no tener elpermiso correspondiente activado encontramos el caracter “-” y sino“r”, “w” o “x” según si lo podemos leer (Read), escribir (Write) oejecutar (eXecute). En el tercer caracter, además, podemos encontrarnosuna “s”, que nos indica si el archivo es de tipo SetUserId, que quieredecir que al ejecutarlo obtendrá los permisos del propietario delfichero. Si sólo tiene el permiso “x”, cuando el programa se ejecuta lohace con los permisos de quién lo haya lanzado.

Caracteres 5,6,7:

Estos caracteres tienen exactamente el mismo significado queanteriormente pero haciendo referencia a los permisos dados para losusuarios del grupo al que pertenece el fichero.

Caracteres 8,9,10:

Igual que en el caso anterior pero para todos los demás usuarios del sistema.

Después de estos 10 caracteres encontramos un número que nos indica elnúmero de enlaces fuertes que tiene el fichero (qué es esto lo veremosmás adelante). Para los directorios, este número indica cuántascarpetas hay dentro de él además de los enlaces fuertes que tiene(cuando no hay ninguno, el número es 2 debido a la gestión interna delSistema Operativo).

A continuación vemos el propietario y el grupo del archivo, seguido deltamaño (en bytes) que ocupa y la fecha de la ultima modificación. Entodos los ficheros se guarda su fecha de creación, ultimo acceso ymodificación, que podemos manipular con el comando touch. Al final estáel nombre del fichero, dónde se diferencian minúsculas de mayúsculas ypodemos tener todo tipo de caracteres sin ningún problema.

Para cambiar los permisos de un determinado archivo podemos utilizar elcomando chmod. Debemos tener en cuenta que sólo el propietario delarchivo (o el root) puede cambiar estos permisos ya que sino todo elmecanismo no tendría ningún sentido. Podemos utilizar este comando demuchas formas diferentes, pero las dos más frecuentes son lassiguientes:

La primera forma de utilizarlo es del estilo “chmod XXX nombreArchivo”.Las “X” deben ser tres números entre 0 y 7. El primer número indica lospermisos que queremos establecer para el usuario, el segundo para elgrupo y el tercer para los demás. Para interpretar correctamente lospermisos que daremos utilizando los números del 0 al 7 debemos utilizarla representación binaria del número en cuestión, de forma que elprimer dígito indicará el permiso de escritura, el segundo el delectura y el tercero el de ejecución. En cada caso un 0, indica que nose dá el permiso en cuestión y el 1 que sí. En la siguiente tablapodemos ver esta relación:



La otra forma de utilizar el comando es indicando de forma explícita qué permiso queremos dar o quitar del fichero. La forma de hacerlo es indicando, primero, si nos referimos a los permisos del usuario, grupo o a todos los otros con las letras “u”,“g” u “o” respectivamente. Seguidamente debemos añadir un “+” o “-” según si queremos añadir o eliminar el atributo, que indicaremos con “r”, “w”, “x” o “s” (éste ultimo para el SetUserId). Además, podemos hacer todas las combinaciones posibles, refiriéndonos a más de un permiso y/o usuarios. Por ejemplo, “chmod go+r gpl.txt” dará el permiso de lectura al grupo y a todos los otros usuarios para el fichero gpl.txt.

Para cambiar el propietario de un fichero existe el comando chown, que sólo lo puede utilizar el root por razones de seguridad. Para cambiar el grupo de un determinado archivo se puede utilizar el comando chgrp. Como podemos suponer, cuando un usuario crea un nuevo archivo, el sistema pone como propietario el usuario que lo ha creado y perteneciente al grupo primario del mismo usuario. Los permisos que se ponen por defecto al crear un nuevo archivo los podemos configurar con el comando umask, que le debemos pasar la misma notación de tres números decimales entre 0 y 7 que veíamos anteriormente pero complementados. Por ejemplo, si queremos que nuestros ficheros se inicialicen con los permisos “rw-r--r--” deberíamos escribir “umask 133”.

Nota: Si dejásemos que los usuarios cambien el propietario de los ficheros, comprometeríamos la seguridad del sistema porque se podría realizar acciones maliciosas y después cambiar el propietario inculpando a otros usuarios.

Comandos para recorrer la estructura de directorios

Escrito por fedaikyn 09-11-2008 en General. Comentarios (2)
Comandos de consola (terminal) para movernos por la estructura de directorios:

Obviamente para utilizar estos comandos debes ingresar en una terminal, generalmente, si oprimes alt+F2 te abrirá una ventana donde escribes xterm y das enter.

Cuando entramos en el sistema es usual que el login nos sitúe en nuestro directorio home, que generalmente se suele referenciar con el caracter “∼”.
Si queremos ver lo que hay en el directorio donde estemos situados podemos listar los contenidos utilizando el comando ls. Debemos tener en cuenta que por defecto el comando no nos muestra los archivos que empiezan por un punto. Con el parámetro “-a” sí nos mostrará absolutamente todos los ficheros.
Para cambiar de directorio podemos utilizar el comando cd. Si no le pasamos ningún parámetro, por defecto nos situará en nuestro directorio home.
Para saber en qué directorio estamos podemos utilizar el comando pwd.

Resumen:

ls = lista el contenido del directorio donde estamos parados.

ls -a = lista todo el contenido del directorio, incluso los archivos y carpetas ocultas.

ls -l = lista el contenido, mostrandome los permisos de cada archivo o carpeta (ver permisos de archivos y carpetas en este mismo blog).
Tambien puedes combinar los parámetros, por ejemplo, puedes hacer ls -la.

cd /directoriodestino = te lleva al directorio al que desees ir.

cd .. = sube un nivel en la jerarquía de directorios.

cd = te lleva al directorio home.

pwd = te muestra el directorio donde te encuentras parado.


Mover, copiar y buscar archivos y directorios:

El comando rm es el que se encarga de eliminar los archivos que le indiquemos. Si quisiéramos borrar completamente un directorio y todo su contenido podríamos utilizar  “rm -r” (r por recursividad, es decir rm = remover r = recursivamente. Borrará el directorio y todo lo que contiene).

Para copiar archivos de un lugar a otro tenemos el comando cp, con el cual siempre debemos indicarle el fichero o directorio origen y el lugar o nombre de destino, aunque sea en el directorio actual. De esta forma, si queremos copiar el archivo /home/user1/gpl.txt en el directorio actual (y con el mismo nombre) deberíamos escribir “cp /home/user1/gpl.txt .”. Si en lugar de copiar los archivos queremos moverlos de sitio podemos utilizar el comando mv.

Un mecanismo muy util que nos proporciona el sistema son los patterns (patrones). Hasta ahora hemos visto como aplicar ciertas operaciones sobre un determinado archivo, pero cuando estamos manipulando un sistema en muchos casos nos interesará aplicar alguna de las operaciones que hemos visto sobre un grupo grande de ficheros. Los patrones nos permitirán aplicar las operaciones que queramos especificando, en una sola instrucción, varios ficheros que cumplan con una serie de características especificadas. Debemos verlos como plantillas de nombres, de forma que el caracter “” significa cualquier cadena de caracteres posibles y el “?” nos sirve como comodín a cualquier caracter. De esta forma, si queremos listar todos los archivos que empiecen por “s”, que después tengan cualquier otro caracter, les siga una “a” y después cualquier otra cadena podríamos utilizar “ls s?a*”.

Entre “[]” podemos incluir otros caracteres, indicando que el patrón tiene exito si se encuentra alguno de ellos en el nombre. Por ejemplo, si quisiéramos referenciar todos los archivos que empezaran por “a” o por “b” y que continuaran con cualquier otra cadena, podríamos escribir el pattern “[ab]*”. Si después de “[” pusiéramos el caracter “!” (“[!ab]*”) indicaríamos que el pattern coincidirá con cualquier archivo que no empezara por “a” o “b”.

Estructura de Directorios (Carpetas) en GNU-Linux

Escrito por fedaikyn 09-11-2008 en General. Comentarios (1)
La mayoría de sistemas operativos del mercado siguen el estándar IEEE POSIX (Portable Operating System Interface), dónde se especifican las principales características que debería tener cualquier sistema operativo. Entre ellas está la distribución en directorios que tenemos que hacer de nuestros archivos para tenerlos correctamente organizados y poder localizarlos de forma rápida y sencilla. En la mayoría de distribuciones basadas en GNU/Linux se siguen estas recomendaciones, encontrando los siguientes directorios principales:

/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 utilizada (o la configuración que utilicemos) se borran al arrancar el sistema o cada cierto período de 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.


Nota:
Es muy recomendable conservar y no eliminar ninguno de estos directorios (o los que por defecto nos cree la distribución que utilicemos) ya que son básicos para el buen funcionamiento del sistema. Generalmente los procesos de instalación de nuevas aplicaciones necesitan que exista la organización dada y muchos de los archivos de configuración de los programas deben estar en determinados directorios. Lo que sí podemos hacer sin ningún tipo de restricción es crear nuevos directorios a la raíz del sistema o en cualquier otra carpeta.