Logo Studenta

Administracion-de-sistemas-Unix

¡Este material tiene más páginas!

Vista previa del material en texto

UNIVERSIDAD NACIONAL AUTONÓMA 
DE MÉXICO 
 
 
 
FACULTAD DE ESTUDIOS SUPERIORES 
ARAGÓN 
 
 
 
DIPLOMADO DE DISEÑO E IMPLANTACIÓN DE 
SOFTWARE LIBRE EN LINUX 
 
ESPECIALIZACIÓN EN ADMINISTRACIÓN DE 
SISTEMAS UNIX 
 
 
 
“ADMINISTRACIÓN DE SISTEMAS UNIX” 
 
 
 
 
 
 
 
 
TRABAJO ESCRITO EN LA MODALIDAD DE 
SEMINARIOS Y CURSOS DE ACTUALIZACIÓN 
Y CAPACITACIÓN PROFESIONAL 
QUE PARA OBTENER EL TÍTULO DE: 
INGENIERO EN COMPUTACIÓN 
P R E S E N T A: 
POBLANO HERNÁNDEZ GERARDO OMAR 
ASESOR: M. EN.C. PEREZ MEDEL MARCELO 
 
MÉXICO, 2007 
 
 
UNAM – Dirección General de Bibliotecas 
Tesis Digitales 
Restricciones de uso 
 
DERECHOS RESERVADOS © 
PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL 
 
Todo el material contenido en esta tesis esta protegido por la Ley Federal 
del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). 
El uso de imágenes, fragmentos de videos, y demás material que sea 
objeto de protección de los derechos de autor, será exclusivamente para 
fines educativos e informativos y deberá citar la fuente donde la obtuvo 
mencionando el autor o autores. Cualquier uso distinto como el lucro, 
reproducción, edición o modificación, será perseguido y sancionado por el 
respectivo titular de los Derechos de Autor. 
 
 
 
 
Administración de Sistemas 
Unix 
 
 
 
 
 
 
 
Agradecimientos 
Agradezco profundamente a la Universidad Nacional Autónoma de México 
UNAM por la confianza ofrecida a lo largo de estos cinco años. Por permitirme ser 
un profesionista más de la carrera de Ingeniería en Computación y conformar 
parte de este importante orgullo universitario. 
A su vez, también mis agradecimientos hacia la Facultad de Estudios 
Superiores Aragón, profesores y directivos, por su incontenible labor en hacer de 
ésta facultad la fuente de nuestro conocimiento y formación. 
Mantengo mi gratitud a la Dirección General de Servicios de Cómputo 
Académico, por permitirme un desarrollo profesional. A los profesores y 
compañeros que ahí colaboran, por su camaradería en esta travesía vivida de casi 
dos años. 
A mis compañeros y amigos de carrera, por compartir anécdotas y colaborar 
activamente en cada uno de los proyectos y adversidades que nos acaecieron. 
Finalmente y no siendo menos importante, sino el que más, un agradecimiento 
especial hacia mi familia, por su inmensurable apoyo. Por ser el motor que me 
impulso en la finalización de este sueño logrado de cinco años de esfuerzo, lucha 
y dedicación. 
Gracias. 
 
 
Contenido 
AGRADECIMIENTOS............................................................................................. II 
CONTENIDO.......................................................................................................... III 
ÍNDICE DE FIGURAS ............................................................................................VI 
ÍNDICE DE TABLAS............................................................................................VIII 
INTRODUCCIÓN ...................................................................................................XI 
ADMINISTRACIÓN DE SISTEMAS........................................................................ 1 
1.1. Introducción al Sistema Operativo Unix
1.1.1. 
1.1.2. 
1.1.3. 
1.1.4. 
1.1.5. 
1.1.6. 
................................................... 1 
Antecedentes ........................................................................................ 1 
La creciente importancia de Unix .......................................................... 6 
¿Qué es Unix?....................................................................................... 7 
La filosofía de Unix .............................................................................. 10 
Edición de texto en Unix...................................................................... 11 
.............................................. 12 Introducción a la programación en shell
1.2. Utilerías de Unix
1.2.1. 
1.2.2. 
1.2.3. 
1.2.4. 
1.2.5. 
1.2.6. 
1.2.7. 
1.2.8. 
1.2.9. 
....................................................................................... 15 
Conceptos asociados al manejo de utilerías ....................................... 15 
Búsqueda de patrones en archivos ..................................................... 16 
Operación con columnas y campos..................................................... 18 
Herramientas para la ordenación ........................................................ 18 
Comparación de archivos.................................................................... 19 
Cambio de información en archivos .................................................... 19 
Monitorización de la entrada y salida .................................................. 21 
Herramientas para visualizar fechas y hora
awk
........................................ 21 
...................................................................................................... 21 
1.3. Llamadas al sistema
1.3.1. 
1.3.2. 
1.3.3. 
1.3.4. 
1.3.5. 
 1.3.6.
................................................................................. 25 
El kernel .............................................................................................. 25 
Arquitectura del sistema Unix .............................................................. 25 
Visión general del sistema de archivos ............................................... 28 
Estándares de Unix ............................................................................. 29 
ANSI C
POSIX
................................................................................................ 30 
................................................................................................. 31 
III 
 
IV CONTENIDO 
1.3.7. Sockets................................................................................................ 33 
1.4. Administración básica de Unix
1.4.1. 
1.4.2. 
............................................................... 37 
Características del administrador Unix
Tareas del administrador Unix
................................................ 38 
............................................................. 40 
1.5. Seguridad en Unix
1.5.1. 
1.5.2. 
1.5.3. 
1.5.4. 
1.5.5. 
1.5.6. 
.................................................................................... 43 
¿Qué es seguridad en cómputo? ........................................................ 43 
La seguridad y Unix............................................................................. 45 
Vulnerabilidades en los sistemas Unix ................................................ 46 
Esquema de seguridad........................................................................ 51 
Políticas y procedimientos de seguridad
Análisis de riesgos
............................................. 52 
............................................................................... 54 
PROGRAMACIÓN DE SISTEMAS....................................................................... 57 
2.1. Herramientas de Programación
2.1.1. 
2.1.2. 
2.1.3. 
2.1.4. 
.............................................................. 57 
Emacs ................................................................................................. 57 
CVS ..................................................................................................... 57 
MAKE .................................................................................................. 58 
............................................................................... 59 GNU Build System
2.2. Programación con C/C++
2.2.1. 
2.2.2. 
......................................................................... 61 
El lenguaje de programación C ...........................................................61 
....................................................... 67 El lenguaje de programación C++
2.3. Programación con Perl ............................................................................ 75 
CÓMPUTO DE ALTO RENDIMIENTO ................................................................. 77 
3.1. Introducción al Cómputo Científico
3.1.1. 
3.1.2. 
3.1.3. 
3.1.4. 
........................................................ 77 
Simulación........................................................................................... 77 
Supercómputo ..................................................................................... 79 
Realidad Virtual ................................................................................... 80 
........................................................................ 81 Visualización Científica
3.2. Redes
3.2.1. 
3.2.2. 
3.2.3. 
3.2.4. 
3.2.5. 
3.2.6. 
......................................................................................................... 83 
Introducción......................................................................................... 83 
Internet ................................................................................................ 83 
Modelo Cliente-Servidor ...................................................................... 88 
TCP/IP................................................................................................. 89 
Archivos y programas de red en Unix
Servicios de red en Unix
.................................................. 91 
...................................................................... 95 
3.3. Arquitecturas para el cómputo paralelo
Arquitecturas paralelas3.3.1. 
................................................. 97 
........................................................................ 97 
 
 
3.3.2. 
3.3.3. 
3.3.4. 
3.3.5. 
Tipos de máquinas paralelas............................................................... 98 
Memoria distribuida y compartida........................................................ 99 
Clusters ............................................................................................. 101 
.................... 103 Ventajas e inconvenientes de los sistemas distribuidos
3.4. Tópicos selectos de administración avanzada
3.4.1. 
3.4.2. 
3.4.3. 
3.4.4. 
3.4.5. 
.................................... 105 
Introducción al cómputo de alto rendimiento ..................................... 105 
Sistema de control de procesos ........................................................ 107 
Parámetros de rendimiento ............................................................... 112 
Administración de tareas ................................................................... 115 
.................................................. 118 Análisis del desempeño del sistema
CASOS PRÁCTICOS DE CONFIGURACIÓN.................................................... 123 
4.1. Proyecto 1: Introducción al sistema operativo Unix ........................... 123 
4.2. Proyecto 2: Utilerías de Unix ................................................................. 124 
4.3. Proyecto 3: Llamadas al sistema .......................................................... 124 
4.4. Proyecto 4: Administración básica de Unix ......................................... 125 
4.5. Proyecto 5: Seguridad en Unix.............................................................. 125 
4.6. Proyecto 6: Programación con C/C++ .................................................. 127 
CONCLUSIONES ............................................................................................... 129 
BIBLIOGRAFÍA
 
