GNU / Linux

GNU/Linux es un sistema operativo libre y de codigo abierto.
Su creador es Linus Torvalds que, inspirado en una version educativa de Unix llamada "MINIX", dio origen al primer kernel Linux en 1991.

Pero ese kernel no sirve de nada sin un shell, compiladores, utilidades de sistema, para archivos, medios de almacenamiento y procesos, etc.
Gracias a Richard Stallman nacio la comunidad GNU que se encargo de crearlas y junto al nucleo Linux dieron origen a la dupla GNU / Linux

Como podran imaginarse, muchos programadores empezaron a crear sus herramientas hasta que lograron armar las primeras distribuciones o distro
Algunas de ellas eran: MMC, Tamu y SLS
Esa ultima era la que mas se destacaba y basandose en la misma, Patrick Volkerding creo la distro Slackware en 1993.

A partir de eso todo se puso mas interesante. Hoy en dia existen incontables distribuciones.
Un buen listado con las mas conocidas podes verlo aca: http://en.wikipedia.org/wiki/List_of_Linux_distributions

 

POSIX - Portable Operating System Interface for Unix:

Consiste en un conjunto de standards especificados por la IEEE para definir la API, utilidades, shell (y mucho mas) de un sistema operativo Unix compatible.
Linux adopta estas reglas aunque no lo haga al 100%, salvo algunas excepciones.
Otros OSs POSIX compatible son BeOS, FreeBSD y NetBSD.

 

Shell:

Se le dice shell al programa que sirve de interfaz entre nosotros los usuarios y los servicios del sistema operativo.
Dicha interfaz puede ser una linea de comandos (CLI) o grafica (GUI).
En la epoca dorada de Unix, las shells CLI mas conocidas eran sh (Bourne shell) y csh (C shell)
En GNU/Linux triunfo bash (Bourne-Again shell) aunque existen varias distribuciones con sus propias versiones.
Como GUI se usa el sistema de ventanas X.

 

GNU Core Utilities:

http://www.gnu.org/software/coreutils/
Ya tenemos el Kernel y la Shell, ahora nos hace falta las utilidades basicas para, por ejemplo, manipular archivos, directorios y permisos.
Las GNU Core Utilities nacio como la fusion de varios paquetes que antes se conseguian por separado (por ej. textutils, shellutils y fileutils).

BusyBox (http://www.busybox.net/) es una alternativa interesantisima porque implementa muchisimas utilidades en un mismo ejecutable.
Asi resulta mas atractivo para Linux embebidos en celulares, tabletas, hardware de red o cualquier distro donde el espacio sea la prioridad.

 

X Window System:

Es un sistema cliente-servidor para manejar GUIs en tu PC o varias compus en red. Es mantenido por la gente de http://www.x.org
Basicamente es asi como funciona:

Hardware <--> X Server <--> Protocolo X11 <--> Librerias Xlib/XCB <--> Aplicaciones clientes del X Server

El X Server se ejecuta localmente en tu PC y es el encargado de dibujar en la pantalla y de atender los perifericos de entrada (teclado y mouse).
Las aplicaciones que son clientes del X Server, dialogan con este ultimo mediante el protocolo X11.
Como es muy dificil hacerlo en forma directa, existen librerias que facilitan esa comunicacion (Xlib, XCB y Xlib/XCB).
X Server ofrece a sus programas clientes metodos muy sencillos y basicos para dibujar bitmaps en pantalla.
No hace ningun tipo de administracion de ventanas, tampoco ofrece metodos para dibujar controles tipicos de una UI (botones, cajas de texto, etc).
Para eso existen otros programas clientes conocidos como X Window Manager (Metacity, KWin, Xfwm) que finalmente integra un Desktop environment como por ej. GNOME, KDE o Xfce.

 

Sistema de archivos:

Es comun organizar todo un sistema Linux en varias particiones, por ejemplo una para swap, otra para el directorio raiz y una mas para el /home.
Para almacenar nuestros datos hoy en dia se usa el formato ext4.
Linux agrupa absolutamente todo como "archivos" (directorios y hardware tambien) en un gran arbol virtual cuya raiz es "/".
El hardware esta representado como archivos dentro del directorio /dev.
Las utilidades del sistema se ubican generalmente en /usr/bin que vendria a ser como C:\WINDOWS\system32 en Windows.

 

Ejecutables:

Las primeras versiones del Kernel Linux utilizaban el formato a.out
Paso el tiempo y fue reemplazado por el formato ELF
Si tenes curiosidad por su estructura aca tenes su especificacion: http://pdos.csail.mit.edu/6.828/2005/readings/elf.pdf

Una diferencia importante con Windows es que en Linux los ejecutables no necesitan tener una extension .exe (aunque si puede si queres).
En cambio eso depende del atributo "x".

 

Algunos comandos utiles:

  • ls -la para listar todos los archivos con detalle
  • mkdir directorio crea nuevo directorio
  • rmdir directorio elimina directorio
  • mv origen destino mueve o renombra un archivo o directorio
  • cp archivo destino copia archivo a destino
  • rm archivo elimina archivo
  • echo Hola > mensaje.txt genera un nuevo archivo "mensaje.txt" y lo rellena con el texto "Hola"
  • cat mensaje.txt muestra el contenido del archivo "mensaje.txt"
  • ps -A | less muestra todos los procesos usando el visualizador "less". Para salir presiona la tecla "q"
  • man comando muestra el manual para el comando especificado. Por ejemplo "man ls". Para salir apreta la tecla "q"
  • chmod +x programa asigna permiso de ejecucion a "programa" valido para todos los usuarios.
  • which programa muestra la ruta completa de un programa buscandolo en todos los directorios que estan en la variable de entorno PATH
  • find / -name notas.txt busca el archivo "notas.txt" en todos los directorios empezando por "/"

y para instalar un programa usando su codigo fuente generalmente los pasos son:

./configure
make
make install
make clean