Esta página puede ser redistribuida libremente bajo los términos de la licencia GPL. Vease ( GPL texto original ) o si lo prefiere (Traducción española no oficial de la GPL) Al margen de las obligaciones legales que se derivan del uso de esta licencia rogamos sea respetada la referencia a su lugar de publicación original www.ciberdroide.com. y a su autor original Antonio Castro Snurmacher (Madrid 01/01/2000).

Ausencia de Garantía

Esta ausencia de garantía se hace extensa a cualquier tipo de uso de este material y muy especialmente a las prácticas, ejercicios, y de ejemplos que encuentre en estas páginas. Deberá trabajar siempre salvo indicación contraria con un SO Linux y con un usario distinto de 'root' sin privilegios especiales. Como directorio de trabajo se procurará usar el directorio '/tmp' o algún otro que no contenga información valiosa. Tampoco se considera buena idea practicar en una máquina que contenga información valiosa.

Todo esto son recomendaciones de prudencia. En cualquier caso si algo sale mal toda la responsabilidad será únicamente suya. En ningún caso podrá reclamar a nadie por daños y perjuicios derivados del uso de este material. Para más información lea el contenido de la licencia GPL y abstengase de hacer prácticas si no está dispuesto a asumir toda la responsabilidad.

...
..

ALGUNOS CONCEPTOS BÁSICOS

Visión panorámica:
En su momento trataremos los temas abordados en este capítulo de forma completa. En este momento dado que partimos de cero se hace necesario al menos esbozar una serie de conceptos que son tan elementales que dificilmente se puede explicar algo sin hacer referencia a ellos.

Por otra parte estos conceptos están interrelacionados de tal forma que tampoco se puede abordar ninguno de ellos en detalle en este momento. Por ello nuestro primer odbjetivo es ofrecer una visión panorámica del SO. Por borrosa que resulte siempre será mejor esto que empezar directamente abordando en detalle los temas.

Usaremos muchas veces de forma indistinta Unix y Linux. No son cosas equivalenetes pero en este curso consideraremos ambas cosas como equivalentes salvo que concretemos detalles específicos de Linux. Para nosotros Linux es un SO tipo Unix y precisamente nos centraremos en los aspectos más generales de estos sistemas operativos. Entre sus características más destacables está la de ser un SO multitarea y multiusuario. Un sistema multitarea es aquel que puede ejecutar simultaneamente varios procesos simultaneamente. Para ello se puede usar uno o mas procesadores físicos. En el caso de un solo procesador lo que ocurre es que el tiempo del procesador se va repartiendo para atender los distintos procesos creando la ilusión de que todo ocurre simultaneamente. Un sistema multiusuario es aquel que está pensado para ser utilizado por varios usuarios simultaneamente. En la práctica un sistema multiusuario requiere capacidad multitarea. En el caso concreto de Linux es además un SO multiplataforma ya que puede funcionar en diferentes arquitecturas.

Los conceptos que mencionemos en este curso procuraremos ilustrarlos con ejemplos.

El comando 'echo' es un comando que vamos a usar mucho para practicar. Este comando se limita a visualizar en pantalla todo aquello que se le pasa como argumentos. Por eso nos resultará muy util.

Lo primero que vamos a practicar y que no debe olvidar es el echo de que en Unix los ficheros, comandos etc.. deben indicarse exactamente respetando la diferencia entre mayúsculas y minúsculas.

$ echo hola
$ ECHO hola

La segunda linea habrá producido un mensaje de error porque no existe nigún comando llamado ECHO con mayúsculas.

Variables de entorno:
Empezaremos hablando de las variables sin profundizar ahora en ello. Una variable solo es un elemento que tiene un nombre y que es capaz de guardar un valor. Para definir una variable basta poner su nombre un igual y su valor. (Ojo no dejar espacios).

$ VAR33=valor_de_la_variable_VAR33

En Unix las variables del sistema se llaman variables de entorno. Para consultar el valor de una variable se utiliza el nombre de la variable precedido por '$'.

$ echo $VAR33

Para ver todas las variables y sus valores se utiliza el comando set.

Para hacer la variable exportable se usa el comando 'export'. Se puede hacer que una variable sea de solo lectura con el comando 'readonly'. Este comando sin parámetros mostrará todas las variables que son de solo lectura. Pruebe estos comandos:

$ set
$ readonly
$ export

Existen algunas variables predefinidas y hay tres variables importantes que mencionaremos en seguida y que son $PATH, $PS1 y $PS2.

Directorios:
Aquí también tenemos que hacer un pequeño avance sobre la estructura de directorios de Unix porque sino puede que no se entienda lo que vamos a hablar sobre la variable $PATH.