.................................................................................................. 133 
 
 
 
 
V 
 
 
Introducción 
El sistema operativo Unix ha sido desde sus inicios un proyecto bastante 
ambicioso. Las distintas implementaciones o “sabores” realizaron mejoras y 
actualizaciones a su diseño, para obtener de esta manera un sistema lo 
mayormente estable posible. Esta característica le ha otorgado a Unix la categoría 
de sistema “seguro” en términos de las posibilidades que éste ofrece y que 
podemos encontrar desde el sector académico hasta el empresarial en donde el 
valor de los activos se convierte en un issue muy importante. 
La UNAM, a través de la Dirección General de Servicios de Cómputo 
Académico (DGSCA) es hoy día la institución más importante de México en 
materia de Cómputo de Alto Rendimiento. Además de ofrecer servicios orientados 
a este último rubro es también un importante centro de investigación y docencia. 
Es por ello que su necesidad de la capacitación de recursos humanos para cubrir 
la demanda e interés de la comunidad científica, se convierta en una prioridad. El 
plan de becarios ofrecido y del cual tuve participación se convierte en una 
excelente oportunidad en la realización de actividades científicas y tecnológicas 
relacionadas al supercómputo. 
El presente trabajo es una compilación de temas basados en las habilidades 
necesarias y conocimientos que debe poseer un Administrador de Sistemas Unix. 
No obstante, el enfoque aquí presentado no es el de ser una guía completa de 
referencia, sino más bien es la de “tocar superficie” en cuanto a todos los tópicos 
que rodean a la Administración de Sistemas Unix y al Cómputo de Alto 
Rendimiento que conformaron la base de mi especialización. Esto no significa que 
no abarque lo suficiente o no cumpla con las expectativas, de hecho, retomo 
varios temas avanzados que bien valdría la pena considerarse como parte de un 
curso más avanzado u alguna otra especialización.
XI 
 
XII INTRODUCCIÓN 
Mi objetivo es la de fomentar el interés de aquella persona que lea este trabajo 
a indagar más sobre los temas que aquí se presentan y mirar otras opciones como 
Unix y sus derivados tales como Linux, que no son tan viejas como se creería y 
ofrecen mayores capacidades que otros sistemas operativos. 
Cada capítulo conforma la estructura en la que se basa este trabajo: 
Administración de Sistemas, Programación de Sistemas, Cómputo de Alto 
Rendimiento y Casos Prácticos de Configuración. A si mismo, cada capítulo esta 
subdividido por temas que surgen como parte del temario original de la 
especialización antes mencionada. 
En el capítulo 1 se hace una introducción sobre aquellos fundamentos que 
influyen sobre la filosofía que ha mantenido Unix a lo largo de los años. Estos 
elementos han originado la inclinación de la balanza hacia ambientes en los que la 
prioridad es mantener una estabilidad en cuanto a seguridad y operabilidad. El 
hecho de ajustar el sistema a las necesidades de cualquier organización o 
escenario y que no sea lo contrario, es decir, que la organización sea la que se 
ajuste al sistema, sobresale sobre cualquier otro sistema operativo. Las llamadas 
al sistema, la programación en shell y el sin fin de comandos que el sistema Unix 
ofrece permiten esta orientación por cubrir las necesidades de cualquier 
organización. 
En el capítulo 2 se hace mención de las herramientas auxiliares existentes en 
cualquier ambiente Unix necesarias para llevar a cabo una adecuada 
administración y desarrollo de proyectos profesionales de cualquier ámbito. El 
conocimiento y uso de estas herramientas se convierten en obligatorios por parte 
del administrador ya que facilitan la realización de programas para la 
automatización de ciertas tareas que requieren de una funcionalidad especial en el 
sistema, o como parte de requerimientos específicos de proyectos de los usuarios. 
No pasando por hecho de que la programación en C es la base sobre la cual esta 
programado en su mayoría el sistema Unix. 
El capítulo 3 es, quizás, uno de los más importantes debido al papel que 
desempeña el cómputo de alto rendimientocomo ciencia aplicativa a problemas 
complejos. Se abre entonces una puerta para la computación distribuida y las 
 
 
nuevas tecnologías que surgen para cubrir las necesidades de recursos 
computacionales a gran escala. Las características avanzadas que se mencionan 
en este capítulo conforman parte esencial en la administración de equipos 
especializados en el que los recursos son variables importantes en el rendimiento 
y desempeño del sistema. Estos tópicos establecen los factores influyentes en el 
comportamiento del sistema en términos de una arquitectura especializada capaz 
de proporcionar servicios hacia usuarios con necesidades igual de especializadas. 
El capítulo 4 mantiene una descripción de aquellos proyectos realizados 
durante los diferentes cursos tomados. Cada caso práctico es un proyecto distinto 
que permite evaluar la parte aplicada y entendimiento de los diferentes cursos de 
la especialización, manteniendo siempre estrecha relación entre investigación e 
inventiva para la resolución de problemas típicos en ambientes reales de 
administración de equipos de alto rendimiento. Al final de este trabajo se podrá 
encontrar parte del código y archivos utilizados de forma libre durante esta 
especialización con la finalidad de recomendaciones para futuras modificaciones y 
actualizaciones hacia estos trabajos. 
 
 
 
XIII 
 
Capítulo 1 
Administración de Sistemas 
1.1. Introducción al Sistema Operativo Unix 
El sistema Unix ha tenido una historia y evolución fascinantes. Iniciado como 
un proyecto de investigación por un puñado de personas, se ha convertido hoy en 
día en un sistema operativo de alta demanda en los sectores empresariales y 
académicos. 
Unix fue creado hace ya más de 30 años y es el único sistema operativo que 
continúa ampliamente utilizado hasta nuestros días. Unix es universal, operado 
por una gran variedad de personas para diferentes tipos de propósitos. 
 
1.1.1. Antecedentes 
Unix fue diseñado por representantes de AT&T en el desarrollo de MULTICS, 
en el MIT, a finales de los sesenta. MULTICS, un sistema desarrollado por varias 
compañías entre las que destacan AT&T y General Electric, ha influido en gran 
medida el diseño de los sistemas modernos. Como uno de los primeros sistemas 
de tiempo compartido, MULTICS incorporaba la mayoría de las ideas que 
aparecen en los sistemas operativos actuales. Desgraciadamente MULTICS 
resultó mucho más complejo y pesado de lo que era necesario, lo cual lo hizo 
inviable. A finales de los sesenta, AT&T abandonó el proyecto MULTICS. Sin 
embargo, Ken Thompson y Dennis Ritchie, quienes habían participado en el
1 
 
2 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
proyecto, decidieron construir el sistema basado en un diseño que ellos mismos 
elaboraron junto con Rudd Canaday. Luego se les unieron otros informáticos 
capaces como J. F. Ossanna y R. Morris. Adquirieron una DEC PDP-7 de desecho 
y se pusieron a desarrollar. Como muchos proyectos interesantes, éste empezó 
con la creación de un juego: Thompson y Ritchie desarrollaron un juego de Viaje 
espacial para la PDP-7. Luego crearon una nueva estructura de sistemas de 
archivos y nuevo software. Le añadieron un entorno de procesos con planificación 
y completaron un sistema operativo rudimentario. Al resultado se le nombró UNIX 
pues era una simplificación de MULTICS. La primera versión de Unix se codificó 
en lenguaje ensamblador. Un año después Ritchie instaló el sistema en una DEC 
PDP-11. 
Luego, dentro de ese mismo grupo se desarrolló el lenguaje de programación 
C, proyecto que iniciaron en 1971. Casi inmediatamente se usó el lenguaje C para 
continuar el desarrollo de Unix. Así se rompió la tradición de escribir sistemas 
operativos en lenguaje ensamblador. Sólo algunas subrutinas de alto rendimiento 
dentro del núcleo del sistema están escritas en ensamblador. Esto permitió hacer 
a Unix muy portable y ganar popularidad. 
Muchos integrantes del equipo de los Laboratorios Bell se interesaron en Unix 
y después de dos o tres años, estaba corriendo en varias máquinas diferentes. El 
sistema Unix se consolidó con el desarrollo de las PDP-11 superiores, como la 
PDP-11/45 y la PDP-11/70, a mediados de los setenta. AT&T distribuyó copias de 
Unix a universidades de todo el mundo, lo cual propició más innovaciones y la 
Universidad de California en Berkeley desarrolló su propia implementación: BSD 
(Berkeley Software Distribution), la cual es ampliamente utilizada. Al tiempo que 
AT&T fortalecía y optimizaba Unix con un enfoque comercial, la implementación 
BSD dominaba en los ambientes universitarios y técnicos. Las versiones BSD 
fueron la plataforma dominante para experimentación en conceptos de red. El 
primer experimento importante en redes de área extensa, el ARPANET, fue 
orientado a Unix. 
 
 
1.1. INTRODUCCIÓN AL SISTEMA OPERATIVO UNIX 3 
 
Figura 1.1: Desarrollo de la distribución Berkeley Software Distribution 
 
A finales de los setenta, AT&T introdujo un nuevo esquema de denominación 
para su versión del sistema Unix. Hasta entonces, las revisiones importantes se 
referían a las nuevas versiones que emergían del área de investigación de los 
laboratorios Bell. AT&T cambió su numeración a sistema III y sistema V, 
descendientes directas de la edición séptima. El sistema V sustituyó al sistema III 
a mediados de los ochenta. El sistema IV se utilizó dentro de los laboratorios Bell, 
 
 
4 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
pero se consideró un producto de transición. AT&T normalizó el nombre de 
sistema V y sus versiones recientes se denominan sistema V revisión 3 y sistema 
V revisión 4, que con frecuencia se abrevian como SVR3 y SVR4, 
respectivamente. 
 
