Palabras clave: sistema operativo, Unix, Linux, "Unix-like", computación, software, kernel o núcleo, línea de comandos, "shell", micronucleo, software libre, software privativo, sistema operativo tipo Unix, "prompt", familia Unix.
CAPÍTULO I
CONCEPTOS BASICOS DE INFORMÁTICA
El objetivo de esta primera parte de la guía es el de familiarizar al lector principiante en la computación con algunos de los conceptos y terminologías básicas que se usaran a lo largo de esta guía. Todo lo que se expone a continuación son breves conceptos, así como alguna otra información de importancia (autor, creación, función, etc.) que se considere de utilidad para facilitar la comprensión del Capítulo II de la presente guía del Sistema operativo Unix. Los conceptos a tratar son:
• Mainframe: o computadora central, es una computadora grande, potente y costosa usada principalmente por una gran compañía para el procesamiento de una gran cantidad de datos; por ejemplo, para el procesamiento de transacciones bancarias.
• Kernel: es uno de los nombres con los que se le conoce al núcleo del sistema operativo y la parte fundamental del mismo. Es el software del sistema responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora, o, en forma más básica, es el encargado de gestionar recursos, a través de servicios de llamada al sistema. Se encarga también de planificar la ejecución de los procesos, supervisar la transmisión de datos entre las aplicaciones y los dispositivos periféricos, administrar la memoria del computador, hacer el renderizado de texto en la pantalla, entre otras cosas.
• Núcleo monolítico: es un tipo de núcleo o kernel de un sistema operativo. Está programado de forma no modular, y tiene un rendimiento mayor que un micronúcleo. Un sistema operativo con núcleo monolítico concentra todas las funcionalidades posibles (planificación, sistema de archivos, redes, controladores de dispositivos, gestión de memoria, etc) dentro de un gran programa. El mismo puede tener un tamaño considerable, y deberá ser recompilado por completo al añadir una nueva funcionalidad. Todos los componentes funcionales del núcleo tienen acceso a todas sus estructuras de datos internas y a sus rutinas. Un error en una rutina puede propagarse a todo el núcleo. Todos sus componentes se encuentran integrados en un único programa que se ejecuta en un único espacio de direcciones. En este tipo de sistemas, todas las funciones que ofrece el sistema operativo se ejecutan en modo supervisor.
Estos sistemas operativos han surgido, normalmente, de sistemas operativos sencillos y pequeños a los que se les ha ido añadiendo un número mayor de funcionalidades. Esto les ha hecho evolucionar y crecer hasta convertirlos en programas grandes y complejos formados por muchas funciones situadas todas ellas en un mismo nivel
• Micronúcleo: es un tipo de núcleo de un sistema operativo que provee un conjunto de primitivas o llamadas al sistema mínimas, para implementar servicios básicos como espacios de direcciones, comunicación entre procesos y planificación básica. Todos los otros servicios (gestión de memoria, sistema de archivos, operaciones de E/S, etc.), que en general son provistos por el núcleo, se ejecutan como procesos servidores en espacio de usuario.
Las principales ventajas de su utilización son la reducción de la complejidad, la descentralización de los fallos (un fallo en una parte del sistema no lo colapsaría por completo) y la facilitación para crear y depurar controladores de dispositivos. Por otro lado, sus principales dificultades son la complejidad en la sincronización de todos los módulos que componen el micronúcleo y su acceso a la memoria, la anulación de las ventajas de "Zero Copy", la integración con las aplicaciones, mayor complejidad en el código, menor rendimiento o limitaciones en diversas funciones.
• Software de aplicación: es aquel que permite a los usuarios llevar a cabo una o varias tareas específicas, en cualquier campo de actividad susceptible de ser automatizado o asistido, con especial énfasis en los negocios. Entre este tipo de software están aplicaciones de control y automatización industrial, aplicaciones ofimáticas (procesador de textos, hojas de cálculo, bases de datos, etc.), software educativo, software medico, entre otros.
• Protocolo TCP/IP: el protocolo IP ("Internet Protocol") es una norma o protocolo no orientado a conexión usado tanto por el origen como por el destino para la comunicación de datos a través de una red de paquetes conmutados. Los datos de una red basada en IP son enviados en bloques conocidos como "paquetes" o datagramas. El IP provee un servicio de datagramas no fiable, ya que el mismo no provee ningún mecanismo para determinar si un paquete ha alcanzado o no su destino y lo único que proporciona es seguridad mediante "checksums" o sumas de comprobación de sus cabeceras y no de los datos transmitidos. Si se necesita fiabilidad, esta es proporcionada por los protocolos de la capa de transporte TCP ("Transmission Control Protocol"). Este protocolo garantiza que los datos serán entregados en su destino sin errores y en el mismo orden en que se transmitieron. También proporciona un mecanismo para distinguir distintas aplicaciones dentro de una misma máquina, a través del concepto de puerto.
• Sistema operativo: es un software de sistema, es decir, un conjunto de programas de computadora destinado a permitir una administración eficaz de sus recursos. Comienza a trabajar cuando se enciende el computador, y gestiona el hardware de la máquina desde los niveles más básicos, permitiendo también la interacción con el usuario.
• Lenguaje de programación C: es un lenguaje de programación relativamente minimalista. Está orientado a la implementación de sistemas operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones. Uno de los objetivos de diseño de este lenguaje fue que sólo fueran necesarias unas pocas instrucciones en "lenguaje máquina" para traducir cada elemento del lenguaje, sin que hiciera falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.
• Lenguaje ensamblador: el lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del "código máquina" específico para cada arquitectura de computadoras legible por un programador. Fue usado ampliamente en el pasado para el desarrollo de software, pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulación directa del hardware o se pretenden rendimientos inusuales de los equipos.
• Ficheros y/o sistemas de ficheros: un fichero es una abstracción muy importante en programación. Los ficheros sirven para almacenar datos de forma permanente y ofrecen un pequeño conjunto de primitivas muy potentes (abrir, leer, avanzar puntero, cerrar, etc.). Los ficheros se organizan normalmente en estructuras de árbol, donde los nodos intermedios son directorios capaces de agrupar otros ficheros. El sistema de ficheros es la forma en que el sistema operativo organiza, gestiona y mantiene la jerarquía de ficheros en los dispositivos de almacenamiento, normalmente discos duros. Cada sistema operativo soporta diferentes sistemas de ficheros.
• Multitarea: es una característica de un sistema operativo moderno. Permite que varios procesos sean ejecutados al mismo tiempo compartiendo uno o más procesadores.
• Multiusuario: se refiere a un concepto de sistemas operativos, pero en ocasiones también puede aplicarse a programas de computadora de otro tipo. En general se le llama multiusuario a la característica de un sistema operativo o programa que permite proveer servicio y procesamiento a múltiples usuarios simultáneamente (tanto en paralelismo real como simulado).
• Linux: también conocido como GNU/Linux, es un sistema operativo tipo Unix que se distribuye bajo la Licencia Pública General de GNU (GNU GPL), es decir, que es software libre. Su nombre proviene del Núcleo de Linux. Las variantes de estos sistemas se denominan "distribuciones" y su objetivo es ofrecer una edición que cumpla con las necesidades de determinado grupo de usuarios. Algunas son gratuitas y otras de pago, algunas insertan software no libre y otras contienen solo software libre.
• Proyecto GNU: se refiere a un proyecto iniciado por Richard Stallman con el objetivo de crear un sistema operativo completamente libre. GNU es un acrónimo recursivo que significa "GNU No es Unix", pero si es compatible con el mismo. Esto implica que GNU esté compuesto de pequeñas piezas individuales de software, muchas de las cuales ya estaban disponibles, como el sistema de edición de textos TeX y el sistema gráfico X Windows, que pudieron ser adaptados y reutilizados; otros en cambio tuvieron que ser reescritos. El software GNU es libre para que todos los usuarios puedan "ejecutarlo, copiarlo, modificarlo y distribuirlo"
• Dispositivos periféricos: se denominan periféricos tanto a las unidades o dispositivos a través de los cuales la computadora se comunica con el mundo exterior, como a los sistemas que almacenan o archivan la información, sirviendo de memoria auxiliar de la memoria principal, es decir; son al conjunto de dispositivos que, sin pertenecer al núcleo fundamental de la computadora, formado por la CPU y la memoria central, permitan realizar operaciones de entrada/salida (E/S) complementarias al proceso de datos que realiza la CPU. Estas tres unidades básicas en un computador, CPU, memoria central y el subsistema de E/S, están comunicadas entre sí por tres buses o canales de comunicación: el bus de direcciones, para seleccionar la dirección del dato o del periférico al que se quiere acceder, el bus de control, básicamente para seleccionar la operación a realizar sobre el dato (principalmente lectura, escritura o modificación) y el bus de datos, por donde circulan los datos. Existen 3 tipos de dispositivos periféricos: de entrada, salida y de almacenamiento
• Software: es toda la información procesada por los sistemas informáticos: programas y datos, abarca todo lo intangible, todo lo "no físico" del computador. Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados que forman parte de las operaciones de un sistema de computación.
• Hardware: es la parte física de un computador y más ampliamente de cualquier dispositivo electrónico
• Bytes: se usa comúnmente como unidad básica de almacenamiento de información en combinación con los prefijos de cantidad. Es aceptado como equivalente a octeto, es decir a ocho bits, para fines correctos, un byte debe ser considerado como una secuencia de bits contiguos, cuyo tamaño depende del código de información o código de caracteres en que sea definido. La unidad byte se representa con el símbolo B.
• Software libre: se refiere a la libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software; de modo más preciso, se refiere a cuatro libertades de los usuarios del software: la libertad de usar el programa, con cualquier propósito; de estudiar el funcionamiento del programa, y adaptarlo a las necesidades; de distribuir copias, con lo que puede ayudar a otros; de mejorar el programa y hacer públicas las mejoras, de modo que toda la comunidad se beneficie (para la segunda y última libertad mencionadas, el acceso al código fuente es un requisito previo)[]
• Software no libre: El software no libre (también llamado software propietario, software privativo, software privado, software con propietario o software de propiedad) se refiere a cualquier programa informático en el que los usuarios tienen limitadas las posibilidades de usarlo, modificarlo o redistribuirlo (con o sin modificaciones), o cuyo código fuente no está disponible o el acceso a éste se encuentra restringido.
• Prompt: es el carácter o conjunto de caracteres que se muestran en una línea de comandos para indicar que está a la espera de órdenes. éste puede variar dependiendo del intérprete de comandos y suele ser configurable.
CAPÍTULO II
SISTEMA OPERATIVO UNIX
2.1 Historia del Sistema Operativo Unix
Los orígenes de Unix pueden rastrearse a finales de 1960, cuando el Instituto Tecnológico de Massachusetts, los Laboratorios Bell de AT&T y General Electric trabajaban en un sistema operativo experimental llamado Multics (Multiplexed Information and Computing Service),[] desarrollado para ejecutarse en una computadora central (mainframe) modelo GE-645. El objetivo del proyecto era desarrollar un sistema operativo interactivo que contase con muchas innovaciones, entre ellas mejoras en las políticas de seguridad. El proyecto consiguió dar a luz versiones para producción, pero las primeras versiones contaban con un pobre rendimiento. Los laboratorios Bell de AT&T decidieron desvincularse y dedicar sus recursos a otros proyectos.
Uno de los programadores del equipo de los laboratorios Bell, Ken Thompson, siguió trabajando para la computadora GE-635[,] y escribió un juego llamado "Space Travel"[][](Viaje espacial). Sin embargo, descubrió que el juego era lento en la máquina de General Electric y resultaba realmente caro, algo así como 75 dólares de EE.UU. por cada partida. De este modo, Thompson con ayuda de Dennis Ritchie; un físico estadounidense que colaboró en el desarrollo del sistema operativo Multics en los Laboratorios Bell y creó el lenguaje de programación C; escribió nuevamente el programa en lenguaje ensamblador, para que se ejecutase en una computadora DEC PDP-7. Esta experiencia, junto al trabajo que desarrolló para el proyecto Multics, condujo a Thompson a iniciar la creación de un nuevo sistema operativo para la DEC PDP-7[.] A continuación se puede apreciar una antigua fotografía de los creadores originales del núcleo Unix, los programadores Ken Thompson y Dennis Ritchie:
Ken Thompson (izquierda) y Dennis Ritchie (derecha), creadores de UNIX
Thompson y Ritchie lideraron un grupo de programadores, entre ellos a Rudd Canaday, en los laboratorios Bell, para desarrollar tanto el sistema de ficheros como el sistema operativo multitarea en sí. A lo anterior, agregaron un intérprete de órdenes (o intérprete de comandos) y un pequeño conjunto de programas. El proyecto fue bautizado UNICS, como acrónimo de "Uniplexed Information and Computing System", pues sólo prestaba servicios a dos usuarios. La autoría de esta sigla se le atribuye a Brian Kernighan, ya que era un "hack" de Multics. Dada la popularidad que tuvo un juego de palabras que consideraba a UNICS un sistema MULTICS castrado, se cambió el nombre a UNIX, dando origen al legado que llego hasta los días actuales
Hasta ese instante, no había existido apoyo económico por parte de los laboratorios Bell, pero eso cambió cuando el Grupo de Investigación en Ciencias de la Computación decidió utilizar UNIX en una máquina superior a la PDP-7. Thompson y Ritchie lograron cumplir con la solicitud de agregar herramientas que permitieran el procesamiento de textos a UNIX en una máquina PDP-11/20, y como consecuencia de ello consiguieron el apoyo económico de los laboratorios Bell. Fue así como por vez primera, en 1970, se habla oficialmente del sistema operativo UNIX[] ejecutado en una PDP-11/20. Se incluía en él un programa para dar formato a textos (llamado "runoff") y un editor de texto. Tanto el sistema operativo como los programas fueron escritos en el lenguaje ensamblador de la PDP-11/20.
Este "sistema de procesamiento de texto" inicial, compuesto tanto por el sistema operativo como de "runoff" y el editor de texto, fue utilizado en los laboratorios Bell para procesar las solicitudes de patentes que ellos recibían. Pronto, "runoff" evolucionó hasta convertirse en "troff", el primer programa de edición electrónica que permitía realizar composición tipográfica. El 3 de noviembre de 1971 Thompson y Ritchie publicaron un manual de programación de UNIX. En 1972 se tomó la decisión de escribir nuevamente UNIX, pero esta vez en el lenguaje de programación C.[] Este cambio significaba que UNIX podría ser fácilmente modificado para funcionar en otras computadoras y así otras variaciones podían ser desarrolladas por otros programadores. Ahora, el código era más conciso y compacto, lo que se tradujo en un aumento en la velocidad de desarrollo de UNIX. AT&T puso a UNIX a disposición de universidades y compañías, también al gobierno de los Estados Unidos, a través de licencias.[] Una de estas licencias fue otorgada al Departamento de Computación de la Universidad de California, con sede en Berkeley.[] En 1975 esta institución desarrolló y publicó su propio sucedáneo de UNIX, conocida como "Berkeley Software Distribution" (BSD), que se convirtió en una fuerte competencia para la familia UNIX de AT&T.
Mientras tanto, AT&T creó una división comercial denominada "Unix Systems Laboratories" para la explotación comercial del sistema operativo. El desarrollo prosiguió, con la entrega de las versiones 4, 5 y 6[] en el transcurso de 1975. Estas versiones incluían los "pipes" o "tuberías", lo que permitió dar al desarrollo una orientación modular respecto a la base del código, consiguiendo aumentar aún más la velocidad de desarrollo. Ya en 1978, cerca de 600 o más máquinas estaban ejecutándose con alguna de las distintas encarnaciones de UNIX.
La versión 7,[] la última versión del UNIX original con amplia distribución, entró en circulación en 1979. Las versiones 8, 9 y 10[] se desarrollaron durante la década de 1980, pero su circulación se limitó a unas cuantas universidades, a pesar de que se publicaron los informes que describían el nuevo trabajo. Los resultados de esta investigación sirvieron de base para la creación de Plan 9, un nuevo sistema operativo portable y distribuido, diseñado para ser el sucesor de UNIX en investigación por los Laboratorios Bell.
AT&T entonces inició el desarrollo de UNIX System III, basado en la versión 7, como una variante de tinte comercial y así vendía el producto de manera directa. La primera versión se lanzó en 1981.[] A pesar de lo anterior, la empresa subsidiaria Western Electric seguía vendiendo versiones antiguas de Unix basadas en las distintas versiones hasta la séptima. Para finalizar con la confusión con todas las versiones divergentes, AT&T decidió combinar varias versiones desarrolladas en distintas universidades y empresas, dando origen en 1983 al Unix System V Release.[] Esta versión presentó características tales como el editor "Vi" y la biblioteca "curses", desarrolladas por Berkeley Software Distribution en la Universidad de California. También contaba con compatibilidad con las máquinas VAX de la compañía DEC.
A continuación se puede observar una imagen del aspecto de Unix a los finales de la década de 1980 utilizando X Windows System:
Unix a finales de 1980 utilizando X Windows System
En 1993, la compañía Novell adquirió la división Unix Systems Laboratories de AT&T junto con su propiedad intelectual.[] Esto ocurrió en un momento delicado en el que "Unix Systems Laboratories" disputaba una demanda en los tribunales contra BSD por infracción de los derechos de copyright, revelación de secretos y violación de marca de mercado. BSD no solamente ganó el juicio sino que cambiaron tornas descubriendo que grandes porciones del código de BSD habían sido copiadas ilegalmente en UNIX System V. En realidad, la propiedad intelectual de Novell (recién adquirida de "Unix Systems Laboratories") se reducía a unos pocos ficheros fuente. La correspondiente contra-demanda acabó en un acuerdo extrajudicial cuyos términos permanecen bajo secreto a petición de Novell.
Aproximadamente por esa misma fecha, un estudiante de ciencias de la computación llamado Linus Torvalds desarrolló un núcleo para computadoras con arquitectura de procesador Intel x86 que mimetizaba muchas de las funcionalidades de UNIX y lo lanzó en forma de código abierto en 1991, bajo el nombre de Linux. En 1992, el núcleo Linux fue combinado con los programas desarrollados por el Proyecto GNU, dando como resultado el Sistema Operativo GNU/Linux. En 1995, Novell vendió su división UNIX comercial[] (es decir, la antigua "Unix Systems Laboratories") a Santa Cruz Operation (SCO) reservándose, aparentemente, algunos derechos de propiedad intelectual sobre el software.[] SCO continúa la comercialización de System V en su producto UnixWare, que durante cierto tiempo pasó a denominarse OpenUnix, aunque ha retomado de nuevo el nombre de UnixWare. A pesar de los problemas de la empresa debido a diversos pleitos legales, estos productos siguen siendo usando fuertemente a nivel mundial
A continuación se puede apreciar un diagrama que muestra como ha sido la evolución de Unix a lo largo de los años. A pesar de que el diagrama esta en ingles, se puede apreciar con facilidad los distintos caminos que ha tomado el desarrollo de este núcleo, ya sea de libre acceso o de uso privativo, en distintos sistemas operativos desde la fecha de creación de Unix hasta el 2008:
Diagrama de evolución del sistema operativo UNIX
UNIX en la actualidad
A pesar de que muchas de las funcionalidades de Unix son imitadas hoy en día por una gran cantidad de sistemas operativos, entre ellos las distribuciones de GNU/Linux. Se podría decir que las versiones más "puras" de este sistema operativo son las de UnixWare y SCO Open Server. Estas versiones de sistemas operativos no libres para PC son actualmente propiedad de SCO Group. Por lo que se conoce, en enero de 2003, SCO contrató a un abogado, anunciando que investigarían infracciones a su derecho de autor. El 7 de marzo, el jefe ejecutivo de SCO, Darl McBride, anunció que demandarían a IBM por sus contribuciones al código de Linux, alegando que IBM robó código de UNIX y se lo otorgó a los desarrolladores del núcleo de Linux.
En mayo de 2003, SCO Group dijo haber enviado cartas a 1.500 de las mayores corporaciones del mundo, incluyendo las compañías de Fortune 500, alegando que, de utilizar Linux, podrían estar infringiendo sus derechos de propiedad intelectual sobre el código original de UNIX. Como resultado SCO ha sido demandado por difamación por varias compañías, incluyendo IBM, la organización alemana LinuxTag, SuSE y Red Hat. El 18 de Agosto de 2007 se conoció por fin la sentencia de este pleito que llevaba en activo desde el año 2003. Finalmente el juez concluyo que:
- El acuerdo que SCO tenía con Novell, el único derecho que otorgaba a SCO era el de vender licencias de Unix a terceros.
- SCO tiene que pagar a Novell (SuSe) el 95% del importe de esas ventas, que principalmente fueron 16 millones de USD de Microsoft y 10 millones de USD de Sun.
El 14 de septiembre de 2007, debido a los contratiempos legales que sufrió la empresa, SCO solicitó protección invocando los términos del Cápitulo 11 del Código de Bancarrota de los Estados Unidos de América. El 25 de octubre de 2007, SCO (el ex-rey del Unix para PC) recibe una oferta de 36 millones de USD por parte de JGD Management por sus negocios y propiedad intelectual. Dándole un parcial fin a las nuevas versiones de Unix.
A pesar de todos estos contratiempos, las últimas versiones de estos sistemas operativos todavía se encuentran vigentes en algunos computadores. Por ejemplo, la versión 7.1.4 de UnixWare es compatible con muchas de las aplicaciones libres clásicas de Unix (Apache, Squid, entre otras). Mientras que el SCO OpenServer 6.0.0 MP2, todavía sigue siendo un software propietario de gran uso en el entorno comercial e industrial a nivel mundial.
Para hacerlo breve, actualmente UNIX puede referirse a 3 cosas:
• Familia UNIX: como un grupo genérico de sistemas operativos que comparten determinados criterios en su diseño y por lo tanto son llamados de la familia (o tipo) UNIX. Son más de 100 sistemas operativos que se consideran de su familia.
• Sistema operativo UNIX: como una subfamilia de sistemas operativos que descienden de la primera versión creada por Bell. Esto significa que comparten códigos y propiedad intelectual.
• Marca UNIX: es decir, Unix como marca es propiedad de "The Open Group", organización de estandarización que permite el uso de dicha marca a cualquier sistema operativo que cumpla con sus estándares. Esto es independiente de si el sistema operativo en cuestión es de la familia UNIX o descendiente del original.
A continuación se puede ver una imagen de Solaris 10 de Sun Microsystems, uno de los sistemas parecidos a Unix más difundidos en el entorno empresarial en la actualidad debido a su gran estabilidad y rendimiento:
Solaris 10, Unix actual de gran uso en las empresas
¿Qué es Unix?
Es un sistema operativo portable, multitarea y multiusuario; desarrollado en 1969 por un grupo de empleados de los laboratorios Bell y AT&T, entre los que figuran Ken Thompson, Dennis Ritchie y Douglas Mcllroy. Este sistema es uno de los más utilizados y con más futuro debido a que son muchos organismos oficiales y particulares los que defienden su utilización, así como muchas firmas de fabricación y comercialización de computadoras que lo incorporan en sus productos. Para dar un ejemplo, la Comunidad Económica Europea, impone el sistema operativo UNIX en todas las aplicaciones que se desarrollan bajo sus auspicios.
Unix es un sistema operativo de tiempo compartido, controla los recursos de una computadora y los asigna entre los usuarios. Permite a los usuarios correr sus programas. Controla los dispositivos periféricos conectados a la máquina. Además es un sistema multiusuario, en el que existe la portabilidad para la implementación de distintas computadoras.
2.2 Filosofía de UNIX
La filosofía de UNIX en si se refiere a una serie de normas culturales así como a unas aproximaciones filosóficas para desarrollar Software basado en las experiencias de los creadores del sistema operativo UNIX. Para dejarlo en corto, la filosofía de UNIX toma en cuenta 3 parámetros básicos, los cuales son los siguientes:
- Escribir programas que hagan una cosa y la hagan bien
- Escribir programas que trabajen juntos (en conjunción)
- Escribir programas que manejen "torrentes de texto", porque esa es una interfaz universal.
Las ideas principales de UNIX fueron derivadas del proyecto MULTICS del MIT y de General Electric. Estas ideas son:
· Todo se maneja como cadena de bytes: los dispositivos periféricos, los archivos y los comandos pueden verse como secuencias de bytes o como entes que las producen. Por ejemplo, para usar una terminal en UNIX se hace a través de un archivo (generalmente en el directorio /dev y con nombre ttyX).
· Manejo de tres descriptores estándares: todo comando posee tres descriptores por omisión llamados "stdin", "stdout" y "stderr", los cuales son los lugares de donde se leen los datos de trabajo, donde se envían los resultados y en donde se envían los errores, respectivamente. El 'stdin' es el teclado, el 'stdout' y el 'stderr' son la pantalla por defecto.
· Capacidades de "entubar" y "redireccionar": El "stdin", "stdout" y "stderr" pueden usarse para cambiar el lugar de donde se leen los datos, donde se envían los resultados y donde se envían los errores, respectivamente. A nivel de comandos, el símbolo de "mayor que" (>) sirve para enviar los resultados de un comando a un archivo. Por ejemplo, en UNIX el comando "ls" lista los archivos del directorio actual (es lo mismo que "dir" en DOS). Si en vez de ver los nombres de archivos en la pantalla se quieren guardar en el archivo "listado", el "redireccionamiento" es útil y el comando para hacer la tarea anterior es "ls > listado". Si lo que se desea es enviar a imprimir esos nombres, el "entubamiento" es útil y el comando sería "ls | lpr", donde el símbolo "|" ("pipe") es el entubamiento y "lpr" es el comando para imprimir en UNIX BSD.
· Crear sistemas grandes a partir de módulos: cada instrucción en UNIX está diseñada para poderse usar con "pipes" o "redireccionamiento", de manera que se pueden crear sistemas complejos a través del uso de comandos simples y elegantes. Un ejemplo sencillo de esto es el siguiente. Supóngase que se tienen cuatro comandos separados A,B,C y D cuyas funcionalidades son:
o A: lee matrices revisando tipos de datos y formato.
o B: recibe matrices, las invierte y arroja el resultado en forma matricial.
o C: recibe una matriz y le pone encabezados "bonitos"
o D: manda a la impresora una matriz cuidando el salto de página, etc.
Como se ve, cada módulo hace una actividad específica, si lo que se quiere es un pequeño sistema que lea un sistema de ecuaciones y como resultado se tenga un listado "bonito", simplemente se usa el entubamiento para leer con el módulo A la matriz, que su resultado lo reciba el B para obtener la solución, luego esa solución la reciba el módulo C para que le ponga los encabezados "bonitos" y finalmente eso lo tome el módulo D y lo imprima, el comando completo sería "A | B | C | D".
A continuación se pueden ver 2 imágenes, en donde se muestra en la primera, la lista de directorios del sistema y en la segunda la lista de procesos que se encuentra realizando el UNIX:
Lista de directorio del sistema operativo UNIX
Lista de procesos del sistema operativo UNIX
Familias de Unix
Como se puede deducir de la reseña histórica de este sistema operativo, existen varias familias del sistema operativo UNIX que han evolucionado de manera independiente a lo largo de los años. Cada familia se distingue no tanto por sus diferencias técnicas como por sus diferencias en propiedad intelectual. Se observa que todas las familias se han visto contaminadas, directa o indirectamente, por otras familias. Las familias UNIX más significativas son:
- AT&T: la familia que tuvo su origen en el UNIX de AT&T. Considerada la familia UNIX "pura" y original. Sus sistemas operativos más significativos son UNIX System III y UNIX System V.
- BSD: familia originada por el licenciamiento de UNIX a Berkely. BSD incorpora propiedad intelectual no originaria de AT&T, la primera implementación de los protocolos TCP/IP que dieron origen a Internet.
- AIX: esta familia surge por el licenciamiento de UNIX System III a IBM.
- Xenix: familia derivada de la adquisición de los derechos originales de AT&T primero por parte de Microsoft y luego esta los vendió a SCO.
- GNU: en 1983, Richard Stallman anunció el Proyecto GNU, un ambicioso esfuerzo para crear un sistema similar a Unix, que pudiese ser distribuido libremente. El software desarrollado por este proyecto, por ejemplo, GNU Emacs y GCC, también han sido parte fundamental de otros sistemas UNIX.
- Linux: en 1991, cuando Linus Torvalds empezó a proponer el núcleo Linux y a reunir colaboradores, las herramientas GNU eran la elección perfecta. Al combinarse ambos elementos, conformaron la base del sistema operativo (basado en POSIX) que hoy se conoce como Linux. Las distribuciones basadas en el núcleo, el software GNU y otros agregados entre las que se pueden mencionar a Red Hat Linux y Debian GNU/Linux se han hecho populares tanto entre los aficionados a la computación como en el mundo empresarial. Obsérvese que Linux tiene un origen independiente, por lo que se considera un "clónico" de UNIX y no un UNIX en el sentido histórico.
A continuación, se puede apreciar un diagrama que demuestra la colocación actual de Unix entre las distintas familias que se han desarrollado:
Diagrama de la división de familias que usan sistemas Unix o "parecidos" a Unix
Características generales de Unix / Ventajas
- Es un sistema operativo de tiempo compartido, controla los recursos de una computadora y los asigna entre los usuarios.
- Permite a los usuarios correr sus programas.
- Controla los dispositivos de periféricos conectados a la máquina.
- Es un sistema operativo multiusuario, con capacidad de simular multiprocesamiento y procesamiento no interactivo.
- Está escrito en un lenguaje de alto nivel: C.
- El sistema de ficheros está basado en la idea de volúmenes, que se pueden montar y desmontar para lo que se les asigna un nodo del árbol como punto de anclaje. Un sistema físico puede dividirse en uno o más volúmenes.
- Una de las grandes ideas de UNIX es la unificación y compatibilidad de todos los procesos de entrada y salida. Para UNIX, el universo es un sistema de ficheros. De esta forma existe compatibilidad entre ficheros, dispositivos, procesos, "pipes" y "sockets".
- Dispone de un lenguaje de control programable llamado "Shell".
- El sistema presenta comandos de usuario (es decir, a nivel de "Shell") para iniciar y manipular procesos concurrentes asíncronos. Un usuario puede ejecutar varios procesos, intercambiarlos e interconectarlos a través de "pipes" o "tuberías", simbolizados por un carácter especial. En DOS, también existe la idea del "pipe", sin embargo, al no existir concurrencia de procesos, no se trata de una comunicación en "tiempo real", sino de un paso de información a través de ficheros temporales.
- Ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software.
- Emplea manejo dinámico de memoria por intercambio o paginación.
- El núcleo de UNIX es relativamente compacto en comparación con otros sistemas de tiempo compartido. Introduce la idea de reducir el tamaño del "kernel" y ceder ciertas funciones a programas externos al núcleo llamados "demonios". Esto ha sido muy desarrollado y en la actualidad, la tendencia es el desarrollo de "micro-kernels", sin embargo UNIX, aunque pionero, es anterior a estos desarrollos.
- Tiene capacidad de interconexión y comunicaciones de procesos.
- Emplea un sistema jerárquico de archivos, con facilidades de protección de archivos, cuentas y procesos. En este sistema de ficheros jerárquico todo se encuentra anclado en la raíz. La mayoría de la literatura sobre el tema dice que el sistema de ficheros UNIX es un grafo acíclico, sin embargo, la realidad es que se trata de un grafo cíclico. El DOS, por ejemplo, es un árbol, con un directorio raíz del que cuelgan subdirectorios que a su vez son raíces de otros sub-árboles. Un grafo cíclico es como un árbol en el que se pueden enlazar nodos de niveles inferiores con un nivel superior. Es decir, se puede entrar en un subdirectorio y aparecer más cerca de la raíz de lo que se estaba.
- Tiene facilidad para redireccionamiento de Entradas/Salidas.
- Garantiza un alto grado de portabilidad.
- UNIX realiza un riguroso control de acceso a ficheros. Cada uno se encuentra protegido por una secuencia de bits. Sólo se permite el acceso global al "root" o "superusuario". Por tanto, el universo de usuarios de UNIX se encuentra dividido en dos grupos principales, no sólo para el acceso a ficheros sino para todas las actividades: el "root", todopoderoso, para el que no hay barreras; y el resto de los usuarios, controlados por el S.O. según las directivas del "root".
- UNIX es un S.O. de red, algo que a veces se confunde con un S.O. distribuido. Por ello, se ha incluido en su núcleo la arquitectura de protocolos de internet, TCP/IP.
2.3 Desventajas de Unix
Las desventajas del mismo pueden variar entre versiones, así como también por diversas condicionantes externas, tales como: el área de uso (personal, comercial o industrial), experticia del usuario, funcionalidad específica de las aplicaciones, entre otras. En general se podría decir que:
- Desde el punto de vista comercial, no muchas personas lo conocen, ya que no es un sistema que venga precargado en cada PC que se compra. En otras palabras, no están popular como Windows o incluso como Linux, y por tanto, es difícil encontrar los programas que se acostumbran a usar en esos otros sistemas operativos.
- Desde el punto de vista de funcionalidad, el S.O. Unix vienen en muchas variantes como se sabe, sin embargo, el detalle es que hay variantes que están diseñadas para ser ejecutada en equipos especiales fabricados por una marca especifica, como IBM, SUN, HP, DELL, entre otras. Lo que limita un tanto la portabilidad de UNIX
- En cuanto a la confiabilidad, UNIX fue desarrollado desde sus inicios para ser más estable que cualquier otro sistema operativo, es decir, que cuando se usa UNIX no es tan común ver ciertas pantallas de errores que salen en los otros S.O, aunque si se podrán dar casos en que hay computadores con sistemas UNIX en desuso, pero será por problemas de Hardware o de algún otro programa que trabaje mal.
- A pesar de ser tan estable y no "caerse" prácticamente nunca, resulta ser muy costoso en el sentido de mantenimiento y administración. Es decir, que por ejemplo, hay empresas que pierden más dinero con un equipo fuera de línea que pagando a un administrador del sistema (que cobra mucho por su trabajo a razón de que no muchas personas conocen UNIX).
- El S.O UNIX puede requerir más horas de aprendizaje que el resto de las otras plataformas de sistemas operativos.
- Como ya se menciono antes, los problemas suelen ser más difíciles de resolver dado el poco apoyo y soporte que hay en el mercado y, normalmente, el soporte del fabricante es muy costoso.
- Se utiliza un lenguaje de programación muy avanzado: C, aunque en algunos casos permite Fortran y Java.
Generalidades de Unix
En general UNIX mantiene una serie de procesos en funcionamiento durante todo el tiempo que este en funcionamiento. Todos los procesos en UNIX están identificados por un número, el PID, que es único. Si un proceso acaba y vuelve a empezar, su nuevo PID nunca coincidirá con el anterior. La lista y el estado de funcionamiento de los procesos (consumo de recursos, etc.) es fácilmente visualizable mediante el comando "top".
Aunque desde los años de popularización del sistema Apple Macintosh (1983, en adelante) las interfaces gráficas de usuario se han ido extendiendo más y más, UNIX es más típicamente manejado desde interfaces de tipo CLI ("Command Line Interface"), en las que los comandos se lanzan desde el "Shell". Hay una decena de "shells" populares en UNIX, desde el antiguo pero universal "Bourne Shell" (sh) hasta el sofisticado "Bash Shell". A continuación se puede ver la imagen de ejemplo de una sesión de Bash, tomada en Gentoo Linux:
Imagen de una sesión de Bash
El uso de interfaces gráficas con UNIX es tan fácil como con cualquier otra plataforma. Sin embargo la flexibilidad de interconexión entre los datos de entrada y salida de las aplicaciones no es fácil de representar en aquéllos, y es este precisamente uno de los aspectos más importante para los programadores de sistema ya que permite construir comandos combinados potentes muy rápidamente a los expertos. UNIX ideó el sistema de almacenamiento en estructuras jerárquicas que hoy es tan popular en todos los sistemas: los directorios y subdirectorios.
Kernel o núcleo del sistema
El núcleo del sistema operativo Unix (llamado Kernel) es un programa escrito casi en su totalidad en lenguaje C, con excepción de una parte del manejo de interrupciones, expresada en el lenguaje ensamblador del procesador en el que opera. Las funciones del núcleo son permitir la existencia de un ambiente en el que sea posible atender a varios usuarios y múltiples tareas en forma concurrente, repartiendo al procesador entre todos ellos, e intentando mantener en grado óptimo la atención individual. El Kernel opera como asignador de recursos para cualquier proceso que necesite hacer uso de las facilidades de cómputo. Es el componente central de Unix y tiene las siguientes funciones:
· Creación de procesos, asignación de tiempos de atención y sincronización.
· Asignación de la atención del procesador a los procesos que lo requieren.
· Administración de espacio en el sistema de archivos, que incluye: acceso, protección y administración de usuarios; comunicación entre usuarios v entre procesos, y manipulación de E/S y administración de periféricos.
· Supervisión de la transmisión de datos entre la memoria principal y los dispositivos periféricos.
El Kernel reside siempre en la memoria central y tiene el control sobre la computadora, por lo que ningún otro proceso puede interrumpirlo; sólo pueden llamarlo para que proporcione algún servicio de los ya mencionados. Un proceso llama al Kernel mediante módulos especiales conocidos como llamadas al sistema.
El Kernel consta de dos partes principales: la sección de control de procesos y la de control de dispositivos. La primera asigna recursos, programas, procesos y atiende sus requerimientos de servicio; la segunda, supervisa la transferencia de datos entre la memoria principal y los dispositivos periféricos. En términos generales, cada vez que algún usuario oprime una tecla de una terminal, o que se debe leer o escribir información del disco magnético, se interrumpe al procesador central y el núcleo se encarga de efectuar la operación de transferencia
Cuando se inicia la operación de la computadora, debe cargarse en la memoria una copia del núcleo, que reside en el disco magnético. Para ello, se deben inicializar algunas interfaces básicas de hardware; entre ellas, el reloj que proporciona interrupciones periódicas. El Kernel también prepara algunas estructuras de datos que abarcan una sección de almacenamiento temporal para transferencia de información entre terminales y procesos, una sección para almacenamiento de descriptores de archivos y una variable que indica la cantidad de memoria principal.
A continuación, el Kernel inicializa un proceso especial, llamado "proceso 0". En general, los procesos se crean mediante una llamada a una rutina del sistema ("fork"), que funciona por un mecanismo de duplicación de procesos. Sin embargo, esto no es suficiente para crear el primero de ellos, por lo que el Kernel asigna una estructura de datos y establece apuntadores a una sección especial de la memoria, llamada tabla de procesos, que contendrá los descriptores de cada uno de los procesos existentes en el sistema.
Después de haber creado el "proceso 0", se hace una copia del mismo, con lo que se crea el "proceso 1"; éste muy pronto se encargará de "dar vida" al sistema completo, mediante la activación de otros procesos que también forman parte del núcleo. Es decir, se inicia una cadena de activaciones de procesos, entre los cuales destaca el conocido como despachador, o "scheduler", que es el responsable de decidir cuál proceso se ejecutará y cuáles van a entrar o salir de la memoria central. A partir de ese momento se conoce el número 1 como proceso de inicialización del sistema, "init".
El proceso "init" es el responsable de establecer la estructura de procesos en Unix. Normalmente, es capaz de crear al menos dos estructuras distintas de procesos: el modo monousuario y el multiusuario. Comienza activando el intérprete del lenguaje de control ("Shell") en la terminal principal, o consola, del sistema y proporcionándole privilegios de "superusuario". En la modalidad de un solo usuario la consola permite iniciar una primera sesión, con privilegios especiales, e impide que las otras líneas de comunicación acepten iniciar sesiones nuevas. Esta modalidad se usa con frecuencia para revisar y reparar sistemas de archivos, realizar pruebas de funciones básicas del sistema y para otras actividades que requieren uso exclusivo de la computadora.
"Init" crea otro proceso, que espera pacientemente a que alguien entre en sesión en alguna línea de comunicación. Cuando esto sucede, realiza ajustes en el protocolo de la línea y ejecuta el programa "login", que se encarga de atender inicialmente a los nuevos usuarios. Si la clave del usuario, y la contraseña proporcionadas son las correctas, entonces entra en operación el programa "Shell", que en lo sucesivo se encargará de la atención normal del usuario que se dio de alta en esa terminal.
A partir de ese momento el responsable de atender al usuario en esa terminal es el intérprete "shell". Cuando se desea terminar la sesión hay que desconectarse de "Shell" (y, por lo tanto, de Unix), mediante una secuencia especial de teclas. A partir de ese momento la terminal queda disponible para atender a un nuevo usuario.
Línea de comandos, consola o "shell" del sistema
Es un programa informático que actúa como interfaz de usuario para comunicar al usuario con el sistema operativo mediante una ventana que espera ordenes escritas por el usuario en el teclado; los interpreta y los entrega al sistema operativo para su ejecución. La respuesta del sistema operativo es mostrada al usuario en la misma ventana. A continuación, el programa "shell" queda esperando más instrucciones. Se interactúa con la información de la manera más sencilla posible, sin gráficas, solo el texto crudo.
Dada la importancia de esta herramienta, existe ya desde los comienzos de la computación. Existen para diversos sistemas operativos, diversos hardwares, con diferente funcionalidad. Suelen incorporar características tales como control de procesos, redirección de entrada/salida, listado y lectura de ficheros, protección, comunicaciones y un lenguaje de órdenes para escribir programas por lotes o (scripts o guiones). Su contraparte es la interfaz gráfica de usuario que ofrece una estética mejorada a costa de mayor consumo de recursos computacionales, una mayor vulnerabilidad por complejidad y, en general, una reducción en la funcionalidad ofrecida.
En su forma más simple, una CLI ("Command Line Interface")es una ventana que muestra un "prompt", señalizando su disposición a recibir mandatos, el usuario teclea una orden en el teclado e ingresa la orden normalmente con la tecla "Intro/Enter".
Las órdenes dadas a la CLI son con frecuencia de la forma:
PROMPT>comando_haz_algo [opciones] [a_estos_ficheros]
Al ingresar el mandato con "Intro", un programa interpretador de mandatos analiza la secuencia de caracteres ingresada y, si la sintaxis del mandato es correcta, ejecuta el mandato recurriendo para ello a las funciones que ofrece el sistema operativo o el programa que representa, un gestor de banco de datos, una sesión de FTP, etc. La respuesta al usuario es escrita en el monitor. Esta forma de trabajo es interactiva, es decir, usuario y máquina se comunican en forma sucesiva.
Pero no solo se puede trabajar interactivamente con el CLI, también es posible usar scripts ó guión, es decir, archivos conteniendo instrucciones guardadas como si se estuviesen escribiendo en el momento. De esta forma, la línea de comandos puede utilizarse sin siquiera tener que lidiar con lo primitivo del método ni estando presente frente al monitor o teclado. Comparada con un ambiente gráfico la CLI consume menos recursos del CPU y de la tarjeta gráfica, es más rápida y más fácil de utilizar a través de una red de computadores.
A continuación se puede observar una imagen que describe la forma como los usuarios interactúan con el sistema utilizando la CLI:
Interacción con la CLI ("Command Line Interface")
Sistema de archivos de Unix: "File System"
La tercera parte que define el sistema operativo UNIX es la estructura de su sistema de ficheros. Un sistema de ficheros es la forma que tiene el sistema operativo de organizar los datos en una estructura o colección de ficheros. UNIX considera como ficheros no sólo a los ficheros normales (en los que se guardan datos, programas, etc.) sino también a los directorios y los dispositivos conectados al sistema.
El sistema de ficheros en UNIX está organizado en una estructura jerárquica de directorios que comienza en el directorio "root" representado por "/." Los directorios que cuelgan de "root" pueden variar dependiendo del sistema, aunque los mostrados en el árbol a continuación, sí son comunes a todos los sistemas UNIX.
· /bin – contiene comandos y utilidades, son ficheros ejecutables.
· /dev – contiene los ficheros que representan a los dispositivos conectados al sistema.
· /etc – contiene comandos y ficheros usados en la administración del sistema.
· /home – contiene los ficheros "home" de cada usuario del sistema.
· /lib – contiene librerías utilizadas por diferentes programas y lenguajes.
· /tmp – es el directorio donde se guardan los ficheros temporales.
· /usr – contiene ficheros del sistema que son comunes a los usuarios como programas o documentación.
Los ficheros pueden clasificarse dentro de las siguientes categorías:
· Ficheros normales
· Directorios
· Ficheros especiales
· "Pipes" o "tuberías"
Los ficheros normales pueden tener contenidos muy diferentes, por ejemplo, texto, imágenes, ejecutables, etc. Todos los ficheros tienen un propietario, aquellos creados por los usuarios dentro de su propia cuenta y cada propietario es el que puede controlar los permisos de acceso a ese fichero.
Los directorios son ficheros que contienen referencias a otros ficheros. Aunque todos los ficheros se encuentran dentro de algún directorio, no residen realmente dentro de él. El directorio mantiene dos informaciones básicas sobre cada fichero contenido en él: el nombre y un número llamado "inode number" que es un puntero que le indica al sistema donde encontrar toda la información que necesita del fichero, además de almacenar otra información básica como pertenencia, modo de acceso y tipo de archivo. A la correspondencia entre el nombre de un fichero y el "inode number" se le denomina "link". Un mismo "inode number" puede tener asociados varios nombres y se puede referir al fichero por cada uno de estos nombres.
Los dispositivos especiales son ficheros que representan dispositivos físicos como impresoras, dispositivos magnéticos, el ratón, etc. Se encuentran dentro del directorio /dev. Los "pipes" o "tuberías" son los que permiten enlazar la salida de un comando a la entrada de otro, esto se hace a través de la creación de un fichero temporal donde se guarda la salida del primer programa hasta que es leído por el segundo.
A continuación se puede observar un diagrama en donde se representa la interfaz para realizar llamadas al sistema en el sistema operativo Unix:
Diagrama de interfaz de llamadas al sistema
Comparación con el sistema operativo Windows: principales diferencias
- Núcleo monolítico Vs. Micronucleo: en Windows se utiliza una aproximación al Micronucleo (tipo de núcleo descentralizado pero de menor rendimiento) mientras que en Unix se utiliza el Núcleo Monolítico (tipo de núcleo da gran rendimiento pero de gran complejidad para añadir nuevas funcionalidades).
- Ficheros Vs. Objetos: Unix es un sistema operativo orientado a ficheros (todo es una serie de ficheros organizados de manera jerárquica) y Windows es un sistema operativo orientado a objetos (todo es un objeto, algo más complicado que un archivo).
- Súper-aplicaciones Vs. Micro-aplicaciones: En Unix se tienden a tener un montón de pequeñas aplicaciones que hacen una sola cosa pero muy bien, mientras que en Windows se tiende a concentrar todo en una aplicación pero con una no muy buena funcionalidad.
Comandos básicos del sistema operativo Unix
Este pretende ser un pequeño resumen de comandos que se utilizan en Unix:
- Comandos de directorios:
• ls – lista todos los archivos de un directorio, usando el switch -al lista los permisos y fecha de última actualización de los archivos.
• cd (cd_nombre_directorio) – cambia de directorio. Por ejemplo: cd public llevara al usuario al directorio public
• cd.. – lleva al usuario al directorio padre (un nivel más arriba)
• cd $home – lleva al usuario al directorio raíz sin importar donde este el mismo
• mkdir – crea un nuevo directorio, por ejemplo: mkdir nombre_directorio
• pwd – muestra el directorio actual de trabajo
• rmdir – permite borrar un directorio
• mv (mv archivo o directorio) – mueve archivos o subdirectorios de un directorio a otro, o cambia el nombre del archivo o directorio
• chmod (chmod modo archivo) – utilizado para cambiar la protección o permisos de accesos a los archivos. Lectura (r), Escritura (w) y Ejecución (x).
Permisos de (l): Usuario: permisos que tiene con respecto a un archivo o directorio de su propiedad. Grupo: permisos que tiene el archivo y/o directorio para los usuarios que pertenecen al mismo grupo. Otros: permisos que tienen otros usuarios en el archivo o directorio.
Para modificar los permisos del usuario, grupo y otros se utiliza "+" para añadir permiso o "-" para no dar permiso, indicando el tipo de permiso w, r, x. Además, puede especificarse de una forma numérica, donde cada letra correspondiente a una parte del permiso (r,w,x) puede estar activada o no (en 1 ó 0) para formar un número binario, el cual es convertido luego a número decimal.
• cp (cp nom_archivo o directorio) – copia archivos en el directorio indicado.
• rm (rm_nombre_archivo) – remueve o elimina un archivo. Una vez eliminado el archivo no puede ser recuperado.
• rmdir (rmdir_nombre_directorio) – elimina el directorio indicado, el cual debe estar vacio.
• lpr (lpr_lista de requerimientos) – imprime un archivo en la impresora predeterminada.
• wc (wc_archivo) – cuenta los caracteres, líneas y palabras del archivo de texto.
• file (file_archivo) – determina el tipo del o de los archivo(s) indicado(s). Ejemplo: texto, programa, grafico, etc.
• find (find_directorio o archivo condición) – busca los archivos que satisfacen la condición en el directorio indicado.
• tar (tar -[arg] archivo.tar) – comprime archivos y directorios utilizando la extensión .tar
• gzip (gzip_archivo) – comprime solo archivos utilizando la extensión .gz
- Comandos para visualizar y modificar archivos:
• more, less, cat – permite visualizar un archivo sin realizar modificaciones.
• more (more_nom_archivo) – Muestra el archivo en pantalla. Presionando "enter", se visualiza línea por línea. Presionando la barra espaciadora, pantalla por pantalla. Si se desea salir, se presiona q.
• less (less_nom_archivo) – muestra el archivo de la misma forma que more, pero se puede regresar a la página anterior presionando las teclas "u" o "b".
• cat (cat_nom_archivo) – muestra el contenido del archivo en pantalla en forma continua, el prompt retornará una vez mostrado el contenido de todo el archivo. Permite concatenar uno o más archivos de texto: cat arch [arch2…]
• diff (diff_archivo_1_archivo_2) – permite la comparación de 2 archivos línea por línea. Es utilizado para comparar archivos de datos.
• vi (vi_nom_archivo) – permite editar un archivo en el directorio actual de trabajo. Es uno de los editores de texto más usado en UNIX.
• view (view_nom_archivo) – es similar al vi, solo que no permite guardar modificaciones en el archivo, es para leer el contenido del archivo.
- Comandos para obtener información:
• man – ofrece información acerca de los comandos o tópicos del sistema UNIX, así como de los programas y librerías existentes.
• whoami – escribe el nombre del usuario en pantalla.
• who,w – lista quienes están conectado al servidor, con nombre de usuario, tiempo de conexión y el computador remoto desde donde se conecta.
• finger – permite encontrar información acerca de un usuario.
• date – muestra el día, fecha, hora (con minutos y segundos) y año.
• mail – coloca los correos en modo mail. El prompt es el signo ?. La tecla "enter" pasa al siguiente correo. Presionando h y luego "enter", lista los correos que tiene el buzón. La tecla d y luego "enter", elimina el correo que esté mostrando en pantalla. Para salir se utilizan las teclas q y "enter".
- Comandos de ayuda de otros comandos:
• clear – limpia la pantalla, y coloca el prompt al principio de la misma.
• history – lista los más recientes comandos que se han introducido en la ventana. Es utilizado para repetir comandos ya tipiados, con el comando !.
• ! – repite el último comando colocando la letra con la que comienza el comando o su número de history.
- Comandos de acceso y uso de maquinas remotas:
• ftp – protocolo de transferencia de archivos, permite transferir archivos de y para computadores remotos.
• rlogin – conecta un host local con un host remoto.
• ssh – "Secure Shell Client", es un programa para conectarse en una máquina remota y ejecutar programas en ella. Utilizado para reemplazar el rlogin y rsh, además provee mayor seguridad en la comunicación entre dos hosts. El ssh se conecta al host indicado, donde el usuario debe ingresar su identificación (login y password) en la máquina remota, la cual realiza una autentificación del usuario.
• telnet – conecta al host local con un host remoto, usando la interfaz TELNET.
- Comandos para chequear trabajos y procesos antes de salir:
• ps – muestra información acerca de los procesos activos. Sin opciones, muestra el número del proceso, terminal, tiempo acumulado de ejecución y el nombre del comando. De otra manera, la información de salida es controlada por las opciones indicadas.
• kill – elimina los procesos que esté realizando el sistema.
• jobs – lista los trabajos y sus números de identificación. Si el prompt retorna sin ninguna información, es que no hay ningún trabajo corriendo. Un trabajo puede ser creado por la letra & antes de un comando, que lo hace ejecutable
• exit – cierra las ventanas o las conexiones remotas establecidas o las conchas abiertas. Antes de salir es recomendable eliminar todos los trabajos o procesos de la estación de trabajo.
CAPÍTULO III
CONCLUSIONES
3.1 Conclusiones
De la elaboración de esta guía, se pueden hacer las siguientes conclusiones en cuanto al sistema operativo Unix:
- El sistema operativo Unix es un importante producto utilizado ampliamente en el mundo de los negocios, en el académico y en el gubernamental a nivel mundial
- Debido a que el código fuente de Unix ha estado disponible, muchos programadores han tenido la oportunidad de moldear este sistema operativo para que se pueda adaptar a sus necesidades.
- Es un sistema multiusuario, multitarea y además, proporciona un buen entorno para el trabajo en red.
- El termino kernel significa lo mismo que el núcleo del computador.
- El kernel o núcleo es la parte fundamental del computador. El mismo se encarga de tareas como por ejemplo, planificar la ejecución de los procesos, supervisar la transmisión de datos entre las aplicaciones y los dispositivos periféricos, administrar la memoria del computador, hacer el renderizado de texto en la pantalla, entre otras cosas.
- Un sistema operativo con núcleo monolítico concentra todas las funcionalidades posibles dentro de un gran programa. Todos sus componentes se encuentran integrados en un único programa que se ejecuta en un único espacio de direcciones. En este tipo de sistemas, todas las funciones que ofrece el sistema operativo se ejecutan en modo supervisor.
- El micronucleo es un tipo de núcleo de un sistema operativo que provee de llamadas al sistema mínimas, para implementar servicios básicos como espacios de direcciones, comunicación entre procesos y planificación básica. Todos los otros servicios, que en general son provistos por el núcleo, se ejecutan como procesos servidores en espacio de usuario.
- Es importante diferenciar el termino de Software de sistema (sistema operativo) del termino de Software de aplicación, ya que el primero se refiere a un programa que se encarga de las funciones básicas del computador, mientras que el segundo se encarga de tareas más relacionadas con ayudar a los usuarios a la realización de diversas tareas de la vida diaria, por ejemplo, las aplicaciones ofimáticas.
- En Unix todo se entiende como ficheros (organizados de manera jerárquica), mientras que en Windows todo se trata como objetos, que es casi lo mismo, pero con una estructura diferente. Lo mismo sucede con los directorios y sub-directorios en Unix, que se entienden como carpetas y sub-carpetas en Windows.
- El sistema operativo Linux, que no es Unix, tiene gran parecido a este. De hecho, se sabe que Linux proviene de Minix (otro sistema derivado de Unix), por lo tanto, de no ser por la creación de Unix probablemente nunca se hubieran creado todas las distribuciones de Linux que existen hasta ahora.
- El sistema operativo Unix proviene de un trabajo de un sistema operativo experimental llamado Multics, que se desarrollo hace más de 30 años. El objetivo de aquel proyecto era el de desarrollar un sistema operativo interactivo que contase con muchas innovaciones, entre ellas mejoras en las políticas de seguridad.
- Se puede decir que el Lenguaje de programación C (muy usado en la actualidad) se creó justamente para poder desarrollar el sistema operativo Unix.
- Se podría decir que el programa "runoff" fue uno de los primeros programas de procesamiento de texto. La evolución del mismo, conocido como "troff" fue el primer programa de edición electrónica que permitía realizar composición tipográfica.
- Las versiones más "puras" en la actualidad de este sistema operativo son UnixWare y SCO Open Server. Ambas comercializadas por SCO Group, a pesar de los problemas legales que ha tenido esta empresa, estos sistemas se siguen usando ampliamente a nivel mundial, aunque, el futuro de esta empresa y estos sistemas es incierto de momento.
- A pesar de que los mencionados anteriormente constituyen sistemas operativos Unix "puros", hay muchos sistemas en la actualidad que pertenecen a la familia de Unix, aunque no sean exactamente igual a este, como por ejemplo, las distribuciones de Linux, los BSD, los AIX, los de Sun, entre otros.
- La filosofía de Unix se puede resumir de la siguiente manera: escribir programas que hagan una cosa y la hagan bien, escribir programas que trabajen juntos (en conjunción) y escribir programas que manejen "torrentes de texto", porque esa es una interfaz universal.
- Las principales ideas de Unix son: manejar todo como cadena de bytes, el uso de 3 descriptores estándar, las capacidades de "entubar" y "redireccionar" y el hecho de crear sistemas grandes a partir de módulos.
- El sistema de ficheros está basado en la idea de volúmenes, que se pueden montar y desmontar para lo que se les asigna un nodo del árbol como punto de anclaje. Un sistema físico puede dividirse en uno o más volúmenes.
- Unix ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software.
- El núcleo de UNIX es relativamente compacto en comparación con otros sistemas de tiempo compartido. Introduce la idea de reducir el tamaño del "kernel" y ceder ciertas funciones a programas externos al núcleo llamados "demonios". Esto ha sido muy desarrollado y en la actualidad, la tendencia es el desarrollo de "micro-kernels", sin embargo UNIX, aunque pionero, es anterior a estos desarrollos.
- Emplea un sistema jerárquico de archivos, con facilidades de protección de archivos, cuentas y procesos. En este sistema de ficheros jerárquico todo se encuentra anclado en la raíz.
- Desafortunadamente, Unix no es sistema que todas las personas conozcan debido a que el mismo no está muy difundido entre los usuarios habituales. Este mismo sistema es muy usado a nivel comercial, industrial y gubernamental, pero a nivel de computador personal o de escritorio pierde terreno con respecto a otros sistemas como Windows y Linux.
- El S.O UNIX puede requerir más horas de aprendizaje que el resto de las otras plataformas de sistemas operativos debido a su alto uso de terminología técnica y que la interacción primordial del mismo, la que demuestra toda su potencialidad, se da a través de líneas de comandos.
- En Unix también se pueden usar interfaces graficas como en otro sistemas, no obstante, las interfaces de los otros sistemas son mas intuitivas y, por lo tanto, más fáciles de usar.
- El sistema operativo Unix se divide en 3 partes básicas, a saber son: el kernel o núcleo del sistema, el "shell" o línea de comandos y el "File system" o sistemas de archivos del mismo.
- El Kernel opera como asignador de recursos para cualquier proceso que necesite hacer uso de las facilidades de cómputo. Es el componente central de Unix. El Kernel reside siempre en la memoria central y tiene el control sobre la computadora, por lo que ningún otro proceso puede interrumpirlo.
- El "shell" es un programa informático que actúa como interfaz de usuario para comunicar al usuario con el sistema operativo mediante una ventana que espera ordenes escritas por el usuario en el teclado; los interpreta y los entrega al sistema operativo para su ejecución.
- La tercera parte: el "File system" se refiere a la estructura del sistema de ficheros del Unix. En este sistema operativo los ficheros están organizados de manera jerárquica y se pueden clasificar entre: ficheros normales, directorios, ficheros especiales y los "pipes" o "tuberías".
3.2 Recomendaciones
De acuerdo a las conclusiones expresadas anteriormente:
- Se recomienda tomar esta guía como referencia para aquellas personas que necesitan iniciarse en los conceptos básicos de informática.
- Se sugiere de igual forma, el uso de la información en este guía a aquellas personas que estén pensando en usar el sistema operativo Unix, ya sea a nivel personal, comercial e industrial, gubernamental o privado.
- La utilización del sistema operativo Unix es de gran importancia para aquellos individuos que estén pensando en montar un negocio de gran envergadura, y necesiten un sistema de alta confiabilidad y rendimiento.
- Esta guía solo funciona como un material de referencia básico, aquellos que deseen profundizar más en el conocimiento de este sistema operativo, se les sugiere buscar otras referencias para poder completar el proceso de aprendizaje.
- La mejor manera de aprender algo es con la práctica, por tanto, se recomienda la realización de cualquier tipo de cursos, talleres, congresos, simposios, foros, o cualquier otra reunión que pueda servir para complementar estos conceptos de una manera más práctica e interactiva.
REFERENCIAS
Fuentes impresas:
Universidad Pedagógica Experimental Libertador (1998). Manual de Trabajos de Grado de Especialización y Maestría y Tesis Doctorales. Caracas.
Fuentes electrónicas:
Características del sistema operativo (2003). La cárcel [Pagina web en línea]. http://lacarcel.iespana.es/1caract.htm [Consulta: 2008, Julio 03]
Carrasquel, D. (2006). Unix.http://www.monografias.com/trabajos36/ sistema-unix/sistema-unix.shtml [Consultado 2008, Julio 05]
Comandos básicos de Unix (2004). Centro de atención al Usuario ULA. [Documento en línea] http://atencion.ula.ve/manuales/unix/ resumen.html [Consulta: 2008, Julio 09]
Costales, F. (1999). Sistema operativo Unix. http://www.estudiagratis.com/showCourse.php?a=813&b=1&h=F7FFC2F39FB68BB0614D4A7CADF07FBE [Consultado 2008, Julio 06]
Gonzalez, V. (2001). Curso básico de Unix. Instituto de Energía Eléctrica de Montevideo, Uruguay. http://iie.fing.edu.uy/~vagonbar/ unixbas/introd.htm [Consulta: 2008, Julio 03]
Historia de Unix. (2008). Geocities [Pagina web en línea] http://www.geocities.com/feliciaesp/historia.html [Consulta: 2008, Julio 01]
Introducción y conceptos básicos del sistema operativo Unix. (2006). Instituto de astrofísica de Canarias. [Documento en línea] http://www.iac.es/sieinvens/SINFIN/CursoUnix/cap1.php [Consulta: 2008, Junio 29]
Irojask2 (2004). Desventajas de Unix [Discusión en línea] http://www.xpertia.com/home.asp?tip=usu&id=5&item=pregunta&id_item=167547&idr=129483 [Consulta: 2008, Julio 07]
Martinoli, D. (1998). Sistema Operativo Unix. http://www.monografias.com/trabajos/unix/unix.shtml [Consulta: 2008, Julio 03]
Microsoft Corporation, 2007. Microsoft® Student con Encarta® Premium 2008 [DVD]. "Unix." [Consulta: 2008, Junio 29]
Monografía de Mononeurona (2005). ¿Qué es Unix?-La historia de Unix. Wikilearnig. http://www.wikilearning.com/monografia/que_es_unix-la_historia_de_unix/6379-1 [Consulta: 2008, Julio 02]
Mostacero, D. (2000). Historia de Unix. Tomado de Unix® System. [Traduccion: UnixSupport]. http://www.unixsup.com/unixlinux/ historiaunixus.html [Consulta: 2008, Julio 02]
Pablo, P. (2001). Historia de Unix. [Pagina web de dns.bdat.net] http://dns.bdat.net/shell/node3.html. [Consulta: 2008, Julio 03]
POnk. (1999). Historia de Unix [Pagina web en línea] http://www.ayuda-internet.net/tutoriales/manu-unix/manu-unix.html [Consulta: 2008, Julio 05]
Unique Computer Operations S.A. (UNICOPSA) (2004). Características del Unix. Geocities. http://www.geocities.com/gzsuniq/ unix_char.htm [Consulta: 2008, Julio 04]
Vieyra, G. (2000). Características generales de Unix/Linux. [Pagina web de dns.bdat.net] http://www.fismat.umich.mx/~elizalde/ tesis/node24.html [Consulta: 2008, Julio 06]
Wikipedia (2008). Computadora central. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/Computadora_central [Consulta: 2008, Julio 09]
Wikipedia (2008). GNU. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/GNU [Consulta: 2008, Julio 10]
Wikipedia (2008). Inode. Wikimedia Foundation Inc. http://en.wikipedia.org/wiki/Inode [Consulta: 2008, Julio 14]
Wikipedia (2008). Lenguaje de programación C. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/ANSI_C [Consulta: 2008, Julio 10]
Wikipedia (2008). Lenguaje ensamblador. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/Assembly [Consulta: 2008, Julio 10]
Wikipedia (2008). Linea de comandos. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/Unix_shell [Consulta: 2008, Julio 14]
Wikipedia (2008). Linux. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/Linux [Consulta: 2008, Julio 06]
Wikipedia (2008). Micronucleo. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/Micron%C3%BAcleo [Consulta: 2008, Julio 08]
Wikipedia (2008). Núcleo (informática). Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/N%C3%BAcleo_(inform%C3%A1tica) [Consulta: 2008, Julio 08]
Wikipedia (2008). Núcleo monolítico. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/N%C3%BAcleo_monol%C3%ADtico [Consulta: 2008, Julio 08]
Wikipedia (2008). Software libre. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/C%C3%B3digo_libre [Consulta: 2008, Julio 10]
Wikipedia (2008). Software no libre. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/Software_no_libre [Consulta: 2008, Julio 10]
Wikipedia (2008). Unix Philosophy. Wikimedia Foundation Inc. http://en.wikipedia.org/wiki/Unix_philosophy [Consulta: 2008, Julio 04]
Wikipedia (2008). Unix. Wikimedia Foundation Inc. http://es.wikipedia.org/wiki/Unix [Consulta: 2008, Junio 28]
Información adicional del autor principal del trabajo: Ángel Betancourt, nacido en la ciudad de Caracas, Estado Miranda, Venezuela. Es Bachiller en Ciencias, graduado de la U.E. Colegio "San Lázaro" en Cumana, Estado Sucre. Actualmente se encuentra cursante de los estudios de Ing. Mecánica en la Universidad Nacional Experimental Politécnica de la Fuerza Armada Bolivariana (UNEFA)- Núcleo Sucre. Cuenta con experiencia en la presentación de proyectos y trabajos, experiencia en exposiciones y asesoría básica en la elaboración de trabajos.
Créditos: se agradece la colaboración de los alumnos de la sección "6" de Ing. Mecánica de la Universidad Nacional Experimental Politécnica de la Fuerza Armada Bolivariana (UNEFA) – Núcleo Sucre, en especial a Carlos Chiarelli por su ayuda en la recopilación de la información para la realización de esta guía.
Datos del proyecto: elaborado en Cumaná, Estado Sucre, Venezuela, julio de 2008.
Autor:
Angel Betancourt
Venezuela
2008
Página anterior | Volver al principio del trabajo | Página siguiente |