En Unix la estructura de directorios es en forma de arbol similar a la de Msdos. Dado que la estructura de directorios se organiza como las ramas de un arbol para localizar un punto cualquiera hay que utilizar cada uno de los directorios que conducen a ese punto desde el directorio raiz. Nosotros lo llamaremos camino y en Unix se le suele llamar path. Se empieza en el directorio raiz representado por '/' y se avanza por las ramas de ese arbol separando cada identificador por un nuevo caracter '/'. De esta forma '/usr/local/bin' indica un lugar concreto en el arbol de directorios. Quizás se pregunte porqué Unix usa '/' en lugar de '\' como en Msdos. Recuerde que Msdos fué posterior a Unix y que a Bill Gates le gusta inventar cosas totalmente nuevas y revolucionarias. Aunque el astuto lector ya se habrá dado cuenta, advierto a los despistados que estoy ironizando.

Aprovechando que estamos hablando de directorios mencionaremos que hay directorios con significado especial. Está el directorio raiz '/' que ya hemos mencionado. Está el directorio 'home' que es el punto donde el sistema nos situa para trabajar cuando entramos en él. Recordemos que en Unix normalemente no disponemos de todo el sistema para nosotrso solos. Luego podemos cambiar de directorio de trabajo. El directorio de trabajo actual se representa como directorio '.', El directorio anterior o diretorio padre de este directorio se representa por '..'. Los comandos 'cd', 'mkdir' y 'pwd' sirven para cambiar de directorio actual, crear un directorio y averiguar en que directorio nos encontramos actualmente.

Estamos dando ideas en forma intuitiva. En realidad cuando digo " ... en que directorio nos encontramos actualmente ..." es una forma de expresarse. Normalmente el usuario no estará en un directorio sino sentado en una silla sentado delante de una pantalla, pero la shell mantiene en todo momento algún directorio abierto como directorio de trabajo actual.

Comandos
Un comando es generalmente un fichero ejecutable localizado en alguna parte de nuestro sistema. Existe una variable llamada $PATH que contiene una lista de caminos de busqueda para los comandos todos ellos separados por ':'. Compruebe el valor de su variable $PATH.

$ echo $PATH

Si un comando no está localizado en ninguno de esos caminos deberá ser referenciado indicando el camino completo ya que de otra forma no podrá ser referenciado. Si quiere saber donde se encuentra un ejecutable use el comando which. Este comando buscará en los caminos contenidos en la variable PATH hasta que encuentre el comando y entonces mostrará el camino completo que conduce al comando. Puede ocurrir que un comando se encuentre duplicado y que los dos sitios donde se encuentre figuren en el PATH. En ese caso se ejecutará el comando que se encuentre en el primer camino referenciado en el PATH. Igualmente el comando which solo mostrará el primer camino referenciado en el PATH. Estamos usando un comando llamado echo para mostrar valores. Vamos a localizarlo.

$ which echo

Echo esta situado en uno de los caminos contenidos en $PATH. En resumidas cuentas $PATH es una variable que usa el interprete de comandos para localizar los comando. En la lección siguiente hablaremos de 'man'. Es un comando que sirve para consultar el manual en linea de Linux. Pues bien existe una variable llamada $MANPATH que contiene la lista de los caminos donde el comando 'man' debe buscar las páginas del manual. La variable $MANPATH será usada por el comando 'man' y quizas algún otro. La variable $PATH será usada por la shell y quizas por algún otro comando como por ejemplo 'which' del cual acabamos de hablar.

Somos conscientes de que no estamos explicando gran cosa ahora, pero son concetos muy elementales que vamos a utilizar antes de explicar en profundidad todo el sistema de ficheros de Unix.

Más adelante también hablaremos más detenidamente sobre las variables de entorno. Estamos dando unos pequeños esbozos sobre algunas cuestiones porque hay mucha interrelación de unos conceptos con otros y resulta imposible abordar nada en profundidad al principio.

Usuarios
Linux es un sistema operativo multiusuario y eso implica una filosofía de uso muy distinta a la del tradicional ordenador personal. Cuando un usuario va a usar un SO Tipo Unix lo primero que necesita hacer es identificarse para ser autorizado a abrir una sesión de trabajo. También es multitaréa y por ello en el mismo instante varios procesos pueden estar funcionando y cada uno puede pertenercer a usuarios distintos. La información que se guarda en el disco duro también puede pertenecer a distintos usuarios y para evitar que todo ello provoque conflictos existen unos atributos de usuario que se asocian a los ficheros a los directorios, a los procesos, etc. En función de esto hay cosas que estarán permitidas a ciertos usuarios y a otros no.

Los usarios pueden estar organizados en diferentes grupos a fin de poder manejar permisos a nivel de grupo. Esto se hace para simplificar la administración del sistema.