Figura 1.2: Desarrollo de la distribución de System V 
 
Al incrementarse la velocidad y potencia de las microcomputadoras y con la 
disminución de su costo, estas pudieron soportar el sistema Unix. Cuando los 
sistemas SVR3 y SVR4 estuvieron disponibles en máquinas de arquitectura PC-
AT a finales de los ochenta, creció mucho la popularidad de Unix. Otro paso 
importante fué la aparición del sistema de ventanas X. X fue un prototipo de un 
proyecto de investigación en el MIT a mediados de los ochenta, luego lo adaptaron 
 
 
1.1. INTRODUCCIÓN AL SISTEMA OPERATIVO UNIX 5 
algunas compañías, lo mejoraron y estabilizaron para poder hacerlo comercial. 
Actualmente, la mayoría de los paquetes de aplicaciones comerciales para Unix 
corren bajo el entorno X. 
En las últimas revisiones de SVR3 se inició una mezcla de las tres variantes 
principales del sistema Unix. Como resultado de acuerdos entre AT&T, Sun 
Microsystems y Microsoft, los sistemas BSD y XENIX están fundidos dentro del 
sistema V. 
Al tiempo de la fusión entre BSD y el sistema V, otros vendedores de sistemas 
Unix se preocupaban de que un sistema mixto diera predominio a AT&T y Sun 
Microsystems en el mercado. Estos vendedores, principalmente Hewlett-Packard y 
DEC, formaron un consorcio para desarrollar una variante que no estuviera bajo el 
control de AT&T o Sun. Este grupo, llamado Open Software Foundation (OSF), ha 
desarrollado varios productos importantes para el sistema Unix, el principal de 
ellos, la interfaz de usuario Motif. 
 
Figura 1.3: Genealogía del sistema Unix 
 
Unix y la mayoría de los sistemas que se ejecutan en él, están escritos en 
lenguaje C y han demostrado que un sistema operativo interactivo y poderoso, no 
necesariamente es grande y caro, ya sea en equipo o en cantidad de código. En 
 
 
6 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
palabrasde sus creadores, el objetivo es que, desde el punto de vista del usuario, 
sea simple y fácil de usar. 
 
1.1.2. La creciente importancia de Unix 
Durante los últimos años el sistema operativo Unix se ha consolidado como un 
sistema operativo potente, flexible y versátil. Sirve como un sistema operativo 
multiplataforma, incluyendo desde computadoras personales, workstation y 
supercomputadoras. El éxito del sistema Unix se debe a muchos factores. Entre 
ellos está la portabilidad a un gran abanico de máquinas, su adaptabilidad y 
simplicidad, el amplio rango de tareas que se pueden realizar, su naturaleza 
multiusuario, multitarea y su adecuación a las redes. 
El código fuente del sistema Unix, y no el código ejecutable, ha estado 
disponible a usuarios y programadores. A causa de esto, mucha gente ha sido 
capaz de adaptar el sistema Unix de formas diferentes. Este carácter abierto ha 
conducido a la introducción de un amplio rango de características nuevas y de 
versiones personalizadas que se ajustan a necesidades especiales. A las 
personas que han desarrollado esta adaptación del sistema Unix les ha resultado 
fácil porque el código correspondiente es sencillo, modular y compacto. Esto ha 
fomentado la evolución del sistema Unix, haciendo posible la fusión de las 
capacidades desarrolladas por varias variantes del sistema Unix necesarias para 
soportar los entornos de computación de hoy en un sistema operativo único. 
El sistema Unix proporciona a los usuarios diferentes herramientas y utilidades 
que se pueden utilizar para realizar una gran variedad de trabajos. Algunas de 
estas herramientas son órdenes simples que se pueden utilizar para llevar a cabo 
tareas específicas. Otras herramientas y utilidades son realmente pequeños 
lenguajes de programación que se pueden utilizar para construir scripts que 
resuelven sus propios problemas. Lo más importante es que las herramientas 
están diseñadas para funcionar juntas, como partes de una máquina o bloques de 
construcción. El sistema operativo Unix puede ser utilizado por computadoras con 
muchos usuarios o con un único usuario, ya que es un sistema multiusuario. 
 
 
1.1. INTRODUCCIÓN AL SISTEMA OPERATIVO UNIX 7 
También es un sistema multitarea, ya que un único usuario puede llevar a cabo 
más de una tarea al mismo tiempo. El sistema Unix proporciona un entorno 
excelente para redes. Ofrece programas y facilidades que proporcionan los 
servicios necesarios para construir aplicaciones basadas en red, base de la 
computación distribuida. En la computación en red la información y su 
procesamiento es compartida entre diferentes computadoras de la red. 
El sistema Unix es mucho más fácil de portar a nuevas máquinas que otros 
sistemas operativos. Esto es, se necesita menos trabajo para adaptarlo y correrlo 
sobre una máquina nueva. La portabilidad del sistema Unix es consecuencia 
directa de estar escrito casi completamente en un lenguaje de alto nivel, el 
lenguaje C. La portabilidad a un amplio rango de computadoras hace posible 
mover las aplicaciones de un sistema a otro. 
 
1.1.3. ¿Qué es Unix? 
Para comprender cómo opera el sistema Unix, se necesita entender su 
estructura. El sistema operativo Unix lo forman varios componentes principales. 
Entre estos componentes están el núcleo, el shell, el sistema de archivos y los 
comandos (o programas de usuario). 
 
Figura 1.4: Estructura general de Unix 
 
 
8 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
Aplicaciones 
Se pueden utilizar aplicaciones construidas utilizando comandos, herramientas 
y programas del sistema Unix. Los programas de aplicación llevan a cabo 
diferentes tipos de tareas. Algunas realizan funciones generales que pueden ser 
utilizadas por una amplia variedad de usuarios. Estas se conocen como 
aplicaciones horizontales e incluyen programas tales como procesadores de texto, 
compiladores, sistemas de gestión de base de datos, hojas de cálculo, programas 
de análisis estadístico y programas de comunicaciones, entre otros. Otras son 
específicas de la industria y se conocen como aplicaciones verticales. Ejemplos de 
ellas serían los paquetes de software utilizados para la administración de un 
banco, centro comercial, etc. Es posible que el programador cree sus propias 
aplicaciones mediante lenguajes como C, C++, fortran, Java, ensamblador, etc. 
Existe un gran número de bibliotecas que permiten reforzar las aplicaciones que el 
programador vaya creando y que sólo necesita incluir en un programa. La ventaja 
es que todos los programas que realicen pueden ser transportados a otros 
sistemas y sólo bastará compilar de nuevo y ejecutar. 
Utilerías 
El sistema Unix contiene varios cientos de utilerías o programas de usuario. 
Los comandos también se conocen como herramientas, pues pueden utilizarse 
independientemente o en forma conjunta de diversas maneras para llevar a cabo 
tareas útiles. Estas utilerías se pueden ejecutar invocándolas por su nombre a 
través del shell, por esta razón es por lo que se les conocen como comandos o 
instrucciones del sistema. 
Se pueden realizar muchas tareas automatizadas utilizando las utilerías 
estándar suministradas con el sistema Unix. Hay utilerías para edición y 
procesamiento de texto, para manipulación de información, comunicaciones 
electrónicas y para redes, para realizar cálculos, para desarrollar programas de 
computadoras, para la administración del sistema, y muchos otros propósitos. 
 
 
1.1. INTRODUCCIÓN AL SISTEMA OPERATIVO UNIX 9 
El sistema de archivos 
La unidad básica utilizada para organizar la información en el sistema Unix se 
denomina archivo. El sistema de archivos de Unix proporciona un método lógico 
para organizar, almacenar, recuperar, manipular y gestionar la información. Los 
archivos están organizados en un sistema de archivos jerárquico, agrupados en 
directorios. Una característica de simplificación importante del sistema Unix es la 
forma general de tratamiento de los archivos. Por ejemplo, los dispositivos 
físicos se tratan como archivos; esto permite que los comandos operen sobre 
archivos ordinarios y sobre dispositivos físicos. 
 
Figura 1.5: El sistema de archivos jerárquico 
El shell 
El shell lee los comandos y los interpreta como peticiones de ejecución de un 
programa o programas, lo que realiza posteriormente. Debido a este papel, el shell 
se denomina intérprete de comandos. Además de ser un intérprete, el shell 
también es un lenguaje de programación. Como lenguaje de programación permite 
controlar como y cuando se llevan a cabo la ejecución de los comandos. 
 
Figura 1.6: El intérprete de comandos shell 
 
 
10 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
El kernel 
El núcleo o kernel es la parte del sistema operativo que interactúa 
directamente con el hardware de la computadora. Proporciona conjuntos de 
servicios que pueden ser utilizados por programas, aislando a estos programas del 
hardware subyacente. Las funciones principales del núcleo son la administración 
de la memoria, el control de acceso a la computadora, el mantenimiento del 
sistema de archivos, el manejo de las interrupciones (señales que finalizan la 
ejecución), el manejo de errores, la realización de los servicios de entrada y salida 
(que permite a las computadoras interactuar con terminales, dispositivos de 
almacenamiento e impresoras) y la asignación de recursos de la computadora 
entre los usuarios. 
Los programas interactúan con el kernel a través de aproximadamente 100 
llamadas al sistema. Las llamadas al sistema dicen al núcleo que lleve a cabo 
diferentes tareas para el programa, tales como abrir un archivo, escribir en un 
archivo,obtener información sobre un archivo, ejecutar un programa, terminar un 
proceso, cambiar la prioridad de un proceso u obtener la hora y la fecha. 
 
1.1.4. La filosofía de Unix 
Conforme ha ido evolucionando, el sistema Unix ha desarrollado un enfoque 
característico y consistente que se denomina a veces como filosofía Unix. Esta 
filosofía ha influido profundamente sobre la estructura del sistema y la forma de 
operar. Tener presente esta filosofía ayuda a entender la forma en que el sistema 
Unix trata los archivos y programas, los tipos de comandos y la manera de 
utilizarlos para llevar a cabo una tarea. La filosofía Unix se basa en la idea de que 
un sistema informático potente y complejo debe ser simple, general y extensible 
y que esto proporciona importantes beneficios tanto para los usuarios como para 
los que desarrollan programas. Este planteamiento queda especialmente reflejado 
en la forma en que el sistema Unix trata los archivos y en la manera de enfocar a 
sus herramientas. 
 
 
1.1. INTRODUCCIÓN AL SISTEMA OPERATIVO UNIX 11 
El sistema Unix contempla los archivos de una manera extremadamente 
simple y general dentro de un modelo único. Ve de la misma manera a los 
directorios, archivos ordinarios, los dispositivos, tales como impresoras y discos, y 
los teclados y terminales de pantalla. El sistema de archivos oculta al usuario 
detalles del hardware subyacente. Esta simplicidad le permite concentrarse sobre 
lo que realmente le interesa: los datos y la información que contiene el archivo. 
En una red de área local, el concepto de sistemas de archivos remoto le ahorra la 
necesidad de conocer sobre que máquina están sus archivos. Una característica 
única del sistema Unix es la gran colección de herramientas que proporciona. Esta 
es otra expresión de la filosofía básica. Estas herramientas son pequeños 
programas, cada uno diseñado para realizar una función específica, y todos 
diseñados para operar juntos. En lugar de pocos programas grandes, cada uno 
tratando de realizar muchas cosas, el sistema Unix proporciona muchas 
herramientas simples que pueden combinarse para realizar un amplio rango de 
cosas. Algunas herramientas llevan a cabo una tarea básica y tienen nombres 
mnemotécnicos. Otras, como awk son lenguajes de programación y por tanto con 
sintaxis complicadas. 
El énfasis sobre herramientas modulares es soportado por una de las 
características más típicas del sistema Unix, el pipe. Esta característica, de 
importancia tanto para los usuarios como para los programadores, es un 
mecanismo general que permite utilizar la salida de un comando como entrada a 
otro. Se trata del entubamiento utilizado para unir herramientas que van a realizar 
la tarea que se necesita. El sistema Unix trata la entrada y salida de una forma 
simple y consistente, utilizando una entrada y salida estándar. 
 
1.1.5. Edición de texto en Unix 
Un editor es una utilidad ofrecida por la mayoría de los sistemas operativos 
que nos permite modificar el contenido de un archivo. Cuando hablamos de 
editores o programas de edición, normalmente nos referimos a editores de texto. 
Unix cuenta con varios editores de texto, entre los que destacan por su uso: 
 
 
12 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
 ed 
 vi 
 emacs 
 
Existen básicamente dos tipos de editores en Unix: editores de línea y editores 
de pantalla. En los primeros, el contenido de un archivo se muestra y edita línea 
por línea, en tanto que los segundos es posible editar texto en una pantalla 
completa, por lo que uno puede desplazarse libremente por todo el archivo. El 
editor ed es un ejemplo de un editor de línea, mientras que vi ejemplifica los 
editores de pantalla. El editor de texto más ampliamente utilizado en sistemas Unix 
es el editor de pantalla vi. 
 
1.1.6. Introducción a la programación en shell 
La palabra shell en el sistema Unix hace referencia a diferentes cosas. En 
primer lugar, el shell hace referencia al intérprete de comandos que es la Interfaz 
de usuario principal en los sistemas Unix. Es el shell quien atiende lo que se teclea 
y quien ejecuta estos comandos. Un segundo uso de la palabra tiene que ver con 
el hecho de que el shell incluye un lenguaje de programación completo. Esto es lo 
que se conoce como lenguaje de programación del shell o el lenguaje del shell. En 
pocas palabras, los usuarios hablan de programas escritos en shell. Un programa 
escrito en shell, o en lenguaje de programación shell, se denomina script de shell 
o programa de shell. El lenguaje de shell es un lenguaje de programación de alto 
nivel, que permite ejecutar secuencias de comandos para seleccionar operaciones 
alternativas dependientes del resultado de pruebas lógicas y para repetir acciones 
del programa. Un script puede tomar la entrada de un usuario (vía entrada 
estándar), de un archivo o de la salida de otro comando. Es útil para crear pilas de 
comandos y automatizar ciertas tareas. 
A grandes rasgos, podemos decir que el shell tiene las siguientes funciones: 
 Uso interactivo: El sistema ejecuta comandos tecleados desde el prompt. 
 Personalización de una sesión de trabajo: El ambiente de trabajo, como la 
definición del directorio de trabajo por el usuario, la configuración de la terminal, 
etc., es controlado por variables definidas por el shell. 
 
 
1.1. INTRODUCCIÓN AL SISTEMA OPERATIVO UNIX 13 
 Programación: Permite la creación y ejecución de scripts. 
 
Algunas de las aplicaciones de los scripts son: 
 Instalación de software 
 Procedimientos de respaldo 
 Personalización del ambiente de trabajo 
 
Tradicionalmente Unix maneja 3 shells: Bourne shell, Korn shell y C shell. 
Cada shell tiene su propio lenguaje de programación de alto nivel utilizado para 
ejecutar secuencias de comandos, seleccionar entre operaciones alternas, realizar 
operaciones lógicas y acciones repetitivas. El Bourne shell y el Korn shell tienen 
sintaxis similares, mientras que el C shell tiene una sintaxis similar a la del 
lenguaje C y ofrece otras capacidades. 
Shell Autor Características Comando Prompt 
Bourne Shell Steve 
Bourne 
 Shell original del Unix de AT&T 
 Es el shell estándar de Unix 
 No permite historia de comandos 
 Permite la redirección de Entrada/Salida
 Permite el uso de metacaracteres
(comodines) para la abreviación de los
nombres de archivos 
 Posee un conjunto de comandos
propios para la programación 
 Usado por todos los scripts de
administración del sistema 
 
/bin/sh $ 
Korn Shell David Korn Compatible con Bourne Shell 
 Incluye operaciones aritméticas,
arreglos y manipulación de cadenas 
 Permite historia de comandos (acceso a
comandos ya tecleados) 
 Usa un mayor número de
metacaracteres 
 Permite utilizar arreglos y expresiones
aritméticas 
 Permite usar alias (abreviación de
comandos) 
/bin/ksh $ 
C Shell Bill Joy Diseñado en la Universidad de
California, en Berkeley 
 /bin/csh 
 Redireccionamiento de E/S 
 Incorpora alias e historia de comandos 
% 
 
 
14 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
 Sintaxis similar a la del lenguaje C 
 
Tabla 1.1: Tabla comparativa de los shells de Unix 
Variables 
Una variable es un nombre que se refiere a un área de almacenamiento 
temporal en la memoria del sistema. La programación en shell utiliza dos tipos de 
variables: 
 Variables del shell 
 Variables de ambiente 
 
La diferencia es que las variables del shell son como variables locales, es decir 
sólo son conocidas por el shell que las genera, en tanto las variables de ambiente 
son como variables globales, que pueden ser heredadas a procesos hijos, es 
decir, son reconocidas por cualquier programa o script. 
 
Variable SignificadoHOME=dir Guarda el directorio home del usuario 
IFS=caracteres Separadores de campos internos (espacio, tabuladores, salto de línea,
etc.) 
MAIL=archivo Archivo en dónde el usuario recibe su correo 
MAILCHECK=n Frecuencia (en segundos) con que el shell verifica si hay mensajes de
correo para el usuario 
PATH=dirs Almacena uno o más directorios, separados por :, en donde se buscará
un programa cuando este se ejecute 
PS1=cadena Almacena el prompt primario (generalmente, $) 
PS2=cadena Almacena el prompt secundario (generalmente, <) 
SHELL=archivo Nombre del shell utilizado 
TERM=cadena Tipo de terminal que se está utilizando 
 
Tabla 1.2: Algunas variables del shell en Unix 
 
 
 
 
 
 
1.2. UTILERÍAS DE UNIX 15 
1.2. Utilerías de Unix 
Una de las características más valiosas del sistema Unix es el conjunto tan 
rico de comandos que proporciona. Esto se debe a que desde sus inicios ha 
conservado la filosofía que lo caracteriza: 
El potencial del sistema operativo radica más en la relación de los programas que en 
los programas mismos. 
Lo que significa que Unix posee los medios necesarios para integrar distintos 
comandos, aprovechando sus capacidades conjuntas para llevar a cabo tareas 
más complejas de una manera relativamente más sencilla. De hecho, en Unix son 
pocos los comandos que realizan más de una función en particular. 
 
