Linux es un sistema operativo originalmente diseñado para PC a principio de los 90 por Linus Torvadls. Bueno, Linus en realidad diseñó el primer kernel (núcleo) del sistema. Desde entonces multitud de programadores motivados simplemente por escribir un software de mayor calidad, portable (no sólo a PC) y de libre uso, han añadido al sistema operativo una gran cantidad de aplicaciones. El kernel junto con dichas aplicaciones es lo que conocemos por Linux.
Hay que decir que Linus creó el Linux pensando en emular el Unix, un sistema operativo que fue originalmente creado por Brian Kernighan, Ken Thompson, Dennis Ritchie, Rudd Canaday, y Doug McIlroy, entre otros, a finales de los 60 en el Bell Laboratories para una máquina de Digital conocida como DEC PDP-7. Originalmente el Unix estaba escrito en ensamblador. En 1971 fue reescrito para una DEC PDP-11, ¡una máquina multiusuario que contaba con un total de 24K bytes de RAM y 512K bytes de disco duro! En 1973 la mayor parte de Unix fue reescrito en C, un lenguaje de programación desarrollado por Dennis Ritchie.
Bueno, ya que hablamos de la historia del Unix deberíamos saber que éste también tuvo un antecesor o al menos, una fuente de inspiración. Unix es el resultado del descontento de la gente de Bell Labs con el MIT y General Electric que en 1965 intentaron implementar un sistema operativo llamado Multics (de multi-user, multi-processor, and multi-level (hierarchical) file system).
Unix es, con diferencia, el software más portado de la historia y Linux, una versión de libre distribución de Unix es una de sus versiones más extendidas (junto probablemente con FreeBSD). Esto se debe fundamentalmente a que casi todo su kernel está escrito en C. Actualmente Linux se ejecuta en las siguientes arquitecturas:
Linux es una colección de programas. Cuando una persona quiere usarlo normalmente descarga de Internet una distribución concreta, dependiendo de las tareas que va a tratar de resolver. Existen cientos de distribuciones orientadas a sistemas en tiempo real, sistemas multiusuario, servidores de ficheros, estaciones de trabajo gráficas, estaciones de trabajo de sonido, hacking, etc. En http://www.linux.org podemos encontrar enlaces a cada una de ellas.
El núcleo de Linux es el programa responsable de tratar directamente con el hardware de la computadora. Entiende de CPU, registros, interrupciones, DMA’s, etc. En la actualidad hay dos ramas estables: la rama 2.4 y la rama 2.6. La serie 2.4 es más antigua y funciona mejor en máquinas “desfasadas”. En http://www.kernel.org podemos encontrar todas las versiones del kernel desarrolladas hasta la actualidad.
Las aplicaciones utilizan el hardware de la computadora a través del kernel. De esta menera no es necesario escribir código específico para las diferentes arquitecturas.
Actualmente, Linux ejecuta miles de aplicaciones, la mayoría de libre distribución y algunas comerciales. El rendimiento y la funcionalidad de ellas es semejante (y en ocasiones superior) a las existentes para otros sistemas operativos como Microsoft Windows o Apple MacOS/X.
Linux emuló perfectamente en este aspecto al Unix desde sus primeros días. En Linux es posible ejecutar cientos de aplicaciones (procesos) en una misma computadora independientemente del número de procesadores existentes. El SO se engarga de distrubuir los recursos (CPU, memoria, periféricos, etc.) entre los diferentes procesos que se están ejecutando.
Con la idea a amortizar el gran desembolso económico que debía realizarse para construir una computadora a principios de los 70, el Unix fue diseñado para que pudieran trabajar simultaneamente decenas de usuarios, y esta cualidad también la ha heradado Linux. Así, nuestra computadora puede ser usada por muchas personas que se conectan con terminales a través de la red de comunicación existente.
Linux posee un sistema gráfico muy potente conocido como X11. Otros SOs como Windows y MacOS fueron creados a imagen y semejanza de dicho interfaz gráfico de libre distribución creado en los años 80 por el MIT.
El X11 está escrito siguiendo el paradigma cliente/servidor. En dicho paradigma, el servidor manipula el hardware gráfico y los clientes (las aplicaciones gráficas) utilizan los servicios que proporciona el servidor. Así las aplicaciones se hacen independiente de la plataforma. Por cierto, los clientes son procesos que pueden ejecutarse en la misma estación que el servidor (que es lo más frecuente), o en otra (cuando lanzamos la aplicación en un host remoto).
Los shells (o intérpretes de comandos) son programas que se utilizan para ejecutar y controlar interactivamente comandos especificados a través del teclado de la computadora.
En Linux existen muchos tipos de shell, aunque el más usado es, el shell bash. Cuando accedemos a una computadora con Linux es muy probable que lo usemos para lanzar tareas, como iniciar el X11.
Linux es un sistema multiusuario y por lo tanto, debemos identificarnos antes de usarlo. La computadora nos va a solicitar un nombre de usuario (el login) y una contraseña (el password).
Existen dos formas básica de entrar a un sistema Linux. A través del programa getty o mediante el programa xdm (o variantes, como gdm de Gnome o kdm de KDE). El primero nos lleva a una consola de tipo texto mientras que el segundo corre ya dentro del X11.
En Linux (como en Unix) casi todo es un fichero, o mejor dicho, el kernel permite que manipulemos casi todo el hardware a través de ficheros especiales.
La forma más corriente de fichero permite que almacenemos datos en nuestro disco duro. Sin embargo, el fichero puede estár realmente en RAM, en una memoria flash, o en un disco duro de una estación remota. También son ficheros la tarjeta de sonido, el ratón, la impresora, etc.
En Linux todos los ficheros se organizan jerárquicamente, en lo que se conoce como el árbol de ficheros. En este árbol, la raíz se denota por /.
En Linux hay un manual de usuario online para casi cualquier comando que podemos ejecutar. Este manual se invoca escribiendo en un shell: man comando, donde comando es el comando del que queremos obtener información.
En la inmensa mayoría de las distribuciones de Linux actuales el sistema gráfico se lanza de forma automática. Sin embargo, si esto no ocurriera así, simplemente escribir en el terminal:
El shell permite utilizar la multitarea de Linux usando el background. Cualquier comando (no interctivo) puede lanzarse en background escribiendo tras él el símbolo &. Ejemplos:
La forma estándar de parar un proceso tanto interactivo como no es, estando este en el foreground, teclear <ctrl>+<c>.
Un fichero ASCII es aquel que está constituido bytes que representan caracteres de la tabla ASCII. Esto que lees es un fichero ASCII. Para editarlos existen multitud de programas:
Para sacar un fichero (por ejemplo, un programa en C que hemos escrito nosotros) de nuestro host (la máquina en la que estamos trabajando y están los ficheros almacenados) existen diferentes posibilidades.
podemos mover ficheros con el comando cp: