Mostramos algunos conceptos básicos sobre el sistema operativo Linux. Explicamos cómo se organiza GNU Linux (ficheros, procesos, dispositivos y la estructura genérica del sistema de ficheros).

Sistema operativo Linux

Linux está concebido para que casi todo sea un fichero (órdenes, comandos, dispositivos, comunicación entre procesos, el núcleo del sistema operativo, particiones, tareas, etc). Esto supone una gran ventaja a la hora de la administración del sistema, a diferencia de Windows que trata cada elemento anterior de una forma diferente, lo que dificulta su administración.

Linux tiene una estructura jerárquica de directorios llamada sistema de ficheros:

  • En este sistema operativo la raíz del sistema se nombra con «/».
  • Linux puede estar compuesto por varios sistemas de ficheros (discos duros, dvd’s, ficheros convertidos en particiones virtuales, etc), que una vez montados estarán disponibles desde la jerarquía de directorios.

Sistema de ficheros de Linux

Un sistema de ficheros es una organización lógica de un dispositivo que nos permite almacenar y recuperar información en forma de fichero. Existen diversos tipos de sistemas de ficheros, es decir diferentes formas de organizar la información en un dispositivo (discos duros, discos flexibles, DVDs, CDs, etc). Los sistemas de ficheros más usados:

  • ext4 (Fourth Extended Filesystem o cuarto sistema de archivos extendido): es un sistema de archivos con registro por diario (Journaling), que se terminó de desarrollar a finales de 2006, como una mejora compatible de ext3.
  • ext3 (Third Extended Filesystem o tercer sistema de archivos extendido): es un sistema de archivos nativo del sistema operativo GNU Linux, con registro por diario. Es el sistema de archivo más usado en distribuciones Linux. Una diferencia importante con respecto a ext2 es que ext3 utiliza un árbol binario balanceado (AVL) e incorpora el asignador de bloques de disco Orlov.
  • ext2 (Second Extended Filesystem o segundo sistema de archivos extendido): es un sistema de archivos para el sistema operativo GNU Linux. La principal desventaja de ext2 es que no implementa el registro por diario o bitácora.
  • vfat 12, vfat 16 y vfat 32: son sistemas de ficheros usados por plataformas Windows. No admite características multiusuario como propiedad de ficheros. Estos tipos de sistemas de ficheros se basan en un directorio y una tabla de localización. Linux los admite sin ningún problema, aunque siempre es preferible usar ext2, pues en estos tipos de sistemas de ficheros no se puede implementar la seguridad ni la indexazión y búsqueda.
  • iso9660: es el sistema de ficheros propio de los CDROM y DVD.
  • ReiserFS: es un sistema de archivos de propósito general, diseñado e implementado por un equipo de la empresa Namesys. A partir de la versión 2.4.1 del núcleo de Linux, ReiserFS se convirtió en el primer sistema de ficheros con journal en ser incluido en el núcleo estándar.
  • XFS: es un sistema de archivos de 64 bits con journaling de alto rendimiento creado por SGI. XFS se incorporó a Linux a partir de la versión 2.4.25.
  • JFS (Journaling Filesystem): desarrollado por IBM para servidores, se trata de un sistema de ficheros de 64 bits y con journaling. Fue concebido para servidores que requiriesen alto rendimiento y de ficheros de altas prestaciones. Como característica distintiva, la asignación de inodes no es estática, sino dinámica.
  • NFS (Network Filesystem): desarrollado inicialmente por Sun Microsystems, suele ser la opción por defecto para sistema de ficheros en red sobre GNU Linux.
  • CIFS (Common Internet Filesystem): también conocido como SMB o Samba. Permite compartir ficheros e impresoras por la red. Permite la convivencia simultánea de sistemas Windows y GNU Linux en la misma red de área local..
  • swap: aunque no es un sistema de ficheros lo incluimos aquí por tratarse de un tipo de partición utilizado por Linux como memoria de intercambio (memoria virtual). Es un tipo de partición especial, que sólo sirve para uso interno de Linux. Es el equivalente al fichero de paginación de Windows (pagefile.sys). Windows utiliza uno o varios ficheros mientras que Linux utiliza una partición específica.

Existen otros tipos de sistemas de ficheros para GNU Linux, pero estos son los más comunes.

Un ejemplo de creación de un sistema de ficheros ext3 en la segunda partición de nuestro primer disco:

mkfs -t ext3 /dev/hda2

Una vez creado un sistema de ficheros, para que pueda ser utilizado por GNU Linux deberemos montarlo, con la orden:

mount -t ext3 /dev/hda2 /mnt

En este último comando hemos de especificar el punto de montaje que será el directorio desde donde será accesible, en este caso /mnt.

Estructura de directorios en GNU Linux

  • /bin: se encuentran en esta carpeta los ficheros ejecutables básicos de GNU Linux (bash, cat, ls, login, ps, …). Suele contener programas que estarán disponibles incluso en los modos de ejecución más restringidos.
  • /dev: ficheros especiales de dispositivos.
  • /etc: la mayoría de los ficheros de configuración del sistema (programas y servicios).
  • /sbin: ficheros ejecutables para administración que, normalmente, sólo el
    superusuario root o un administrador del sistema podrá ejecutar (fsck, getty, halt, …).
  • /home: carpeta donde se almacenan los datos de los usuarios. Es la carpeta de trabajo de los usuarios.
  • /lost+found: localizaciones de disco marcadas como en uso en
    las estructuras de datos del disco, pero que no están listadas en ningún
    directorio. Contiene «referencias» a los ficheros marcados como erróneos al
    chequear el sistema de ficheros.
  • /lib: Librerías indispensables y módulos (especialmente requeridas durante el arranque del sistema).
  • /proc: sistemas de ficheros virtuales, contienen información
    sobre procesos, núcleo, módulos cargados y los dispositivos.
  • /tmp: archivos temporales creados por algunos programas, que serán borrados por el sistema operativo durante el arranque.
  • /var: en este directorio los programas que lo requieran pueden mantener archivos que deban modificarse frecuentemente (impresión, e-mail, cron, atd, log, …).
  • /boot: contiene el núcleo (kernel) de GNU Linux e información indispensable para el arranque del sistema.
  • /floppy, /cdrom, /mnt, /media: son directorios para montar disquetes, CD-ROMs y otros sistemas de archivos o dispositivos.
  • /usr: se almacenan en esta carpeta programas accesibles a usuarios finales y datos de estos programas que no requieren ser modificados (datos de sólo lectura). A su vez contiene una serie de subdirectorios:
    • /usr/bin: ficheros ejecutables por todos los usuarios.
    • /usr/sbin: ficheros ejecutables de administración.
    • /usr/include: ficheros cabecera de C.
    • /usr/lib: librerías.
    • /usr/local: software local.
    • /usr/share: datos compartidos (o que pueden ser compartidos por
      varios ordenadores en red:
      • /usr/share/man
      • /usr/share/doc
    • /usr/src: código fuente, como el del kernel.

Procesos en Linux

Un proceso es un programa en ejecución. Como sabemos GNU Linux es un sistema operativo multitarea por lo que permite ejecutar muchos procesos a la vez. El encargado de asignar una parte de la memoria a un proceso es el Kernel de GNU Linux, quien decide cuánta memoria dar a cada proceso y cómo repartir la capacidad del microprocesador entre los procesos que se están ejecutando.

En GNU Linux, como en casi todos los sistemas operativos, unos procesos son «más importantes» que otros, y estos tendrán «preferencia» a la hora de pedir cálculos o instrucciones al microprocesador sobre otros procesos. Este concepto se llama prioridad de un proceso.

Los procesos tienen un propietario que es el usuario que los ejecutó o ejecutó el programa que dio origen al proceso. Con lo cual un proceso tendrá, de cara al sistema de ficheros, los mismos permisos que tenga el usuario que lo creó.

Un proceso en GNU Linux tiene los siguientes atributos:

  • PID: identificador único del proceso. Es necesario para referirnos a un proceso en concreto de los varios en ejecución.
  • PPID: identificador del proceso padre.
  • Nice number: prioridad asignada al ejecutarlo.
  • tty: terminal en el que se está ejecutando.
  • RUID: identificador del usuario real, el que lo ejecutó.
  • EUID: identificador del usuario efectivo, si hay cambio de
    dominio se refleja aquí (permiso suid).
  • RGID: identificador del grupo real, el grupo del usuario que lo
    ejecutó.
  • EGID: identificador del grupo efectivo, si hay cambio de
    dominio se refleja aquí (permiso sgid).

Existen varios tipos de procesos en GNU Linux:

  • Interactivos (primer o segundo plano): un proceso que corre en primer plano («fg» de foreground) normalmente es aquél que introducimos por teclado y podemos ver por pantalla en una ventana de terminal. Una consola concreta está bloqueada cuando un proceso está en primer plano, mientras que si está en segundo plano la consola está libre y podemos teclear comandos en ella mientras se sigue ejecutando el proceso en segundo plano. Un proceso ejecutándose en primer plano puede ser cancelado con Ctrl+C, en cambio para cancelar un proceso en segundo plano será necesario utilizar el comando kill.
  • Encolados o batch.
  • Demonios (daemons): son procesos que se ejecutan en segundo plano pero no interactivos. Son programas que se encargan de gestionar y administrar el sistema, de forma transparente para el usuario (crond, atd, pppd, …).

Con el comando at podremos crear nuestros propios «demonios» o tareas planificadas. También podremos utilizar crontab para programar tareas, editando este fichero con cualquier editor de texto.

Para ver los procesos en ejecución en forma de árbol podemos utilizar el comando:

pstree

Para que se muestre el PID de cada proceso podremos utilizar el comando:

pstree -p

Con el comando ps u mostraremos los procesos pertenecientes al usuario actual.

Mostremos información detallada de los procesos que actualmente se están ejecutando con el comando:

ps aux

Para administrar los procesos de forma interactiva podremos utilizar el comando:

top

Para finalizar un proceso de forma manual ejecutaremos:

kill -9 PID

(donde PID será el identificador del proceso a eliminar)

Dispositivos en Linux

Los dispositivos en GNU Linux, al igual que casi todo, se representan y manejan como ficheros. Suelen estar alojados en la carpeta /dev. Los dispositivos pueden ser: discos duros, cdroms, disquetes, unidades de cinta, memorias usb, puertos serie y paralelo, modems, etc.

Estos dispositivos son enlazados (linked) a un dispositivo de archivo, es decir un dispositivo físico es representado o asociado a un archivo que se aloja en la carpeta /dev.

Los distintos dispositivos suelen identificarse de la siguiente forma:

TipoDispositivo
hdDiscos duros IDE y dispositivos IDE como CD-ROM, dvdroms
sdDiscos duros SCSI
scdCD-ROM SCSI, DVD-ROM SCSI
stUnidades de cinta SCSI
htUnidades de cinta IDE
fdUnidades de diquetes
lpPuertos paralelos
ttyTerminales o consolas
ptyTerminales remotas o de red, incluyendo las abiertas en Window X
ttySPuertos serie
cuaPuertos de comunicación
ethTarjetas o interfaces de red ethernet (LAN)

Los dispositivos que admiten particiones se suelen nombrar de la siguiente forma:

Canal IDEDispositivo LinuxEquivalente Windows
Primario Maestro/dev/hdaC:
Primario Esclavo/dev/hdbD:
Secundario Maestro/dev/hdcE:
Secundario Esclavo/dev/hddF:

Otras equivalencias de dispositivos entre Windows y Linux:

Tipo de dispositivoDispositivo LinuxEquivalente Windows
Disquetera A/dev/fd0A:
Disquetera B/dev/fd1B:
CDROM/dev/cdromD:
Puerto serie 1/dev/ttyS0COM1
Puerto serie/dev/ttyS1COM2
Puerto paralelo/dev/lp0LPT1