1.2.1. Conceptos asociados al manejo de utilerías 
Operaciones de Entrada y Salida 
El sistema de E/S (Entrada y Salida) de Unix se divide en 2 sistemas 
complementarios: el sistema de E/S por bloques y el sistema de E/S por 
caracteres. El primero se emplea para el manejo de discos y cintas magnéticas, 
mientras que el segundo se usa para atender terminales e impresoras. 
En general, Unix emplea programas especiales (escritos en C) conocidos 
como controladores para atender a cada familia de dispositivos de E/S. Los 
procesos se comunican con los dispositivos mediante llamadas a su controlador. 
Además, desde el punto de vista de los procesos, los controladores aparecen 
como si fueran archivos en los que se lee o escribe, lográndose así una 
homogeneidad y elegancia en el diseño. 
Las llamadas del sistema de más bajo nivel hacen referencia a un flujo de 
entrada y salida a través de un número de identificación llamado descriptor de 
archivo1. 
Por convención, cada proceso Unix tiene asignados 3 canales de E/S: 
 
1 File descriptor o simplemente fd 
 
 
16 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
 Entrada estándar (fd=0), generalmente asociada con el teclado. 
 Salida estándar (fd=1), generalmente asociada con la pantalla. 
 Salida de errores estándar (fd=2), generalmente asociada con la pantalla. 
 
Pipes 
Un pipe es la manera de conectar la salida de un programa o comando a la 
entrada de otro programa sin hacer uso visible de un archivo temporal. Un pipe no 
es más que un mecanismo de almacenamiento temporal donde la salida de un 
comando es guardada para poder ser utilizada como la entrada de otro comando. 
Los pipes son usados para usar más de dos comandos (múltiples comandos) 
desde la misma línea de comandos. 
 
Figura 1.7: Entubamiento en Unix 
Filtros 
Muchos de los programas en Unix están diseñados como filtros, es decir, 
aceptan los datos de un dispositivo conocido como entrada y envían sus 
resultados a otro dispositivo conocido como salida. Un programa que opera de 
esta manera puede ser utilizado como filtro. 
Redireccionamiento 
Un redireccionamiento es una característica de Unix que nos permite cambiar 
el dispositivo asociado ya sea a la salida estándar o la entrada estándar de un 
programa. Por ejemplo, si se redirecciona la salida estándar de un comando hacia 
un archivo, lo que el programa imprima no aparecerá en la pantalla, sino que se 
escribiría al archivo que le indiquemos. 
 
1.2.2. Búsqueda de patrones en archivos 
Entre las herramientas más útiles del sistema Unix están aquellas que buscan 
palabras en archivos: grep, fgrep y egrep. Estos comandos buscan líneas que 
 
 
1.2. UTILERÍAS DE UNIX 17 
contengan texto que identifiquen a un objetivo o patrón que se especifica. Se 
pueden utilizar para extraer información de los archivos, buscar líneas que se 
relacionen con un elemento particular y para localizar archivos que contengan una 
palabra clave en específico. 
Los tres comandos descritos anteriormente son muy similares. Los tres 
imprimen las líneas que identifican a un objetivo. Se diferencian en la forma de 
especificar los objetivos de búsqueda. 
 grep: Es la más utilizada de las tres. Proporciona la posibilidad de buscar 
palabras, o patrones que contengan comodines y otros elementos de 
expresiones regulares. 
 fgrep: No permite expresiones regulares, pero permite buscar múltiples 
objetivos desde un archivo. 
 egrep: Toma un conjunto más rico de expresiones regulares, permitiendo 
además búsquedas de objetivos múltiples. 
 
Expresiones regulares 
Una expresión regular es la forma compacta de especificar un modelo general 
de caracteres. Dentro de una expresión regular determinados símbolos tienen 
significados especiales. 
c Cualquier carácter no especial c concuerda a sí mismo 
\c Cancela cualquier significado especial del carácter c 
^ Inicio de Línea 
$ Fin de Línea 
. Cualquier carácter individual 
[...] Cualquiera de los caracteres en ...; los rangos tipo a-z, A-Z y 0-9 son legales 
[^...] Cualquier carácter individual que no se encuentre en ...; los rangos son legales
r* Cero o más ocurrencias de r 
r+ Una o más recurrencias de r (solo egrep) 
r? Cero o una recurrencia de r (solo egrep) 
r1r2 r1 seguida de r2 
r1|r2 r1 o r2 (solo egrep) 
 
Tabla 1.3: Expresiones regulares en Unix 
 
 
18 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
Existen muchas áreas en Unix donde se puede usar una expresión regular en 
lugar de un modelo exacto, sin embargo los detalles en cuanto a que expresiones 
regulares son aceptables varían de un programa a otro. 
Partes de una expresión regular: 
 Posición 
 Conjunto de caracteres. 
 Modificadores 
Tipos de expresiones regulares: 
 Simples: vi, sed, grep, more, ed, expr, lex. 
 Extendidas: awk, egrep. 
 
1.2.3. Operación con columnas y campos 
Muchos archivos contienen información organizada en términos de posiciones 
dentro de una línea. Entre ellos están las tablas, que organizan la información en 
columnas, y los archivos que constan de líneas o registros formados por campos. 
El sistema Unix incluye varias herramientas diseñadas específicamente para 
operar con archivos organizados en columnas o campos. 
 cut: Permite seleccionar columnas o campos particulares en archivos. 
 paste: Crea nuevas tablas juntando columnas o campos de archivos 
existentes. 
 join: Une la información de dos archivos para crear un nuevo archivo que 
combina la información de ambos. 
 
1.2.4. Herramientas para la ordenación 
Muchas áreas requieren el uso de datos ordenados, y la ordenación de 
información en archivos y la operación sobre archivos ordenados son algunas de 
las tareas comunes de una computadora. La información se ordena en un archivo 
para facilitar la lectura, para facilitar la comparación de dos listas, o para preparar 
la información a un comando que necesita las entradas ordenadas. La información 
se puede ordenar alfabética o numéricamente, por líneas o en función de un 
campo o columna en particular. 
 
 
1.2. UTILERÍAS DE UNIX 19 
Uno de los comandos más útiles del sistema Unix es sort, una herramienta 
potente de propósito general que sirve para ordenar la información. 
 sort: Es un comando que nos permite ordenar el contenido de un archivo de 
acuerdo a un criterio alfabético o numérico, ascendente o descendente,y de 
acuerdo a cualquier campo de la línea, que nosotros especifiquemos. Los datos 
ordenados son impresos en la salida estándar. 
 uniq: Es un comando que sirve para identificar líneas que estén repetidas en 
un archivo de texto. Para que funcione correctamente, las líneas iguales tienen 
que estar juntas, es decir, es necesario primero ordenar el archivo utilizando 
sort. 
 
1.2.5. Comparación de archivos 
Con frecuencia se necesita ver si dos archivos tienen diferente contenido y 
listar las diferencias en caso afirmativo. También resulta útil la posibilidad de ver si 
archivos que tienen el mismo nombre en directorios diferentes, son simplemente 
copias del mismo archivo o si se trata de archivos diferentes. 
 cmp, comm y diff: Informan si dos archivos son el mismo o diferentes y 
proporcionan información de dónde están o cómo son las diferencias. Se 
distinguen por la cantidad de información que proporcionan y la forma de 
visualizarla. 
 dircmp: Dice si los archivos de dos directorios son el mismo o diferentes. 
 
1.2.6. Cambio de información en archivos 
Los editores como vi o emacs son herramientas de propósito general que se 
utilizan para crear y modificar archivos de texto. Están diseñados para uso 
interactivo. 
A veces, se necesita modificar el contenido de un archivo añadiendo, 
eliminando o cambiando su información, pero no es necesario (o no se puede) 
hacerlo de forma interactiva. El sistema Unix proporciona diferentes herramientas 
para la edición no interactiva tales como tr y sed. 
 tr: Es un ejemplo de utilería del sistema Unix diseñada para realizar una 
función básica: cambia o traduce caracteres procedentes de la entrada de 
acuerdo a reglas que se le especifican. 
 sed: Proporciona un amplio rango de capacidades de edición, incluyendo casi 
todas las funciones de edición que se encuentran en los editores ed, vi o 
emacs, pero en forma no interactiva 
 
 
20 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
Sed 
ed es un editor muy poderoso (aunque un tanto hostil con el usuario), pero 
tiene un par de desventajas. La primera es que ed necesita cargar todo el archivo 
en la memoria simultáneamente, por lo que no sirve para archivos 
extremadamente largos. La segunda es que, aunque es posible, no es muy fácil 
especificarle a ed una secuencia de comandos que deben ejecutar 
automáticamente. Para ello existe sed, que significa Stream EDitor, es decir, 
editor de flujo. Los comandos de sed son similares a los de ed, pero con una 
diferencia principal: sed toma su entrada de un archivo, lo edita, pero no modifica 
el contenido del archivo original, sino que deja el resultado en la salida estándar. 
sed también puede tomar los datos de entrada de la entrada estándar, por lo que 
cae dentro de la clasificación de filtros. 
Debido a que es un editor de flujo, sed no es un editor interactivo, sino que 
todos los comandos a ejecutar son proporcionados desde el principio. 
Todos los comandos de sed son compilados antes de comenzar la ejecución. 
Una vez compilada, se extrae una línea de entrada y se copia en un espacio 
reservado llamado espacio de patrones. Sobre esta línea se aplican todos los 
comandos que le correspondan. Finalmente, la línea, posiblemente modificada, es 
extraída del espacio de patrones y colocada en la salida estándar, al tiempo que 
se lee la siguiente línea de entrada y se coloca en el espacio de patrones, para 
repetir el proceso hasta que las líneas de entrada se agoten. Algunos comandos 
pueden hacer uso del espacio de retención (hold space), que es una zona de 
almacenamiento temporal donde se pueden guardar algunas cosas para ser 
usadas posteriormente. 
 
 
1.2. UTILERÍAS DE UNIX 21 
 