Los usuarios y los grupos dentro del sistema se manejan como un número llamado UID y GID respectivamente. Los números en un ordenador se manejan con mucha más facilidad que un literal. Por eso el nombre de usuario y el nombre de grupo se guardarán solo en un fichero junto al número UID y GID asociado, pero para el sistema un usuario, un grupo, un proceso, un fichero, y muchas otras cosas se identifican por una clave numérica. Para un ordenador resulta más sencillo consultar si el proceso 456 perteneciente al usuario 105 tiene permiso de escritura en el fichero 48964 que consultar si el usuario 'pepito' perteneciente al grupo 'alumnos' tiene permiso de escritura en el fichero '/home/pepito/leccion005.txt'. Cuando el ordenador tiene que mostrar información en formato inteligible buscará la descripción correspondiente a cada clave numérica. Cada clave recibe un nombre como por ejemplo los UID, GID que ya hemos comentado otra sería por ejemplo el PID, para procesos y existen otras muchas más que iremos aprendiendo y que forman parte de la jerga de este SO.

Para ver los datos de identificación relativos a su usuario pruebe lo siguiente:

id

El comando 'id -un' o el comando 'whoami' muestran su nombre de usuario.

$ whoami

Existe un usuario especial que goza absolutamente de todos los privilegios y que se llama root. Su número de usuario es decir su UID es 0.

El Núcleo del sistema (kernel)
El núcleo del sistema llamado también kernel es el encargado de realizar la mayoría de funciones básicas del sistema y gestiona entre otras cosas la memoria, los ficheros, los usuarios, las comunicaciones, los procesos, etc. La gestíon de estas cosas se hacen por medio de un limitado número de funciones que se denominan llamadas al sistema y que pueden ser usadas por los programas. Los procesos que usan una llamada al sistema cambian su modo de ejecución. Mientras están ejecutando la llamada del núcleo se dice que estan en modo núcleo y cuando están ejecutando código que no pertenece al núcleo se dice que están en modo usuario. Son dos niveles de ejecución distintos ya que el modo núcleo es un modo privilegiado. Esto garantiza a nivel de hardware que ningún programa de usuario pueda acceder a recursos generales del sistema ni interactuar con otros procesos a no ser que use las llamadas del núcleo las cuales establecerán si tiene o no permiso para hacer ciertas cosas. Esto proporciona gran robustez de funcionamiento. Un programa mal diseñado no perjudicará jamás al sistema ni a otros procesos. Cada proceso tiene su propia zona de memoria y no puede acceder fuera de ella ni intencionadamente ni accidentalmente. Para que un programa pudiera tener un efecto destructivo en el sistema tendría que pertenecer a 'root' o pertenecer al propio nucleo del sistema y solo el admiministrador 'root' puede alterar el dicho nucleo. Si el ordenador aparece un buen día destrozado a martillazos también buscaran la forma de culpar a 'root' para no perder la costumbre.

Procesos
Un proceso a diferencia de un programa es algo vivo es decir algo que está funcionando. En un sitema multitarea como este, un programa puede dar lugar a varios procesos. A cada proceso le corresponderá con un número de identificación llamado PID que le identifica totalmente. Además de esto se guarda la información de identificación del usuario propietario. Cuando un usuario ejecuta un comando se arranca el proceso correspondiende del cual generalmente permanecerá como propietario. Es decir el sistema no acepta órdenes anónimas. Siempre figurará un usuario para hacer cada cosa. Esto se indica con un número UID para identificar el usuario correspondiente. No siempre este UID se corresponde con el usuario que arrancaro el proceso. Por ello existe además de un UID un identificador de usuario efectivo (EUID) que es el que realmente es tenido encuenta por el sistema a la hora de conceder permiso para hacer ciertas cosas. El EUID de 'root' es 0. Ahora no importa como pero algunos comandos de forma bien controlada podrían convertirnos virtualmente en superusuarios haciendo que su EUID valga 0. Esto serviría por ejemplo para permitir hacer cosas especiales y muy concretas nada más que en condiciones normales solo 'root' podría hacer. No hemos mencionado intencionadamente algunas cosas (como por ejemplo el grupo de usuario), porque estamos simplificando mucho intencionadamente para intentar que en este momento solo capte una primera idea general.

Si se siente un poco mareado y confuso relajese y acostumbrese a esta sensación. Los primeros pasos suelen ser los más complicados. Especialmente en Unix porque no fué diseñado como un sistema intuitivo.

Test
Puede comprobar sus conocimientos respondiendo el siguiente test.
Para ello seleccione las opciones que se ajusten a la verdad y luego pulse el boton para ver el resultado de su test.

1 Los comandos internos no usan la variable PATH
2 El directorio actual de trabajo es el '..'
3 El PID de un proceso arrancado por 'root' vale 0
4 El EUID y el UID de un proceso no tienen porque coincidir
5 El multiproceso requiere varios procesadores
6 El modo núcleo es un modo privilegiado

Resultado del test

Si quiere hacernos llegar alguna duda, aclaración,
crítica, o contribución personal, utilice nuestro
formulario de contacto y nosotros le contestaremos
contacto

.
....
...

Volver a la página anterior
Volver a la página principal de la tienda