Linux, el mejor sistema operativo para

redes Internet, intranet y para aprender

Fernando J. Pisani

Proyecto InterCol - Docente Instituto Politécnico Superior Gral San Martín (UNR)

EET nº 468 (ex ENET Nº 6) y EET nº 463 (ex nº 1)- Rosario - fjpisani@intercol.org.ar

principa.gif (2811 bytes)dot.gif (419 bytes)trabajo.gif (2841 bytes)

 

LINUX: Simplemente el mejor...

Linux no es meramente un sistema operativo super poderoso, ideal para construir un servidor de Internet o del principal sistema operativo totalmente gratuito del mundo, que puede compararse e incluso superar a los que se consideran mejores (y no hablemos de DOS o Windows 95/98: al lado de Linux da vergüenza compararlos). Hablar de Linux/GNU es hablar de la recuperación del mítico espíritu de UNiX de los 70, el espíritu creador, solidario, que aplica la inteligencia y la promueve, que no olvida el humor ni la sátira, incluso hasta en nombres de comandos.

En menos de cuatro años LINUX/GNU ha ganado cientos de miles de adeptos y fanáticos, que no se dejan amedrentar por las dificultades, dispuestos a usar la cabeza para razonar y resolver problemas, y que no admiten quedar adocenados apretando botoncitos y encontrar todo supuestamente resuelto o esperando que se lo resuelvan.

Linux no sólo es un sistema operativo basado en 32 bits genuinamente multitarea y multiusuario, que NO SE CUELGA y anda en cualquier computadora desde 386 en adelante, sin tantos requerimientos de memoria ni tanto espacio en el disco rígido. Es mucho más.

Linux aún no es amigable y tal vez no llegue a serlo nunca al nivel que podría exigir cierto mercado. En él no encontraremos, todavía, los utilitarios que solemos usar (pero en ciertos temas los hay más potentes), y con él se pueden hacer cosas complejísimas, a veces, paradójicamente, con herramientas muy simples, pero que se pueden concatenar. No por nada es el sistema operativo preferido de los hackers del mundo. Y lo curioso del asunto es que Linux no existía ocho años atrás, y no es fruto de un coloso como Microsoft, o Borland ni hay una gran compañía que lo actualice, aunque es hoy el sistema operativo más dinámico y de mayor ritmo actualización y crecimiento del mundo. Cualquier Universidad que quiera instalar una red o hacer un servidor Internet, tiene como principal opción Linux.

Y aquí no termina todo. Lo maravilloso del proyecto GNU/Linux, es que con él no sólo tenemos los ejecutables, sino que también tenemos las fuentes, las librerías, todo. Y gratis. Jamás ningún programa comercial ni vendiendo ha dado las fuentes de sus sistemas operativos, comandos, procesadores de texto, compiladores, lo que sea. Aquí tenemos todo. Para aprender, para mejorar, para personalizar, para avanzar. Entrar al proyecto GNU/Linux/Unix es entrar a un mundo nuevo, a un fascinante e intrigante mundo donde quienes somos viejos en esto, desearíamos tener el tiempo que teníamos en nuestra juventud nada más para recorrer con placer, aunque sólo sea mirando, el camino de creación e ingenio que han recorrido quienes han hecho esta formidable familia de sistemas operativos unix

Abordando Linux.

La mayor dificultad que tenemos para aprovechar la potencia de Linux, si queremos nosotros crear una red, una intranet, un servidor de Internet, etc (porque aprovecharla, lo hacemos sin darnos cuenta cuando nos conectamos al servidor de la mayoría de las Universidades, o al Ministerio de Educación de la Nación, o a InterCol, por poner ejemplos) es que no es un sistema operativo fácil de instalar, configurar y poner a punto (Usarlo y mantenerlo es mucho más fácil). Pero no debe pensarse que sólo es para privilegiados o gurúes, o ni que se necesitan conocimientos avanzados de programación.

Pero detengámonos un momento en un punto muchas veces mencionado, pero no analizado a fondo: su historia. Porque en la historia está la clave para abordarlo. Si entendemos su filosofía, sus criterios, su lógica, nos resultará mucho más fácil enfrentar cientos de nombres raros, comandos y archivos. Pero no la historia de Linux, sino la historia de Unix.

Penemos por un momento que cuando se creó Unix, allá por 1969, no existía ninguna de las computadoras que conocemos nosotros, ni siquiera la vieja xt: no existían las computadoras personales ni los monitores ni teclados que usamos hoy, que nacerían diez años después.

Obviamente tampoco existía el DOS, y mucho menos el Windows. ¿Y cómo es posible que un sistema operativo que se inventó en aquel entonces hoy sea considerado el mejor sistema operativo del mundo? ¿Cómo es que no se ha vuelto obsoleto como se han vuelto caducos sistemas operativos que han nacido muy posteriormente a él.?

A principios de la década del sesenta, en el MIT (el famoso Instituto de Massachussets), se armó un proyecto de crear un sistema operativo super poderoso, uniéndose investigadores de la Bell, de General Electric y del Mit, al que llamaron Multics, que quería decir algo así como Servicio de Computo e Información Multiplexada (Miltiplexar es combinar varias señales en una sóla) El proyecto era hacer un sistema de tiempo compartido que ofreciera multiples herramientas a muchos usuarios y al mismo tiempo. Pero el proyecto terminó antes de terminar la década porque realmente era demasiado complejo y ambicioso. Uno de esos investigadores, Ken Thompson se propuso hacer un sistema operativo para una DEC PDP-7 desechada lo que logró en 1969, con el apoyo de Rduc Canaday, Doug McIlroy, Jose Ossanna y el conocido Dennis Ritchie. Y a la hora de buscarle un nombre, como el objetivo del sistema operativo era más modesto: (hacer cosas simples, pero bien, y que se pudieran concatenar), eligió con contraposición a Multics el nombre Unics, que luego derivó en Unix.

Este sistema, como todos los sistemas operativos hasta entonces, estaba hecho en lenguaje de máquina (Assembler), por lo que para correrlo en otro equipo más grande, debió ser reescrito, tarea que hizo con ayuda de Ritchie. Este último hizo también un compliador para el lenguaje C, que habían inventado por entonces. Y en 1973 Ritchie y Thompson dieron un paso trascendental: reescribieron el nucleo del sistema operativo en C, quebrando así la tradición de que los SO debían estar escritos en Assembler. Y al estar escrito en C se podía portar fácilmente a otras máquinas, debiendo sólo recompilar las fuentes para el tipo de máquina que sea. Para el 74 se comienza a usar en Universidades, con una ventaja fundamental: el SO se da con las fuentes, que por ese entonces la compañía propietaria del nombre Unix, la ATT, vendía por unos pocos dólares.

Estos dos hechos, el que fuera escrito en C y que las fuentes fueran accesibles le dio un gran empuje ya que se podía modificar a conveniencia.

La clave de la potencia y actualidad de Unix no está en programas mágicos capaz de resolver muchas cosas, sino en simples y pequeños programas que pueden relacionarse entre sí para aprovechar a fondo las posibilidades que ofrece la computadora.

Pongamos un ejemplo. Ahora hay programas de correo que nos avisan si llega correspondencia (si estamos en línea y si el programa de correos está abierto). Y es probable que quienes lo usen se pregunten muchas veces cómo es que estará hecho, lo difícil que puede ser programar una cosa asi. Y esto, que puede ser novedad de hace pocos años, es algo muy común y fácil de hacer en Unix y de muchas maneras (aparte de llamar a un programa que se encarga de hacerlo por nosotros).

Tratemos de ejemplificar el punto. Hay en Unix un simple programita que busca la diferencia entre dos archivos y si las hay, muestra los resultados en donde le digamos (la pantalla, la impresora), se llama diff. Pues bien, con su ayuda podemos hacer fácilmente una rutina que revise. Mi correo entrante, antes de que lo capture mi programa de correos, se guarda en un subdirectorio que se llama /var/spool/mail, en un archivo con el nombre de mi cuenta fjpisani.

¿Qué tamaño tiene ese archivo?, ¿dónde está?: lo sé si miro una variable que se llama $MAIL, por lo tanto primero copio ese valor en un archivo de nombre cualquiera, viejo:

cp $MAIL ~/viejo (el ~ es nuestro "hogar", nuestro subdirectorio origen /home/fjpisani para el caso señalado)

Luego hago un bucle permanente (un lazo, algo que se repite mientras no se cumpla cierta

condición), usando justamente el programita diff

mientras diferentcia entre $MAIL viejo sea cero (no hay diferencia) no hacer nada y mandar ese resultado al "agujero negro", es decir, a ningún lado que se pierda en la nada

while diff $MAIL ~/viejo > /dev/nulo

do

esperar un minuto

sleep 60

done

y si hay diferencia, mandar un mensaje a la pantalla del usuario

echo "¡Tenés nuevo correo! | write $LOGNAME

y si quiero luego lo hago ejecutar de nuevo o hago un bucle para que recomience.

Podemos escribir este pequeño programa en un editor de texto sencillo, guardarlo con un nombre cualquiera, avisar por ej luego transformarlo en ejecutable (poniéndolo en modo ejecutable, mediante la simple orden chmod +x avisar (la x significa ejecutable) y finalmente darle la orden de ejucución, pero para no quedarnos mirando como el programa corre ocupando nuestra terminal o pantalla, correrlo en segundo plano, parecido a como corren los programas residentes en memoria (no es lo mismo), lo que se consigue muy simplemente en Unix, agregando una & al final de la orden de ejecución.

avisar&

Y como Unix es un s.o. multiusuario y multitarea, podemos ejecutar muchos programas simultáneos. También si por ej estamos esperando una carta importante, de xxxxx, podemos hacer que el comando grep busque si está ese nombre en el archivo donde están todas las cartas y si el resultado de esa búsqueda no es nula, mandarnos un mensaje a la pantalla o hacer que llame por teléfono por ej. (grep es un comando que busca en un archivo de texto alguna cadena de caracteres, es muy simple y muy potente buscador).

Vimos recién varias palabras claves, echo, write, $LOGNAME, cp, sleep, grep y así hay muchas. Todas hacen tareas simples, pero se pueden aprovechar para usar su salida para otro pequeño programa, o como entrada, etc, usando tuberías | o redireccionamientos > ó < ó >>.

Y los resultados son increíbles. Y aquí está una de las primeras claves para aprender Unix: hacer cosas complejas usando herramientas sencillas, lo que, por supuesto, requiere no sólo aprender a usar esas herramientas (lo que es muy fácil) sino aprender a relacionarlas entre sí (lo que no es tan fácil).

Unix también brinda numerosas informaciones de todo tipo. Todo lo que se ejectura provoca uno o varios procesos, desde que arranca el SO hasta que se abren terminales y cada usuario ejecuta aplicaciones, todos se registran como procesos, con un número y datos de información. Esto es muy útil cuando por algún motivo alguna aplicación no funciona bien o hemos hecho algo que no está bien y queremos abortarlo. En Unix es simple, por eso no se cuelga nunca: simplemente matamos el proceso que provoca algún inconveniente (kill nº de proceso). O algo no está andando como es debido, podemos investigarlo con herramientas que no contamos en otros sistemas operativos. Y la orden para ver los procesos en cursos es ps (para ver todos ps x y si no nos acordamos cuál es, hacemos un man ps y tenemos una información en línea completísima de todos los comandos, programas, etc)

Hace un mes más o menos, estábamos programando el nuevo servidor de InterCol, con una conexión analógica directa, dónde dábamos la orden al arrancar linux que llamara por teléfono al proveedor y estableciera la comunicación (pppd call proveedor). Pero no andaba bien. Por motivos que ignoraba, la comunicación se cortaba y el demonio (hay demonios en Unix, son muy importantes) de la comunicación point to point (punto a punto, pppd) debería llamar de nuevo, pero también por razones que no me daba cuenta, no lo hacía. Y al día siguiente me tenía que ir a BsAs y quería dejarlo andando, pero no podía nadie quedarse a vigilar que la comuniación continuase. Con las herramientas que ya vimos podemos fácilmente resolver el problema.

Hacemos nuevamente un lazo o ciclo. Dentro de él ejecutamos la orden ps x para ver todos los procesos pero en vez de hacer que nos muestre el resultado en la pantalla, hacemos que se entuben hacia grep y que allí éste programa busque si está por algún lado el proceso del demonio ppp, y si no lo está, que llame por teléfono. Y que revise el asunto cada 30 segundos.

En este enero me fui unos díasa las sierras de Córdoba, pero justo en esos días estaba que Telecom iba a cambiar la numeración telefónica, agregándole un 4. Y el viejo servidor de InterCol, que todavía funciona, tiene que llamar cada hora el proveedor para bajar el correo uucp. Por entonces no sabía que había un tiempo en que coincidirían los dos sistemas, sino que suponía que dejaría de funcionar el viejo, por lo que el servidor llamaría inutilmente al número antiguo, quedando los cientos de usuarios de Intercol incomunicados para el resto del mundo ¿Acortaría las vacaciones?. Para colmo, Rubén Ale, que es quien me ayuda en la atención del servidor, tampoco estaba. Me empezaron a asaltar dudas existenciales, si debía o no acortar las vacaciones, si mandar un mensaje a los usuarios diciéndoles que... hasta que me di cuenta que el servidor no estaban en DOS o Windows, sino que estaban en Linux, y allí hay muchas maneras muy pero muy simples de planificar eventos diarios, semanales, mensuales, para fechas fijas, etc.

Por ej, si quiero que el día xxx es el cumpleaños de nnnnn y quiero no olvidarme y mandarle una carta de felicitación, a las 10 de la mañana es simple, escribo

at 10:00 sep 11

mail -s "Felicidades" nombre@dominio < mensaje.txt

onde mensaje.txt es un texto que he realizado. Naturalmente si tengo una base de datos con nombres de diversas personas y sus fechas de nacimiento, puedo hacer un pequeño programa, sólo con herramientas del tipo que hemos visto, para que genere un sistema automático de envíos. Naturalmente hoy hay programas complejos que pueden hacer eso, pero aquí se puede hacer con una sencillez espartana. Y probablemente no seríamos capaces de hacer fácilmente aquellos programas complejos, pero sí realizar tareas complejas usando pequeños y simples programas. Y la mayoría de los programas e incluso lenguajes que se han realizados para Unix (como el PERL) justamente se hicieron para facilitar pequeñas tareas rutinarias y tener más tiempo libre para otras cosas.

En general, en la mayoría de los otros sistemas operativos, cada programa debe controlar su salida, hacia dónde va y cómo se muestra, lo que implica un mayor esfuerzo de programación y mayor tamaño de los programas. En Unix esto es distinto. Cada programa se ocupa de hacer bien lo que tiene que hacer, y deja la salida para que otros se encarguen. Es el usuario el que determina si la salida irá a la pantalla, a la impresora, a otro archivo, o como ingreso a otro programa. Vimos hace un rato la orden ps x que muestra todos los procesos en curso. Si doy esa orden es probable que la pantalla corra rápido y no vea los primeros procesos. el programa ps se despreocupa de ello, porque en unix hay por lo menos dos herramientas, more y less que sirven para controlar la salida de la pantalla, incluso con muchas opciones de búsqueda, etc. Simplemente hago ps x | less y el resulado de ps x (o de cualquier otro comando se entuba y se envia al programa less que regula la salida. Y si hubiera puesto ps x > procesos.txt se hubiera guardado en un archivo llamado procesos.txt. Si hubiera escrito

mail gcaplan < ps x le hubiera mandado una carta a otra de las integrantes de Intercol, con la lista de los procesos en curso y podría haber dado la orden en cron, otra manera de hacer tareas en determinados tiempos, para que cada x cantidad de horas me envíe un mail con los procesos que se estén ejecutando.

Lo que quiero poner de manifiesto con esto es que con simples herramientas, relacionadas entre sí, se pueden hacer cosas muy poderosas y allí está unas de las bellezas de Unix/Linux, así también como su dificultad, acostumbrados como estamos a los programas mastodontes resuelvan las cosas por nosotros.

Esta simple filosofía, a través de hacer herramientas que hagan bien una sóla tarea, pero que se puedan usar relacionándolas con otras, fue otra de las claves del éxito de Unix. Nos podríamos preguntar por qué entonces Unix no tuvo mayor influencia en las PC y sí el DOS. En realidad influencia la tuvo, y mucho, ya que el DOS tomo muchas cosas de Unix, pero es cierto que como sistema, Unix no vino con las PC y los motivos eran simples: Cuando comenzó a cobrar un gran mercado, y ya era un sistema operativo mucho más potente, las fuentes se vendían por 150.000 dólares y más, además estaba concebido para grandes computadoras, no para pequeñas. Y lo que hoy consideramos una computadora común tiene una potencia que no tenían las de antes. Se puede decir que con la aparición de las at 80386 comienza a ser posible usar Unix (en alguna de sus variantes) en las PC, pero es un sistema operativo muy caro. Y aqui aparece una pieza clave, la GNU y la Fundación de soft Free.

Uno de los pioneros de este sistema, Richard Stallman, en 1985 escribía:

Considero que la regla de oro establece que si yo aprecio un programa debo compartirlo con otras personas que también lo aprecien. Los vendedores de software prefieren dividirnos, así conquistarnos, haciendo que individualmente acordemos no compartir programas con otros. "Yo rechazo esta manera de romper la solidaridad con otros usuarios (....) Es así que para poder seguir usando computadoras sin deshonor, he decidido reunir un cuerpo de software libre de manera tal de poder trabajar sin necesidad de ningún programa restringido"La GNU (que significa con una ironía recursiva de los amantes del C: Gnu No (es) Unix) cuya Licencia Pública General GNU establece en su PREAMBULO:"Las licencias de la mayoría del software están diseñadas para quitarle la libertad para compartirlo y cambiarlo. En contraste, la Licencia Pública General (GNU) tiene el propósito de garantizarle la libertad para compartir y modificar sin restricciones el software (para asegurarse de que el software sea libre para todos los usuarios) "(...) Para proteger sus derechos debemos imponer condiciones que prohiban a cualquier persona negarle estos derechos o pedirle que cedan los suyos "(...) Por último, cualquier programa libre de restricciones está amenazado en forma constante)

Es así que cuando Linus Torvalds, un estudiante de la Universidad de Helsinki, Finlandia, se propuso escribir un sistema operativo pequeño que superase a uno que servía para enseñar, llamado Minix y elaboró un núcleo para una 386, poniendo las fuentes a disposición de todos en Internet, lejos estaba de imaginar los alcances posteriores

Linus contaba sus principios allá por el 91:

"...Después de eso, todo fue viento en popa: faltaba la codificación problemática, pero tenía algunos dispositivos, y la depuración fue más fácil. En esta etapa comencé a usar C, y éste realmente aceleró el desarrollo. También fue cuando comencé a tomar en serio mis ideas megalomaníacas de hacer "un mejor Minix que el propio Minix". Tenía esperanzas de poder compilar gcc bajo Linux algún día...

"Dos meses después para la configuración básica, pero después sólo un poco más de tiempo hasta que tuve una unidad de disco (plagada de errores, pero pudo trabajar en mi máquina) y un pequeño sistema de archivos. Eso ocurrió cuando liberé la 0.01, casi a fines de agosto de 1991: no era maravillosa, no tenía unidad de discos flexibles y no podía hacer mucho de nada. No creo que alguien haya compilado esa versión. Pero para entonces ya estaba conectado, y no quería detenerme hasta poder abatir a Minix"

En Octubre Torvald lanza la versión 0.02 de Linux con un mensaje:

"¿Suspira por las buenas épocas de Minix 1.1, cuando los hombres eran hombres y escribían sus propios controladores de dispositivos? ¿Está sin un proyecto agradable y a punto de echar los dientes sobre un sistema operativo al que puede tratar de modificar para que se ajuste a sus necesidades? ¿Se siente frustrado cuando todo funciona en Minix? ¿No más desvelos para hacer funcionar un programa excelente? Entonces este mensaje puede ser para usted.

"Como le mencioné hace un mes, trabajo en una versión libre de un sistema parecido al Minix para computadoras AT 386. Por fin ha llegado a la etapa en la que incluso es útil (aunque no dependerá necesariamente de lo que usted quiera) y estoy deseoso de proporcionar las fuentes para una mayor distribución . Se trata de la versión 0.02... pero he corrido en ella con éxito bash, gcc, gnu-make, gnu-send, compress, etcétera."

Naturalmente esto era casi nada. Nadie podría imaginar lo que pasaría pocos años después y lo que sigue pasando. Es que en Linux se junta la vieja filosofía de UNIX + la filosofía de los programadores y hackers que buscan compartir + el Proyecto de la Free Software Fundation + los nuevos recursos comunicacionales (Internet) + el rechazo a las manipulaciones comerciales + el humor y el espíritu de aventura

Linux (como los otros Unix) está escrito en C, lo que implica portabilidad. .El código fuente está disponible y escrito en un lenguaje de alto nivel, con un ambiente de programación de extraordinaria riqueza y productividad. Es un sistema de tiempo compartido, multiusuario y multitarea, teniendo todas las funcionalidades de Unix más la ventaja de ser gratuito y de contar con el código fuente (en Unix llegó un momento que se prohibió divulgar el código fuente, supuestamente para evitar problemas de seguridad).

En una ponencia anterior decíamos que podíamos entender Unix/Linux de muchas formas:

Unix: es un sistema operativoUnix: es una familia de Sistemas operativos

"Unix es un conjunto de herramientas para gente inteligente", ha definido Harley Hahn,

Unix: Es una comunidad y una cultura,implica una filosofía de cómo usar la computadora

 

BIBLIOGRAFIA

Hay mucha bibliografía ahora por internet, algunos libros de los mencionados han sido bajados desde servidores de Internet usando Linux via e-mail y el servidor que hicimos

* Tackett, Jack; Gunter, David; Brown, Lance. Linux, Edición Especial. (1996) 860 pág.

* UNIX UNSEASHED. Sams Development Team. (1994) 1620 pág.

* Eckel, George & Chris Hare. Building a Linux Internet Server. (1995) 340 pag.

* Kernighan, Brian y Pike, Rob. El entorno de programación UNIX (1987-1994) 369 pág.

* Montagnier, Jean-Luc. Administración Unix. System V. Redes TCP/IP. Editions Eyroles, Paris, 1995. 365 pág.

* Naba Barbakaki. "Los Secretos de Linux". Anaya, 790 páginas

* Varios: LINUX: Complete Command Reference. De Sams 1495 páginas.

* Comer, Douglas E. TCP/IP. Redes globales e información con Internet y TCP/IP. Principios básicos, protocolos y arquitectura. Ed. Prentice-Hall Hispanoamérica S.A. (1996) 620 pág.

* Pisani, Fernando. Internet: qué es, para qué sirve y cómo usarla. Nuevas Herramientas y Recursos Docentes.

* Hohn, Harley. UNIX sin Fronteras. Ed. Mc Graw Hill. (1995) 792 pág.

* LeBlanc, Dee-Ann. Construya un site perfecto de Internet con Linux. Ed. Prentice-Hall Hispanoamérica S.A. (1996) 400 pág.

* Rémi Card, Eric Dumas y Franck Mével. Programación LINUX 2.0 Api y funcionamiento del Núcleo. De. Eyrolles. 501 pág.

* Kirch, Olaf. The Linux Network Administrators' Guide. (1994) 373 pág. (Este libro ha sido "bajado" desde EEUU por moden, usando el servidor de Intercol).

* Lars Wirzenius. Linux System Administrator's Guide 0.3 (1995) 117 pág.

* UUCP Manual. Del manual de línea de Linux.

* Skahan, Vince. The Linux Electronic Mail HOWTO (1995).

* Storner, Henrik. Kerneld mini HOWTO (1996).

* Gortmaker, Paul. The Linux BootPrompt HowTo (1996).

* Fawcet, Tom and Chapman, Graham. The Linux Bootdisk HowTo.

* Sendmail Manual (1983-1995).

* Peek, Jerry. Chapter about Majordomo from the Nutshell Handbook. "Managing Internet Information Services" (1994).

* Barr, David and The Pensylvania State University. Majordomo FAQ (1995).

* Gardner, James. Aprendiendo UNIX Segunda Edición. (1995) 644 pág.

* Schwarte, . El gran libro de HTML. (1996).

* Arteaga, Alejandro Eguinoa. Xenix a su alcance. (1990) 226 pág.

* Revistas: Linux actual, Sólo Programadores, Sólo Linux.