Figura 1.8: Forma de funcionamiento del editor sed 
 
1.2.7. Monitorización de la entrada y salida 
Unix proporciona una herramienta que se puede utilizar para redireccionar la 
salida de un comando a un archivo y a la salida estándar. 
 tee: Descompone la entrada (estándar) en dos o más flujos de salida; uno se 
envía a la salida estándar, los otros se envían a los archivos que se 
especifiquen. Se utiliza frecuentemente para salvar un paso intermedio en una 
secuencia de comandos ejecutada en una segmentación encauzada, o para 
monitorizar un comando y asegurarse que hace lo que se quiere. 
 
1.2.8. Herramientas para visualizar fechas y hora 
El sistema Unix proporciona dos utilidades para obtener información sobre la 
fecha y hora. 
 cal: Imprime un calendario de cualquier mes o año. 
 date: Imprime la hora y fecha actuales del sistema en diferentes formatos 
 
1.2.9. awk 
awk es el comando más complejo de Unix en general, sobre todo porque no es 
un comando que realice una sola tarea, sino que es un lenguaje de programación 
hecho y derecho, pero con facilidades para descomposición de líneas y 
reconocimiento de patrones, proporcionando también capacidad de realizar 
 
 
22 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
cálculos aritméticos, y todo ello con una estructura sumamente similar al lenguaje 
C. 
awk esta especialmente diseñado para trabajar con archivos estructurados y 
patrones de texto. Dispone de características internas para descomponer líneas 
de entrada en campos y comparar estos campos con patrones que se 
especifiquen. Debido a estas posibilidades, resulta particularmente apropiado para 
trabajar con archivos que contienen información estructurada en campos, como 
inventarios, listas de correo y otros archivos de bases de datos simples. Muchos 
programas útiles awk solamente son de una línea de longitud, pero incluso un 
programa awk de una línea puede contarse el número de líneas de un archivo 
como wc, imprimir el primer campo de cada línea como cut, imprimir todas las 
líneas que contienen la palabra “services” como grep, intercambiar la posición de 
los campos tercero y cuarto de cada línea como join y paste o borrar el último 
campo de cada línea. Sin embargo, lo que es diferente para awk es ser un 
lenguaje de programación con estructuras de control, funciones y variables. 
 
Figura 1.9: Forma de funcionamiento de awk 
 
 
1.2. UTILERÍAS DE UNIX 23 
Historia de awk 
awk fue diseñado e implementado originalmente por Alfred AHO, Peter 
Weinberger y Brian Kernighan en 1977. El nombre del lenguaje, al contrario de 
los demás comandos de Unix, no viene de algún acrónimo de lo que hace el 
comando, si no que esta formado por las iniciales de los tres apellidos de sus 
autores. Se realizó como parte de un experimento para ver cómo las herramientas 
grep y sed podrían ser generalizadas para tratar con números al igual que con 
texto. A pesar de que fue ideado para escribir programas muy cortos, sus 
facilidades y características pronto atrajeron a usuarios que comenzaron a escribir 
programas considerablemente más largos. Esto ocasiono la necesidad de nuevas 
cosas que no se encontraban en el lenguaje original, de manera que se publicó 
una nueva versión grandemente mejorada en 1985. Una de las principales 
mejoras en esta nueva versión era la posibilidad para los usuarios de definir sus 
propias funciones, además de incluir muchas otras funciones intrínsecas y otras 
características adicionales que hicieron más fácil la escritura de programas más 
complejos. 
 
 
 
 
24 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
 
 
 
 
1.3. LLAMADAS AL SISTEMA 25 
1.3. Llamadas al sistema 
1.3.1. El kernel 
El centro del sistema Unix es un programa conocido como el kernel o núcleo. 
A pesar de que nunca se tiene acceso directo a él su operación es primordial para 
el funcionamiento del sistema: administra la memoria, controla el acceso a los 
archivos, carga y ejecuta los programas ejecutables como los interpretes de 
comandosy, lo más importante, administra el uso del procesador sin el cual 
Unix sería capaz de realizar mas de una tarea a la vez. 
El kernel realiza todas estas tareas proporcionando una interfaz entre los 
programas que se está ejecutando bajo su control y el hardware de la 
computadora; esta interfaz, la interfaz de llamadas al sistema, aísla a los 
programas de las complejidades del hardware. Por ejemplo, cuando un programa 
que se esta ejecutando necesita abrir un archivo, lo hace a través de una llamada 
al sistema que le indica al kernel que habrá el archivo para ese programa. El 
kernel recibe y controla la petición y notifica si esta concluyó exitosamente o no. 
Para leer datos del archivo se requiere de otra llamada; el kernel determina si la 
petición es valida o no, y si lo es, el kernel lee el bloque de datos requerido y lo 
manda al programa. A diferencia de otros sistemas operativos (DOS), los 
programas en un sistema Unix no tienen acceso al hardware de la computadora. 
Todo lo que ellos “ven” son los servicios del kernel, proporcionadas por las 
llamadas al sistema. La interface de llamadas al sistema es un ejemplo de una API 
o interfaz de programación de aplicaciones. Las llamadas al sistema tienen 
parámetros estrictamente definidos, que permiten a una aplicación acceder a los 
recursos físicos de la computadora. 
 
1.3.2. Arquitectura del sistema Unix 
La arquitectura del sistema se basa en dos conceptos principales, los archivos 
y los procesos. El kernel esta pensado para facilitar el acceso al sistema de 
archivos y para el control de procesos. Los tres niveles en que se divide la 
arquitectura del sistema son: hardware, kernel y usuario. Las llamadas al sistema 
 
 
26 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
y su biblioteca relacionada representan la frontera entre los programas de usuario 
y el kernel. La biblioteca asociada a las llamadas al sistema es el medio por el cual 
se puede solicitar un servicio al kernel desde un programa en C. Esta biblioteca 
se enlaza por defecto al compilar cualquier programa en C y se encuentra en el 
archivo /usr/lib/libc. Los programas escritos en lenguaje ensamblador puede 
invocar directamente las llamadas al sistema sin necesidad de ninguna biblioteca. 
Las llamadas del sistema se ejecutan en modo kernel y para entrar en este 
modo hay que ejecutar una sentencia en modo máquina llamada trap (o 
interrupción de software). Es por esto que las llamadas al sistema se pueden 
invocar directamente desde ensamblador y no desde C. 
El kernel esta dividido en dos subsistemas principales: el subsistema de 
archivos y el subsistema de control de procesos. 
 
Figura 1.10: Diagrama a bloques del kernel 
 
El subsistema de archivos controla los recursos del sistema de archivos y 
tiene funciones como reservar espacio para los archivos, administrar el espacio 
libre, controlar el acceso a los archivos, permitir el intercambio de datos entre los 
archivos y el usuario, etc. Los procesos interaccionan con el subsistema de 
 
 
1.3. LLAMADAS AL SISTEMA 27 
archivos a través de unas llamadas especificas (open, read, write, chown, 
status, etc.) 
El subsistema de archivos se comunica con los dispositivos de 
almacenamiento secundario (discos duros, unidades de cinta, etc.) a través de los 
controladores de dispositivo. Los controladores de dispositivo se encargan de 
proporcionar el handshake o inicio de comunicación, entre el kernel y los 
periféricos. Se consideran dos tipos de archivos según su forma de acceso: 
dispositivos modo bloque y dispositivos modo carácter. El acceso a los 
dispositivos modo bloque se lleva a cabo con la intervención de buffers que 
mejoran la velocidad de transferencia. El acceso a dispositivos en modo carácter 
se lleva a cabo de forma directa, sin la intervención de buffers. Un mismo 
dispositivo físico puede ser manejado tanto en modo bloque como en modo 
carácter dependiendo de que controlador se utilice para acceder a él. 
El subsistema de control de procesos es el responsable de la planificación 
de los procesos (scheduler), su sincronización, comunicación entre los mismos 
(IP: Inter Process Comunication) y del control de la memoria principal. 
Algunas de las llamadas al sistema usadas para controlar procesos son: 
fork, exec, exit, wait, brk, signal, etc. 
El módulo de gestión o administración de memoria se encarga de controlar 
qué procesos están cargados en la memoria principal en cada instante. Si en un 
momento determinado no hay suficiente memoria principal para todos los 
procesos que la solicitan, el gestor de memoria debe recurrir a mecanismos de 
swapping para que todos los procesos tengan derecho a un tiempo mínimo de 
ocupación de la memoria RAM y se puedan ejecutar. 
El swapping consiste en llevar los procesos cuyo tiempo de ocupación de la 
memoria expira a una memoria secundaria (que es un área del disco conocida 
como swap y que se monta como un sistema de archivos aparte) y traer de esa 
memoria secundaria los procesos a los que se les asigna tiempo de ocupación de 
la memoria principal. Al módulo de administración de memoria se le conoce 
también como swapper. 
 
 
28 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
El planificador o scheduler se encarga de administrar el tiempo de CPU que 
tiene asignado cada proceso. El scheduler entra en ejecución cada cierto tiempo 
(conocido como quantum) y decide si el proceso actual tiene derecho a seguir 
ejecutándose (esto depende de su prioridad y de sus privilegios) o sí ha de 
cambiar de contexto, asignándole el CPU a otro proceso. 
El módulo de control de hardware es la parte del kernel encargada del 
manejo de las interrupciones y de la comunicación con la máquina. Los 
dispositivos pueden interrumpir al CPU mientras está ejecutando un proceso. Si la 
interrupción ocurre, el kernel debe reanudar la ejecución del proceso después de 
atender a la interrupción. Las interrupciones no son atendidas por procesos, sino 
por funciones especiales codificadas en el kernel, que son invocadas durante la 
ejecución de cualquier proceso. 
El kernel no es indivisible. Hay una pequeña cantidad de los subprocesos del 
kernel que son ejecutados por el kernel; estos son visibles en el listado de 
procesos cuando se ejecuta el comando ps -fea. Los controladores de 
dispositivos, por el contrario, se enlazan dentro del kernel, algunos pueden 
agregarse como módulos por el administrador. 
 
1.3.3. Visión general del sistema de archivos 
La representación interna de los archivos se hace mediante los i-nodos, los 
cuales contienen una descripción de la distribución en el disco de los datos del 
archivo y otra información como el propietario del archivo, los permisos de acceso 
y los tiempos de acceso. Todos los archivos tienen un i-nodo, aunque pueden 
tener varios nombres, pero todos apuntan al mismo i-nodo. Cada nombre se dice 
que es un enlace o liga. 
Un sistema de archivos consiste de una secuencia de bloques lógicos. El 
tamaño de estos bloques depende de la implementación, pero son múltiplos de 
512 bytes (512, 1024, 2048,...). Su tamaño es homogéneo dentro de un sistema 
de archivos, pero puede variar de un sistema de archivos a otro, aunque 
corresponda a la misma instalación. Con bloques lógicos grandes se aumenta la 
 
 
1.3. LLAMADAS AL SISTEMA 29 
eficacia de la transferencia de datos entre disco y memoria, ya que el kernel puede 
transferir más datos por operación con el disco y además con menos operaciones. 
Sin embargo, si un bloque lógico es muy grande la capacidad de almacenamiento 
efectiva puede bajar. 
Un sistema de archivos tiene la siguiente estructura: 
 El bloque de arranque (boot) que ocupa el comienzo del sistema de archivos, 
generalmente en el primer sector, y puede contener elcódigo de arranque de la 
máquina (bootstrap) que se lee para arrancar o inicializar el sistema operativo. 
Aunque sólo un bloque de arranque es necesario para inicializar el sistema, 
todos los sistemas de archivos que tenga la máquina tiene un bloque de 
arranque (aunque probablemente esté vacío). 
 El super bloque describe el estado de un sistema de archivos: qué tamaño 
tiene, cuántos archivos se pueden almacenar, dónde hay espacio libre en el 
sistema de archivos, y otro tipo de información. 
 La lista de i-nodos es una lista de los i-nodos que sigue al super bloque. Los 
administradores, cuando configuran el sistema de archivos, especifican el 
tamaño de la lista de i-nodos. Un i-nodo es el i-nodo raíz (root), es decir, el i-
nodo mediante el cuál es accesible el sistema de archivos cuando se ejecuta la 
llamada al sistema mount (que monta este sistema de archivos). 
 Los bloques de datos comienzan cuando termina la lista de i-nodos y contienen 
los datos de los archivos y los datos administrativos. Un bloque de datos sólo 
puede pertenecer a un único archivo del sistema de archivos. 
 
 
 
Figura 1.11: Estructura del sistema de archivos 
 
1.3.4. Estándares de Unix 
La reescritura, en 1973, de Unix en C, hizo que fuera “fácil de modificar” y 
portar, algo que no había sido posible antes con ningún sistema operativo. Como 
resultado, el Unix inicial divergió en una familia de sistemas operativos 
rápidamente. Los estándares de Unix fueron originalmente desarrollados para 
unificar los APIS de las diferentes ramas de la familia Unix. 
Los estándares de Unix que evolucionaron a partir de 1985 fueron muy 
exitosos en esto, tanto que aún funcionan como referencia para las modernas 
implementaciones de Unix. Los Unix modernos se apegan tanto a los estándares 
 
 
30 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
que es más conveniente para los desarrolladores confiar en las especificaciones 
como POSIX que en los manuales de la variante con la que están trabajando. 
La motivación original para el desarrollo de los estándares de Unix fué su 
división en dos corrientes la de AT&T y la de Berkeley. 
Las versiones Unix BSD 4.x son descendientes de la versión 7 de 1979. 
Después de la liberación de BSD 4.1 en 1980, la linea BSD rápidamente desarrolló 
reputación como una de las versiones mejor implementadas de Unix. Se 
incluyeron herramientas importantes como el editor vi, herramientas para 
administrar trabajos en background e interactivo y mejoras al sistema de señales. 
Por mucho la adición más importante fué el protocolo TCP/IP para red. 
Otra versión, sistema III (1981), se convirtió en la base de los desarrollos 
posteriores de AT&T. El sistema III redefinió la interfaz de terminales de una forma 
más clara y elegante pero completamente incompatible con la versión de Berkeley. 
La versión de enero de 1983, System V Release 1 incorporó algunas utilerías de 
BSD como vi. 
Cualquier versión de Unix proviene de alguna de estas dos corrientes System 
V o BSD, cada vendedor del sistema operativo adiciona sus propias 
modificaciones, para incrementar el rendimiento o agregar nuevas interfaces. 
Dado que la portabilidad de aplicaciones era crucial para los desarrolladores de 
aplicaciones, pronto fué claro que un nivel de estandarización era necesario para 
evitar que las diferencias fueran inmanejables. 
 
1.3.5. ANSI C 
Algo similar le ocurrió al lenguaje C. Por muchos años el libro El lenguaje 
de programación C, de Brian W. Kernigan y Dennis M. Ritchie, fué el estándar 
de referencia por defecto para el lenguaje. Este libro tiene una buena 
introducción al lenguaje, pero no fué pensado como una especificación formal 
del mismo. 
En 1983, C se había extendido más allá del sistema Unix para ser usado 
en muchas plataformas diferentes, y fué rápidamente ganando popularidad. 
 
 
1.3. LLAMADAS AL SISTEMA 31 
Fué el momento para crear un estándar independiente de la plataforma, de 
manera que no se fragmentara en varios dialectos incompatibles. 
ANSI (American National Standards Institute) publicó un estándar formal 
para el lenguaje 1989. El comité que escribió el estándar hizo un excelente 
trabajo, y el estándar fué rápidamente aceptado por casi todos los que 
usaban el lenguaje. El estándar original de ANSI fué oficialmente llamado 
ANS X3.159-1989, pero es comúnmente llamado como el estándar ANSI C, y 
el lenguaje por él definido como ANSI C. 
En 1990, un comité del ISO (International Standards Organization) adoptó 
el estándar de ANSI C, con algunas modificaciones, como el estándar 
Internacional conocido como ISO / IEC 9899:1990. ANSI adoptó, entonces, 
este estándar como reemplazo al ANS X3.159-1989. Sin embargo, lo más 
común es referirse al estándar como ANSI C. 
 
1.3.6. POSIX 
En 1980 se formó una organización denominada /usr/group, con la 
intención de estandarizar las interfaces a nivel de usuario con el fin de facilitar 
la portabilidad de aplicaciones. 
En 1984 llegaron a un acuerdo, y su trabajo fué utilizado por el comité 
ANSI X3J11, el mismo que estaba trabajando en la estandarización del 
lenguaje C. Como el número de versiones de Unix comenzó a incrementarse, 
la divergencia entre éstas aumentaba, y el estándar del /usr/group se volvió 
menos efectivo. Esto condujo a la formación del Portable Operating System 
Interface for Computing Environments (POSIX) en 1985 el cuál utilizó el 
estándar de /usr/group como su documento base de trabajo. Como nota 
curiosa, el nombre POSIX fue propuesto por Richard Stallman, fundador de la 
Free Software Foundation (FSF). 
El estándar producido por este grupo, POSIX 1003.1-1988 se convirtió en 
el estándar más reconocido en la industria Unix y está disponible en otras 
plataformas no-Unix. El estándar inicial fue revisado durante los siguientes 
 
 
32 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
tres años y adoptado por el IEEE (Institute of Electrical and Electronics 
Engineers) para ser el estándar IEEE 1003.1-1990 comúnmente conocido 
como POSIX.1 o simplemente estándar POSIX. En 1989 el grupo /usr/group 
cambió su nombre a Uniforum. 
Estándar Fecha Descripción 
POSIX.1 
POSIX.1b 
POSIX.1c 
POSIX.2 
POSIX.3 
POSIX.3.1 
POSIX.4 
POSIX.5 
POSIX.6 
POSIX.7 
POSIX.7.1 
POSIX.7.2 
POSIX.7.3 
POSIX.8 
POSIX.9 
POSIX.12 
1990 
1993 
1995 
1992 
1991 
1992 
1993 
1992 
en desarrollo 
en desarrollo 
en desarrollo 
en desarrollo 
en desarrollo 
en desarrollo 
1992 
en desarrollo 
Interfaz del sistema para programas de aplicación (Lenguaje C)
Rectificación 1 del API: Extensión del tiempo real 
Rectificación 2 del API: Extensión de hilos de control 
Intérprete de comandos y utilerías 
Métodos de prueba para apego a POSIX 
Métodos de prueba para apego a POSIX.1 
Ahora llamado POSIX.1b 
POSIX.1 (Lenguaje ADA) 
Seguridad 
Administración del sistema 
Administración de impresión 
Instalación y administración de software 
Administración de usuarios/grupos 
Acceso transparente a archivos 
POSIX.1 (Lenguaje FORTRAN) 
Servicios de red 
 
Tabla 1.4: Estándares POSIX 
 
Cualquier programador en Unix debe apegarse a los estándares cuando 
desee que su aplicación sea compatible con la mayoría de las versiones de 
Unix. Como mínimo, las interfaces POSIX son soportadas por casi todos los 
sistemas operativos, Unix y no-Unix. 
 
 
1.3. LLAMADAS AL SISTEMA 33 
1.3.7. Sockets 
El modelo cliente - servidor 
La mayoría de la comunicación entre procesos utiliza el modelo cliente 
servidor. Estos modelos se refieren a los procesos que se comunicarán entre sí. 
Uno de los procesos, el cliente, se conecta con el otro proceso, el servidor, para 
hacer típicamente una petición de información. Una buena analogía es una 
persona que hace una llamada telefónica a otra persona. Es el cliente quien 
necesita saber de la existenciadel servidor y de su dirección, pero el servidor no 
necesita saber la dirección (o aún la existencia) del cliente antes de que la 
conexión sea establecida. También, una vez que se establece una conexión, 
ambos procesos pueden enviar y recibir información. 
Las llamadas al sistema para establecer una conexión son algo diferentes para 
el cliente y el servidor, pero ambas implican la construcción básica de un socket. 
Un socket es un extremo de un canal de comunicación entre procesos. Cada uno 
de los procesos establece su propio socket. 
Los pasos implicados para establecer un socket en el lado del cliente son: 
 Crear un socket con la llamada al sistema socket. 
 Conectar el socket con la dirección del servidor usando la llamada al sistema 
connect(). 
 Envía y recibe los datos. Hay distintas maneras de hacer esto, pero lo más 
simple es utilizar las llamadas al sistema read() y write(). 
 
Los pasos implicados para establecer un socket en el lado del servidor son: 
 Crear un socket con la llamada al sistema socket. 
 Asociar el socket a una dirección usando la llamada al sistema bind(). Para un 
socket del servidor en internet, una dirección consiste en un número de acceso 
en el servidor. 
 Espera a escuchar las conexiones con la llamada del sistema listen(). 
 Acepta una conexión con la llamada al sistema accept(). Esta llamada es 
bloqueable hasta que un cliente se conecte con el servidor. 
 Enviar y recibir datos. 
 
 
34 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
 
 
Figura 1.12: Ejemplo cliente-servidor TCP simple 
Tipos de Socket 
Cuando se crea un socket, el programa tiene que especificar el dominio de la 
dirección y el tipo de socket. Dos procesos pueden comunicarse mutuamente sí 
sus sockets son del mismo tipo y están en el mismo dominio. Hay dos dominios 
extensamente usados en la dirección, el dominio de Unix, en el cual dos procesos 
que comparten un sistema de archivos común se comunican, y el dominio de 
Internet, en el cual dos procesos que corren en cualquier host en internet se 
comunican. Cada uno de éstos tiene su propia dirección. La dirección de un socket 
en el dominio de Unix es una cadena de caracteres que es básicamente una 
entrada en el sistema de archivos. 
Hay dos tipos de sockets usualmente empleados, Sockets Streams y Sockets 
Datagrama. Los socket streams tratan las comunicaciones como un flujo continuo 
de caracteres, mientras que los sockets datagrama tienen que leer mensajes 
enteros inmediatamente. Cada uno utiliza su propio protocolo de comunicación. 
 
 
1.3. LLAMADAS AL SISTEMA 35 
Los sockets streams utilizan el TCP (transmisión Control Protocol), que es un 
protocolo orientado a la conexión confiable, y los sockets datagram utilizan un 
UDP (protocol del datagrama de Unix), que es no fiable y es no orientado a la 
conexión. 
 
 
Figura 1.13: Tipos de socket 
 
 
 
36 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
 
 
 
 
 
1.4. ADMINISTRACIÓN BÁSICA DE UNIX 37 
1.4. Administración básica de Unix 
Las grandes empresas y organizaciones dependen hoy día de cada vez más 
de sus recursos de computación y de cómo éstos son administrados para 
adecuarlos a sus objetivos o metas. El gran incremento de las redes distribuidas, 
con sus equipos clientes y servidores, ha creado una gran demanda de un nuevo 
perfil laboral: el llamado administrador de sistemas. 
La administración de sistemas abarca un campo muy amplio. Los mejores 
administradores de sistema suelen ser bastante generalistas, tanto teóricamente 
como prácticamente. Esto es, pueden enfrentarse a tareas como: realizar 
cableados de instalaciones; instalar sistemas operativos o software de 
aplicaciones; corregir problemas y errores en los sistemas tanto hardware como 
software; capacitar a los usuarios, ofrecer best practices2 o técnicas para mejorar 
la productividad en diferentes áreas; evaluar económicamente compras de 
equipamiento de hardware y software; automatizar un gran número de tareas 
comunes, e incrementar el rendimiento general del trabajo en su organización. 
La relación con los usuarios finales de la organización puede establecerse de 
diferentes maneras: o bien mediante la capacitación de usuarios o bien por ayuda 
directa en el caso de presentarse problemas. El administrador es la persona 
encargada de que las tecnologías utilizadas por los usuarios funcionen 
adecuadamente, es decir, que los sistemas cumplan las perspectivas de los 
usuarios, así como las tareas que éstos quieran realizar. En general, los 
administradores de sistemas permiten a la gente explotar las computadoras a tal 
nivel que sus efectos se reflejan en toda una organización. 
Hace años, y aún actualmente, en muchas empresas no hay una perspectiva 
clara del papel del administrador. En los inicios de la informática en la empresa, el 
administrador era visto en un principio como una persona “experta” en 
computación que se encargaba de poner a punto máquinas y que vigilaba o las 
reparaba en caso de problemas. Normalmente, era una especie de informático 
multidisciplinario que tenía que solucionar los problemas que fueran apareciendo. 
 
2 Guías y consejos sobre la mejor manera de hacer las cosas. 
 
 
38 CAPÍTULO 1. ADMINISTRACIÓN DE SISTEMAS 
En este sentido, nos situábamos de alguna manera en la prehistoria de la 
administración de sistemas. Hoy en día, en la época de Internet y de los servicios 
distribuidos, un administrador de sistemas es un profesional (con dedicación 
propia y exclusiva) que proporciona servicios de software y hardware de sistemas. 
Desde este enfoque, los administradores de sistemas Unix no solo son los 
responsables de una operación exitosa del sistema (hardware, sistemas 
operativos y aplicaciones), sino que también son los responsables de proporcionar 
a los usuarios la capacitación y cultura necesaria para trabajar en un ambiente 
seguro y eficiente. 
El administrador de sistemas es la persona responsable de configurar, mantener y 
actualizar el sistema o conjunto de sistemas que forman una red, cuidando el 
funcionamiento del software, hardware y periféricos de forma que estén disponibles para 
ser utilizados para los usuarios. 
 
1.4.1. Características del administrador Unix 
Actualmente, los administradores necesitan tener unos conocimientos 
generales (teóricos y prácticos) de áreas muy diversas, desde tecnologías de 
redes, sistemas operativos, aplicaciones de ámbitos diversos, programación 
básica en una amplia variedad de lenguajes de programación, conocimientos 
amplios de hardware, seguridad, etc. 
En una organización más pequeña, varias o todas las tareas pueden estar 
asignadas a uno o pocos administradores. Los administradores de sistemas Unix 
serían una parte de estos administradores. Normalmente, su plataforma de trabajo 
es Unix, y requiere de bastantes elementos específicos que hacen este trabajo 
único. Unix es un sistema operativo abierto y muy potente, y, como cualquier 
sistema software, requiere de cierto nivel de adecuación, configuración y 
mantenimiento en las tareas para las que vaya a ser usado. Configurar y mantener 
un sistema operativo es una tarea seria, y en el caso de Unix puede llegar a ser 
bastante frustrante. 
Algunas áreas importantes a tratar por el administrador son: 
 
 
1.4. ADMINISTRACIÓN BÁSICA DE UNIX 39 
 Que el sistema sea muy potente también indica que habrá bastantes 
posibilidades de adaptarlo (configurarlo) a las tareas que queremos hacer. 
Habrá que evaluar las posibilidades que se nos ofrecen y cuán adecuadas son 
para nuestro objetivo final. 
 Un sistema abierto, que nos ofrecerá actualizaciones

Otros materiales