Download unix

Document related concepts

Fdisk wikipedia , lookup

Filesystem Hierarchy Standard wikipedia , lookup

Partición de disco wikipedia , lookup

Mount wikipedia , lookup

Desfragmentación wikipedia , lookup

Transcript
Índice
1.- INTRODUCCIÓN A LINUX.
3
1.1.- INTRODUCCIÓN.
1.2.- DEFINICIÓN DE UN SISTEMA OPERATIVO Y SU ESTRUCTURA.
1.3.- CARACTERÍSTICAS PRINCIPALES DE LINUX.
1.3.1.- CARACTERÍSTICAS.
1.3.2.-DISTRIBUCIONES
3
6
9
9
11
2.- INSTALACIÓN DEL LINUX.
13
2.1.- PARTICIONES DE DISCO Y FORMATO.
2.2.- DESCRIBIENDO LA ARQUITECTURA DEL DISCO.
2.2.1.- GEOMETRÍA FÍSICA DEL DISCO.
2.2.2.- SISTEMAS DE ARCHIVO.
2.3.- CLASES DE INSTALACIÓN DEL LINUX.
2.4.- INSTALACIÓN DEL LINUX.
13
19
19
22
28
31
3.- LINUX BÁSICO
45
3.1- NAVEGANDO POR EL SISTEMA DE ARCHIVOS.
3.1.1- LA ESTRUCTURA DE ARCHIVOS DE LINUX.
3.1.2- COMANDOS BÁSICOS.
3.2- COMANDOS PARA ARCHIVOS.
3.2.1.- DESPLEGANDO ARCHIVOS.
3.2.2.- MANEJO DE ARCHIVOS.
3.3.- SEGURIDAD EN LOS ARCHIVOS.
3.3.1.- PERMISOS.
3.3.2.- MODIFICANDO LOS PERMISOS.
3.4.- PERMISOS ADICIONALES PARA ARCHIVOS.
3.4.1.- PERMISOS POR DEFAULT.
3.4.2.- ENLACES.
3.4.3.- CONTROL DE LA MODIFICACIÓN DE ARCHIVOS.
3.5.- METACARACTERES Y REDIRECCIÓN.
3.5.1.- METACARACTERES.
3.6.- EL EDITOR VI.
3.6.1.- INTRODUCCIÓN AL EDITOR.
3.6.2.- COMANDOS DE EDICIÓN.
3.7.- INTRODUCCIÓN AL AMBIENTE GRÁFICO DE LINUX.
3.7.1.- INICIANDO EL AMBIENTE GRÁFICO DE LINUX.
3.7.2.- CONFIGURACIÓN DEL AMBIENTE GRÁFICO DE LINUX.
45
45
50
58
58
62
65
65
68
69
69
69
71
72
72
78
78
79
88
88
88
4.- ADMINISTRACIÓN DEL SISTEMA.
102
4.1.- CUENTAS PARA USUARIOS EN EL SISTEMA.
4.1.1.- CUENTAS DE USUARIO.
4.1.2.- PROCEDIMIENTOS DE ACCESO.
4.1.3.- CREANDO CUENTAS PARA USUARIO MANUALMENTE.
4.2.- PERSONALIZANDO EL ENTORNO.
4.2.1.- EL SHELL COMO UN LENGUAJE DE PROGRAMACIÓN.
107
107
107
107
110
110
José Luis Elvira Valenzuela, ITESO-DESI 1999
1
4.2.2.- LOS SCRIPTS DE INICIALIZACIÓN.
4.3.- CONTROL DE PROCESOS.
4.3.1.- PROCESOS EN EL SISTEMA.
4.3.2.- CORRIENDO COMANDOS EN TIEMPOS ESPECIFICADOS.
4.3.3.- PLANIFICACIÓN DE LA PRIORIDAD DE LOS PROCESOS.
4.4.- UTILERÍAS.
4.4.1.- ENCONTRANDO ARCHIVOS Y TEXTO.
4.4.2.- RESPALDANDO ARCHIVOS.
4.5.- SOFTWARE DE ADMINISTRACIÓN DE PAQUETES.
4.5.1.- INSTALACIÓN DE PAQUETES.
116
118
118
124
129
130
130
130
137
137
5.- LINUX AVANZADO.
147
5.1- EL PROCESO DE ARRANQUE.
5.1.1.- EL PROCESO DE ARRANQUE, INIT.
5.1.2.-CORRIENDO PROGRAMAS DURANTE EL PROCESO DE ARRANQUE.
5.1.3.- DANDO DE BAJA EL SISTEMA.
5.2.- CAMBIANDO NIVELES DE ARRANQUE.
5.2.1.- INTRODUCCIÓN A LOS NIVELES DE ARRANQUE.
5.2.2.- CAMBIANDO LOS NIVELES DE ARRANQUE.
5.3.- EL SISTEMA DE ARCHIVOS DE LINUX
5.3.1.- INTRODUCCIÓN AL SISTEMA DE ARCHIVOS.
5.3.2.- LA ESTRUCTURA DE ARCHIVOS DE LINUX.
5.4.- MONTANDO SISTEMAS DE ARCHIVOS.
5.4.1.- MONTANDO SISTEMAS DE ARCHIVOS.
5.4.2.- SISTEMAS DE ARCHIVOS REMOTOS.
5.5.- MANTENIMIENTO DE SISTEMAS DE ARCHIVOS.
5.5.1.- UTILERÍAS.
147
147
147
148
148
148
149
149
149
149
150
150
152
153
153
José Luis Elvira Valenzuela, ITESO-DESI 1999
2
1.- Introducción a Linux.
1.1.- Introducción.
Linux es probablemente el acontecimiento mas importante del software gratuito
desde el original Space War, o, mas recientemente, Emacs. Se ha convertido en el
sistema operativo para los negocios, educación, y provecho personal. Linux ya no es
solo para gurus de UNIX que se sientan durante horas frente a la resplandeciente
consola (aunque le aseguramos que un gran numero de usuarios pertenece a esta
categoría). Este libro le ayudara a sacarle el máximo partido.
Linux es un clónico del sistema operativo UNIX que corre en computadoras Intel
80386 y posteriores. Soporta un amplio rango de software, desde TEX a X Windows
al compilador GNU C/C++ a TCP/IP. Es una implementación de UNIX versátil,
distribuida gratuitamente en los términos de la Licencia GNU.
Linux puede convertir cualquier PC en una estación de trabajo. Le pondrá todo el
poder de UNIX en la punta de sus dedos. En los negocios ya se instala Linux en
redes enteras, usando el sistema operativo para manejar registros financieros y de
hospitales, un entorno de usuario distribuido, telecomunicaciones, etc. Universidades
de todo el mundo usan Linux para dar cursos de programación y diseño de sistemas
operativos. Y, por supuesto, entusiastas de los computadoras de todo el mundo
están usando Linux en casa, para programar, entretenerse, y conocerlo a fondo.
Lo que hace a Linux tan diferente es que es una implementación gratuita de UNIX.
Fue y aun es desarrollado por un grupo de voluntarios, principalmente en Internet,
intercambiando código, comentando fallos, y arreglando los problemas en un entorno
abierto. Cualquiera es bienvenido a sumarse al esfuerzo de desarrollo de Linux: todo
lo que se pide es interés en producir un clónico gratuito de UNIX y algunos
conocimientos de programación. El libro que tiene en sus manos es su guía de viaje.
Breve historia de Linux
UNIX es uno de los sistemas operativos mas populares del mundo debido a su
extenso soporte y distribución. Originalmente fue desarrollado como sistema
multitarea con tiempo compartido para mini computadoras y mainframes a mediados
de los 70, y desde entonces se ha convertido en uno de los sistemas mas utilizados a
pesar de su, ocasionalmente, confusa interfaz con el usuario y el problema de su
estándarización.
>Cual es la verdadera razón de la popularidad de UNIX? Muchos hackers consideran
que UNIX es el autentico y único sistema operativo. El desarrollo de Linux parte de
José Luis Elvira Valenzuela, ITESO-DESI 1999
3
un grupo en expansión de hackers de UNIX que quisieron hacer su sistema con sus
propias manos.
Existen numerosas versiones de UNIX para muchos sistemas, desde computadoras
personales hasta supercomputadoras como el Cray Y-MP. La mayoría de las
versiones de UNIX para computadoras personales son muy caras. Cuando se
escribía este libro, una copia para una maquina 386 del UNIX System V de AT&T
costaba unos 1500 dólares estadounidenses.
Linux es una versión de UNIX de libre distribución, inicialmente desarrollada por
Linus Torvalds en la Universidad de Helsinki, en Finlandia. Fue desarrollado con la
ayuda de muchos programadores y expertos de UNIX a lo largo y ancho del mundo,
gracias a la presencia de Internet. Cualquier habitante del planeta puede acceder a
Linux y desarrollar nuevos módulos o cambiarlo a su antojo. El núcleo de Linux no
utiliza ni una sola linea del código de AT&T o de cualquier otra fuente de propiedad
comercial, y buena parte del software para Linux se desarrolla bajo las reglas del
proyecto de GNU de la Free Software Foundation, Cambridge, Massachusetts.
Inicialmente, solo fue un proyecto de aficionado de Linus Torvalds. Se inspiraba en
Minix, un pequeño UNIX desarrollado por Andy Tanenbaum, y las primeras
discusiones sobre Linux surgieron en el grupo de News comp.os.minix. Estas
discusiones giraban en torno al desarrollo de un pequeño sistema UNIX de carácter
académico dirigido a aquellos usuarios de Minix que querían algo mas.
El desarrollo inicial de Linux ya aprovechaba las características de conmutación de
tareas en modo protegido del 386, y se escribió todo en ensamblador. Linus dice,
"Comencé a utilizar el C tras escribir algunos drivers, y ciertamente se acelero el
desarrollo. En este punto sentí que mi idea de hacer un Minix mejor que Minix' se
hacia mas seria. Esperaba que algún día pudiese recompilar el gcc bajo Linux. . .
"Dos meses de trabajo, hasta que tuve un driver de discos (con numerosos bugs,
pero que parecía funcionar en mi PC) y un pequeño sistema de archivos. Aquí tenia
ya la versión 0.01 [al final de Agosto de 1991]: no era muy agradable de usar sin el
driver de diskettes, y no hacia gran cosa. No pense que alguien compilaría esa
versión."
No se anuncio nada sobre esa versión, puesto que las fuentes del 0.01 jamas fueron
ejecutables: contenían solo rudimentos de lo que seria el nucleo , y se asumía que se
tenia acceso a un Minix para poderlo compilar y jugar con el.
El 5 de Octubre de 1991, Linus anuncio la primera versión "oficial" de Linux, la 0.02.
Ya podía ejecutar bash (el shell de GNU) y gcc (el compilador de C de GNU), pero no
José Luis Elvira Valenzuela, ITESO-DESI 1999
4
hacia mucho mas. La intención era ser un juguete para hackers. No había nada
sobre soporte a usuarios, distribuciones, documentación ni nada parecido. Hoy, la
comunidad de Linux aun trata estos asuntos de forma secundaria. Lo primero sigue
siendo el desarrollo del kernel.
Linus escribía en comp.os.minix,
">Suspiras al recordar aquellos días de Minix-1.1, cuando los hombres eran hombres
y escribían sus propios drivers?”
“>Te sientes sin ningún proyecto interesante y te gustaría tener un verdadero S.O.
que pudieras modificar a placer?”
“>Te resulta frustraste el tener solo a Minix?”
Entonces, este articulo es para ustedes.
"Como dije hace un mes, estoy trabajando en una versión gratuita de algo parecido a
Minix para computadoras At-386. He alcanzado la etapa en la que puede ser
utilizable y voy a poner las fuentes para su distribución. Es solo la versión 0.02. . .
pero he conseguido ejecutar en el bash, gcc, gnu-make, gnu-sed, compress, etc.
Tras la versión 0.03, Linus salto a la versión 0.10, al tiempo que mas gente
empezaba a participar en su desarrollo. Tras numerosas revisiones, se alcanzo la
versión 0.95, reflejando la esperanza de tener lista muy pronto una versión "oficial".
(Generalmente, la versión 1.0 de los programas se corresponden con la primera
teóricamente completa y sin errores). Esto sucedía en Marzo de 1992. Año y medio
después, en Diciembre del 93, el núcleo estaba en la revisión 0.99.pl14, en una
aproximación asintótica al 1.0. Actualmente, el núcleo se encuentra en la versión 1.1
parche 52, y se acerca la 1.2.
Hoy Linux es ya un clónico de UNIX completo, capaz de ejecutar X Windows, TCP/IP,
Emacs, UUCP y software de correo y News. Mucho software de libre distribución ha
sido ya portado a Linux, y están empezando a aparecer aplicaciones comerciales. El
hardware soportado es mucho mayor que en las primeras versiones del núcleo.
Mucha gente ha ejecutado tests de rendimiento en sus sistemas Linux 486 y se han
encontrado que son comparables a las estaciones de trabajo de gama media de Sun
Microsystems y Digital.
>Quien iba a imaginar que este "pequeño" clonico de UNIX iba a convertirse en un
estándar mundial para las computadoras personales?
José Luis Elvira Valenzuela, ITESO-DESI 1999
5
1.2.- Definición de un sistema operativo y su estructura.
Sistema de computación, consta de :
 Hardware.
 Software.
 Programas de aplicación.
Arquitectura de una computadora : Atributos de un sistema que son visibles a un
programador.




Conjunto de instrucciones.
Organización de la memoria.
Entrada y salida.
Estructura del bus.
Funciones básicas de una computadora :




Procesamiento de datos.
Almacenamiento de datos.
Transferencias de datos.
Control.
Sistema operativo : Controla todos los recursos de la computadora y ofrece la base
sobre la cual pueden escribirse los programas de aplicación.
El sistema operativo como una máquina ampliada :
1. Es el programa que oculta la verdad del hardware al programador.
2. Disimula mucho el trabajo displicente concerniente a interrupciones, relojes o
cronómetros, manejo de la memoria y otras características de bajo nivel.
3. La abstracción que se presenta al usuario del sistema operativo es más simple y
sencilla de utilizar que el hardware implícito.
Una función del sistema operativo es : presentar al usuario una máquina
ampliada o una máquina virtual que sea más fácil de programar que el hardware
implícito.
José Luis Elvira Valenzuela, ITESO-DESI 1999
6
El sistema operativo como un manejador de recursos:
El trabajo del sistema operativo consiste en ofrecer una distribución ordenada y
controlada de los procesadores, memorias y dispositivos de E/S entre los diversos
programas que compiten por ellos.
Componentes principales de un Sistema Operativo :




El manejo del proceso.
Entrada y salida.
Manejo de la memoria.
Sistema de archivo.
Historia de los sistemas operativos.
Primera generación (1945-1955) : tubos de vacío y tableros enchufables.
Se desconocían los lenguajes de programación.
Los sistemas operativos eran extraños.
Segunda generación (1955-1965) : transistores y sistemas de lote.
Tercera generación (1965-1980) : circuitos integrados y multiprogramación.
Popularizaron varias técnicas importantes ausentes en los sistemas operativos de la
segunda generación. La más importante, la multiprogramación.
Técnica de manejo por cola de impresión : la capacidad de leer trabajos de
tarjetas contenidas en el disco tan pronto se llevaban al cuarto de computación.
Siempre que se terminaba el trabajo, el sistema operativo podía cargar uno nuevo del
disco en la partición no vacía y ejecutarlo.
Sistema de tiempo compartido : variante de la multiprogramación, cada usuario
tiene una terminal en línea, si hay 20 usuarios en el sistema y 17 están pensando,
trabajando o tomando café, la CPU puede distribuirse en turno para los 3 trabajos
que necesitan servicio.
Cuarta generación (1980-....) : computadoras personales.
Sistemas operativos en red : los usuarios tienen conocimiento de la existencia de
múltiples computadoras y pueden ingresar en máquinas remotas y reproducir
archivos de una máquina a la otra.
José Luis Elvira Valenzuela, ITESO-DESI 1999
7
Sistema operativo distribuido : se presenta ante sus usuarios como un sistema
uniprocesador tradicional, aunque en realidad esté compuesto de múltiples
procesadores.
Sistema distribuido real : los usuarios no tienen conocimiento de donde están
ejecutando sus programas o donde están ubicados sus archivos.
Estructura de un sistema operativo.
Sistemas monolíticos.
Es la organización más común.
Se le llama “El gran lío”, ya que no exhibe una estructura.
El sistema operativo se escribe como un conjunto de procedimientos, cada uno de los
cuales puede llamar a cualquiera de los otros siempre que los necesite.
1.- El programa de usuario captura el kernel.
2.- El sistema operativo determina el número de servicio que se le pide.
3.- El sistema operativo localiza y llama al procedimiento de servicio.
4.- El control se devuelve al programa de usuario.
Esta organización sugiere una estructura básica del sistema operativo :
1.- Un programa central que invoque el procedimiento de servicio solicitado.
2.- Un conjunto de procedimientos de servicios que realice las llamadas al sistema.
3.- Un conjunto de procedimientos de uso general que ayude a los procedimientos de
servicio.
Sistemas en estratos.
Consiste en organizar el sistema operativo como una jerarquía de estratos.
Cada estrato está construido arriba del que está debajo de el.
Máquinas virtuales.
(CMS) sistema con monitor convencional.
El corazón del sistema conocido como monitor de la máquina virtual, corre en el
hardware y realiza la multiprogramación, ofreciendo no una, sino varias máquinas
virtuales para el siguiente estrato hacia arriba. Estas máquinas virtuales no son
máquinas extendidas, con archivos y otras características atractivas. Son copias
exactas del hardware simple, incluyendo el modo de kernel/usuario, E/S,
interrupciones, y todo lo demás que tiene la máquina real. Cada máquina virtual es
idéntica al hardware real, cada una puede correr cualquier sistema operativo que
correrá directamente en el hardware.
José Luis Elvira Valenzuela, ITESO-DESI 1999
8
Modelo del servidor del cliente.
1.3.- Características principales de Linux.
1.3.1.- Características.
Características de Linux
 Multitarea: varios programas (realmente procesos) ejecutándose al mismo tiempo.
 Multiusuario: varios usuarios en la misma máquina al mismo tiempo (¡y sin
licencias para todos!).
 Multiplataforma: corre en muchas CPUs distintas, no sólo Intel.
 Funciona en modo protegido 386.
 Tiene protección de la memoria entre procesos, de manera que uno de ellos no
pueda colgar el sistema.
 Carga de ejecutables por demanda: Linux sólo lee de disco aquellas partes de un
programa que están siendo usadas actualmente.
 Política de copia en escritura para la compartición de páginas entre ejecutables:
esto significa que varios procesos pueden usar la misma zona de memoria para
ejecutarse. Cuando alguno intenta escribir en esa memoria, la página (4Kb de
memoria) se copia a otro lugar. Esta política de copia en escritura tiene dos
beneficios: aumenta la velocidad y reduce el uso de memoria.
 Memoria virtual usando paginación (sin intercambio de procesos completos) a
disco: una partición o un archivo en el sistema de archivos, o ambos, con la
posibilidad de añadir más áreas de intercambio sobre la marcha (se sigue
denominando intercambio, es en realidad un intercambio de páginas). Un total de
16 zonas de intercambio de 128Mb de tamaño máximo pueden ser usadas en un
momento dado con un límite teórico de 2Gb para intercambio.
 La memoria se gestiona como un recurso unificado para los programas de usuario
y para el caché de disco, de tal forma que toda la memoria libre puede ser usada
para caché y éste puede a su vez ser reducido cuando se ejecuten grandes
programas.
José Luis Elvira Valenzuela, ITESO-DESI 1999
9
 Librerías compartidas de carga dinámica (DLL's) y librerías estáticas también, por
supuesto.
 Se realizan volcados de estado (core dumps) para posibilitar los análisis postmortem, permitiendo el uso de depuradores sobre los programas no sólo en
ejecución sino también tras abortar éstos por cualquier motivo.
 Casi totalmente compatible con POSIX, System V y BSD a nivel fuente.
 Mediante un módulo de emulación de iBCS2, casi completamente compatible con
SCO, SVR3 y SVR4 a nivel binario.
 Todo el código fuente está disponible, incluyendo el núcleo completo y todos los
drivers, las herramientas de desarrollo y todos los programas de usuario; además
todo ello se puede distribuir libremente. Hay algunos programas comerciales que
están siendo ofrecidos para Linux actualmente sin código fuente, pero todo lo que
ha sido gratuito sigue siendo gratuito.
 Control de tareas POSIX.
 Pseudo-terminales (pty's).
 Emulación de 387 en el núcleo, de tal forma que los programas no tengan que
hacer su propia emulación matemática. Cualquier máquina que ejecute Linux
parecerá dotada de coprocesador matemático. Por supuesto, si tu computadora ya
tiene una FPU (unidad de coma flotante), será usada en lugar de la emulación,
pudiendo incluso compilar tu propio kernel sin la emulación matemática y
conseguir un pequeño ahorro de memoria.
 Soporte para muchos teclados nacionales o adaptados y es bastante fácil añadir
nuevos dinámicamente.
 Consolas virtuales múltiples: varias sesiones de login a través de la consola entre
las que se puede cambiar con las combinaciones adecuadas de teclas (totalmente
independiente del hardware de video). Se crean dinámicamente y puedes tener
hasta 64.
 Soporte para varios sistemas de archivo comunes, incluyendo minix-1, Xenix y
todos los sistemas de archivo típicos de System V, y tiene un avanzado sistema
de archivos propio con una capacidad de hasta 4 Tb y nombres de archivos de
hasta 255 caracteres de longitud.
José Luis Elvira Valenzuela, ITESO-DESI 1999
10
 Acceso transparente a particiones MS-DOS (o a particiones OS/2 FAT) mediante
un sistema de archivos especial: no necesitas ningún comando especial para usar
la partición MS-DOS, parece un sistema de archivos normal de Unix (excepto por
algunas graciosas restricciones en los nombres de archivo, permisos, y esas
cosas).
 Un sistema de archivos especial llamado UMSDOS que permite que Linux sea
instalado en un sistema de archivos DOS.
 Soporte en sólo lectura de HPFS-2 del OS/2 2.1
 Sistema de archivos de CD-ROM que lee todos los formatos estándar de CDROM.
 TCP/IP, incluyendo ftp, telnet, NFS, etc.
 Appletalk disponible en el actual núcleo de desarrollo.
 Software cliente y servidor Netware disponible en los núcleos de desarrollo.
1.3.2.-Distribuciones
Se llaman “distribuciones” un conjunto de soportes (diskettes, CD-ROM ...) que
contengan lo necesario para instalar un programa en una maquina. No existe una
distribución oficial de linux. Solo las distribuciones circulan. He aquí las principales :
slackware : es la distribución de referencia históricamente. En la medida en que era
la única distribución mas o menos correctamente hecha hace unos 2 años. En
nuestros días ella tiene una competecia correcta de parte de nuevas distribuciones
como RedHat y se puede temer que termine como SLS por sus dificultades para
evolucionar. Ademas solo funciona en un arquitectura Intel. Su tamaño es de 113 Mb
(comprimida) o sea 89 diskettes. Es todo ELF. Utiliza la libc 5.3.12, el núcleo es el
2.0.0 y el Xfree86 3.2.0. La ultima versión es de Diciembre de 1996. Su sitio oficial es
: ftp.cdrom.com
Red Hat : es una distribución inicialmente comercial, pero es igualmente disponible
vía FTP. Es mucho mas profesional que la Slackware. Ademas es disponible para
otros tipos de arquitectura con procesadores " no Intel " (Alpha, Sparc). Versión 4.0
(Colgate). Esta distribución se distingue por su seriedad, la simplicidad de sus
instalación y sobre todo su extrema convivialidad. Ademas la puesta al día se hace
mediante un sistema de paquetes (los RPM). Sitio oficial : ftp.redhat.com Sitio Web :
http://www.redhat.com
José Luis Elvira Valenzuela, ITESO-DESI 1999
11
Debian : es la versión de Linux apoyada por la FSF (Free Software Foundacion).
Esta basada en programas relativamente antiguos, los autores de esta distribución
quieren principalmente una distribución “estable”, lo que interfiere con el desarrollo de
nuevas funciones.
MCC : Versión 1.2+ . Ultima versión Mayo / Junio 1995 (parece caída en el olvido...)
Bogus : Es una distribución estable y muy bien hecha. El único problema con Bogus
es que su frecuencia de puesta al día es bastante irregular. Versión 1.0.1 Ultima
puesta al día Julio 1994.
SLS : Primera gran distribución de Linux, la SLS es ya obsoleta : Versión 1.06. Ultima
puesta al día : Noviembre 1994.
Mini-Linux : Como su nombre lo indica, se trata de una distribución muy reducida de
Linux (demasiado reducida a mi gusto pero bueno) Se puede encontrar en ftp.loria.fr,
la versión francesa. Esta compuesta de 5 diskettes y la ultima puesta al día es del 10
Abril 1995
Jurix : Es una distribución creada en Alemania a partir de las ultimas versiones de
los programas disponibles. Esta siempre “en la punta del progreso” pero a veces
pone problemas a veces puesto que los programas no están completamente
debogados. La ultima puesta al día es del 8 Diciembre de 1996.
José Luis Elvira Valenzuela, ITESO-DESI 1999
12
2.- Instalación del Linux.
2.1.- Particiones de disco y formato.
Conceptos sobre particiones
En general, los discos duros se encuentran divididos en particiones, donde cada
partición corresponde a un sistema operativo. Por ejemplo, en un disco duro se
pueden tener varias particiones una dedicada a, digamos, MS-DOS, otra a OS/2 y
otra a Linux.
Si se tiene ya otro software instalado en su sistema, puede necesitar cambiar el
tamaño de sus particiones con el fin de reservar espacio para Linux. En el espacio
reservado se crearan una o mas particiones para almacenar el software de Linux y el
espacio de intercambio. A este proceso lo llamamos reparticionar.
La mayoría de los sistemas MS-DOS o Windows utilizan una única partición que
ocupa todo el disco. Para MS-DOS, esta partición es accedida como C:. Si se tiene
mas de una partición, MS-DOS las llamara D:, E:, y así sucesivamente, de modo que
cada partición actúa como si fuera un disco duro independiente. En el primer sector
del disco esta el registro de arranque maestro junto a la tabla de particiones. El
registro de arranque (como su nombre indica) se usa para arrancar el sistema. La
tabla de particiones contiene información acerca del lugar y el tamaño de cada
partición.
Hay tres clases de particiones: primarias, extendidas, y lógicas. De estas, las mas
usadas son las primarias. Sin embargo, debido al limite del tamaño de la tabla de
particiones, solo pueden tenerse hasta cuatro particiones primarias en un disco. La
forma de superar este limite de cuatro particiones es usar particiones extendidas.
Una partición extendida no tiene datos ella misma; en su lugar, actúa como "soporte"
de particiones lógicas. Por lo tanto, se puede crear una partición extendida que ocupe
todo el disco, y dentro crear cualquier numero de particiones lógicas. Sin embargo,
solo puede tenerse una partición extendida por disco.
Necesidades de reparticionado en Linux
Antes de que expliquemos como reparticionar sus discos, necesita tener una idea
acerca del espacio que necesita para Linux.
En los sistemas UNIX, los archivos se almacenan en un sistema de archivos, que es
esencialmente una zona del disco duro (u otro dispositivo, como un CD-ROM o un
diskette) formateado para almacenar archivos. Cada sistema de archivos se
encuentra asociado con una parte especifica del árbol de directorios; por ejemplo, en
José Luis Elvira Valenzuela, ITESO-DESI 1999
13
la mayoría de los sistemas, existe un sistema de archivos para todos los archivos del
directorio /usr, otro para /tmp, etc. El sistema de archivos raíz es el principal, que
corresponde con el directorio raíz, /.
Bajo Linux, cada sistema de archivos ocupa una partición del disco duro. Por
ejemplo, si tenemos un sistema de archivos para / y otro para /usr, necesitaremos
dos particiones para almacenar ambos sistemas.
Antes de instalar Linux, usted necesitara preparar sistemas de archivos para
almacenar el software de Linux. Por lo menos tiene que tener un sistema de archivos
(el sistema de archivos raíz), y una partición reservada a Linux. La mayoría de los
usuarios de Linux optan por almacenar todos sus archivos en el sistema de archivos
raíz, pues en la mayor parte de los casos es mas facil de gestionar que tener
diferentes sistemas de archivos y particiones.
Sin embargo, usted puede crear varios sistemas de archivos para Linux si lo desea
por ejemplo, puede que quiera usar sistemas separados para /usr y /home.
Aquellos lectores con experiencia en administracion de sistemas UNIX sabrán como
usar diferentes sistemas de archivos adecuadamente.
>Por que usar mas de un sistema de archivos? Lo mas habitual es por seguridad; si,
por alguna razón, uno de sus sistemas de archivos resulta dañado, los otros
normalmente no resultaran afectados. Por otro lado, si usted almacena todos sus
archivos en el sistema de archivos raíz, y por alguna razón resulta dañado, puede
perder todos los archivos de una vez. Sin embargo, esto no es lo habitual; si se
hacen copias de seguridad (backups) regularmente, no hay de que preocuparse.
Otra razón para utilizar varios sistemas de archivos es repartir el almacenamiento
entre varios discos duros. Si usted tiene, digamos, 40 megabytes libres en un disco
duro y 50 en otro, se pueden querer crear un sistema de archivos raíz de 40
megabytes en el primer disco y un sistema /usr de 50 megabytes en el otro.
Actualmente no es posible que un sistema de archivos abarque varios discos; si su
espacio libre de disco esta repartido entre los discos, necesitara utilizar varios
sistemas de archivos para aprovecharlos.
En resumen, Linux requiere por lo menos una partición, para el sistema de archivos
raíz. Si se desea crear varios sistemas de archivos, se necesitara una partición por
cada sistema de archivos.
Algunas distribuciones de Linux crean particiones y sistemas de archivos de forma
automática, de modo que usted no necesita preocuparse demasiado de estos
asuntos.
José Luis Elvira Valenzuela, ITESO-DESI 1999
14
Otra cuestion a considerar cuando se deciden las particiones es el espacio de
intercambio (swap). Si se desea usar espacio de intercambio en Linux, se tienen dos
opciones. La primera es usar un archivo de intercambio que existe dentro de uno de
los sistemas de archivos de Linux. Se crea el archivo de intercambio para usarlo
como RAM virtual una vez instalado el software. La segunda opcion es crear una
partición de intercambio, una partición reservada exclusivamente como espacio de
swap. La mayoría de la gente usa una partición para el intercambio en lugar de un
archivo.
Cada archivo o partición de intercambio puede ser de hasta 16 megabytes. Si se
desea tener mas de 16 megabytes de swap, se pueden crear varios archivos o
particiones de intercambio hasta ocho a la vez. Por ejemplo, si se necesitan 32
megabytes de swap, se pueden crear dos particiones de 16 megabytes.
Por lo general, se crearan dos particiones para Linux: una para ser usada como
sistema de archivos del directorio raíz, y la otra como espacio de intercambio. Por
supuesto, hay otras opciones pero esta es la opción mínima. El espacio de swap no
es obligatorio en Linux, pero esta muy recomendado si posee menos de 16
megabytes de memoria física. También necesita conocer el espacio requerido para
cada partición. El tamaño de los sistemas de archivos de su sistema Linux depende
en gran parte de que software quiera instalar en el y de la distribución de Linux que
este utilizando. Afortunadamente, la Documentación de la distribución le dará una
idea del espacio requerido. Un sistema pequeño puede utilizar solo 20 megabytes o
menos; un sistema grande siempre necesitara 80 a 100 megabytes, o mas. Tenga
en cuenta que hay que añadir a esto el espacio extra para los directorios de usuario,
expansiones futuras, etc.
El tamaño de sus particiones de swap (debe elegirse una para esto) depende de la
RAM virtual que necesite. Lo típico es crear una partición de intercambio del doble de
espacio de su RAM física; por ejemplo, si tiene 4 megabytes de RAM, una partición
de 8 megabytes suele bastar. Por supuesto, esto es solo una idea la cantidad de
espacio de swap que requiere dependerá del software que quiera ejecutar. Si usted
tiene una gran cantidad de memoria física (digamos, 16 megabytes o mas) puede
que al final no necesite espacio de intercambio.
Nota importante: Debido a las limitaciones de la BIOS, habitualmente no es posible
arrancar desde particiones que empiecen mas allá del cilindro 1023. Así pues,
cuando se decida el espacio para Linux, recuerde que no debe usar una partición que
sobrepase ese cilindro para el sistema de archivos raíz. Linux puede usar
perfectamente particiones con cilindros mas allá del 1023, pero dichas particiones no
servirán para arrancar . Decir esto aqui puede parecer prematuro, pero es importante
a la hora de planificar el uso del disco en Linux.
José Luis Elvira Valenzuela, ITESO-DESI 1999
15
Si se usara una partición para el sistema de archivos raíz mas allá del cilindro 1023,
siempre podrá arrancar Linux con un disco boot. Esto no es un inconveniente solo
tarda unos segundos mas que si se arrancara desde el disco duro.
Reparticionado de los discos
En esta sección vamos a describir como cambiar el tamaño de sus particiones
actuales (si las hay) para reservar espacio para Linux. Si usted esta instalando Linux
en un disco duro "limpio", puede pasar directamente a la Sección 2.3 de mas
adelante.
La manera habitual de cambiar el tamaño de una partición es borrarla (lo que implica
borrar toda la información que contenga) y rehacerla. Antes de reparticionar sus
discos, haga un backup. Después de cambiar las particiones, puede proceder a
reinstalar el software desde el backup. Sin embargo, podemos encontrar programas
para MS-DOS que consiguen cambiar el tamaño de las particiones de forma no
destructiva. Uno de estos se conoce como "FIPS", y puede encontrarse en muchos
servidores de FTP de Linux.
Recuerde también que debido a que se empequeñecen las particiones originales, no
se va a poder reinstalar todo el software que se tenia antes. En este caso, hay que
borrar el software innecesario para permitir que el resto quepa en las particiones mas
pequeñas.
El programa utilizado para hacer particiones es fdisk. Cada sistema operativo tiene
su propia versión de este programa; por ejemplo, bajo MS-DOS, se activa con el
comando FDISK. Debe consultarse la Documentación de los sistemas operativos en
uso para obtener información sobre este asunto. Aquí nos referiremos únicamente a
MS-DOS con FDISK, pero lo que digamos puede ser fácilmente extrapolado a otros
sistemas operativos.
Consulte, por favor , la Documentación de sus sistemas operativos actuales antes de
proceder a reparticionar sus discos. Esta sección pretende ser solo una visión
general del proceso; y hay muchos detalles que no vamos a mencionar. Tenga en
cuenta que se puede perder todo el software de su sistema si no se hace
correctamente el reparticionado.
Un aviso: No modifique o cree particiones para otros sistemas operativos (incluyendo
Linux) utilizando FDISK bajo MS-DOS. Solo pueden modificarse particiones de cada
sistema operativo con la versión de fdisk correspondiente a ese sistema; por
ejemplo, se crearan las particiones para Linux utilizando el programa fdisk que
viene con Linux. Mas adelante, en la Sección 2.3.3, describiremos como crear
José Luis Elvira Valenzuela, ITESO-DESI 1999
16
particiones de Linux, pero por ahora nos ocuparemos solo de cambiar el tamaño de
las actuales.
Supongamos que usted tiene un solo disco duro en su sistema, dedicado, por ahora,
enteramente a MS-DOS. Esto es, su disco duro contiene una partición MS-DOS,
conocida habitualmente como "C:". Puesto que este método de reparticionado
destruirá todos los datos de la partición, necesita crear un disco de sistema MS-DOS
"arrancable" que contenga lo necesario para ejecutar FDISK y restaurar el software
desde el backup cuando se complete el proceso de reparticionado.
En muchos casos, se pueden usar para esto los discos de instalación de MS-DOS.
Sin embargo, si necesita el disco de sistema, formateelo mediante el comando
FORMAT /s A:
Copie en ese disco todas las utilidades de MS-DOS necesarias (normalmente, casi
todo lo que hay en el directorio \DOS de su disco), así como los programas
FORMAT.COM y FDISK.EXE. Ahora se debe poder arrancar desde este diskette, y
ejecutar el comando
FDISK C:
para arrancar FDISK. La utilización de FDISK debería ser autoexplicativa, pero
puede consultarse la Documentación de MS-DOS para obtener detalles. Cuando
comience el programa FDISK, utilice el menú de opciones para mostrar la tabla de
particiones, y anote la información que se le muestre. Es importante guardar copia
de su configuración original en caso de que quiera detener la instalación de Linux.
Para borrar una partición, seleccione la opcion del menú "Delete an MS-DOS
Partition or Logical DOS Drive" (Eliminar partición o unidad lógica DOS). Especifique
el tipo de partición que desea borrar (primaria, extendida o lógica) y el numero de la
partición. Verifique todos los avisos que se le presenten.
Para crear una nueva partición para MS-DOS (mas pequeña), seleccione la opcion
de FDISK
"1. Crear partición DOS o unidad lógica DOS". Especifique el tipo de partición
(primaria, extendida o lógica) y el tamaño (en megabytes). FDISK deberá crear la
partición.
Después de hacer esto mediante FDISK, debe abandonar el programa y reformatear
las nuevas particiones. Por ejemplo, si se cambio el tamaño de la partición C: se
tecleara el comando
José Luis Elvira Valenzuela, ITESO-DESI 1999
17
FORMAT /s C:
Ahora puede reinstalar el software desde el backup.
Instalación del software de Linux
Después de modificar sus particiones para reservar espacio a Linux, usted esta
preparado para instalar el software. A continuación se muestra un resumen del
procedimiento a seguir:
 Arrancar con el dispositivo de arranque de Linux (diskette).
 Ejecutar fdisk bajo Linux para crear las particiones de Linux.
 Ejecutar mke2fs y mkswap para crear los sistemas de archivos y el espacio de
intercambio.
 Instalar el software de Linux.
 Finalmente, instalar el cargador LILO en el disco duro, o crear un disco de
arranque con el fin de arrancar su nuevo sistema Linux.
Como hemos dicho, uno (o mas) pasos de los anteriores pueden estar automatizados
por los programas de instalación, según la distribución que este utilizando. Por favor,
consulte la documentación de su distribución para ver las instrucciones especificas.
José Luis Elvira Valenzuela, ITESO-DESI 1999
18
2.2.- Describiendo la arquitectura del disco.
2.2.1.- Geometría física del disco.
Ya que el disco está constantemente girando y las cabezas de lectura y escritura se
mueven como una sola unidad, las búsquedas más eficientes ocurren cuando los
bloques que van a ser leidos o escritos están localizados en el mismo cilindro.
Los datos almacenados en cada plato son leídos y escritos por una serie de cabezas
que flotan sobre las superficies.
José Luis Elvira Valenzuela, ITESO-DESI 1999
19
Sector
Es la menor unidad en el plato y son de 512 bytes cada uno.
Pista
Los sectores son secciones de una pista. Los sectores que forman una pista puede
ser leídos o escritos por una cabeza durante una sola revolución del disco.
Cilindros
Las superficies son formateadas como pistas de datos concéntricas, las cuales se
completan en una rotación completa del disco por una posición de cabeza dada. La
suma de pistas provistas por todas las cabezas en una posición dada es conocida
como cilindro.
Para calcular el tamaño del disco.
(512 bytes) * # sectores por pista * # pistas por cilindro *# cilindros.
Particiones del disco.
Los discos duros usados pueden ser divididos en particiones. Cada partición es
tratada por el sistema operativo como un disco lógico (un dispositivo de disco aparte).
Las ventajas de particionar son :
 Funcionalmente organiza los datos.
 Permite a los superusuarios desarrollar estrategias para respaldar.
Los discos pueden ser divididos en particiones para separar tipos de datos. La razón
más común es facilitar la tarea de respaldar.
José Luis Elvira Valenzuela, ITESO-DESI 1999
20
La tabla de particiones define los límites de cada partición y el número de cilindros en
cada partición.
Las particiones son descritas por un desplazamiento (distancia desde el cilindro 0) y
un tamaño. Los desplazamientos y tamaños para un disco son definidos por una
tabla de particiones.
En el diagrama que sigue, el desplazamiento para la partición 0 es 0 cilindros y su
tamaño es de 46 cilindros. Por lo tanto, el límite de la partición inicia en el cilindro 0 y
termina en el cilindro 45. La partición 1 está en el desplazamiento 46 y su tamaño es
91 cilindros, y así sucesivamente.
Por default la partición 2 describe todo el disco.
José Luis Elvira Valenzuela, ITESO-DESI 1999
21
2.2.2.- Sistemas de archivo.
El sistema de archivo es la parte más visible de un sistema operativo.
Desde el punto de vista del usuario, el aspecto más importante de un sistema de
archivo es la forma en que él lo concibe.
 Lo que constituye un archivo.
 La forma en que los archivos se nominan y protegen.
 Las operaciones que se permiten con los archivos.
Son de importancia considerable para los diseñadores del sistema de archivo y de
menor interés para el usuario.
 Los detalles de si las listas enlazadas o mapas de bits se utilizan para llevar el
control del almacenamiento libre.
 Cuantos sectores hay en un bloque lógico.
Directorios : Un directorio suele contener varias captaciones, una por archivo. La
manera más simple consiste en que el sistema conserve un solo directorio que
contenga todos los archivos de todos los usuarios.
José Luis Elvira Valenzuela, ITESO-DESI 1999
22
Un directorio puede tener varias entradas, donde cada una describe un archivo. Las
entradas pueden contener cierta información acerca del archivo o bien apuntar a
otras estructuras que la tengan.
Diseño de un sistema de archivos.
A los diseñadores de un sistema de archivo les interesa :
 Cómo se maneja el espacio en el disco.
 Cómo se almacenan los archivos.
 Cómo hacer que todo funcione eficiente y confiablemente.
José Luis Elvira Valenzuela, ITESO-DESI 1999
23
Manejo del espacio en el disco.
Son posibles dos estrategias para almacenar un archivo de n bytes :
 Se distribuyen n bytes consecutivos de espacio del disco.
 El archivo se divide en varios bloques (no necesariamente) contiguos.
Los bloques.
Casi todos los sistemas de archivo recortan los archivos en bloques de tamaño fijo
que no necesitan ser adyacentes.
¿Qué tan grande debe de ser el bloque?
Tener una unidad de asignación grande, como un cilindro, significa que todos los
archivos, aun uno de 1 byte, se le asigna un cilindro completo.
Una unidad de asignación pequeña, quiere decir que cada archivo consta de muchos
bloques.
La lectura de cada bloque requiere una localización y una demora rotatoria, de modo
que un archivo de muchos bloques será lenta.
José Luis Elvira Valenzuela, ITESO-DESI 1999
24
¿Cómo llevar el control de los bloques libres?
Se utilizan dos métodos :
 Lista enlazada de bloques de disco, donde cada bloque contenga tantos números
de bloque de disco libres como le quepan.
 Mapa de bits con n bits. Un disco con n bloques, requiere un mapa de bits con n
bits. Los bloques libres suelen ser representados con 1 (unos); los bloques
asignados con 0 (ceros), o viceversa.
José Luis Elvira Valenzuela, ITESO-DESI 1999
25
Almacenamiento en archivos.
Un archivo consta de una sucesión de bloques, el sistema de archivo debe contar
con alguna manera de llevar el control de los bloques de cada archivo.
La forma más evidente (el almacenamiento consecutivo de los bloques), suele no ser
viable por los archivos pueden crecer.
Un método que resulta adecuado consiste en almacenar los bloques de un archivo
como una lista enlazada.
Desventajas :
1.- El número de bytes de datos en un bloque ya no es potencia de dos.
2.- El acceso al azar es costoso, hay que leer todos los bloques anteriores antes de
localizar un dato.
José Luis Elvira Valenzuela, ITESO-DESI 1999
26
El esquema de asignación que usa MS-DOS.
Es la idea de representar un archivo como una lista enlazada conservando los
apuntadores en memoria.
Con cada disco hay una tabla llamada tabla de asignación de archivos (FAT)
 Tiene una captación por cada bloque del disco.
 La captación del directorio de cada archivo da el número de bloque del primero del
archivo.
 Esa ranura en la FAT contiene el número de bloque del siguiente bloque.
José Luis Elvira Valenzuela, ITESO-DESI 1999
27
Nodos i (UNIX)
Por cada archivo de UNIX hay una tabla pequeña (en el disco) llamada nodo i. Esta
contiene información contable y de protección.
2.3.- Clases de instalación del Linux.
Red Hat Linux define tres clases diferentes de instalación o tipos de instalación :
Esas son :
 Workstation
 Server
 Custom
Estas clases nos dan la opción de simplificar el proceso de instalación (con una
pérdida en la flexibilidad de la configuración), o retomando la flexibilidad total con un
proceso de instalación un poco más complejo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
28
Solo la instalación clase “custom” nos permite una flexibilidad total. La instalación
clase “workstation” y clase “server” se instalan automáticamente y pasan al proceso
de instalación omitiendo ciertos pasos.
La clase de instalación “Workstation”.
La clase de instalación “workstation” es la más apropiada para aquel que es nuevo en
el mundo de linux. Contestando unas cuantas preguntas, se puede tener corriendo el
Red Hat Linux en un momento dado.
Una instalación clase “workstation” remueve cualquier partición de linux en todos los
discos duros instalados ( y usa todo el espacio libre sin particionar) para crear las
siguientes particiones :
 Una partición de 64MB para swap.
 Una partición de16MB (montada como /boot) en la cual el kernel del linux y los
archivos relacionados residen.
 Una partición de tamaño variable (el tamaño exacto depende del espacio
disponible en disco) (montada como /) en la cual todos los demas archivos
residen.
Este esquema de particiones del disco resulta en la configuración más sencilla del
sistema de archivos.
 Nota : Se necesitarán aproximadamente 600 Mb de espacio libre en disco
para hacer una instalación clase “workstation”.
Si el sistema actualmente corre Windows, una instalación clase “workstation”
automáticamente configura el sistema a un arranque dual usuando LILO.
La instalación clase “Server”.
Una instalación clase “server” es la más apropiada si se quiere que el sistema
funcione como un servidor basado en Linux, y no se quiere tener un trabajo pesado
en la configuración del sistema.
Una instalación clase server remueve todas las particiones existentes en todos los
discos duros instalados, tal que sólo hay que hacer ésta clase de instalación si se
está seguro que toda la información que tienen los discos se puede borrar. Cuando la
instalación se completa, se encontrarán las siguientes particiones :
 Una partición de 64 Mb para swap .
José Luis Elvira Valenzuela, ITESO-DESI 1999
29
 Una partición de 16 Mb (montada como /boot) en la cual se mantienen el kernel
de linux y los archivos relacionados.
 Una partición de 256 Mb (montada como /).
 Una partición de al menos 512 Mb (montada como /usr).
 Una partición de al menos 512MB (mountada como /home).
 Una partición de 256 Mb (montada como /var).
Este esquema de particiones del disco resulta en una configuración de sistema de
archivos flexible para la mayoría de las tareas de un server.
 Nota : Se necesitarán aproximadamente 1.6 Gb de espacio libre en disco
para hacer una instalación clse “server”.
 Nota : Una instalación clase server removerá culaquier partición existente de
cualquier tipo en todos los discos duros existentes del sistema. Todos los
discos serán borrados sin importar que las particiones que tenga sean de
Linux o no lo sean.
La instalación clase “Custom”.
Una instalación clase “custom” pone el énfasis en la flexibilidad durante una
instalación. queda a decisión de quien instala como el espacio en disco debe ser
particionado. Se tiene control total de los paquetes que serán instalados en el
sistema. También se puede determinar cuando se usará el LILO para arrancar el
sistema.
Para aquellos que ya tengan experiencia previa instalando Red Hat Linux, es el
mismo procedimiento que se había usado en versiones anteriores de Red Hat Linux.
José Luis Elvira Valenzuela, ITESO-DESI 1999
30
2.4.- Instalación del Linux.
Descripción
Para instalar Linux primero es conveniente recoger la información sobre el hardware
disponible: controlador de disco duro, tarjeta de vídeo dispositivo de CD-ROM. . .
Ya que es posible que el proceso de instalación necesite saber determinadas
características sobre el sistema en el que se va a instalar.
Preparación del PC y componentes
Comenzamos una sección dedicada a describir el hardware de la PC según el punto
de vista de Linux. Este punto de vista está heredado de la filosofía Unix, en la que
todo son archivos, incluidos los dispositivos de hardware. Por lo tanto, Linux
virtualiza el acceso a los dispositivos por medio de archivos que suelen estar en el
directorio /dev.
Discos duros
Dentro del PC pueden haber normalmente hasta cuatro discos en total, cada disco
duro tiene un nombre en Linux en función de como se haya instalado. Si el disco duro
es IDE y está funcionando en el primer canal como maestro se llamará /dev/hda, y
si es esclavo /dev/hdb.
En caso de que estemos en el segundo canal IDE los nombres correspondientes
serán /dev/hdc y /dev/hdd.
Es posible confundirse con todo esto y que no se conozca como es el disco duro. En
ese caso hay que tener en cuenta que casi todas las computadoras vienen de fábrica
con un solo disco duro que siempre es el /dev/hda.
Un caso a notar son los lectores de cdrom, los lectores normalmente funcionan
conectados como un disco duro más, aunque hay varias excepciones. Por lo que el
nombre será igual que si fuese un disco duro, en la mayor parte de los sistemas
/dev/hdb.
Si tu disco es SCSI entonces el esquema de nombres es parecido, pasando a ser en
este caso /dev/sd0, /dev/sd1,. . .
José Luis Elvira Valenzuela, ITESO-DESI 1999
31
Unidades de disco flexible
Las unidades de disco flexible en Linux se llaman /dev/fd0 y /dev/fd1,
correspondiendo cada nombre a las unidades A: y B: en DOS. Actualmente, las
computadoras nuevas con una única unidad por lo que sólo podremos utilizar
/dev/fd0.
Puertos de serie
Los dos dispositivos más comunes que se conectan a los puertos de serie suelen ser
ratones y módems. En Linux existe dos maneras de nombrar a los puertos serie, en
la primera se llama al com1 /dev/cua0 y al com2 /dev/cua1. La segunda
manera es /dev/ttyS0 y /dev/ttyS1. Si es posible, se prefiere utilizar la segunda
manera porque la primera está llamada a desaparecer.
Existe un problema con los puertos serie en el hardware de la PC y que puede
provocar problemas desconcertantes. Este problema es independiente del sistema
operativo y consiste en que no se puede utilizar a la vez /dev/ttyS0 y
/dev/ttyS2, ni tampoco /dev/ttyS1 y /dev/ttyS3 (com1, com3 y com2, com4
en DOS, respectivamente).
Por lo general aquellos que tengan un ratón conectado a un puerto de serie lo
tendrán en /dev/ttyS0. Si el ratón es tipo PS/2 entonces estará conectado en un
dispositivo especial llamado /dev/psaux.
Puertos Paralelos
El uso más habitual para un puerto paralelo en la PC es el de conexión a la
impresora. El primer puerto paralelo, donde se suele conectar la impresora, se llama
bajo Linux /dev/lp1.
Tabla de dispositivos y sus nombres en Linux
Tipo de dispositivo
Unidad maestra primer canal IDE
Primera partición primaria
Segunda partición primaria
Tercera partición primaria
Cuarta partición primaria
Primera partición lógica
José Luis Elvira Valenzuela, ITESO-DESI 1999
Nombre en Linux
/dev/hda
/dev/hda1
/dev/hda2
/dev/hda3
/dev/hda4
/dev/hda5
32
Segunda partición lógica
Unidad esclava primer canal IDE
Unidad maestra segundo canal IDE
Unidad esclava segundo canal IDE
Primer disco SCSI
Primera partición primaria
Segunda partición primaria
Segundo disco SCSI
Tercer disco SCSI
Primera unidad lectora de diskettes (A:)
Segunda unidad lectora de diskettes (B:)
Primer puerto serie (com1)
Segundo puerto serie (com2)
Tercer puerto serie (com3)
Cuarto puerto serie (com4)
Puerto para ratón tipo PS/2
Primer puerto paralelo
Segundo puerto paralelo
/dev/hda6
/dev/hdb
/dev/hdc
/dev/hdd
/dev/sda
/dev/sda1
/dev/sda2
/dev/sdb
/dev/sdc
/dev/fd0
/dev/fd1
/dev/ttyS0 o
/dev/cua0
/dev/ttyS1 o
/dev/cua1
/dev/ttyS2 o
/dev/cua2
/dev/ttyS3 o
/dev/cua3
/dev/psaux
/dev/lp1 (kernel
2.2.x /dev/lp0)
/dev/lp2 (kernel
2.2.x /dev/lp1)
Particiones
Los discos duros pueden ser divididos en compartimentos independientes entre sí.
Estos compartimentos son llamados particiones y es el esquema que seguiremos
para repartir el disco duro entre DOS o Windows y Linux.
El número de particiones de un disco duro está limitado a cuatro, aunque una
partición primaria puede ser subparticionada por el sistema operativo que la use. La
información de como está particionado un disco duro es guardada al principio del
mismo, y es un estándar que siguen todos los sistemas operativos, además cada
partición tiene un número que identifica de que tipo es. Suponiendo que tenemos
cuatro particiones primarias en /dev/hda, estas serán denominadas por Linux
/dev/hda1, /dev/hda2, /dev/hda3 y /dev/hda4. Las particiones lógicas que
crea DOS se denominarán a partir de /dev/hda5 en adelante.
Existe un primer sector en el disco duro que no pertenece a ninguna partición
llamado MBR 2 y contiene un pequeño programa de inicio que es el primero en
ejecutarse. El es el encargado de iniciar el sistema operativo, windows y DOS ponen
José Luis Elvira Valenzuela, ITESO-DESI 1999
33
ahí el suyo. Nosotros lo cambiaremos por el de Linux, que se llama LILO 3 , y que
nos permitirá escoger el sistema operativo con el que deseamos arrancar.
Linux necesita al menos una partición primaria para poder funcionar. Aunque lo
mínimo aconsejable es tener dos particiones, una dedicada a Linux para su sistema
de archivos y otra de tamaño menor dedicada a la memoria de intercambio
denominada swap. La memoria de intercambio nos permite funcionar con más
memoria RAM de la que en realidad tenemos, por ejemplo es posible tener 8 Mbytes
de RAM y 20 de swap por lo que nuestro sistema parecerá tener en realidad 28
Mbytes. Por supuesto el disco duro es mucho más lento que la RAM, por lo que sigue
siendo bueno tener mucha RAM.
Linux es capaz de distribuir su sistema de archivos entre varias particiones, esto tiene
una clara ventaja, si una partición falla el resto de los datos correspondientes a otras
particiones sigue intacto.
Aunque una instalación casera y por primera vez será suficiente con tener todo el
sistema de archivos en una sola partición.
FIPS
Para poder crear las particiones de Linux es necesario quitar un trozo a la de
DOS/Windows. Esto normalmente significa destruir la partición actual y volver a crear
unas nuevas, perdiendo todos los datos que pudiese contener. Sin embargo existe un
programa que nos permite reparticionar sin perder los datos, este se llama FIPS, y es
una utilidad que suele venir en todas las distribuciones. En el cdrom de Red Hat
suele estar en el directorio D:\DOSUTILS.
Para utilizar FIPS debemos seguir una serie de pasos:
1. Copiar los datos importantes.
Reparticionar un disco es una operación peligrosa en la que podemos perder todos
los datos, por ello es recomendable copiar todos los datos importantes antes de
hacer nada. De todas formas, aunque no se vaya a instalar Linux ni se vaya a
reparticionar el disco duro, copia es conveniente tener siempre una copia de
seguridad de los datos importantes, los problemas nunca avisan.
2. Leer la documentación de FIPS.
José Luis Elvira Valenzuela, ITESO-DESI 1999
34
Es importante leer la documentación de FIPS, existen muchos aspectos y detalles
correspondientes a particularidades del hardware que se deben tener en cuenta.
3. Defragmentar el disco duro.
Para poder dividir la partición eficientemente es necesario que todos los datos esten
al principio de la misma. Sino es posible que incluso no se pueda hacer. Para
defragmentar puedes usar la utilidad defrag.
4. Crear un disco de arranque.
Se debe crear un diskette de arranque del sistema operativo y copiar a él los archivos
FIPS.EXE, RESTORRB.EXE y ERRORS.TXT. También se debe copiar FDISK.EXE,
si estas en DOS seguramente esté en C:\DOS y si estas con Windows en
C:\WINDOWS\COMMAND. Para crear un diskette de arranque se puede utilizar la
orden FORMAT A: /s
5. Arrancar con el diskette.
Inserta el diskette en la unidad A: y enciende la computadora. La computadora
deberá ejecutar el sistema operativo contenido en ésta. A continuación inicia FIPS.
Este mostrará diversa información y por último te dará la opción de dividir la partición
en DOS, ajustando el tamaño con las teclas de los cursores, a la izquierda y la
derecha.
Un tamaño orientativo para Linux puede ser de unos 800 Mbytes, aunque todo
dependerá del tamaño lo que pienses instalar y del espacio libre de tu disco duro.
Una vez hayas terminado con FIPS este habrá dividido la partición de DOS/Windows
en dos particiones. El espacio de la segunda partición es el que se dedicará a Linux.
6. Borrar la nueva partición.
Es necesario borrar la nueva partición creada para dejar su espacio disponible para
Linux. Esto lo haremos ejecutando FDISK y seleccionando la opción 3 (Eliminar
partición o unidad lógica DOS) y posteriormente seleccionando la opción 1 (Eliminar
partición primaria DOS). Cuidado con la partición que se vaya a eliminar, hay que
recordar que es la segunda partición. Más adelante, durante la instalación de Linux
utilizaremos este espacio disponible para crear las particiones que necesita Linux.
José Luis Elvira Valenzuela, ITESO-DESI 1999
35
Proceso de instalación
Nuestro objetivo es instalar Linux en una computadora con una configuración típica
de fáabrica. Esta es un solo disco duro IDE, con una sola partición primaria dedicada
totalmente a Windows o DOS. Una vez terminada la instalación deberemos tener una
primera partición dedicada a Windows o DOS, una segunda partición dedicada al
espacio de intercambio para Linux y la última para contener todo el sistema de
archivos de Linux. Además instalaremos en el MBR del disco duro el LILO de forma
que podremos escoger entre los dos sistemas operativos instalados a la hora de
arrancar.
Iniciando la instalación
Para poder instalar Linux se ha de iniciar una versión especial del sistema operativo
que contiene el cdrom de la instalación preparada para realizar todo el proceso. Si la
computadora es moderna seguramente pueda iniciar el sistema operativo
directamente desde el CD-ROM con tan solo dejar el disco en la unidad lectora y
reiniciando el ordenador, es posible que se tengan que cambiar algunos parámetros
de la BIOS para poder iniciar desde el CDROM. Si no quieres estar cambiando los
parámetros no te preocupes, simplemente actúa como si tu computadora no tuviese
esta característica.
En caso de no tener una computadora ultramoderna inicia la computadora en modo
MS-DOS. Si usas Windows no vale con una ventanita con MS-DOS, tienes que
salirte de Windows. Una vez que estas en modo MSDOS vete a la unidad de cdrom,
y en el directorio /DOSUTILS ejecuta el comando AUTOBOOT con esta orden se
iniciará Linux directamente desde el CD-ROM y comenzará la instalación. Si por
alguna falla no se puede iniciar la instalación queda la posibilidad de arrancar desde
diskette.
Para hacerlo introduce un diskette sin errores en la unidad y ve al directorio
/DOSUTILS del CD-ROM. Encontraras un programa llamado rawrite.exe si lo
ejecutalo de esta forma:
C:\DOSUTILS>rawrite -f ..\images\boot.img -d a:
Pasos a seguir
Una vez comenzada la instalación es cuestión de seguir cada paso que nos indica la
computadora. La primera pantalla es una presentación de Red Hat Linux, a
continuación veremos que se nos pregunta por el lenguaje que deseamos usar
José Luis Elvira Valenzuela, ITESO-DESI 1999
36
durante la presentación. En la siguiente pantalla deberemos indicar cual es el tipo de
teclado que estamos usando, buscaremos es, correspondiente al teclado español.
Es posible instalar Linux desde diversas fuentes, como puede ser a través de una
red, desde un disco duro o un CD-ROM. En este caso la instalación se está haciendo
desde un CD-ROM por lo que se deberá seleccionar como fuente de la instalación el
CD-ROM. El proceso nos pedirá que insertemos el CD-ROM, cosa que haremos si no
estuviese ya insertado.
El sistema de paquetes de Red Hat tiene la habilidad de poder actualizar una
instalación de una versión anterior respetando en la medida de lo posible la
configuración actual del sistema. Como deseamos crear una instalación
completamente nueva se seleccionará install.
Red Hat nos da tres opciones para escoger los paquetes, que son:
 Workstation
 Server
 Custom
Workstation configura una estación de trabajo y Server un servidor. Custom es la
opción recomendada en esta guía porque permite seleccionar los paquetes que
utilizaremos con Linux. Por lo tanto seleccionamos Custom.
La siguiente pregunta nos pedirá que le indiquemos si existe algún dispositivo SCSI
en el sistema.
Creando las particiones para Linux
El siguiente paso en la instalación consiste en particionar el disco, para ello se dan
dos opciones. Utilizar fdisk o utilizar Disk Druid. El primero de ellos es más potente
pero tambien más arduo de utilizar. Recomendamos utilizar Disk Druid por ser más
sencillo.
En Disk Druid veremos una pantalla en donde la parte superior está dedicada a
información sobre las particiones y la inferior a presentar una serie de opciones. Nos
podremos mover entre y seleccionar opciones con el tabulador y las echas. Disk
Druid permite modificar particiones y establecer como será el sistema de archivos, sin
embargo todos los cambios que se hagan no serán guardados hasta que le
seleccionemos OK. Si en cualquier momento descubrimos que hemos cometido un
error grave podremos recuperar el estado inicial presionando la opción RESET. Una
vez que hayamos seleccionado OK y aceptado los cambios no existe posibilidad de
recuperar el estado inicial.
José Luis Elvira Valenzuela, ITESO-DESI 1999
37
Si se han seguido las instrucciones de esta guía existirá una primera partición para
DOS/Windows y un espacio vacio a continuación. Si este es el caso seleccionaremos
la opción Add para añnadir una nueva partición, Disk Druid nos presentará un menú
en donde la primera pregunta es cual será el punto de montaje (mount point), como
es una partición dedicada por completo a todo el sistema de archivos de Linux habrá
que introducir el símbolo "/" que significa el directorio raíz de Linux. En el
campo size (tamaño) introduciremos el tamaño que habiamos reservado para Linux
menos unos 30 Mbytes que guardaremos para la partición de swap. Por último que
seleccionar el tipo de partición, que será Linux Native.
Para la partición de intercambio volvemos a pulsar la opción Add, en este caso no
introduciremos ningún punto de montaje. El tamaño será lo que queda de disco duro
y el tipo será Linux swap. El tamaño de 30 Mbytes para la partición de intercambio es
solamente orientativo, dependiendo del uso del sistema y de la memoria RAM que
tenga puede que se necesite más o menos, algunas personas dicen que la partición
de intercambio debe de ser el doble de la memoria RAM. En cualquier caso no se
debe poner más de 128 Mbytes a una partición intercambio porque es lo máximo que
admite Linux por partición. Si se necesita más habrá que crear más particiones de
intercambio.
Es posible que Disk Druid te cree alguna de las particiones como extendidas y no
primarias. En este caso recuerda que se llamarán por ejemplo /dev/hda5 o
/dev/hda6. Con las dos particiones creadas podemos salir de Disk Druid,
seleccionaremos OK y nos preguntará si queremos salvar los cambios.
Contestaremos que Sí, si estamos de acuerdo con los cambios realizados.
Continuando la instalación después de haber creado las particiones.
Una vez creadas las particiones el proceso instalación continuará y nos preguntará
cuales serán las particiones de swap. Aceptaremos las que nos indica porque serán
las que hayamos introducido con Disk Druid y seleccionaremos que las formatee
comprobando defectos ( Check for bad partitions). Veremos una barra que indica el
proceso de formateo de la partición de swap.
La siguiente pregunta es que particiones formateará, estas particiones serán las que
contengan el sistema de archivos de Linux. Nos presentará la unica partición que
hemos creado con Disk Druid, aceptaremos todo, incluido que compruebe defectos.
A continuación veremos una lista de componentes a instalar, para alguien novato
puede presentar un problema porque no sabrá lo que es la mayor a de las cosas.
Tranquilidad, los componentes básicos necesarios para el funcionamiento de Linux
José Luis Elvira Valenzuela, ITESO-DESI 1999
38
se instalan automáticamente, lo que se puede seleccionar ahora son grupos de
programas relaccionados, recomendamos que aquello que no se sepa lo que es
que no se instale. Ya habrá tiempo más adelante de instalar y desinstalar cosas.
Existe una opción de instarlo todo, es mejor no seleccionarla porque seguramente no
tengas suficiente disco duro.
Hay otra opción que es seleccionar paquetes individualmente. Si escoges esta última
opción podrás seleccionar los paquetes por grupos relaccionados. Una vez escogidos
los paquetes el proceso de instalación nos informa que se guardará un informe con el
proceso de instalación en /tmp/install.log. Aceptaremos la información sin
preocuparnos demasiado.
Si todo va bien veremos como se crean los sistema de archivos y a continuación
como se empiezan a instalar los paquetes. La pantalla de instalación indicará, entre
otras informaciones, el tiempo que ha transcurrido, el tiempo total estimado y el
tiempo restante estimado.
Una vez instalados todos los paquetes comenzará una configuración básica de Linux.
Lo primero que nos preguntará es por el tipo de ratón que utilizamos, elegir el
modelo. Si no se sabe con seguridad hay que probar con un Microsoft Compatible,
otras opciones comunes suelen ser Mouse Systems o Logitech. Existe una casilla
que pregunta si deseamos emular 3 botones, si el ratón sólo tiene dos botones hay
que seleccionar la casilla. En Linux el botón central de los ratones es muy utilizado,
en los ratones de dos botones la emulación se hace pulsando los botones de la
izquierda y de la derecha a la vez. Si el ratón seleccionado no es del tipo PS/2 se nos
preguntará por el puerto serie donde está instalado. Normalmente es el /dev/cua0,
aunque puede ser otro.
La siguiente configuración es la de red, nos preguntará si la deseamos configurar una
LAN (Local Area Network, Red de Area Local). Seleccionaremos No, ya que el tema
de redes es algo complicado para alguien que empieza con Linux.
El proceso de instalación nos preguntará ahora por la zona horaria donde está
situado nuestra computadora. La casilla que pregunta Hardware clocl set to GMT la
dejaremos sin seleccionar, y buscaremos en la lista siguiente México/Central.
Ahora toca decirle a Linux cuales son los servicios que se ejecutarán en el arranque.
recomendamos dejarlos todos seleccionados.
Configuración de la impresora bajo Linux
Si se ha seleccionado los paquetes de impresión de Red Hat, la instalación
procederá a configurarla. A la pregunta de si deseamos configurar la impresora
José Luis Elvira Valenzuela, ITESO-DESI 1999
39
responderemos que sí. Linux puede utilizar impresoras conectadas a la computadora
que estamos utilizando o impresoras remotas en otras computadoras, veremos una
pantalla para seleccionar entre estas opciones. Escogeremos una impresora
local.
Posiblemente la pantalla que veremos a continuación sobre la configuración de la
impresora puede resultar algo confusa. En ella se pregunta por el nombre de la
impresora (Name of queue) y el directorio donde se guardarán los trabajos de
impresión mientras esperan a ser impresos (Spool directory). Aceptaremos los
valores propuestos como buenos.
Siguiendo la instalación de la impresora se nos preguntará por el dispositivo donde
está conectada.
Si no se está seguro de la respuesta hay que revisar la descripción del hardware de
la PC, bajo el punto de vista de Linux. Normalmente la respuesta es /dev/lp1.
La instalación presentará una lista de impresoras, hay que seleccionar la que se tiene
o la que más se parezca al modelo.
Una vez seleccionado el modelo de impresora, habrá que configurar el tipo de papel
y la resolución de la misma. La resolución hay que poner la que sea más
conveniente, por ejemplo 300x300. Podemos ver una casilla que pregunta si
deseamos que se repare el efecto escalera (Fix stair-stepping of text). El efecto
escalera es un problema que se producen con ciertas impresoras preparadas para
trabajar con DOS, el efecto consiste en que cada nueva línea que se imprime bajo
Linux en una impresora empieza justo debajo de donde terminó la anterior. Saber a
priori si la impresora que se va a utilizar producirá el efecto escalera es complicado,
la lectura del manual de la impresora puede ayudar, pero la prueba de la verdad no
se sabrá hasta que se imprima por primera vez bajo Linux. Selecciona o no la opción
según creas conveniente, si se descubre que no está correcto más adelante se podrá
volver a cambiar la configuración. Como ayuda podemos indicar que si usas una HP
seguramente si sufra el efecto escalera.
Una vez configurada la impresora se nos presentará una pantalla de confirmación de
la configuración. Si se está conforme con esta configuración pulsa en OK.
Establecer el password de root
A continuación hay que introducir una clave (password) para el usuario root. Hay que
Introducir una clave dos veces, la segunda es de confirmación. Es muy importante no
olvidatse de la clave, si lo haces en teoríaa no se podrá recuperar (en la práctica
José Luis Elvira Valenzuela, ITESO-DESI 1999
40
existen varios "trucos" :-) ). Más adelante se discutirá sobre lo que es el root, las
claves y los usuarios.
Es recomendable crear un disco de arranque para situaciones de emergencia en las
que no nos sea posible iniciar Linux por métodos “normales". El proceso de
instalación nos dará ahora la posibilidad de crear un disco de arranque, es
recomendable hacerlo.
Post-instalación
La instalación preguntará donde se desea poner el LILO, para ponerlo en el MBR
seleccionar /dev/hda. No se debe seleccionar /dev/hda1 porque seguramente
destruirá el sistema de archivos de Windows/DOS. La última pregunta es si
deseamos introducir algún parámetro al LILO en el arranque, deja esta opción en
blanco.
Y por fín hemos llegado al final, se nos informará que hemos terminado la
configuración de Linux, y que esta está completa. La siguiente vez que reiniciemos la
computadora arrancara Linux.
Usuarios
La primera vez que arranque Linux después de la instalación nos mostrará una línea
como ésta:
localhost login:
A esta línea se le denomina comunmente el login de Linux y en ella se pide al usuario
sentado delante del terminal que se identifique, lo primero que se introduce en este
caso es un nombre de usuario que sea válido en el sistema. La primera vez el único
nombre existente en el sistema será root, con lo que estamos obligados a introducir
ese nombre. A continuación el sistema mostrará lo siguiente:
localhost login: root
Password:
Con lo que el sistema invita al usuario a que introduzca la clave que tiene asignada el
usuario. En caso del root será la que durante la que pidió el proceso de instalación de
Linux. Mientras se teclea la clave se puede observar que las pulsaciones no son
mostradas en pantalla, esto es para evitar que alguien que esté observando la
pantalla pueda ver una clave ajena.
José Luis Elvira Valenzuela, ITESO-DESI 1999
41
Una vez ha concluido este proceso estaremos identificados para el sistema operativo.
En este momento Linux aceptará ordenes escritas (poco a poco iremos viendo qué
órdenes acepta Linux) y responderá en función de quién sea el usuario del terminal.
En Linux existe un usuario especial que se distingue de los demás usuarios en los
poderes que tiene sobre el sistema. Este usuario es normalmente conocido como
root y no tiene ninguna restricción sobre el sistema. Cuando se instala Linux por
primera vez la única cuenta que existe en el sistema es la del root, debido al poder de
este usuario es peligroso utilizarlo habitualmente para tareas cotidianas que no
necesiten los privilegios de root, esta cuenta se debe dejar para las tareas de
administración y mantenimiento del sistema.
Para el trabajo cotidiano hay que crearse una cuenta personal sin privilegios que nos
proteja a nosotros mismos de cometer errores. Con el comando adduser miguel
crearemos una cuenta para el usuario miguel, el siguiente paso es establecer la clave
que usaría Miguel, esto se hace con passwd miguel. Cuando establezcamos la
clave el sistema preguntará cual es la que se quiere poner, habrá que introducir dos
veces a ciegas la clave.
La sintaxis completa del comando adduser es:
# adduser -u uid -g gid -c nombre -d home -s shell cuenta
donde: uid es el número de usuario, gid el número de grupo, nombre el nombre del
usuario (normalmente, nombre y apellidos), home el directorio principal del usuario,
shell el intérprete de comandos y cuenta es el nombre que pondremos como login. El
usuario root tiene como uid=0 y gid=0.
Para terminar una sesión se deberá escribir la orden exit, con lo que volveremos al
login, hay que hacer notar que terminará una sesión no quiere decir apagar la
computadora ni que Linux deja de funcionar. Simplemente consiste en que un usuario
ha abandonado la terminal y lo deja libre para otro usuario, que puede ser el mismo
pero con otro nombre.
Ahora que ya está creado el usuario miguel, es posible realizar el proceso de
identificación con otro usuario distinto de root. Con lo que ya no es obligatorio trabajar
con root.
Reinicialización del sistema
Una de las característica de Linux es que utiliza la memoria RAM del ordenador para
guardar aquellas zonas del disco duro que son utilizadas más frecuentemente. Esta
técnica permite acelerar los acceso a archivos, ya que los datos leidos una vez del
José Luis Elvira Valenzuela, ITESO-DESI 1999
42
disco duro son tomados directamente de la memoria en las siguientes lecturas. A su
vez las escrituras en archivos no son realizadas directamente sino que son
guardadas en memoria y se llevan a cabo cuando el sistema esta poco ocupado.
Por ello no es recomendable apagar una computadora corriendo Linux sin antes
advertir al sistema de alguna forma que se prepare para ser parado. Si se le advierte
antes el sistema descargará la información que tenga en memoria salvandola en el
disco duro, además mandará una señal de terminación a los procesos que se
encuentren ejecutandose en ese momento para que finalicen.
Para informar a Linux que se desea parar el sistema y apagar la computadora se
utiliza la orden halt, el sistema entonces realizará diversas funciones preparandose
para la parada de la máquina.
Sólo cuando el sistema indique en la pantalla:
The system is halted
System halted
Se podrá apagar la computadora.
Es posible que se desee reiniciar la computadora en lugar de apagarla, entonces la
orden shutdown -r now parará el sistema y después reiniciará la computadora. Un
atajo a esta orden es pulsar las teclas CRTL-ALT-SUP a la vez, tendrá el mismo
efecto.
Este es el proceso que se debe seguir siempre para apagar la computadora cuando
esté funcionando con Linux. Es posible, sin embargo, que sea imposible apagar Linux
adecuadamente, como por ejemplo por un corte de luz en medio de una sesión con
Linux. Linux es capaz de resistirlo y comprobará automáticamente la integridad del
sistema de archivos la próxima vez que se inicia, pero es posible que se pierdan
alguno de los datos que nunca llegaron a escribirse en disco.
LILO
Una vez instalado Linux este será el sistema operativo que se inicie por defecto. Para
escoger otro sistema operativo habrá que escribir el nombre que se le puso a la
partición cuando veamos el prompt de LILO y pulsar ENTER.
LILO boot: dos
Si LILO inicia tan rápido el sistema operativo que tenga por defecto que no da tiempo
de escribir nada, o cuando se escribe no aparece nada en pantalla hay que pulsar la
José Luis Elvira Valenzuela, ITESO-DESI 1999
43
tecla shift (la tecla de las mayúsculas). En caso de que se haya olvidado que nombre
le pusieron a los sistemas operativos instalados se puede pulsar el tabulador y LILO
mostrará una lista.
Muchas veces la computadora es compartida por varias personas que no quieren
saber nada de LILO ni de Linux y lo unico que quieren es que se inicie su sistema
operativo sin problemas. Para ello se puede configurar LILO para que inicie un
sistema operativo por defecto, esto se hace entrando en el sistema como root y
escribiendo la orden :
# lilo -D dos -d 50
Con lo que configuramos DOS como sistema operativo por defecto y que cargue este
a los 5 segundos de no pulsar ninguna tecla. Suponiendo claro, que se haya definido
así el nombre de la partición.
Establecer el nombre de la computadora
El sistema Linux recientemente instalado tiene como nombre localhost, si se desea
personalizar el nombre de la computadora utiliza el comando hostname como root.
Si por ejemplo quieres llamar a la computadora sulaco, se puede hacer con el
comando :
# hostname sulaco
Si se ha configurado una red (al instalar Linux), no se tendrá localhost si no el
nombre que se le hubiese puesto en la configuración.
José Luis Elvira Valenzuela, ITESO-DESI 1999
44
3.- Linux básico
3.1- Navegando por el sistema de archivos.
3.1.1- La estructura de archivos de Linux.
Explorando el Sistema de Archivos
El sistema de archivos es la colección de archivos y la jerarquía de directorios de su
sistema.
Primero cambie al directorio raíz (cd /) y ejecute ls -F. Probablemente vera
estos directorios:
bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user,
usr, y var.
Echemos un vistazo a cada uno de estos directorios.
/bin : /bin es la abreviación de "binaries", o ejecutables. Es donde residen la
mayoría de los programas esenciales del sistema. Use la orden "ls -F /bin"
para listar los archivos. Podrá ver algunas ordenes que reconocerá, como cp, ls y
mv. Estos son los programas para estas ordenes. Cuando usa la orden cp esta
ejecutando el programa /bin/cp. Usando ls -F vera que la mayoría (si no todos)
los archivos de /bin tienen un asterisco ("*") añadido al final de sus nombres. Esto
indica que son archivos ejecutables.
/dev : El siguiente es /dev. Echémosle un vistazo de nuevo con ls -F. Los
"aexhivos" en /dev son conocidos como controladores de dispositivo (device drivers)
son usados para acceder a los dispositivos del sistema y recursos, como discos
duros, modems, memoria, etc. Por ejemplo, de la misma forma que puede leer datos
de un archivo, puede leerla desde la entrada del ratón leyendo /dev/mouse. Los
archivos que comienzan su nombre con fd son controladores de disco flexible. fd0
es la primera unidad de disco flexible, fd1 la segunda. Ahora, alguien astuto se dará
cuenta de que hay mas controladores de dispositivo para unidades de disco flexible
de los que hemos mencionado. Estos representan tipos específicos de discos. Por
ejemplo, fd1H1440 accederá a discos de 3.5" de alta densidad en la unidad de
disco 1. Aquí tenemos una lista de algunos de los controladores de dispositivo mas
usados.
Nótese que incluso aunque puede que no tenga alguno de los dispositivos listados,
tendrá entradas en dev de cualquier forma.
José Luis Elvira Valenzuela, ITESO-DESI 1999
45
/dev/console : hace referencia a la consola del sistema es decir, al monitor
conectado directamente a su sistema.
Los dispositivos /dev/ttyS y /dev/cua son usados para acceder a los puertos
serie. Por ejemplo, /dev/ttyS0 hace referencia a "COM1" bajo MS-DOS. Los
dispositivos /dev/cua son "callout", los cuales son usados en conjunción con un
módem.
Los nombres de dispositivo que comienzan por hd acceden a discos duros.
/dev/hda hace referencia a la totalidad del primer disco duro, mientras que
/dev/hda1 hace referencia a la primera partición en /dev/hda.
Los nombres de dispositivo que comienzan con sd son dispositivos SCSI. Si tiene un
disco duro SCSI, en lugar de acceder a el mediante /dev/hda, deberá acceder a
/dev/sda. Las cintas SCSI son accedidas vía dispositivos st y los CD-ROM SCSI
vía sr.
Los nombres que comienzan por lp acceden a los puertos paralelo. /dev/lp0 hace
referencia a "LPT1" en el mundo MS-DOS.
/dev/null : es usado como "agujero negro" cualquier dato enviado a este
dispositivo desaparece.
>Para que puede ser útil esto?. Bien, si desea suprimir la salida por pantalla de una
orden, podría enviar la salida a /dev/null. Hablaremos mas sobre esto después.
Los nombres que comienzan por /dev/tty hacen referencia a "consolas virtuales"
de su sistema (accesibles mediante las teclas <alt-F1>,<alt-F2>, etc). /dev/tty1
hace referencia a la primera VC, /dev/tty2 a la segunda, etc.
Los nombres de dispositivo que comienzan con /dev/pty son "pseudo-terminales".
Estos son usados para proporcionar una "terminal" a sesiones remotas. Por ejemplo,
si su maquina esta en una red, telnet de entrada usara uno de los dispositivos
/dev/pty.
/etc : /etc contiene una serie de archivos de configuración del sistema. Estos
incluyen /etc/passwd (la base de datos de usuarios), /etc/rc (scripts de
inicialización del sistema), etc.
/sbin : /sbin se usa para almacenar programas esenciales del sistema, que
usara el administrador del sistema.
José Luis Elvira Valenzuela, ITESO-DESI 1999
46
/home : /home contiene los directorios "home" de los usuarios. Por ejemplo,
/home/larry es el directorio del usuario "larry". En un sistema recién instalado, no
habrá ningún usuario en este directorio.
/lib : /lib contiene las imágenes de las librerías compartidas. Estos archivos
contienen código que compartirán muchos programas. En lugar de que cada
programa contenga una copia propia de las rutinas compartidas, estas son
guardadas en un lugar común, en /lib. Esto hace que los programas ejecutables
sean menores y reduce el espacio usado en disco.
/proc : /proc es un "sistema de archivos virtual". Los archivos que contiene
realmente residen en memoria, no en un disco. Hacen referencia a varios procesos
que corren en el sistema, y le permiten obtener información acerca de que programas
y procesos están corriendo en un momento dado.
/tmp : Muchos programas tienen la necesidad de generar cierta información
temporal y guardarla en un archivo temporal. El lugar habitual para esos archivos es
en /tmp.
/usr : /usr es un directorio muy importante. Contiene una serie de subdirectorios
que contienen a su vez algunos de los mas importantes y útiles programas y archivos
de configuración usados en el sistema.
Los directorios descritos arriba son esenciales para que el sistema este operativo,
pero la mayoría de las cosas que se encuentran en /usr son opcionales para el
sistema. De cualquier forma, son estas cosas opcionales las que hacen que el
sistema sea útil e interesante. Sin /usr, tendría un sistema aburrido, solo con
programas como cp y ls. usr contiene la mayoría de los paquetes grandes de
programas y sus archivos de configuración.
/usr/X386 : /usr/X386 contiene el sistema X Windows si usted lo instala. El
sistema X Windows es un entorno gráfico grande y potente el cual proporciona un
gran numero de utilidades y programas gráficos, mostrados en "ventanas" en su
pantalla. Si esta familiarizado con los entornos Microsoft Windows o Macintosh, X
Window le será muy familiar. El directorio /usr/X386 contiene todos los ejecutables
de X Window, archivos de configuración y de soporte.
/usr/bin : /usr/bin es el almacén real de programas del sistema UNIX.
Contiene la mayoría de los programas que no se encuentran en otras partes como
/bin.
José Luis Elvira Valenzuela, ITESO-DESI 1999
47
/usr/etc : Como /etc contiene diferentes archivos de configuración y
programas del sistema, /usr/etc contiene incluso mas que el anterior. En general,
los archivos que se encuentran en /usr/etc/ no son esenciales para el sistema, a
diferencia de los que se encuentran en /etc, que si lo son.
/usr/include : /usr/include contiene los archivos de cabecera para el
compilador de C. Estos archivos (la mayoría de los cuales terminan en .h, de
"header") declaran estructuras de datos, sub-rutinas y constantes usados en la
escritura de programas en C. Los archivos que se encuentran en
/usr/include/sys son generalmente usados en la programación de UNIX a nivel
de sistema. Si esta familiarizado con el lenguaje de programación C, aquí encontrará
los archivos de cabecera como stdio.h, el cual declara funciones como printf().
/usr/g++-include : /usr/g++-include contiene archivos de cabecera para
el compilador de C++ (muy parecido a /usr/include).
/usr/lib : /usr/lib contiene las librerías equivalentes "stub" y "static" a los
archivos encontrados en /lib. Al compilar un programa, este es "enlazado" con las
librerías que se encuentran en /usr/lib, las cuales dirigen al programa a buscar
en /lib cuando necesita el código de la librería. Además, varios programas guardan
archivos de configuración en /usr/lib.
/usr/local : /usr/local es muy parecido a /usr contiene programas y
archivos no esenciales para el sistema, pero que hacen el sistema mas divertido y
excitante. En general, los programas que se encuentran en /usr/local son
específicos de su sistema esto es, el directorio /usr/local difiere bastante entre
sistemas UNIX. Aquí encontrara programas grandes como TEX (sistema de formateo
de documentos) y Emacs (gran y potente editor), si los instala.
/usr/man : Este directorio contiene las páginas de manual. Hay dos subdirectorios
para cada página "sección" de las páginas (use la orden man man para mas
detalles). Por ejemplo, /usr/man/man1 contiene los fuentes (es decir, los originales
por formatear) de las páginas de manual de la sección 1, y /usr/man/cat1 las
paginas ya formateadas de la sección 1.
/usr/src : /usr/src contiene el código fuente (programas por compilar) de
varios programas de su sistema. El más importante es /usr/src/Linux, el cual
contiene el código fuente del Núcleo de Linux.
/var : /var contiene directorios que a menudo cambian su tamaño o tienden a
crecer. Muchos de estos directorios solían residir en /usr, pero desde que estamos
José Luis Elvira Valenzuela, ITESO-DESI 1999
48
tratando de dejarlo relativamente inalterable, los directorios que cambian a menudo
han sido llevados a /var. Algunos de estos directorios son:
/var/adm : /var/adm contiene varios archivos de interés para el administrador
del sistema, específicamente históricos del sistema, los cuales recogen errores o
problemas con el sistema. Otros archivos guardan las sesiones de presentación en el
sistema, así como los intentos fallidos.
/var/spool : /var/spool contiene archivos que van a ser pasados a otro
programa. Por ejemplo, si su maquina está conectada a una red, el correo de llegada
será almacenado en /var/spool/Mail hasta que lo lea o lo borre. Artículos
nuevos de las “news" tanto salientes como entrantes pueden encontrarse en
/var/spool/news, etc.
José Luis Elvira Valenzuela, ITESO-DESI 1999
49
3.1.2- Comandos básicos.
Desplegando el directorio actual.
El directorio en el cual se está trabajando actualmente, se refiere al directorio actual.
Formato del comando :
pwd
¿Cómo desplegar el directorio actual?
$ pwd
/home/jluis
Cambiando de directorio.
Formato del comando :
cd nombre_del_directorio
1.- Cambiando de directorios usando el nombre de ruta relativo.
$ cd encoder
entra al directorio llamado encoder que está debajo del directorio actual.
2.- Cambiando de directorios usando el nombre de ruta absoluto :
$ cd /etc/mail
$ cd /usr
3.- Usar el comando cd sin parámetros para cambiar al directorio home del usuario.
$ cd
José Luis Elvira Valenzuela, ITESO-DESI 1999
50
Abreviaciones para el nombre de ruta.
Símbolo
.
..
~
Significado
Directorio actual
Directorio padre
Ruta absoluta al directorio home (solo
disponible en algunos shells)
Usando las abreviaciones de nombres de ruta con el comando cd para moverse en la
estructura de directorios.
$ pwd
/usr/local/man/man1
$ cd ..
$ pwd
/usr/local/man
$ cd ../..
$ pwd
/usr
$ cd ~
$ pwd
/home/jluis
Desplegando directorios.
Formato del comando :
ls [opciones] [ruta]
Listando directorios y archivos.
$ pwd
/home/jluis
$ ls /usr/etc
im_palette.pal imrc
$ ls /usr/games
banner
José Luis Elvira Valenzuela, ITESO-DESI 1999
51
Desplegando archivos ocultos.
Todos los nombres de archivos que comienzan con punto son archivos ocultos.
Usar ls –a para desplegar los archivos ocultos.
$ ls -a
.
..
.AfterStep-errors
.FVWM2-errors
.Xauthority
.addressbook
.addressbook.lu
.bash_history
.bash_profile
.ncftp
.netscape
.newsrc-news
.pine-debug1
.pinerc
.sversionrc
.user.rdb
.wm_style
.x11amp
.xsession-errors
GNUstep
Office50
Xrootenv.0
amp-gepi
encoder
freeamp
mail
mp3
new.xinitrc
ns_imap
nsmail
outside.gz
x11amp
Desplegando tipos de archivos.
Usar el comando ls –F para desplegar los tipos de archivos. Los tipos de archivos
son desplegados con los siguientes símbolos.
$ cd
$ ls -F
GNUstep/
Office50/
Xrootenv.0
a.out*
amp-gepi/
encoder/
freeamp/
hola.c
mail/
mp3/
new.xinitrc
ns_imap/
nsmail/
outside.gz
x11amp/
El –F despliega los siguientes símbolos :
Tipo de archivo
Directorio
Ejecutable
Liga simbólica
Cualquier otro
José Luis Elvira Valenzuela, ITESO-DESI 1999
Símbolo
/
*
@
(nada)
52
Desplegando una lista extendida.
Usar el comando ls –l para desplegar una lista de archivos en el directorio actual
en el formato largo.
$ ls -l
total 4395
drwxr-xr-x
drwxr-xr-x
-rw-r--r--rwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
-rw-r--r-drwx-----drwxr-xr-x
-rw-r--r--
Tipo de
archivo y
permisos
- archivo
d
directorio
l liga
simbólica
3
21
1
1
3
3
3
1
2
2
1
jluis
jluis
jluis
jluis
jluis
jluis
jluis
jluis
jluis
jluis
jluis
users
users
users
users
users
users
users
users
users
users
users
1024
1024
396
4148
1024
1024
1024
60
1024
1024
137
Jan 6 10:13 GNUstep
Jan 4 09:21 Office50
Jan 15 10:23 Xrootenv.0
Jan 27 10:17 a.out
Jan 5 13:14 amp-gepi
Jan 6 10:12 encoder
Jan 5 12:30 freeamp
Jan 27 10:17 hola.c
Jan 4 10:53 mail
Jan 5 13:19 mp3
Jan 4 11:20 new.xinitrc
Con Dueño Grupo dueño Tamaño Fecha y hora
Nombre del
de modificación archivo.
tado
r de
liga
s
Listando directorios individuales.
Usar el comando ls –ld para desplegar información detallada acerca de un
directorio pero no su contenido.
$ ls -l freeamp
total 785
drwxr-xr-x
9 jluis
-rw-r--r-1 jluis
users
users
1024 Jan
797987 Jan
$ ls -ld freeamp
drwxr-xr-x
3 jluis
users
1024 Jan
José Luis Elvira Valenzuela, ITESO-DESI 1999
5 13:23 freeamp-1.1.0
5 12:28 freeamp-1.1.0.tar.gz
5 12:30 freeamp
53
Listando subdirectorios.
Usar el comando ls –R para desplegar los contenidos de un directorio y todos sus
subdirectorios.
$ ls -F
Makefile.am
Makefile.in
localfileinput.cpp
localfileinput.h
win32/
$ ls -RF
Makefile.am
Makefile.in
localfileinput.cpp
localfileinput.h
win32/
win32:
prj/
win32/prj:
fileinput.def
fileinput.dsp
fileinput.dsw
fileinput.mak
Comodines.
Asterisco (*)
El asterisco representa cero o más caracteres. El asterisco seguido se le nombra
como el un carácter comodín.
El asterisco puede ser usado donde se usa un nombre de archivo o directorio.
$ ls
GNUstep
Office50
Xrootenv.0
a.out
amp-gepi
encoder
freeamp
hola.c
mail
mp3
new.xinitrc
ns_imap
nsmail
outside.gz
x11amp
$ ls n*
new.xinitrc
ns_imap:
iteso.mx
nsmail:
Drafts
Inbox
pop
Sent
Trash
José Luis Elvira Valenzuela, ITESO-DESI 1999
Unsent Messages
54
El asterisco puede remplazar nombres para directorios.
$ ls -F
GNUstep/
Office50/
Xrootenv.0
a.out*
amp-gepi/
encoder/
freeamp/
hola.c
mail/
mp3/
new.xinitrc
ns_imap/
nsmail/
outside.gz
x11amp/
$ ls e*
BladeEnc072-i386-linux
BladeEnc072-i386-linux.tar.gz
$ ls encoder
BladeEnc072-i386-linux
BladeEnc072-i386-linux.tar.gz
Comodines
Signo de interrogación (?)
El signo de interrogación es un comodín que coincide con cualquier carácter.
$ ls
GNUstep
Office50
Xrootenv.0
a.out
amp-gepi
encoder
freeamp
hola.c
mail
mp3
new.xinitrc
ns_imap
nsmail
outside.gz
x11amp
$ ls ?.out
a.out
$ ls ?
ls: No match.
José Luis Elvira Valenzuela, ITESO-DESI 1999
55
Creando directorios.
Formato del comando
mkdir nombre_directorio [nombre_directorio ...]
$ mkdir hola
$ cd hola
$ mkdir reportes
$ ls -dl reportes
drwxr-xr-x
2 jluis
users
$ mkdir reportes/semanales
$ ls -l reportes
total 1
drwxr-xr-x
2 jluis
users
semanales
$ mkdir uno dos tres
$ ls -F
dos/
reportes/ tres/
1024 Jan 27 12:07 reportes
1024 Jan 27 12:08
uno/
Borrando directorios.
Formato del comando.
rmdir directorio
rm –r directorio
Borrando un directorio vacío.
$ rmdir dos
$ ls -F
reportes/ tres/
uno/
Borrando un directorio que no está vacío.
$rm -r reportes
$ls -F
tres/ uno/
José Luis Elvira Valenzuela, ITESO-DESI 1999
56
Borrando archivos y directorios en forma intercativa
$ rm -ir hola
rm: descend directory `hola'? y
rm: descend directory `hola/uno'? y
rm: remove directory `hola/uno'? n
rm: descend directory `hola/tres'? y
rm: remove directory `hola/tres'? y
rm: remove directory `hola' (might be nonempty)? y
rm: hola: Directory not empty
José Luis Elvira Valenzuela, ITESO-DESI 1999
57
3.2- Comandos para archivos.
3.2.1.- Desplegando archivos.
Formato del comando
cat nombre_archivo
Deplegar en pantalla el contenido del archivo /etc/passwd
$ cat /etc/passwd
root:k8KSZnL1xnmCY:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
mail:*:8:12:mail:/var/spool/mail:
news:*:9:13:news:/var/spool/news:
operator:*:11:0:operator:/root:
games:*:12:100:games:/usr/games:
gopher:*:13:30:gopher:/usr/lib/gopher-data:
ftp:*:14:50:FTP User:/home/ftp:
nobody:*:99:99:Nobody:/:
postgres:!!:100:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash
jluis:LRo9u120e6q.U:101:100:Jose Luis Elvira
Valenzuela:/home/jluis:/bin/tcsh
luis:mx3g7R2rNK7.Y:102:100:Luis Eduardo Perez
Bernal:/home/luis:/bin/tcsh
José Luis Elvira Valenzuela, ITESO-DESI 1999
58
Usando el comando more
Para desplegar el contenido de un archivo hasta que se llena una pantalla, al llenarse
esperará a que el usuario presione el teclado para continuar.
Formato
more archivo
Al aparecer la indicación –-More—- al final de la pantalla, se pueden usar cualquiera
de las siguientes teclas de control.
Teclas de control.
Espacio
Enter
f
h
Q
/cadena
José Luis Elvira Valenzuela, ITESO-DESI 1999
Propósito.
Pasar a la siguiente pantalla.
Pasar a la siguiente línea.
Saltar una pantalla hacia delante.
Para desplegar el menú de ayuda del
comando more.
Para salir y regresar al prompt
Para buscar una cadena hacia adelante.
59
Accesando los manuales en línea.
Formato del comando
man comando
$ man more
MORE(1)
UNIX Reference Manual
MORE(1)
NAME
more - file perusal filter for crt viewing
SYNOPSIS
more [-dlfpcsu] [-num] [+/ pattern] [+ linenum] [file ...]
DESCRIPTION
More is a filter for paging through text one screenful at a time. This
version is especially primitve. Users should realize that less(1) provides more(1) emulation and extensive enhancements.
OPTIONS
Command line options are described below. Options are also taken from
the environment variable MORE (make sure to precede them with a dash
(``-'')) but command line options will override them.
-num
This option specifies an integer which is the screen size (in
lines).
:
José Luis Elvira Valenzuela, ITESO-DESI 1999
60
Usando el comando head
Para desplegar las primeras n líneas de un archivo. Las primeras 10 es el default si
no se le indica cuantas.
Formato :
head [-n] archivo(s)
$ head -5 /etc/passwd
root:k8KSZnL1xnmCY:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
Usando el comando tail
Para desplegar las últimas n líneas de un archivo. Las últimas 10 es el default si no
se le indica cuantas.
Formato :
tail [-n] archivo(s)
$ tail -4 /etc/passwd
nobody:*:99:99:Nobody:/:
postgres:!!:100:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash
jluis:LRo9u120e6q.U:101:100:Jose Luis Elvira
Valenzuela:/home/jluis:/bin/tcsh
luis:mx3g7R2rNK7.Y:102:100:Luis Eduardo Perez
Bernal:/home/luis:/bin/tcsh
José Luis Elvira Valenzuela, ITESO-DESI 1999
61
El comando touch.
Para crear nuevos archivos vacíos.
Formato :
touch nombre(s)
$ touch a b c
$ ls -F
a
b
c
uno/
3.2.2.- Manejo de archivos.
Copia de archivos
La copia de archivos es efectuada por la orden cp:
Formato del comando :
cp [-opciones] fuente destino
Como copiar archivos.
/home/larry/foo# cp /etc/termcap .
/home/larry/foo# cp /etc/shells .
/home/larry/foo# ls -F
shells
termcap
/home/larry/foo# cp shells bells
/home/larry/foo# ls -F
bells
shells
termcap
/home/larry/foo#
La orden cp copia los archivos listados en la línea de comandos al archivo o
directorio pasado como último argumento. Nótese como se usa el directorio "." para
referirnos al directorio actual.
José Luis Elvira Valenzuela, ITESO-DESI 1999
62
Moviendo archivos
La orden mv mueve archivos en lugar de copiarlos. La sintaxis es muy sencilla.
Formato :
mv [-opciones] fuente destino
Como mover o renombrar archivos.
/home/larry/foo# mv termcap sells
/home/larry/foo# ls -F
bells
sells
shells
/home/larry/foo#
Nótese como termcap ya no existe, en su lugar esta el archivo sells. Esta orden
puede usarse para renombrar archivos, como acabamos de hacer, pero también para
mover archivos a directorios diferentes.
Nota: mv y cp sobreescribirán los archivos destino (si ya existen) sin consultar. Sea
cuidadoso cuando mueva un archivo a otro directorio: puede haber ya un archivo con
el mismo nombre que será sobrescrito.
Borrando archivos y directorios
Para borrar un archivo, use la orden rm. ("rm" viene de "remove").
Formato :
rm [-opciones] nombre del archivo
rm –i nombre del archivo
rm –r nombre del directorio
/home/larry/foo# rm bells sells
/home/larry/foo# ls -F
shells
/home/larry/foo#
Nos hemos quedado solo con el archivo "shells", pero no nos quejaremos. Nótese
que rm por defecto no preguntara antes de borrar un archivo luego, sea cuidadoso.
José Luis Elvira Valenzuela, ITESO-DESI 1999
63
Una orden relacionada con rm es rmdir. Esta orden borra un directorio, pero solo si
esta vacío. Si el directorio contiene archivos o subdirectorios, rmdir se quejara.
José Luis Elvira Valenzuela, ITESO-DESI 1999
64
3.3.- Seguridad en los archivos.
3.3.1.- Permisos.
Conceptos de permisos de archivos
Al ser UNIX un sistema multiusuario, para proteger archivos de usuarios particulares
de la manipulación por parte de otros, UNIX proporciona un mecanismo conocido
como permisos de archivos. Este mecanismo permite que archivos y directorios
"pertenezcan" a un usuario en particular. Por ejemplo, como Larry creo archivos en
su directorio "home", Larry es el propietario de esos archivos y tiene acceso a ellos.
UNIX también permite que los archivos sean compartidos entre usuarios y grupos de
usuarios. Si Larry lo desea, podría restringir el acceso a sus archivos de forma que
ningún otro usuario tenga acceso. De cualquier modo, en la mayoría de los sistemas
por defecto se permite que otros usuarios puedan leer tus archivos pero no
modificarlos o borrarlos.
Como hemos explicado arriba, cada archivo pertenece a un usuario en particular. Por
otra parte, los archivos también pertenecen a un grupo en particular, que es un
conjunto de usuarios definido por el sistema. Cada usuario pertenece al menos a un
grupo cuando es creado. El administrador del sistema puede hacer que un usuario
tenga acceso a mas de un grupo.
Los grupos usualmente son definidos por el tipo de usuarios que acceden a la
maquina. Por ejemplo, en un sistema UNIX de una universidad, los usuarios pueden
ser divididos en los grupos estudiantes, dirección, profesores e invitados. Hay
también unos pocos grupos definidos por el sistema (como bin y admin) los cuales
son usados por el propio sistema para controlar el acceso a los recursos muy
raramente los usuarios normales pertenecen a estos grupos.
Los permisos están divididos en tres tipos:
 Lectura.
 Escritura
 Ejecución.
Estos permisos pueden ser fijados para tres clases de usuarios:
 El propietario del archivo.
 El grupo al que pertenece el archivo.
 Para todos los usuarios independientemente del grupo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
65
El permiso de lectura permite a un usuario leer el contenido del archivo o en el caso
de un directorio, listar el contenido del mismo (usando ls). El permiso de escritura
permite a un usuario escribir y modificar el archivo. Para directorios, el permiso de
escritura permite crear nuevos archivos o borrar archivos ya existentes en dicho
directorio. Por último, el permiso de ejecución permite a un usuario ejecutar el archivo
si es un programa o guión del intérprete de comandos. Para directorios, el permiso de
ejecución permite al usuario cambiar al directorio en cuestion con cd.
Interpretando los permisos de archivos
Veamos un ejemplo del uso de permisos de archivos. Usando el comando ls con la
opcion -l se mostrará un listado "largo" de los archivos, el cual incluye los permisos
de archivos.
/home/larry/foo# ls -l stuff
-rw-r--r--
1 larry
users
505 Mar 13 19:05 stuff
/home/larry/foo#
El primer campo impreso en el listado representa los permisos de archivos. El tercer
campo es el propietario del archivo (larry), y el cuarto es el grupo al cual pertenece el
archivo (users). Obviamente, el ultimo campo es el nombre del archivo (stuff), y los
demás campos los trataremos mas adelante.
Este archivo pertenece a larry y al grupo users. Echemos un vistazo a los permisos.
La cadena -rw-r--r-- nos informa, por orden, de los permisos para el propietario,
el grupo del archivo y cualquier otro usuario.
El primer carácter de la cadena de permisos ("-") representa el tipo de archivo. El "-"
significa que es un archivo regular. Las siguientes tres letras ("rw-") representan los
permisos para el propietario del archivo, larry. El "r" para "lectura" y "w" para
escritura. Luego Larry tiene permisos de lectura y escritura para el archivo stuff.
Como ya mencionamos, aparte de los permisos de lectura y escritura esta el permiso
de "ejecución", representado por una "x". Como hay un "-" en lugar del "x", significa
que Larry no tiene permiso para ejecutar ese archivo. Esto es correcto, puesto que
stuff no es un programa de ningun tipo. Por supuesto, como el archivo es de Larry,
puede darse a si mismo permiso de ejecución si lo desea. Esto será cubierto en
breve.
José Luis Elvira Valenzuela, ITESO-DESI 1999
66
Los siguientes tres caracteres, r-- representan los permisos para los miembros del
grupo. El grupo al que pertenece el archivo es users. Como solo aparece un "r"
cualquier usuario que pertenezca al grupo users puede leer este archivo.
Los últimos tres caracteres, también r--, representan los permisos para cualquier
otro usuario del sistema (diferentes del propietario o de los pertenecientes al grupo
users). De nuevo, como solo esta presente el "r", los demás usuarios pueden leer el
archivo, pero no escribir en el o ejecutarlo.
Aqui tenemos otros ejemplos de permisos de grupo.
-rwxr-xr-x
El propietario del archivo puede leer, escribir y ejecutar el archivo.
Los usuarios pertenecientes al grupo del archivo, y todos los demás usuarios pueden
leer y ejecutar el archivo.
-rw------El propietario del archivo puede leer y escribir. Nadie mas puede
acceder al archivo.
-rwxrwxrwx
Todos los usuarios pueden leer, escribir y ejecutar el archivo.
Dependencias
Es importante darse cuenta de que los permisos de un archivo también dependen de
los permisos del directorio en el que residen. Por ejemplo, aunque un archivo tenga
los permisos -rwxrwxrwx, otros usuarios no podrán acceder a el a menos que
también tengan permiso de lectura y ejecución para el directorio en el cual se
encuentra el archivo.
Si Larry quiere restringir el acceso a todos sus archivos, podría simplemente poner
los permisos de su directorio "home" : /home/larry a -rwx------. De esta forma
ningún usuario podrá acceder a su directorio ni a ninguno de sus archivos o
subdirectorios. Larry no necesita preocuparse de los permisos individuales de cada
uno de sus archivos.
En otras palabras, para acceder a un archivo, debes de tener permiso de ejecución
de todos los directorios a lo largo del camino de acceso al archivo, además de
permiso de lectura (o ejecución) del archivo en particular.
Habitualmente, los usuarios de un sistema UNIX son muy abiertos con sus archivos.
Los permisos que se dan a los archivos usualmente son -rw-r--r--, lo que permite
a todos los demás usuarios leer los archivos, pero no modificarlos de ninguna forma.
Los directorios, usualmente tienen los permisos -rwxr-xr-x, lo que permite que los
José Luis Elvira Valenzuela, ITESO-DESI 1999
67
demás usuarios puedan moverse y ver los directorios, pero sin poder crear o borrar
nuevos archivos en ellos.
Muchos usuarios pueden querer limitar el acceso de otros usuarios a sus archivos.
Poniendo los permisos de un archivo a -rw------- no se permitirá a ningún otro
usuario acceder al archivo. Igualmente, poniendo los permisos del directorio a -rwx----- no se permitirá a los demás usuarios acceder al directorio en cuestion.
3.3.2.- Modificando los permisos.
El comando chmod se usa para establecer los permisos de un archivo. Solo el
propietario puede cambiar los permisos del archivo. La sintaxis de chmod es:
chmod {a,u,g,o}{+,-}{r,w,x} nombres de archivos
Brevemente, indicamos a que usuarios afecta all, user, group u other. Entonces
se especifica si se están añadiendo permisos (+) o quitándolos (-). Finalmente se
especifica que tipo de permiso Read, write o execute. Algunos ejemplos:
chmod
a+r
chmod +r
toma a.
stuff
stuff
Da a todos los usuarios acceso al archivo.
Como arriba si no se indica a, u, g u o por defecto se
chmod og-x stuff
excepto al propietario.
Quita permisos de ejecución a todos los usuarios
chmod
Permite al propietario leer, escribir y ejecutar el archivo.
u+rwx
stuff
chmod o-rwx stuff Quita permisos de lectura, escritura y ejecución a todos
los usuarios menos al propietario y a los usuarios del grupo del archivo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
68
3.4.- Permisos adicionales para archivos.
3.4.1.- Permisos por default.
3.4.2.- Enlaces.
Manejando enlaces de archivos
Los enlaces le permiten dar a un único archivo múltiples nombres. Los archivos son
identificados por el sistema por su numero de inodo, el cual es el único identificador
del archivo para el sistema de archivos. Un directorio es una lista de números de
inodo con sus correspondientes nombres de archivo. Cada nombre de archivo en un
directorio es un enlace a un inodo particular.
Enlaces duros (Hard links)
La orden ln es usada para crear múltiples enlaces para un archivo. Por ejemplo,
supongamos que tiene un archivo foo en un directorio. Usando ls -i, veremos el
numero de inodo para el archivo.
# ls -i foo
22192 foo
#
Aquí, el archivo foo tiene el numero de inodo 22192 en el sistema de archivos.
Podemos crear otro enlace a foo, llamado bar:
# ln foo bar
Con ls -i veremos que los dos archivos tienen el mismo inodo.
# ls -i foo bar
22192 bar
22192 foo
#
Ahora, accediendo a foo o a bar accederemos al mismo archivo. Si hace cambios
en foo, estos cambios también serán efectuados en bar. Para todos los efectos, foo
y bar son el mismo archivo.
Estos enlaces son conocidos como enlaces duros (Hard links) porque directamente
crean el enlace al inodo. Nótese que solo podemos crear enlaces duros entre
José Luis Elvira Valenzuela, ITESO-DESI 1999
69
archivos del mismo sistema de archivos; enlaces simbólicos (ver mas adelante) no
tienen esta restricción.
Cuando borra un archivo con rm, está solamente borrando un enlace a un archivo. Si
usa el comando
# rm foo
solo el enlace de nombre foo es borrado; bar todavía existirá. Un archivo es solo
definitivamente borrado del sistema cuando no quedan enlaces a el. Usualmente, los
archivos tienen un único enlace, por lo que el uso de rm los borra. Pero si el archivo
tiene múltiples enlaces, el uso de rm solo borrara un único enlace; para borrar el
archivo, deberá borrar todos los enlaces del archivo.
La orden ls -l muestra el numero de enlaces a un archivo (entre otra información).
# ls -l foo bar
-rw-r--r-2 root
-rw-r--r-2 root
#
root
root
12 Aug
12 Aug
5 16:51 bar
5 16:50 foo
La segunda columna en el listado, "2", especifica el número de enlaces al archivo.
Así resulta que un directorio no es más que un archivo que contiene información
sobre la translación enlace a inodo. También, cada directorio tiene al menos dos
enlaces duros en el: "." (un enlace apuntando a si mismo) y ".." (un enlace
apuntando al directorio padre). En el directorio raíz (/), el enlace ".." simplemente
apunta a /.
Enlaces simbólicos
Los enlaces simbólicos son otro tipo de enlace, que es diferente al enlace duro. Un
enlace simbólico permite dar a un archivo el nombre de otro, pero no enlaza el
archivo con un inodo.
La orden ln -s crea un enlace simbólico a un archivo. Por ejemplo, si usamos la
orden :
# ln -s foo bar
crearemos un enlace simbólico bar apuntando al archivo foo. Si usamos ls -i,
veremos que los dos archivos tienen inodos diferentes, en efecto.
José Luis Elvira Valenzuela, ITESO-DESI 1999
70
# ls -i foo bar
22195 bar
22192 foo
#
De cualquier modo, usando ls -l vemos que el archivo bar es un enlace simbólico
apuntando a foo.
# ls -l foo bar
lrwxrwxrwx
1 root
-rw-r--r-1 root
#
root
root
3 Aug
12 Aug
5 16:51 bar -> foo
5 16:50 foo
Los bits de permisos en un enlace simbólico no se usan (siempre aparecen como
rwxrwxrwx). En su lugar, los permisos del enlace simbólico son determinados por
los permisos del archivo "apuntado" por el enlace (en nuestro ejemplo, el archivo
foo).
Funcionalmente, los enlaces duros y simbólicos son similares, pero hay algunas
diferencias. Por una parte, puede crear un enlace simbólico a un archivo que no
existe; lo mismo no es cierto para enlaces duros. Los enlaces simbólicos son
procesados por el núcleo de forma diferente a los duros, lo cual es solo una
diferencia técnica, pero a veces importante. Los enlaces simbólicos son de ayuda
puesto que identifican al archivo al que apuntan; con enlaces duros no hay forma facil
de saber que archivo esta enlazado al mismo inodo.
Los enlaces se usan en muchas partes del sistema Linux. Los enlaces simbólicos son
especialmente importantes para las imagenes de las librerias compartidas en /lib.
3.4.3.- Control de la modificación de archivos.
José Luis Elvira Valenzuela, ITESO-DESI 1999
71
3.5.- Metacaracteres y redirección.
3.5.1.- Metacaracteres.
Entrada y salida estándard
Muchos comandos UNIX toman su entrada de algo conocido como entrada estándard
y envían su salida a la salida estándar (a menudo abreviado como "stdin" y
"stdout"). El interprete de comandos configura el sistema de forma que la entrada
estándar es el teclado y la salida la pantalla.
Veamos un ejemplo con el comando cat. Normalmente cat lee datos de los archivos
cuyos nombres se pasan como argumentos en la linea de comandos y envía estos
datos directamente a la salida estándar. Luego, usando el comando
/home/larry/papers# cat history-final masters-thesis
mostrara por pantalla el contenido del archivo history-final seguido por
masters-thesis.
Si no se le pasan nombres de archivos a cat como parámetros, leerá datos de stdin
y los enviara a stdout. Veamos un ejemplo.
/home/larry/papers# cat
Hello there.
Hello there.
Bye.
Bye._____
<ctrl-D>
/home/larry/papers#
Como se puede ver, cada línea que el usuario teclea (impresa en negrita) es
inmediatamente reenviada al monitor por cat. Cuando se esta leyendo de la entrada
estándar, los comandos reconocen el fin de la entrada de datos cuando reciben el
carácter EOT (end-of-text, fin de texto). Normalmente es generado con la
combinación <ctrl-D>.
José Luis Elvira Valenzuela, ITESO-DESI 1999
72
Veamos otro ejemplo. El comando sort toma como entrada líneas de texto (de nuevo
leerá desde stdin si no se le proporcionan nombres de archivos en la linea de
comandos), y devuelve la salida ordenada a stdout. Pruebe lo siguiente:
/home/larry/papers# sort
bananas
carrots
apples
<ctrl-D>
apples
bananas
carrots
/home/larry/papers#
Podemos ordenar alfabéticamente la lista de la compra... >no es útil UNIX?
Redirecciónando la entrada y salida
Ahora, supongamos que queremos que la salida de sort vaya a un archivo para poder
salvar la lista ordenada de salida. El interprete de comandos nos permite
redirecciónar la salida estándar a un archivo usando el símbolo ">". Veamos como
funciona.
/home/larry/papers# sort > shopping-list
bananas
carrots
apples___
<ctrl-D>
/home/larry/papers#
Como puede ver, el resultado de sort no se muestra por pantalla, en su lugar es
salvado en el archivo shopping-list. Echemos un vistazo al archivo.
/home/larry/papers# cat shopping-list
apples
bananas
carrots
/home/larry/papers#
Ya podemos ordenar la lista de la compra y además guardarla.
José Luis Elvira Valenzuela, ITESO-DESI 1999
73
Supongamos ahora que teníamos guardada nuestra lista de compra desordenada
original en el archivo ítems. Una forma de ordenar la información y salvarla en un
archivo podría ser darle a sort el nombre del archivo a leer en lugar de la entrada
estándar y redirecciónar la salida estándar como hicimos arriba.
/home/larry/papers# sort ítems > shopping-list
/home/larry/papers# cat shopping-list
apples
bananas
carrots
/home/larry/papers#
Hay otra forma de hacer esto. No solo puede ser re-direccionada la salida estándar,
también puede ser re-direccionada la entrada estándar usando el símbolo "<".
/home/larry/papers# sort < ítems
apples
bananas
carrots
/home/larry/papers#
Técnicamente, sort < ítems es equivalente a sort ítems, pero nos permite
demostrar que sort < ítems se comporta como si los datos del archivo fueran
tecleados por la entrada estándar. El interprete de comandos es quien maneja las redirecciones. sort no recibe el nombre del archivo (ítems) a leer, desde el punto de
vista de sort, esta leyendo datos de la entrada estándar como si fueran tecleados
desde el teclado.
Esto introduce el concepto de filtro. Un filtro es un programa que lee datos de la
entrada estándar, los procesa de alguna forma, y devuelve los datos procesados por
la salida estándar. Usando la redirección la entrada estándar y/o salida estándar
pueden ser referenciadas desde archivos. El comando sort es un filtro simple:
ordena los datos de entrada y envía el resultado a la salida estándar. cat es incluso
mas simple, no hace nada con los datos de entrada, simplemente envía a la salida
cualquier cosa que le llega.
José Luis Elvira Valenzuela, ITESO-DESI 1999
74
Uso de tuberias (pipes)
Ya hemos visto como usar sort como un filtro. Pero estos ejemplos suponen que
tenemos los datos en un archivo en alguna parte o vamos a introducir los datos
manualmente por la entrada estándar.
>Que pasa si los datos que queremos ordenar provienen de la salida de otro
comando, como ls?.
Por ejemplo, usando la opcion -r con sort ordenaremos los datos en orden inverso.
Si queremos listar los archivos en el directorio actual en orden inverso, una forma
podría ser.
/home/larry/papers# ls
english-list
history-final
masters-thesis
notes
/home/larry/papers# ls > file-list
/home/larry/papers# sort -r file-list
notes
masters-thesis
history-final
english-list
/home/larry/papers#
Aqui, salvamos la salida de ls en un archivo, y entonces ejecutamos sort -r sobre
ese archivo. Pero esta forma necesita crear un archivo temporal en el que salvar los
datos generados por ls.
La solución es usar las pipes. El uso de pipes es otra característica del interprete de
comandos, que nos permite conectar una cadena de comandos en un "pipe", donde
la stdout del primero es enviada directamente a la stdin del segundo y así
sucesivamente. Queremos conectar la salida de ls con la entrada de sort. Para crear
un pipe se usa el símbolo "|":
/home/larry/papers# ls | sort -r
notes
masters-thesis
history-final
english-list
/home/larry/papers#
José Luis Elvira Valenzuela, ITESO-DESI 1999
75
Esta forma es mas corta y obviamente mas facil de escribir.
Otro ejemplo útil usando el comando
/home/larry/papers# ls /usr/bin
mostrara una lista larga de los archivos, la mayoría de los cuales pasara rápidamente
ante nuestros ojos sin que podamos leerla. En lugar de esto, usemos more para
mostrar la lista de archivos en /usr/bin.
/home/larry/papers# ls /usr/bin | more
Ahora podemos ir avanzando pagina a pagina cómodamente.
¡Pero la diversión no termina aqui!. Podemos "entubar" mas de dos comandos a la
vez. El comando head es un filtro que muestra la primeras líneas del canal de
entrada (aquí la entrada desde una pipe). Si queremos ver el ultimo archivo del
directorio actual en orden alfabético, usaremos:
/home/larry/papers# ls | sort -r | head -1
notes
/home/larry/papers#
Donde head -1 simplemente muestra la primera linea de la entrada que recibe en
este caso, el flujo de datos ordenados inversamente provenientes de ls).
Redirección no destructiva
El uso de ">" para redirecciónar la salida a un archivo es destructivo: en otras
palabras, el comando
/home/larry/papers# ls > file-list
sobreescribe el contenido del archivo file-list. Si en su lugar, usamos el símbolo
">>", la salida será añadida al final del archivo nombrado, en lugar de ser sobrescrito.
/home/larry/papers# ls >> file-list
añadirá la salida de ls al final de file-list.
José Luis Elvira Valenzuela, ITESO-DESI 1999
76
Es conveniente tener en cuenta que la redirección y el uso de pipes son
características proporcionadas por el interprete de comandos éste, proporciona estos
servicios mediante el uso de la sintaxis ">", ">>" y "|".
José Luis Elvira Valenzuela, ITESO-DESI 1999
77
3.6.- El editor vi.
3.6.1.- Introducción al editor.
¿Qué es el editor vi?
Un editor de texto es simplemente un programa usado para la edición de archivos
que contienen texto, como una carta, un programa en C, o un archivo de
configuración del sistema. Mientras que hay muchos editores de texto disponibles en
Linux, el único editor que esta garantizado encontrar en cualquier sistema UNIX es vi
el "visual editor". vi no es el editor mas fácil de usar, ni es muy autoexplicativo. De
cualquier forma, como es tan común en el mundo UNIX y es posible que alguna vez
necesite usarlo, aqui encontrara algo de documentación.
La elección de un editor es principalmente una cuestion de gusto personal y estilo.
Muchos usuarios prefieren el barroco, autoexplicativo y potente Emacs un editor con
mas características que cualquier otro programa único en el mundo UNIX. Por
ejemplo, Emacs tiene integrado su propio dialecto del lenguaje de programación LISP
y tiene muchas extensiones (una de ellas es el programa "Eliza"- como programa de
IA).
Pero como Emacs y todos sus archivos de soporte es relativamente grande, puede
que no tenga acceso a el en muchos sistemas. vi , por otra parte, es pequeño y
potente, pero mas difícil de usar.
De cualquier modo, una vez que conozca la forma de funcionamiento de vi, es muy
fácil usarlo. Simplemente la curva de aprendizaje es bastante pronunciada al
comienzo.
Conceptos
Mientras se usa vi, en cualquier momento estará en uno de tres posibles modos de
operación. Estos modos son conocidos como :
 Modo órdenes.
 Modo inserción.
 Modo ultima línea.
Cuando inicia vi, esta en el modo órdenes. Este modo le permite usar ciertas órdenes
para editar archivos o cambiar a otros modos. Por ejemplo, tecleando "x" mientras
esta en el modo órdenes, borra el carácter que hay debajo del cursor. Las teclas del
cursor mueven este por el archivo que estamos editando. Generalmente, las ordenes
usadas en este modo son solo de uno o dos caracteres de longitud.
José Luis Elvira Valenzuela, ITESO-DESI 1999
78
Habitualmente insertará o editará texto desde el modo inserción. Usando vi,
probablemente dedicara la mayor parte del tiempo en este modo. Inicia el modo de
inserción al usar una orden como "i" (para "insertar") desde el modo de ordenes. Una
vez en el modo de inserción, ira insertando texto en el documento desde la posición
actual del cursor. Para salir del modo de inserción y volver al de ordenes, pulse
<esc>.
Modo última línea es un modo especial usado para proporcionar ciertas órdenes
extendidas a vi. Al usar esos comandos, aparecen en la última línea de la pantalla
(de ahí el nombre). Por ejemplo, cuando teclea ":" desde el modo de órdenes, entrará
en el modo última línea, y podrá usar órdenes como "wq" (para escribir el archivo a
disco y salir de vi), o "q!" (para salir de vi sin guardar los cambios). El modo de última
línea es habitualmente usado por órdenes vi mayores de un carácter.
En el modo de última línea, introduce una orden de una sola línea y pulsa <enter>
para ejecutarla.
3.6.2.- Comandos de edición.
Comenzando con vi
La mejor forma de entender estos conceptos es arrancar vi y editar un archivo. En el
ejemplo "screens" que veremos, vamos a mostrar solo unas pocas líneas de texto,
como si la pantalla tuviese solo seis líneas de altura (en lugar de veinticuatro).
La sintaxis de vi es
vi nombre del archivo
Arranque vi tecleando
/home/larry# vi test
José Luis Elvira Valenzuela, ITESO-DESI 1999
79
Usando el editor vi
lo que editara el archivo test. Debería ver algo como
~
~
~
"test" [New file]
La columna de caracteres "~" indica que esta al final del archivo.
Insertando texto
Esta ahora en modo órdenes; para poder insertar texto en el archivo, pulse <i>(lo que
le hará entrar en modo inserción), y comience a escribir.
Now is the time for all good men to come to the aid of the
party._
~
~
~
Mientras inserta texto, puede escribir tantas líneas como desee (pulsando <return>
después de cada una, por supuesto), y puede corregir los errores con la tecla de
borrado de carácter.
Para salir del modo de inserción y volver al modo de ordenes, pulse <esc>. Mientras
este en modo órdenes, puede usar las teclas del cursor para moverse por el archivo.
En nuestro ejemplo, como solo tenemos una línea, el tratar de usar las teclas de línea
arriba o abajo, probablemente hará que vi emita un pitido.
Hay muchas formas de insertar texto a parte de la orden i. Por ejemplo, la orden a
inserta texto comenzando detrás de la posición actual del cursor, en lugar de la
posición actual del cursor. Por ejemplo, use la tecla de cursor a la izquierda para
desplazar el cursor entre las palabras "good" y
"men".
José Luis Elvira Valenzuela, ITESO-DESI 1999
80
Now is the time for all good__men to come to the aid of the
party
|
~
~
~
~
Pulse <a> para iniciar el modo inserción, teclee "wo" y pulse <esc> para volver al
modo de órdenes.
Now is the time for all good women to come to the aid of the
party.
~
~
~
~
Para comenzar a insertar texto en la línea de debajo de la actual, use la orden "o".
Por ejemplo, pulse <o> y teclee otra línea o dos:
Now is the time for all good women to come to the aid of the
party
Afterwards, we'll go out for pizza and beer._
~
~
~
~
Solo recuerde que en cualquier momento esta en modo de ordenes (donde ordenes
como i, a ò o son validas, o en modo de inserción (cuando este insertando texto,
pulse <esc> para volver al modo de órdenes), o en modo de última línea (donde
puede introducir comandos extendidos, como veremos mas adelante).
José Luis Elvira Valenzuela, ITESO-DESI 1999
81
Borrando texto
Desde el modo de órdenes, la orden x borra el carácter debajo del cursor. Si pulsa
<x> cinco veces, terminara con:
Now is the time for all good women to come to the aid of the
party.
Afterwards, we'll go out for pizza and_
~
~
~
~
Ahora pulse <a>, inserte algún texto, seguido de <esc>:
Now is the time for all good women to come to the aid of the
party
Afterwards, we'll go out for pizza and Diet Coke._
~
~
~
~
Puede borrar líneas enteras usando la orden dd (es decir, pulse <d> dos veces en
una fila). Si el cursor esta en la segunda línea y teclea dd,
Now is the time for all good women to come to the aid of the
party.
~
~
~
José Luis Elvira Valenzuela, ITESO-DESI 1999
82
Para borrar la palabra sobre la que se encuentra el cursor, use la orden dw. Sitúe el
cursor sobre la palabra "good" y pulse dw.
Now is the time for all women to come to the aid of the party.
~
~
~
~
Modificando texto
Puede sustituir secciones de texto usando la orden R. Sitúe el cursor en la primera
letra de "party" y pulse <R>, y escriba la palabra "hungry".
Now is the time for all women to come to the aid of the
hungry._
~
~
~
~
El uso de R para editar texto es bastante parecido al uso de las ordenes i y a, pero R
sobreescribe texto en lugar de insertarlo.
La orden r sustituye un único carácter situado debajo del cursor. Por ejemplo, sitúe el
cursor al comienzo de la palabra “now" y escriba r seguido de C. Obtendrá:
C_ow is the time for all women to come to the aid of the
hungry.
~
~
~
~
José Luis Elvira Valenzuela, ITESO-DESI 1999
83
La orden "~" cambia de mayúsculas a minúsculas o viceversa la letra sobre la que se
encuentra el cursor. Por ejemplo, si sitúa el cursor sobre la "o" de "Cow", y
repetidamente pulsa <~>, obtendrá:
COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY
~
~
~
~
Ordenes de movimiento
Ya conoce como usar las teclas del cursor para moverse por el documento. Además,
puede usar las ordenes h, j, k y l para mover el cursor a la izquierda, abajo, arriba y
derecha respectivamente. Esto es muy cómodo cuando (por alguna razón) sus teclas
de cursor no funcionen correctamente.
La orden w mueve el cursor al comienzo de la siguiente palabra; b lo lleva al
comienzo de la palabra anterior.
La orden 0 (cero) mueve el cursor al comienzo de la línea actual, y la orden $ lo lleva
al final de la línea.
Al editar archivos grandes, querrá moverse hacia adelante y atrás a lo largo del
archivo mostrando una pantalla cada vez. Pulsando <ctrl-F>avanza el cursor una
pantalla hacia adelante y <ctrl-B> lo lleva una pantalla atrás.
Para llevar el cursor al final del archivo, pulse G. Puede también desplazarse a una
línea arbitraria; por ejemplo, pulsando la orden 10G llevara el cursor a la línea 10 del
archivo. Para desplazarse al comienzo, use 1G. Puede asociar ordenes de
desplazamiento con otras ordenes como es el borrado. Por ejemplo, La orden d$
borrara todo desde la posición del cursor al final de la línea; dG borrará todo desde la
posición del cursor al final del archivo.
Guardando archivos y saliendo de vi
Para salir de vi sin modificar el archivo use la orden :q!. Al pulsar ":", el cursor se
desplazara a la última línea de la pantalla; esta en modo última línea.
José Luis Elvira Valenzuela, ITESO-DESI 1999
84
COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY
~
~
~
:
En el modo de última línea hay disponibles una serie de ordenes extendidas. Una de
ellas es q!, la cual permite salir de vi sin guardar los cambios. La orden :wq salva el
archivo y sale de vi. La orden ZZ (desde el modo de ordenes, sin ":") es equivalente
a :wq. Recuerde que debe pulsar <enter> después de introducir la orden para que
esta se ejecute en el modo ultima línea.
Para salvar el archivo sin salir de vi, simplemente use :w.
Editando otro archivo.
Para editar otro archivo use la orden :e. Por ejemplo, para dejar de editar el archivo
test y en su
lugar editar el archivo foo, use la orden
COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY
~
~
~
:e foo
Si usa :e sin salvar primero el archivo, obtendrá el mensaje de error
No write since last change (":edit!" overrides)
lo cual significa que vi no quiere editar otro archivo hasta que salve el primero. En
este punto, puede usar :w para guardar el archivo original, y entonces usar :e, o
puede usar la orden
José Luis Elvira Valenzuela, ITESO-DESI 1999
85
COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY
~
~
~
:e!
foo
El signo "!" le dice a vi lo que realmente desea usted editar el nuevo archivo sin
salvar los cambios del primero.
Incluyendo otros archivos
Si usas la orden :r Puede incluir el contenido de otro archivo en el archivo que está
editando. Por ejemplo
:r foo.txt
insertaría el contenido del archivo foo.txt en el texto en la posición actual de
cursor.
Ejecutando comandos del intérprete
Puede también ejecutar comandos del intérprete desde el interior de vi. La orden :r!
funciona como :r, pero en lugar de leer un archivo, inserta la salida de un comando
dado en el archivo en la posición actual del cursor. Por ejemplo, si usa la orden
:r!
ls -F
obtendrá :
COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY
letters/
misc/
papers/
~
~
José Luis Elvira Valenzuela, ITESO-DESI 1999
86
También puede salir a un intérprete de comandos desde vi, es decir, ejecutar una
orden desde dentro de vi y volver al editor una vez esta finalice. Por ejemplo, si usa la
orden
:!
ls –F
la orden ls -F será ejecutada, y los resultados mostrados en la pantalla, pero no
insertados en el archivo en edición. Si usa la orden
:shell
vi iniciará una instancia del intérprete de comandos, permitiéndole temporalmente
dejar a vi "parado" mientras ejecuta otras ordenes. Simplemente salga del intérprete
de comandos (usando la orden exit) para regresar a vi
José Luis Elvira Valenzuela, ITESO-DESI 1999
87
3.7.- Introducción al ambiente gráfico de Linux.
3.7.1.- Iniciando el ambiente gráfico de Linux.
3.7.2.- Configuración del ambiente gráfico de Linux.
Poner a punto XFree86 no suele ser difícil. Sin embargo, si va a usar manejadores de
"chipsets" aun en desarrollo o desea obtener el mejor rendimiento o resolución de
una tarjeta aceleradora, en configurar a la perfección XFree86 puede tardar bastante.
En esta sección vamos a describir como crear y editar el archivo XF86Config, que
configura al servidor. En muchos casos lo mejor es comenzar con una configuración
"básica", de baja resolución, como 640x480 puntos, que es soportada por todas las
tarjetas y monitores. Una vez comprobado su funcionamiento a baja resolución,
puede pasar a modificar la configuración para explotar toda la capacidad de su tarjeta
de vídeo.
Además de la información que nosotros le damos, debería leerse la siguiente
documentación:
 La Documentacion propia de XFree86 en /usr/X11R6/lib/X11/doc (viene
con el paquete XFree86-3.1-doc). Debe prestar especial atención al archivo
README.Config, que es un tutorial sobre la configuración de XWindows.
 Diferentes "chipsets" de vídeo tendrán sus propios archivos README en el
directorio anterior (por ejemplo, README.Cirrus). Léase el que le corresponda.
 Las páginas de manual para XFree86.
 Las páginas de manual para XF86Config.
 Las páginas de manual para el servidor concreto que utilice (como XF86_SVGA o
XF86_S3).
El archivo de configuración principal debe ser :
/usr/X11R6/lib/X11/XF86Config
José Luis Elvira Valenzuela, ITESO-DESI 1999
88
Este archivo contiene información acerca del ratón, parámetros de la tarjeta gráfica,
etc. El archivo XF86Config.ed es un ejemplo que incluye la distribución. Copie este
archivo como XF86Config y modifíquelo para su sistema.
Las paginas de manual para XF86Config explican el formato del archivo con
detalles. Lea ahora esas paginas si aun no lo ha hecho.
Le vamos a presentar un ejemplo de XF86Config. No tiene por que coincidir con el
ejemplo que incluye la distribucion, pero en todo caso tendrán estructura parecida.
 Observe que el formato del archivo puede cambiar algo entre versiones de
XFree86. La información que le damos solo vale para la version 3.1.
 Además, no debe limitarse a copiar este archivo e intentar probarlo en su
sistema. Si lo hace, y, por error, envía a su monitor una frecuencia
demasiado alta para el puede producir una avería. No seria el primer caso.
Esto ha ocurrido especialmente con monitores de frecuencia fija. En
definitiva, asegúrese de que su archivo XF86Config se corresponde con su
hardware antes de intentar utilizarlo.
Cada sección del siguiente ejemplo de XF86Config se enmarca en un par de líneas
Sección
<section-name>. . . EndSection. La primera parte del archivo es la sección de
Archivos, que tendrá el siguiente aspecto:
Section "Files"
RgbPath
FontPath
FontPath
EndSection
"/usr/X11R6/lib/X11/rgb"
"/usr/X11R6/lib/X11/fonts/misc/"
"/usr/X11R6/lib/X11/fonts/75dpi/"
La linea RgbPath pone la ruta de acceso a la base de datos de colores RGB para
X11R6, y cada linea FontPath pone rutas de acceso a directorios con fuentes X11.
Por lo general no tendrá que modificar estas líneas. Tan solo debe comprobar que en
los directorios correspondientes se encuentran los archivos implicados (fuentes, etc).
La siguiente sección es ServerFlags, que especifica algunos "flags" generales para el
servidor.
José Luis Elvira Valenzuela, ITESO-DESI 1999
89
Por lo general la sección suele ir vacía.
Section "ServerFlags"
# Si quita el comentario siguiente, la llegada de una se~nal al
# provocara el volcado de su memoria. Esto puede dejar la consola en
# un estado inutilizable pero el volcado puede servirle en la depuración.
#
NoTrapSignals
# Quitando este comentario se desactiva la secuencia <Crtl><Alt><BS>
#
DontZap
EndSection
La siguiente sección es Keyboard. Su significado es claro.
Section "Keyboard"
Protocol
"Standard"
AutoRepeat
500 5
ServerNumLock
EndSection
Existen otras opciones. Vea su archivo XF86Config si desea modificar las opciones
de teclado. Las que trae por defecto suelen funcionar bien en casi todos los
sistemas.
La siguiente sección es Pointer, y especifica los parámetros para el ratón.
Section "Pointer"
Protocol
"MouseSystems"
Device
"/dev/mouse"
# Los dos parámetros siguientes solo son necesarios en algunos Logitech.
#
BaudRate
9600
#
SampleRate 150
# La siguiente opcion es útil para ratones Microsoft de dos botones.
#
Emulate3Buttons
# La siguiente opcion es útil para algunos ratones con tres botones
Logitech.
#
ChordMiddle
EndSection
José Luis Elvira Valenzuela, ITESO-DESI 1999
90
Le pueden interesar las opciones Protocol y Device. Protocol especifica el protocolo
que utiliza su ratón (no se trata de su marca o modelo). Bajo Linux los protocolos
validos son:








BusMouse
Logitech
Microsoft
MMSeries
Mouseman
MouseSystems
PS/2
MMHitTab
BusMouse es el que se usa para ratón Logitech en bus. Observar que los ratones
antiguos de Logitech usan Logitech pero los mas modernos usan Microsoft o
Mouseman. Este es un caso en el que el protocolo no coincide con la marca.
Device especifica el dispositivo donde esta el ratón. En muchos sistemas Linux se
encuentra en /dev/mouse, que suele ser un enlace al dispositivo verdadero (puerto
serie como /dev/cua0, etc).
Por supuesto, debe asegurarse de que el dispositivo que corresponda este en /dev.
La siguiente sección es Monitor, que especifica las características de su pantalla
TRC. La sección Monitor de XF86Config puede no ser única, como sucede con
otras secciones. Es útil si hay varios monitores conectados al sistema, o si se quiere
usar el mismo XF86Config en diferentes configuraciones hardware. Por lo general,
sin embargo, solo necesitará una sección Monitor.
Section "Monitor"
Identifier
"CTX 5468 NI"
# !! Estos valores son validos solo para un monitor "CTX 5468 NI"
# No intente usarlo en su monitor si no es este mismo.
Bandwidth
HorizSync
VertRefresh
# Modos: Nombre
60
30-38,47-50
50-90
reloj
ModeLine "640x480"
25
ModeLine "800x600"
36
ModeLine "1024x768" 65
José Luis Elvira Valenzuela, ITESO-DESI 1999
horiz
vert
640 664 760 800
800 824 896 1024
1024 1088 1200 1328
480 491 493 525
600 601 603 625
768 783 789 818
91
EndSection
La línea Identifier se usa para dar a la sección un nombre. Puede ser cualquier
cadena de caracteres y se usara después para referirse a ese monitor.
HorizSync es el valor de frecuencia de sincronía horizontal válida, en KHz. Si tiene
un monitor "multisync", puede tratarse de un rango (o diversos rangos separados por
comas). Si se trata de un monitor de frecuencia fija, será un conjunto discreto de
valores como el siguiente:
HorizSync
31.5, 35.2, 37.9, 35.5, 48.95
El manual de su monitor debería incluir estos datos en las especificaciones técnicas.
Si no tiene esta información, contacte con el vendedor o fabricante para obtenerla.
Por supuesto, hay otras fuentes de información.
VertRefresh especifica las frecuencias de barrido vertical validas (o sincronismo
vertical), en Hz. Como HorizSync puede ser uno o mas rangos o valores discretos.
También deben indicarse en su manual.
Los dos parámetros anteriores solo se utilizan para comprobar que los modos
gráficos pedidos van a ser tolerados por su monitor. Esos modos se especifican en
las entradas Modeline que tienen el formato siguiente:
ModeLine <nombre> <reloj> <valores-horiz> <valores-vert>
<nombre> es un nombre cualquiera que le damos al modo.
<reloj> es la frecuencia de reloj o "dot clock" asociada al modo. Se suele
especificar siempre en Mhz, y es la frecuencia de envío de pixels al monitor para esa
resolución.
<valores-horiz> y <valores-vert> son cuatro números que especifican
cuando el haz de electrones del monitor debe dispararse y cuando se envían los
pulsos de sincronismo.
Se preguntará como determinar esos valores para su monitor. El archivo
Videomodes.doc, incluido en la distribución de XFree86 describe en detalle como
obtener los valores requeridos. En primer lugar, <reloj> debe corresponderse con
un valor de los que pueda producir su tarjeta de vídeo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
92
Por lo tanto solo usara modos con valores de reloj soportados.
En la distribucion se incluyen dos archivos que pueden darle los datos para Modeline
de su monitor. Estos archivos son modeDB.txt y Monitors, ambos en
/usr/X11R6/lib/X11/doc.
Debería comenzar con valores para el estándar VESA, que la mayor parte de los
monitores soportan. Estos valores están incluidos en modeDB.txt. En este archivo
encontrara entradas como
# 640x480@60Hz Non-Interlaced mode
# Horizontal Sync = 31.5kHz
# Timing: H=(0.95us, 3.81us, 1.59us), V=(0.35ms, 0.064ms, 1.02ms)
#
# name
clock
horizontal timing
vertical timing
"640x480"
25.175
640
664
760
800
480
491
493
flags
525
Esta es una temporización estándar VESA para modo 640x480. Utiliza un reloj de
25.175, que debe ser soportado por la tarjeta (esto lo veremos luego). Para incluir
esta entrada en el archivo XF86Config usaría la linea
ModeLine "640x480" 25.175
640 664 760 800
480 491 493 525
Observe que el argumento <nombre> (en este caso, "640x480") es una cadena de
caracteres arbitraria, aunque se suele seguir la convención de indicar la resolución
del modo.
Para cada Modeline indicado, el servidor comprobará que sus valores caen dentro
de los rangos permitidos de frecuencias (especificados antes), anulando el modo si
no ocurre así. Principalmente, el valor de reloj no debe ser mayor que el indicado en
Bandwidth. Sin embargo, usar valores ligeramente superiores no suele dar
problemas.
Si los tiempos estándares en VESA no le funcionan correctamente (lo sabrá cuando
después los pruebe) mire los archivos modeDB.txt y Monitors, que incluyen
valores específicos para muchos modelos de monitores. Puede crear entradas
Modeline a partir de lo que vea en estos archivos. Asegúrese de que solo usa
valores validos en su monitor. Vea que muchos monitores de 14 o 15 pulgadas no
soportan modos de alta resolución como 1024x768 con señales de reloj lentas. Esto
significa que si no encuentra modos de alta resolución para su monitor en esos
archivos, no podrá usar dicha resolución.
José Luis Elvira Valenzuela, ITESO-DESI 1999
93
Si se encuentra perdido, y no encuentra ningún modo que funcione en su monitor,
puede seguir las instrucciones de VideoModes.doc, que le ayudaran a calcular las
entradas ModeLine adecuadas a partir de las especificaciones que se digan en el
manual de su monitor. El mismo archivo VideoModes.doc explica también otros
aspectos del servidor de XFree86 como el formato de la directiva ModeLine.
Por último, si obtiene valores para ModeLine que son aceptables pero no del todo
correcto, puede modificarlos ligeramente para obtener el resultado deseado. Por
ejemplo, si cuando ejecuta XFree86 la imagen se desplaza ligeramente, o parece
girar, puede seguir las instrucciones de VideoModes.doc para intentar corregir esas
deficiencias. Además, utilice también los propios controles del monitor. Muchas veces
es necesario ajustarlos después de cambiar de modo gráfico. Tener esos controles
en la parte frontal del monitor le hará la vida mas fácil.
 Nunca debe usar valores de tiempo o de Modeline pensados para monitores
diferentes al suyo. Si lo intenta hacer, y envía al monitor una frecuencia para
la que no fue diseñado, puede producirle una avería
La siguiente sección del archivo XF86Config es Device, que especifica los
parámetros de su tarjeta gráfica. Por ejemplo :
Section "Device"
Identifier "#9 GXE 64"
# Todavía nada; añadiremos los valores después.
EndSection
Esta sección establece las propiedades de su tarjeta gráfica. Identifier es una
cadena de caracteres usada para identificar su tarjeta, cadena que usará para
referirse a las características que en esta sección se detallen.
Inicialmente no necesita incluir nada mas a la sección Device que la identificación
de la tarjeta.
Esto es así pues usaremos el servidor X para probar las propiedades de su tarjeta,
para incluirlas luego en esta sección. El servidor X es capaz de obtener el "chipset",
"RAMDAC" y memoria RAM de su tarjeta.
Antes de hacer esto, sin embargo, necesitamos terminar el archivo XF86Config. La
siguiente sección es Screen, que especifica que combinación monitor/tarjeta usar
para un servidor concreto.
José Luis Elvira Valenzuela, ITESO-DESI 1999
94
Section "Screen"
Driver
"Accel"
Device
"#9 GXE 64"
Monitor
"CTX 5468 NI"
Subsection "Display"
Depth
16
Modes
"1024x768" "800x600" "640x480"
ViewPort
0 0
Virtual
1024 768
EndSubsection
EndSection
La linea Driver indica que servidor X utiliza. Los valores validos son:
 Accel: Para servidores XF86_S3, XF86_Mach32, XF86_Mach8, XF86_8514,
XF86_P9000, XF86_AGX, y XF86_W32.
 SVGA: Para el servidor XF86_SVGA.
 VGA16: Para el servidor XF86_VGA16.
 VGA2: Para el servidor XF86_Mono.
 Mono: Para manejadores monocromáticos no VGA que se encuentran en los
servidores XF86_Mono y XF86_VGA16.
Debe asegurarse de que /usr/X11R6/bin/X es un enlace simbólico al servidor
que va a usar.
La línea Device especifica el valor Identifier de la sección Device que corresponda a
la tarjeta de vídeo que se va a usar con este servidor. Antes, hemos creado una
sección Device con la línea :
Identifier "#9 GXE 64"
Así pues, utilizaremos "#9 GXE 64" en la linea Device de aqui.
De forma parecida, la linea Monitor especifica el nombre de la sección Monitor que se
va a usar en este servidor. Aqui, "CTX 5468 NI" es el identificador Identifier utilizado
en la sección Monitor vista antes.
José Luis Elvira Valenzuela, ITESO-DESI 1999
95
Subsection "Display" define distintas características del XFree86 con su particular
combinación de monitor y tarjeta gráfica. El archivo XF86Config describe todas las
opciones en detalle.
La mayoría no son necesarias para que el sistema funcione.
Las opciones que debería conocer son:
Depth : Define el numero de bits por pixel (o planos de color), que normalmente
valdrá 8 (supone 256 colores). Para el servidor VGA16 se usara una profundidad de
4, y para el monocromo, una profundidad de 1. Si se utiliza una tarjeta acelerada con
suficiente memoria, se puede subir la profundidad a 16, 24 o 32. Si le da problemas,
vuelva a profundidad 8 e intente corregir el problema después.
Modes : Es la lista de modos de vídeo que estarán entre los definidos con
ModeLine para su monitor. Los nombres usados antes para identificarlos (
"1024x768", etc) se usaran ahora para expresar los modos de la siguiente manera:
Modes
"1024x768" "800x600" "640x480"
De esta forma, XFree86 intentará arrancar en el primero de los modos. Una vez que
ha arrancado, con las teclas <ctrl><alt><numeric> y <ctrl><alt><numeric> podrá
cambiar a otro modo.
La mejor forma de empezar, cuando se esta configurando XFree86, es usar modos
de baja resolución (como 640x480) que suelen funcionar siempre. Una vez que se
tenga una configuración básica que va bien, puede pasarse a modificar XF86Config
para soportar resoluciones mayores.
Virtual. Pone el tamaño del área de trabajo virtual. XFree86 es capaz de usar la
memoria sobrante de su tarjeta gráfica para extender el tamaño de su área de
trabajo. Cuando mueve el raton a extremos de la pantalla, vera como la pantalla se
desplaza, accediendo así a todo el área virtual. Así pues, si usted trabaja con una
resolución inferior, como 800x600 y pone un área de 1024x768 (propia para 1 Mbyte
de DRAM y 8 bits por pixel) podrá usar un área de trabajo mas grande que la que
cabe en pantalla.
El mecanismo Virtual resulta interesante para aprovechar toda la memoria de la
tarjeta gráfica, pero es limitado. Si quiere usar un área de trabajo virtual, se
recomienda usar las facilidades que al respecto dan gestores de ventanas como
fvwm. El mecanismo aqui se implementa a base de ocultar ventanas, etc. en lugar de
ocupar toda la memoria de la tarjeta.
José Luis Elvira Valenzuela, ITESO-DESI 1999
96
Para mas detalle, vea las paginas de manual de fvwm, gestor de ventanas que
suelen traer los sistemas Linux por defecto.
ViewPort. Si usted utiliza la opcion Virtual descrita antes, puede usar ViewPort
para indicar en que coordenadas virtuales comenzar XFree86. Se suele usar
ViewPort 0 0 que pone el área de trabajo en la esquina superior izquierda. Pero
si no se indica se pondrá centrado, algo que quizás le interese mas.
Hay muchas otras opciones en esta sección; vea las paginas de manual para
XF86Config para más detalle. En la práctica no son necesarias esas otras opciones
para que funcione el sistema.
Introduccion de los datos de la tarjeta gráfica
Su archivo XF86Config esta ya casi listo para usar, aunque aun falta la información
de su tarjeta gráfica. Lo que vamos a hacer ahora es usar el servidor X para obtener
la información que falta, e introducirla en XF86Config.
A veces se puede encontrar esa información en los archivos modeDB.txt,
AccelCards y Devices, que se encuentran en /usr/X11R6/lib/X11/doc.
Además, existen numerosos archivos README para algunos "chipsets". Debe mirar
esos archivos para buscar su tarjeta y usar los valores que aparezcan en ellos (de
reloj, tipo de "chipset" y otros) en la sección correspondiente de XF86Config. Si falta
alguna información puede intentar obtenerla con el procedimiento siguiente.
En estos ejemplos vamos a ver como configuraríamos el sistema para una tarjeta #9
GXE 64, que usa el servidor XF86_S3.
Lo primero que debe hacerse es determinar el "chipset" que lleva la tarjeta.
Ejecutando /usr/X11R6/bin/SuperProbe lo averiguaremos, aunque también hay
que conocer el nombre con el que el servidor X conoce a ese "chipset". Para
conseguir esto ultimo, ejecutar:
X -showconfig
Esto le dará los nombres de "chipsets" que conoce el servidor X (esto también se
encuentra en las páginas de manual). Por ejemplo, con el servidor XF86_S3
obtendremos:
XFree86 Version 3.1 / X Window System
(protocol Version 11, revision 0, vendor release 6000)
José Luis Elvira Valenzuela, ITESO-DESI 1999
97
Operating System: Linux
Configured drivers:
S3: accelerated server for S3 graphics adaptors (Patchlevel 0)
mmio_928, s3_generic
Así pues los nombres de "chipsets" que este servidor tiene son mmio_928 y
s3_generic. En la página de manual para XF86_S3 encontrará la descripción de
estos "chipsets" junto a algunas tarjetas que los utilizan. Para la #9 GXE 64 el
"chipset" es mmio_928.
Si no conoce que "chipset" usar, el servidor X puede intentar averiguarlo. Para ello,
ejecutar
X -probeonly > /tmp/x.out 2>&1
si usa bash como shell. Si usa csh, intente:
X -probeonly &> /tmp/x.out
El comando anterior debe ejecutarse solo cuando no hay otras actividades en el
sistema (otros usuarios, procesos, etc.) Este comando obtiene también los valores
para los relojes y si el sistema esta cargado se calcularan incorrectamente.
Por ejemplo, esto es lo que sale para la tarjeta del autor:
XFree86 Version 3.1 / X Window System
(protocol Version 11, revision 0, vendor release 6000)
Operating System: Linux
Configured drivers:
S3: accelerated server for S3 graphics adaptors (Patchlevel 0)
mmio_928, s3_generic
algunas líneas borradas . . .
(--) S3: card type: 386/486 localbus
(--) S3: chipset:
864 rev. 0
(--) S3: chipset driver: mmio_928
Aqui vemos los dos "chipsets" válidos (mmio_928 y s3_generic) del servidor. Este
probo ambos y determinó que la tarjeta usa el "chipset" mmio_928.
En la sección Device del archivo XF86Config, añada una linea Chipset con el
nombre obtenido antes. Por ejemplo :
José Luis Elvira Valenzuela, ITESO-DESI 1999
98
Section "Device"
# Este es el identificador que le pusimos...
Identifier "#9 GXE 64"
# Añadimos esta linea:
Chipset "mmio_928"
EndSection
Ahora hay que determinar las frecuencias de reloj. Cada una de estas es
simplemente la frecuencia con la que la tarjeta puede enviar pixeles al monitor. Como
ya sabemos, estas frecuencias dependen de la resolución usada.
En primer lugar debe echar un vistazo a los archivos mencionados antes (como
modeDB.txt) y ver si los relojes de su tarjeta están listados. En su caso vera una
lista de 8 o 16 valores, todos ellos dados en Mhz. Por ejemplo, en modeDB.txt
encontramos lo siguiente para la tarjeta Cardinal ET4000:
# chip
ET4000
ram
1024
virtual
1024 768
clocks
25 28 38 36 40 45 32 0
default-mode
"1024x768"
flags
Como vemos, los relojes son 25, 28, 38, 36, 40, 45, 32 y 0 MHz.
En la sección Devices del archivo XF86Config debe añadir una linea Clocks como la
siguiente (para nuestro ejemplo):
Clocks 25 28 38 36 40 45 32 0
Esto estará en la sección Devices, después de Chipset. Observe la importancia del
orden de los relojes. No los cambie.
Si no encuentra las frecuencias de reloj para su tarjeta en los archivos, el servidor X
también los puede intentar averiguar. Con el comando ya visto X -probeonly
obtendrá una linea como la siguiente:
(--) S3: clocks:
25.18
José Luis Elvira Valenzuela, ITESO-DESI 1999
28.32
38.02
36.15
40.33
45.32
32.00
00.00
99
Con esta linea podemos hacer la linea Clocks en XF86Config. Si hay muchos
valores y no caben en una linea puede crear mas líneas Clock, pero respete el orden
de todas formas.
Asegúrese de que no hay ninguna linea Clocks en la sección Devices cuando use el
comando X-probeonly puesto que en este caso no hará pruebas reales de los
relojes, sino que probara solo los valores que haya en el archivo XF86Config.
Observe que algunas tarjetas aceleradas tienen chip de reloj programable (vea las
paginas de manual de XF86_Accel para mas detalle. Estas son aplicables a las
tarjetas S3, AGX y XGA-2). Este chip viene a permitir que el servidor X diga a la
tarjeta que relojes usar. Si este es el caso, no debe haber una lista de valores válidos
de reloj en el archivo XF86Config. Si no, la lista de valores de reloj que devuelve Xprobeonly contendrá solo uno o dos valores discretos de reloj, dejando el resto
copiados de los primeros o a cero.
Para placas con reloj programable, deberá usar una linea ClockChip en lugar de
Clocks. Esta línea da el nombre del chip correspondiente a la tarjeta. Esos nombres
se encuentran en las paginas de manual. Por ejemplo, en el archivo README.S3,
veremos que diversas tarjetas S3-864 utilizan un chip "ICD2061A", y deberá existir la
linea
ClockChip "icd2061a"
en lugar de la linea Clocks en el archivo XF86Config. Como sucede con Clocks, la
linea formara parte de la sección Devices e ira a continuación de Chipset.
De manera similar, algunas tarjetas aceleradas requieren que se especifique el tipo
de chip RAM-DAC del archivo XF86Config, con una linea Ramdac. Esta opción se
describe en XF86_Accel. Normalmente, el servidor X ya se ocupa de tomar un valor
correcto para el RAMDAC.
Algunas tarjetas gráficas necesitan que se especifiquen diversas opciones en la
sección Devices. Estas opciones se describen en archivos como README.cirrus
o paginas de manual, y se integran en una linea Opción del archivo XF86Config.
Por ejemplo, una tarjeta #9 GXE 64 necesita dos opciones:
Option number_nine"
Option "dac_8_bit"
José Luis Elvira Valenzuela, ITESO-DESI 1999
100
Normalmente, el servidor X funcionara sin las opciones, pero conviene ponerlas para
aumentar el rendimiento de la tarjeta. Hay muchas opciones y muchas particulares de
cada tarjeta. Para utilizarlas, mire los archivos del directorio :
/usr/X11R6/lib/X11/doc
Así pues, cuando haya acabado, tendrá una sección Devices como la siguiente:
Section "Device"
# Solo valida para la tarjeta #9 GXE 64 !
Identifier "#9 GXE 64"
Chipset "mmio_928"
ClockChip "icd2061a"
Option ñumber_nine"
Option "dac_8_bit"
EndSection
Observe que en muchos casos se requiere una línea Clocks en lugar de Clockchip,
etc. Lo anterior es solo un ejemplo.
Hay otras opciones para la sección Devices. Los detalles los vera en las páginas de
manual correspondientes.
José Luis Elvira Valenzuela, ITESO-DESI 1999
101
4.- Administración del sistema.
Este capítulo es una visión general de la administración de un sistema Linux,
incluyendo un numero de posibilidades avanzadas que no son, necesariamente, solo
para administradores de sistemas. Igual que cada perro tiene su día, cada sistema
tiene su administrador, y poner en marcha el sistema es un trabajo muy importante y
a veces consume mucho tiempo, incluso si se es el único usuario en el sistema.
Hemos intentado cubrir aquí los elementos más importantes acerca de la
administración de sistemas que se necesitan conocer cuando se use Linux, en
suficiente detalle para empezar confortablemente. Para mantenerlo corto y
agradable, solo hemos cubierto los niveles más básicos y nos hemos saltado muchos
e importantes detalles. Se debe leer el Linux System Administrator's Guide si se
quiere ejecutar Linux en serio. Le ayudara a comprender mejor como funcionan las
cosas y como se ensamblan juntas. Al menos hojéelo para que pueda conocer que
contiene y que tipo de ayuda puede esperar de el.
Acerca de Raíces, Sombreros y la Sensación de Poder
Como sabe, UNIX distingue entre diferentes usuarios para que lo que hagan a los
demás y al sistema pueda ser regulado (uno no desearía que nadie pudiese leer
nuestras cartas de amor, por ejemplo). Cada usuario recibe una cuenta que incluye
un nombre de usuario, un directorio inicial, y otras cosas por el estilo. Además de las
cuentas dadas a personas reales, existen cuentas especiales, definidas por el
sistema, que tienen privilegios especiales. La más importante de estas es la cuenta
raíz, con el nombre de usuario root.
La cuenta root
Los usuarios normales están restringidos normalmente para que no puedan dañar a
nadie mas en el sistema, solo a ellos mismos. Los permisos de los archivos en el
sistema están preparados para que los usuarios normales no tengan permitido borrar
o modificar archivos en directorios compartidos por todos los usuarios (como son
/bin y /usr/bin. Muchos usuarios también protegen sus propios archivos con los
permisos adecuados para que otros usuarios no puedan acceder o modificar estos
archivos.
Estas restricciones desaparecen para root. El usuario root puede leer, modificar o
borrar cualquier archivo en el sistema, cambiar permisos y pertenencias en cualquier
archivo, y ejecutar programas especiales, como pueden ser los que particionan un
disco o crean sistemas de archivos. La idea básica es que la persona o personas que
José Luis Elvira Valenzuela, ITESO-DESI 1999
102
ejecutan y cuidan del sistema entren como root cuando sea necesario para realizar
tareas que no pueden ser ejecutadas por un usuario normal. Puesto que root puede
hacer todo, es fácil cometer errores que tengan consecuencias catastróficas cuando
se trabaja utilizando esta cuenta.
Por ejemplo, como un usuario normal, si inadvertidamente se intentase borrar todos
los archivos en /etc, el sistema no lo permitiría. Sin embargo, como usuario root, el
sistema no diría nada. Es muy simple el dañar el sistema utilizando root. La mejor
forma de evitar accidentes es:
Pensárselo dos veces antes de apretar <return> en un comando que pueda causar
daño. Por ejemplo, si se va a borrar un directorio, antes de pulsar <return> releer el
comando completo y asegurarse que es correcto.
No acostumbrarse a utilizar root. Cuanto más confortable se encuentre uno
trabajando con el usuario root, más seguro que se confundirán los privilegios con los
de un usuario normal. Por ejemplo, puede uno pensar que se esta conectado como
larry, cuando realmente se esta conectado como root.
Utilice un marcador distinto para la cuenta root. Se debe cambiar el archivo .bashrc
o el .login de root para poner el marcador del interprete a algo distinto del
marcador de usuario normal. Por ejemplo, mucha gente utiliza el carácter "$" como
marcador para los usuarios normales, y reserva el carácter "#" como marcador para
el usuario root.
Conectarse como root solo cuando sea absolutamente necesario. Y desconectarse
tan pronto como se haya terminado el trabajo. Cuanto menos se use la cuenta root,
menos posibilidades habrá de dañar el sistema.
Por supuesto, existe una variante de hackers de UNIX que utilizan root para
prácticamente todo. Pero cada uno de ellos ha cometido, en algún momento, algún
error tonto como root y corrompido el sistema.
La regla general es que hasta que se familiarice con la falta de restricciones de root,
y este cómodo utilizando el sistema sin dichas restricciones, procure conectarse
como root lo menos posible.
Por supuesto, todo el mundo comete errores. El mismo Linus Torvalds borro
accidentalmente una vez el árbol de directorios completo del núcleo de su sistema.
Horas de trabajo se perdieron para siempre. Afortunadamente, sin embargo, gracias
a su conocimiento del código del sistema de archivos, fue capaz de reiniciar el
sistema y reconstruir el árbol de directorios del disco a mano.
José Luis Elvira Valenzuela, ITESO-DESI 1999
103
Pongámoslo de otra forma, si se imagina la utilización de la cuenta root como la
utilización de un sombrero mágico especial que le da montones de poderes,
pudiendo, con un gesto de la mano, destruir ciudades enteras, es una buena idea de
lo que es ser un poco cauto con lo que se hace con las manos. Puesto que es fácil
mover la mano de manera destructiva por accidente, no es una buena idea el llevar el
sombrero mágico cuando no es necesario, a pesar de la maravillosa sensación.
Abusando del sistema
Junto con el sentimiento de poder llega la tendencia a hacer daño. Este es uno de los
puntos oscuros de la administración de sistemas UNIX, pero todo el mundo pasa por
ello en algún momento. Muchos usuarios de sistemas UNIX nunca tienen la
posibilidad de manejar este poder en los sistemas UNIX de universidad y de
empresas, solo los altamente cualificados (y altamente pagados) administradores de
sistemas llegan a conectarse como root. De hecho, en muchas de esas instituciones,
la clave de root es un secreto celosamente guardado: es tratado como el Sagrado
Grial de la institución. Se monta mucho jaleo con la conexión como root; esta visto
como un sabio y a la vez espantoso poder, dado solo a un reducido grupo de
elegidos.
Este tipo de actitud hacia la cuenta root es, sencillamente, el tipo de actitud que
alimenta la malicia y el desprecio. Ya que root es tan atractivo, cuando algunos
usuarios tienen su primera oportunidad de conectarse como root (ya sea en un
sistema Linux, o en cualquier otro sitio), la tendencia es a utilizar los privilegios de
root de forma descuidada. Yo he conocido "administradores de sistemas" (por
llamarlos de alguna forma) que leen el correo de otros usuarios, borran archivos de
usuario sin avisar y que, de forma general, se comportan como niños cuando se les
da un "juguete" poderoso.
Puesto que root tiene tantos privilegios en el sistema, se necesita una cierta madurez
y auto- control para utilizar la cuenta de la forma para la que esta diseñada para
ejecutar el sistema. Existe un código de honor no hablado entre el administrador y los
usuarios del sistema.
>Como se sentiría si su administrador de sistemas leyese su correo electrónico o
mirase sus archivos? Aun no hay ningún precedente legal firme acerca de la
intimidad electrónica en sistemas de computadoras de tiempo compartido.
En sistemas UNIX, el usuario root tiene la posibilidad de saltarse todos los
mecanismos de seguridad y privacidad del sistema. Es importante que el
administrador del sistema desarrolle una relación de confianza con los usuarios del
sistema. Es algo en lo que nunca se puede insistir lo suficiente.
José Luis Elvira Valenzuela, ITESO-DESI 1999
104
Como proceder con los usuarios
La seguridad en UNIX es bastante laxa por diseño. La seguridad del sistema fue un
pensamiento posterior el sistema se desarrolló originalmente en un entorno donde las
intrusiones de un usuario en otro eran algo inaudito. Por esto, incluso con medidas de
seguridad, aun existe la posibilidad de que usuarios normales hagan daño.
Los administradores de sistemas pueden tomar dos posturas cuando traten con
usuarios abusivos: ser paranoicos o confiados. El administrador de sistemas
paranoico normalmente causa mas daño que el que previene. Una de mis citas
favoritas es, “nunca atribuyas a la malicia nada que pueda ser atribuido a la
estupidez." Dicho de otra forma, muchos usuarios no tienen la habilidad o el
conocimiento para hacer daño real al sistema. El 90% del tiempo, cuando un usuario
causa problemas en el sistema (por ejemplo, rellenando la partición de usuarios con
grandes archivos, o ejecutando múltiples instancias de un gran programa), el usuario
simplemente desconoce que lo que esta haciendo es un problema. He ido a ver a
usuarios que estaban causando una gran cantidad de problemas, pero su actitud
estaba causada por la ignorancia no por la malicia.
Cuando se enfrente con usuarios que puedan causar problemas potenciales no sea
acusativo. La antigua regla de "inocente hasta que se demuestre lo contrario" sigue
siendo valida. Es mejor una simple charla con el usuario, preguntándole acerca del
problema, en lugar de causar una confrontación. Lo ultimo que se desea es estar
entre los malos desde el punto de vista del usuario.
Esto levantaría un montón de sospechas acerca de si usted el “administrador de
sistemas” tiene el sistema correctamente configurado. Si un usuario cree que usted le
disgusta o no le tiene confianza, le puede acusar de borrar archivos o romper la
privacidad del sistema. Esta no es, ciertamente, el tipo de situación en la que
quisiera estar.
Si encontrase que un usuario ha estado intentando "romper" el sistema, o ha estado
haciendo daño al sistema de forma intencionada, no devuelva el comportamiento
malicioso a su vez. En vez de ello, simplemente, dele un aviso, pero sea flexible. En
muchos casos, se puede cazar a un usuario "con las manos en la masa" dañando al
sistema avísele. Dígale que no lo vuelva a repetir. Sin embargo, si le vuelve a cazar
haciendo daño, entonces puede estar absolutamente seguro de que es intencionado.
Ni siquiera puedo empezar a describir la cantidad de veces que parecía que había un
usuario causando problemas al sistema, cuando de hecho, era o un accidente o un
fallo mío.
José Luis Elvira Valenzuela, ITESO-DESI 1999
105
Fijando las reglas
La mejor forma de administrar un sistema no es con un puño de hierro. Así puede ser
como se haga lo militar, pero UNIX no fue diseñado para ese tipo de disciplina. Tiene
sentido el escribir un conjunto sencillo y flexible de reglas para los usuarios, pero
recuerde, cuantas menos reglas tenga, menos posibilidades habrá de romperlas.
Incluso si sus reglas para utilizar el sistema son perfectamente razonables y claras,
siempre habrá momentos en que los usuarios romperán dichas reglas sin
pretenderlo. Esto es especialmente cierto en el caso de usuarios UNIX nuevos, que
están aprendiendo los entresijos del sistema. No esta suficientemente claro, por
ejemplo, que uno no debe bajarse un gigabyte de archivos y enviárselo por correo a
todos los usuarios del sistema. Los usuarios necesitan comprender las reglas y por
que están establecidas.
Si especifica reglas de uso para su sistema, asegúrese de que el motivo detrás de
cada regla particular este claro. Si no lo hace, los usuarios encontraran toda clase de
formas creativas de saltársela y no saber que en realidad la están rompiendo.
Lo que todo esto significa
No podemos decirle como ejecutar su sistema al ultimo detalle. Mucha de la filosofía
depende en como se use el sistema. Si se tienen muchos usuarios, las cosas son
muy diferentes de si solo tiene unos pocos o si se es el único usuario del sistema. Sin
embargo, siempre es una buena idea en cualquier situación comprender lo que ser
administrador de sistema significa en realidad.
Ser el administrador de un sistema no le hace a uno un mago del UNIX. Hay muchos
administradores de sistemas que conocen muy poco acerca de UNIX. Igualmente,
hay muchos usuarios “normales" que saben mas acerca de UNIX que lo que
cualquier administrador de sistemas.
También, ser el administrador de sistemas no le permite el utilizar la malicia contra
sus usuarios. Aunque el sistema le de el privilegio de enredar en los archivos de los
usuarios, no significa que se tenga ningún derecho a hacerlo.
Por ultimo, ser el administrador del sistema no es realmente una gran cosa. No
importa si sus sistema es un pequeño 386 o una super computadora Cray. La
ejecución del sistema es la misma. El saber la clave de root no significa ganar dinero
o fama. Tan solo le permitirá ejecutar el sistema y mantenerlo funcionando. Eso es
todo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
106
4.1.- Cuentas para usuarios en el sistema.
4.1.1.- Cuentas de usuario.
4.1.2.- Procedimientos de acceso.
4.1.3.- Creando cuentas para usuario manualmente.
Añadiendo usuarios
Cuando se añade un usuario hay varios pasos a seguir.
1.- se le debe crear una entrada en /etc/passwd, con un nombre de usuario y UID
únicos. Se debe especificar el GID, nombre completo y resto de información.
2.- Se debe crear el directorio inicial, y poner los permisos en el directorio para que el
usuario sea el dueño.
3.- Se deben suministrar archivos de comandos de inicialización en el nuevo
directorio y se debe hacer alguna otra configuración del sistema (por ejemplo,
preparar un buzón para el correo electrónico entrante para el nuevo usuario).
Aunque no es difícil el añadir usuarios a mano, cuando se esta ejecutando un
sistema con muchos usuarios, es fácil el olvidarse de algo. La manera mas simple de
añadir usuarios es utilizar un programa interactivo que vaya preguntando por la
información necesaria y actualice todos los archivos del sistema automáticamente. El
nombre de este programa es useradd o adduser dependiendo del software que
esté instalado. Las páginas man para estos comandos deberían ser suficientemente
autoexplicatorias.
Borrando usuarios
De forma parecida, borrar usuarios puede hacerse con los comandos userdel o
deluser dependiendo de que software fuera instalado en el sistema. Si se desea
"deshabitar" temporalmente un usuario para que no se conecte al sistema (sin borrar
la cuenta del usuario), se puede prefijar con un asterisco ("*") el campo de la clave en
/etc/passwd. Por ejemplo, cambiando la linea de /etc/passwd correspondiente a
kiwi a
kiwi:*Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash
José Luis Elvira Valenzuela, ITESO-DESI 1999
107
evitará que kiwi se conecte.
Poniendo atributos de usuario
Después de que haya creado un usuario, puede necesitar cambiar algún atributo de
dicho usuario, como puede ser el directorio inicial o la clave. La forma mas simple de
hacer esto es cambiar los valores directamente en /etc/passwd. Para poner clave
a un usuario, utilice el comando passwd.
Por ejemplo,
# passwd larry
cambiara la clave de larry. Solo root puede cambiar la clave de otro usuario de esta
forma. Los usuarios pueden cambiar su propia clave con passwd también.
En algunos sistemas, los comandos chfn y chsh están disponibles, permitiendo a
los usuarios el cambiar sus atributos de nombre completo e interprete de conexión.
Si no, deben pedir al administrador de sistemas que los cambie por ellos.
Grupos
Como hemos citado anteriormente, cada usuario pertenece a uno o mas grupos. La
única importancia real de las relaciones de grupo es la perteneciente a los permisos
de archivos, cada archivo tiene un "grupo propietario" y un conjunto de permisos de
grupo que define de que forma pueden acceder al archivo los usuarios del grupo.
Hay varios grupos definidos en el sistema, como pueden ser bin, Mail, y sys. Los
usuarios no deben pertenecer a ninguno de estos grupos; se utilizan para permisos
de archivos del sistema. En su lugar, los usuarios deben pertenecer a un grupo
individual, como users. Si se quiere ser detallista, se pueden mantener varios grupos
de usuarios como por ejemplo estudiantes, soporte y facultad.
El archivo /etc/group contiene información acerca de los grupos. El formato de
cada linea es
nombre de grupo:clave:GID:otros miembros
Algunos ejemplos de grupos pueden ser:
José Luis Elvira Valenzuela, ITESO-DESI 1999
108
root:*:0:
usuarios:*:100:mdw,larry
invitados:*:200:
otros:*:250:kiwi
El primer grupo, root, es un grupo especial del sistema reservado para la cuenta root.
El siguiente grupo, users, es para usuarios normales. Tiene un GID de 100. Los
usuarios mdw y larry tienen acceso a este grupo. Recuérdese que en /etc/passwd
cada usuario tiene un GID por defecto. Sin embargo, los usuarios pueden pertenecer
a mas de un grupo, añadiendo sus nombres de usuario a otras líneas de grupo en
/etc/group. El comando groups lista a que grupos se tiene acceso.
El tercer grupo, invitados, es para usuarios invitados, y otros es para "otros" usuarios.
El usuario kiwi tiene acceso a este grupo.
Como se puede ver, el campo "clave" de /etc/group raramente se utiliza. A veces
se utiliza para dar una clave para acceder a un grupo. Esto es raras veces necesario.
Para evitar el que los usuarios cambien a grupos privilegiados (con el comando
newgroup), se pone el campo de la clave a "*".
Se pueden usar los comandos addgroup o groupadd para añadir grupos a su
sistema. Normalmente es mas sencillo añadir líneas a /etc/group uno mismo,
puesto que no se necesitan mas configuraciones para añadir un grupo. Para borrar
un grupo, solo hay que borrar su entrada de /etc/group.
José Luis Elvira Valenzuela, ITESO-DESI 1999
109
4.2.- Personalizando el entorno.
4.2.1.- El shell como un lenguaje de programación.
Suponiendo que se tiene una gran cantidad de archivos que son programas en C y
queremos compilar solo los que contengan la cadena include.
$
>
>
>
>
>
>
for file in *
do
if grep -l include $file
then
more $file
fi
done
Lo cual también se puede hacer en una sola línea con el comando :
$ more `grep -l include *`
o su sinónimo :
$ more $(grep -l include *)
Generando un script.
# Este programa busca todos los archivos en el directorio
actual que contengan
# la cadena include y muestra en la salida estándard todos
aquellos que
# encuentre.
for file in *
do
if grep -q include $file
then
more $file
fi
done
exit 0
José Luis Elvira Valenzuela, ITESO-DESI 1999
110
Creando un directorio y copiando los scripts ejecutables al directorio.
$
$
$
$
chmod +x prueba1.sh
mkdir util
mv prueba1.sh util
PATH=$HOME/util:$PATH
Variables de ambiente.
Variable de ambiente. Descripción.
$HOME
El directorio home del usuario.
$PATH
La lista de directorios separada por dos puntos para la
búsqueda de comandos.
$PS1
El prompt.
$PS2
Un prompt secundario, usado cuando se requiere una
entrada adicional.
$IFS
Un campo separador de entradas. Una lista de caracteres
que son usados para separar palabras cuando el shell está
leyendo una entrada.
$0
Si se está ejecutando un script, el nombre del script.
$#
El número de parámetros pasados a un script.
$$
El identificador del proceso
$ saludo=Hola
$ echo $saludo
Hola
$ saludo="que tal"
$ echo $saludo
que tal
$ saludo=6+3
$ echo $saludo
6+3
Comillas.
Normalmente los parámetros están separados por espacios en blanco, si se quiere
que un parámetro contenga uno o más espacios en blanco, se deben de usar
comillas.
José Luis Elvira Valenzuela, ITESO-DESI 1999
111
# prueba2.sh
myvar="Hola a todos"
echo $myvar
echo "$myvar"
echo '$myvar'
echo \$myvar
echo Dame un texto
read myvar
echo '$myvar' ahora es igual a $myvar
exit 0
$ prueba2.sh
Hola a todos
Hola a todos
$myvar
$myvar
Dame un texto
Adios a todos
$myvar ahora es igual a Adios a todos
Variables parámetros
Si el script es llamado con parámetros, algunas variables adicionales son creadas.
Aunque no se pasen parámetros, la variable de ambiente $# se pasa con el valor de
0.
Variable parámero. Descripción.
$1, $2, ...
Los parámetros que son pasados al script.
$*
Una lista de parámetros, un una sola variable, separada por el
primer carácter en la variable de ambiente IFS.
$G
Una variación en $*, que no usan la variable IFS.
José Luis Elvira Valenzuela, ITESO-DESI 1999
112
$ IFS=''
$ set uno dos tres
$ echo "$@"
uno dos tres
$ echo "$*"
unodostres
$ IFS=' '
$ echo "$*"
uno dos tres
# prueba3.sh
saludo="Hola"
echo $saludo
echo "Estamos corriendo el programa $0"
echo "El segundo parámetro es $2"
echo "El primer parámetro es $1"
echo "La lista de parámetros es $*"
echo "El directorio del usuario es $HOME"
echo "Teclea un nuevo saludo"
read saludo
echo $saludo
echo "Aquí termina el script."
exit 0
$ prueba3.sh uno dos tres
Hola
Estamos corriendo el programa /home/jluis/util/prueba3.sh
El segundo parámetro es dos
El primer parámetro es uno
La lista de parámetros es uno dos tres
El directorio del usuario es /home/jluis
Teclea un nuevo saludo
Buenos Días
Buenos Días
Aquí termina el script.
José Luis Elvira Valenzuela, ITESO-DESI 1999
113
Condiciones.
El comando test o [].
Introduciremos el comando test usando una de las condiciones más simples:
checando para ver si un archivo existe.
if test –f hola.c
then
...
fi
O se puede escribir
if [ -f hola.c]
then
...
fi
O bien podemos poner then en la misma línea.
if [ -f hola.c]; then
...
fi
Comparación de cadenas de caracteres.
Comparación de cadenas
Cadena
Cadena1=Cadena2
Cadena1!=Cadena2
-n Cadena
-z Cadena
José Luis Elvira Valenzuela, ITESO-DESI 1999
Resultado
Verdadero si la cadena no está vacía.
Verdadero si las cadenas son iguales.
Verdadero si las cadenas no son iguales.
Verdadero si la cadena no es nula.
Verdadero si la cadena es nula (una cadena vacía).
114
Comparación aritmética.
Comparación aritmética
Expresión1 –eq Expresión2
Expresión1 –ne Expresión2
Expresión1 –gt Expresión2
Resultado
Verdadero si las expresiones son iguales.
Verdadero si las expresiones no son iguales.
Verdadero si Expresión1 es mayor a
Expresión2.
Expresión1 –ge Expresión2 Verdadero si Expresión1 es mayor o igual a
Expresión2.
Expresión1 –lt Expresión2 Verdadero si Expresión1 es menor a
Expresión2.
Expresión1 –le Expresión2 Verdadero si Expresión1 es menor o igual a
Expresión2.
! Expresión
El operador ! niega la expresión y regresa
verdadero si la expresión es falta y viceversa.
Condiciones de archivos.
Condiciones de
archivos
-d archivo
-e archivo
-f archivo
-g archivo
-r archivo
-s archivo
-u archivo
-w archivo
-x archivo
Resultado
Verdadero si el archivo es un directorio.
Verdadero si el archivo existe.
Verdadero si el archivo es un archivo.
Verdadero si el identificador de grupo está establecido en el
archivo.
Verdadero si el archivo tiene permisos de lectura.
Verdadero si el archivo tiene tamaño diferente de cero.
Verdadero si el identificador de usuario está establecido en el
archivo.
Verdadero si el archivo tiene permisos de escritura.
Verdadero si el archivo es ejecutable.
José Luis Elvira Valenzuela, ITESO-DESI 1999
115
Estructuras de control.
if condición
then
sentencias
else
sentencias
fi
for variable in valores
do
sentencias
done
while condición
do
sentencias
done
until condición
do
sentencias
done
4.2.2.- Los scripts de inicialización.
A parte de los scripts que puede crear, hay un número de estos que usa el intérprete
de comandos para ciertos propósitos. Los más importantes son sus scripts de
inicialización, scripts automáticamente ejecutados por el intérprete al abrir una
sesión.
Los scripts de inicialización son eso, simples scripts como los descritos arriba. De
cualquier modo, son muy útiles para la inicialización de su entorno al ejecutarse
automáticamente. Por ejemplo, si siempre usa la orden Mail para comprobar si tiene
correo al iniciar una sesión, incluya en su script de inicialización dicha orden y será
ejecutada automáticamente.
Tanto Bash como Tcsh distinguen entre un intérprete de presentación y otras
invocaciones del intérprete. Un intérprete de presentación es el que se ejecuta en el
José Luis Elvira Valenzuela, ITESO-DESI 1999
116
momento de la presentación al sistema (login). Es el único que usara. De cualquier
modo, si ejecuta una opción de salir a un intérprete desde algún programa, como vi,
inicializa otra instancia del intérprete de comandos, el cual no es su interprete de
presentación. Además, en cualquier momento que ejecuta un script,
automáticamente esta arrancando otro intérprete que va a ser el encargado de
ejecutar el script.
Los archivos de inicialización usados por Bash son: /etc/profile (configurado
por el administrador del sistema, y ejecutado por todos los usuarios de Bash en el
momento de la presentación al sistema), $HOME/.bash_profile (ejecutado por
una sesión de presentación Bash) y $HOME/.bashrc (ejecutadas por todas las
sesiones Bash que no son de presentación). Si .bash_profile no esta presente,
se usa en su lugar .profile.
Tcsh usa los siguientes scripts de inicialización: /etc/csh.login (ejecutado por
todos los usuarios de Tcsh en el momento de la presentación al sistema),
$HOME/.tcshrc (ejecutado en la presentación al sistema por todas las instancias
nuevas de Tcsh) y $HOME/.login (ejecutado en la presentación al sistema, seguido
.tcshrc). Si .tcshrc no esta presente, .cshrc se usa en su lugar.
Para entender completamente la función de estos archivos, necesitará aprender mas
acerca del intérprete de comandos. La programación de scripts es una materia
complicada. Lea las páginas de manual de bash y/o tcsh para aprender más sobre
la configuración de su entorno.
José Luis Elvira Valenzuela, ITESO-DESI 1999
117
4.3.- Control de procesos.
4.3.1.- Procesos en el sistema.
Tareas y procesos
Control de Tareas es una utilidad incluida en muchos shells (incluidas Bash y Tcsh),
que permite el control de multitud de comandos o tareas al momento. Antes de
seguir, deberemos hablar un poco sobre los procesos.
Cada vez que usted ejecuta un programa, usted lanza lo que se conoce como
proceso, que es simplemente el nombre que se le da a un programa cuando se esta
ejecutando. El comando ps visualiza la lista de procesos que se están ejecutando
actualmente, por ejemplo:
/home/larry# ps
PID TT STAT
24
3 S
161 3 R
TIME COMMAND
0:03 (bash)
0:00 ps
/home/larry#
La columna PID representa el identificador de proceso. La ultima columna COMMAND,
es el nombre del proceso que se esta ejecutando. Ahora solo estamos viendo los
procesos que esta ejecutando Larry. Vemos que hay dos procesos, bash (Que es el
shell o interprete de comandos que usa Larry), y el propio comando ps. Como puede
observar, bash se ejecuta concurrentemente con el comando ps. El bash ejecutó ps
cuando Larry tecleo el comando. Cuando ps termina de ejecutarse (después de
mostrar la tabla de procesos), el control retorna al proceso bash, que muestra el
prompt, indicando que esta listo para recibir otro comando.
Un proceso que esta corriendo se denomina tarea para el shell. Los términos proceso
y tarea, son intercambiables. Sin embargo, se suele denominar "tarea" a un proceso,
cuando es usado en conjunción con control de tareas, que es un rasgo del shell que
permite cambiar entre distintas tareas.
En muchos casos, los usuarios solo ejecutan un trabajo cada vez, que es el último
comando que ellos teclearon desde el shell. Sin embargo, usando el control de
José Luis Elvira Valenzuela, ITESO-DESI 1999
118
tareas, usted podrá ejecutar diferentes tareas al mismo tiempo, cambiando entre
cada uno de ellos conforme lo necesite.
>Cuan beneficioso puede llegar a ser esto?.
Supongamos que esta usted con su procesador de textos, y de repente necesita
parar y realizar otra tarea, con el control de tareas, usted podrá suspender
temporalmente el editor, y volver al shell para realizar cualquier otra tarea, y luego
regresar al editor como si no lo hubiese dejado nunca.
Lo siguiente solo es un ejemplo, hay montones de usos prácticos del control de
tareas.
Primer plano y Segundo plano
Un proceso puede estar en Primer plano o en Segundo plano. Solo puede haber un
proceso en primer plano al mismo tiempo, el proceso que esta en primer plano, es el
que interactúa con usted recibe entradas de teclado, y envía las salidas al monitor.
(Salvo, por supuesto, que haya re-dirigido la entrada o la salida). El proceso en
segundo plano, no recibe ninguna señal desde el teclado por lo general, se ejecutan
en silencio sin necesidad de interacción.
Algunos programas necesitan mucho tiempo para terminar, y no hacen nada
interesante mientras tanto. Compilar programas es una de estas tareas, así como
comprimir un archivo grande. No tiene sentido que se siente y se aburra mientras
estos procesos terminan. En estos casos es mejor lanzarlos en segundo plano, para
dejar la computadora en condiciones de ejecutar otro programa.
Los procesos pueden ser suspendidos. Un proceso suspendido es aquel que no se
está ejecutando actualmente, sino que está temporalmente parado. Después de
suspender una tarea, puede indicar a la misma que continúe, en primer plano o en
segundo, según necesite. Retomar una tarea suspendida no cambia en nada el
estado de la misma la tarea continuara ejecutándose justo donde se dejo.
Tenga en cuenta que suspender un trabajo no es lo mismo que interrumpirlo. Cuando
usted interrumpe un proceso (generalmente con la pulsación de <ctrl-C>, el proceso
muere, y deja de estar en memoria y utilizar recursos del computadora. Una vez
eliminado, el proceso no puede continuar ejecutándose, y deberá ser lanzado otra
vez para volver a realizar sus tareas. También se puede dar el caso de que algunos
programas capturan la interrupción, de modo que pulsando <ctrl-C> no se para
inmediatamente. Esto se hace para permitir al programa realizar operaciones
necesarias de limpieza antes de terminar7. De hecho, algunos programas
simplemente no se dejan matar por ninguna interrupción.
José Luis Elvira Valenzuela, ITESO-DESI 1999
119
Envío a segundo plano y eliminación de procesos
Empecemos con un ejemplo sencillo. El comando yes es un comando
aparentemente inútil que envía una serie interminable de y-es a la salida estándar.
(Realmente es muy útil. Si se utiliza una tubería (o "pipe") para unir la salida de yes
con otro comando que haga preguntas del tipo si/no, la serie de y-es confirmará
todas las preguntas.)
Pruebe con esto.
/home/larry# yes
y
y
y
y
y
La serie de y-es continuará hasta el infinito, a no ser que usted la elimine, pulsando la
tecla de interrupción, generalmente <ctrl-C>. También puede deshacerse de está
serie de y-es redigiriendo la salida estándar de yes hacia /dev/null, que como
recordará es una especie de "agujero negro" o papelera para los datos. Todo lo que
usted envíe alli, desaparecerá.
/home/larry# yes > /dev/null
Ahora va mucho mejor, el terminal no se ensucia, pero el prompt del shell no retorna.
Esto es porque yes sigue ejecutándose y enviando esos inútiles y-es a /dev/null.
Para recuperarlo, pulse la tecla de interrupción.
Supongamos ahora que queremos dejar que el comando yes siga ejecutándose, y
volver al mismo tiempo al shell para trabajar en otras cosas. Para ello nos
enviaremos a yes a segundo plano, lo que nos permitirá ejecutarlo, pero sin
necesidad de interacción.
Una forma de mandar procesos a segundo plano es añadiendo un carácter "&" al final
de cada comando.
/home/larry# yes > /dev/null &
[1] 164
/home/larry#
Como podrá ver, ha regresado al shell.
José Luis Elvira Valenzuela, ITESO-DESI 1999
120
>Pero que es eso de "[1] 164"?,
>se esta ejecutando realmente el comando yes?
"[1]" representa el número de tarea del proceso yes. El shell asigna un numero a
cada tarea que se esté ejecutando. Como yes es el único comando que se está
ejecutando, se le asigna el numero de tarea 1.
El numero "164" es el número de identificación del proceso, o PID, que es el numero
que el sistema le asigna al proceso. Ambos números pueden usarse para referirse a
la tarea como veremos después.
Ahora usted tiene el proceso yes corriendo en segundo plano, y enviando
constantemente la señal y hacia el dispositivo /dev/null. Para chequear el estado
del proceso, utilice el comando interno de la shell jobs:
/home/larry# jobs
[1]+
Running
/home/larry#
yes >/dev/null
&
¡Ahí esta!. También puede usar el comando ps, como mostramos antes, para
comprobar el estado de la tarea.
Para eliminar una tarea, utilice el comando kill. Este comando toma como
argumento un número de tarea o un numero de ID de un proceso. Esta era la tarea 1,
así que usando el comando
/home/larry# kill %1
matara la tarea. Cuando se identifica la tarea con el numero de tarea, se debe
preceder el numero con el carácter de porcentaje (“%").
Ahora que ya hemos matado la tarea, podemos usar el comando jobs de nuevo
para comprobarlo:
/home/larry# jobs
[1]+
Terminated
yes >/dev/null
/home/larry#
José Luis Elvira Valenzuela, ITESO-DESI 1999
121
La tarea está, en efecto, muerta, y si usa el comando jobs de nuevo, no mostrará
nada.
También podrá matar la tarea usando el numero de ID de proceso (PID), el cual se
muestra conjuntamente con el ID de tarea cuando arranca la misma. En nuestro
ejemplo el ID de proceso es 164, así que el comando
/home/larry# kill 164
es equivalente a
/home/larry# kill %1
No es necesario usar el "%" cuando nos referimos a una tarea a traves de su ID de
proceso.
Parada y relanzamiento de tareas
Hay otra manera de poner una tarea en segundo plano. Usted puede lanzarlo como
un proceso normal (en primer plano), pararlo, y después relanzarlo en segundo
plano.
Primero, lance el proceso yes en primer plano como lo haría normalmente:
/home/larry# yes > /dev/null
De nuevo, dado que yes corre en primer plano, no debe retornar el prompt de la shell.
Ahora, en vez de interrumpir la tarea con <ctrl-C>, suspenderemos la tarea. El
suspender una tarea no la mata: solamente la detiene temporalmente hasta que Ud.
la retoma. Para hacer esto usted debe pulsar la tecla de suspender, que suele ser
<ctrl-Z>.
/home/larry# yes > /dev/null
<ctrl-Z>
[1]+
Stopped
/home/larry#
yes >/dev/null
Mientras el proceso está suspendido, simplemente no se esta ejecutando. No gasta
tiempo de CPU en la tarea. Sin embargo, usted puede retomar el proceso de nuevo
como si nada hubiera pasado. Continuara ejecutándose donde se dejo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
122
Para relanzar la tarea en primer plano, use el comando fg (del ingles "foreground").
/home/larry# fg
yes >/dev/null
El shell muestra el nombre del comando de nuevo, de forma que tenga conocimiento
de que tarea es la que ha puesto en primer plano. Pare la tarea de nuevo, con <ctrlZ>. Esta vez utilice el comando bg para poner la tarea en segundo plano. Esto hará
que el comando siga ejecutándose igual que si lo hubiese hecho desde el principio
con "&" como en la sección anterior.
/home/larry# bg
[1]+ yes >/dev/null &
/home/larry#
Y tenemos de nuevo el prompt. El comando jobs debería decirnos que yes se está
ejecutando, y podemos matar la tarea con kill tal y como lo hicimos antes.
>Como podemos parar la tarea de nuevo?
Si pulsa <ctrl-Z> no funcionará, ya que el proceso está en segundo plano. La
respuesta es poner el proceso en primer plano de nuevo, con el comando fg, y
entonces pararlo. Como puede observar podrá usar fg tanto con tareas detenidas,
como con las que estén segundo plano.
Hay una gran diferencia entre una tarea que se encuentra en segundo plano, y una
que se encuentra detenida. Una tarea detenida es una tarea que no se esta
ejecutando, es decir, que no usa tiempo de CPU, y que no esta haciendo ningún
trabajo (la tarea aun ocupa un lugar en memoria, aunque puede ser volcada a disco).
Una tarea en segundo plano, se esta ejecutando, y usando memoria, a la vez que
completando alguna acción mientras usted hace otro trabajo. Sin embargo, una tarea
en segundo plano puede intentar mostrar texto en su terminal, lo que puede resultar
molesto si esta intentando hacer otra cosa. Por ejemplo, si usted uso el comando
/home/larry# yes &
sin redirigir stdout a /dev/null, una cadena de y-es se mostraran en su monitor, sin
modo alguno de interrumpirlo (no puede hacer uso de <ctrl-C> para interrumpir tareas
en segundo plano). Para poder parar esas interminables y-es, tendría que usar el
comando fg para pasar la tarea a primer plano, y entonces usar |_ctrl-C_ |para
matarla.
José Luis Elvira Valenzuela, ITESO-DESI 1999
123
Otra observación. Normalmente, los comandos "fg" y "bg" actúan sobre el último
proceso parado (indicado por un "+" junto al número de tarea cuando usa el comando
jobs). Si usted tiene varios procesos corriendo a la vez, podrá mandar a primer o
segundo plano una tarea especifica indicando el ID de tarea como argumento de fg
o bg, como en
/home/larry# fg %2
(para la tarea de primer plano numero 2), o
/home/larry# bg %3
(para la tarea de segundo plano numero 3). No se pueden usar los ID de proceso con
fg o bg.
Además de esto, si usa el numero de tarea por si solo, como :
/home/larry# %2
es equivalente a :
/home/larry# fg %2
Solo recordarle que el uso de control de tareas es una utilidad de la shell. Los
comandos fg, bg y jobs son internos del shell. Si por algún motivo usted utiliza un
shell que no soporta control de tareas, no espere disponer de estos comandos.
Y además, hay algunos aspectos del control de tareas que difieren entre Bash y
Tcsh. De hecho, algunos shells no proporcionan ningún control de tareas sin
embargo, la mayoría de las shells disponibles para Linux soportan control de tareas.
4.3.2.- Corriendo comandos en tiempos especificados.
El comando at
Formatos del comando :
Para planificar una tarea para la hora (hh) y el minuto (mm) indicados, utilizando un
reloj de 24 horas.
at hh:mm
José Luis Elvira Valenzuela, ITESO-DESI 1999
124
Para planificar un trabajo para la hora (hh), minuto (mm), mes, día y año indicados.
at hh:mm mes día año
Para listar los trabajos indicados; es un alias de la orden atq.
at –l
Planifica un trabajo para el momento actual más el valor numérico en unidades de
tiempo.
at now +count time-units
Cancela el trabajo que contenga un número de trabajo igual a job_id; es un alias
de la orden atrm.
at –d job_id
Para planificar una o más órdenes para un momento determinado, utilice la orden at.
Con ella puede determinar la hora y la fecha o ambas a la vez.
El siguiente ejemplo ejecuta su tarea a la 1:23 AM. Si está trabajando antes de la
hora especificada, el trabajo se ejecuta el mismo día, de lo contrario se ejecutará
hasta el día siguiente.
# at 1:23
>lp /usr/sales/reports/*
>echo “Archivos impresos” | mail –s “trabajo realizado” boss
<ctrl-D>
job 756603300.a at Tues Jan 21 01:23:00 1997
El número de tarea, 756603300.a sirve para identificarla. Si se decide cancelar la
tarea hay que hacerlo de la siguiente forma :
$ at –d 756603300.a
También se puede indicar una fecha para un trabajo. Por ejemplo, para planificar un
trabajo a las 5:00 PM del 24 de enero, solo hay que escribir lo siguiente :
José Luis Elvira Valenzuela, ITESO-DESI 1999
125
# at 17:00 Jan 24
>lp /usr/sales/reports/*
>echo “Archivos impresos” | mail –s “trabajo realizado” boss
><ctrl-D>
Si se quiere planificar varias órdenes con at, lo mejor es almacenarlas en un archivo.
Si el nombre del archivo es getdone, por ejemplo, y se quieren planificar órdenes
para las 10:00 AM, hay que escribir :
$ at 10:00 <getdone
o también :
$ at 10:00 –f getdone
Ejecución de tareas largas con batch
El comando batch deja que sea el sistema operativo quien decida el momento
adecuado para ejecutar el proceso. Cuando planifica un trabajo con batch, linux
comienza y trabaja en el proceso siempre que la carga del sistema no sea demasiado
alta. Las tareas que se ejecutan con batch lo hacen en segundo plano al igual que
at. De hecho batch es un alias del comando at –b en la distribución de Red-Hat
Linux.
El formato de batch está compuesto por la lista de órdenes que siguen al comando
batch; la lista termina con la secuencia <ctrl-D>.
Ejemplo :
# batch
>sort /usr/sales/reports/* | lp
>echo “Archivos impresos” | mail –s “Trabajo realizado” boss
><ctrl-D>
job 7789001234.b at Fri Feb 21 11:43:09 1997
Planificación de órdenes con cron y crontab
Para planificar órdenes o procesos de forma regular, utilice el programa cron. Debe
de indicar las fechas y las horas en las que se desea que se ejecute una orden
José Luis Elvira Valenzuela, ITESO-DESI 1999
126
dentro de archivos crontab. Los tiempos se pueden indicar en minutos, horas, días
del mes, meses del año o días de la semana.
El demonio cron
No es un comando ; es un "demonio" , ó proceso que se arranca al encender la
máquina y está permanentemente activo. Su misión es inspeccionar cada minuto los
archivos crontab de los usuarios y ejecutar los comandos que allí se digan a los
intervalos horarios que hayamos marcado. Como se acaba se señalar , los crontab
son dependientes de cada usuario.
Se deben seguir los siguientes pasos para modificar , añadir ó borrar un archivo
crontab :
1 - Sacarlo a archivo usando el comando "crontab -l >/tmp/mio" , por ejemplo.
2 - Modificarlo con un editor de acuerdo a las instrucciones de formato que se
explican a continuación.
3 - Registrar el nuevo archivo mediante el comando "crontab /tmp/mio" , por
ejemplo.
mira cada minuto el directorio /var/spool/crontabs y ejecuta los comandos
El archivo crontab
El formato del archivo es el siguiente :
#minutos horas dia mes mes dia-semana comando ( # = comentario )
minutos : de 0 a 59.
horas : de 0 a 23.
dia del mes : de 0 a 31.
mes : de 0 a 12.
día semana : de 0 a 6 ( 0 = domingo , 1 = lunes ...)
Aparte de la especificación normal , pueden utilizarse listas , es decir , rangos de
valores de acuerdo con las siguientes reglas :
José Luis Elvira Valenzuela, ITESO-DESI 1999
127
8-11 : Rango desde las 8 hasta las 11 ambas inclusive.
8,9,10,11 : Igual que antes ; desde las 8 hasta las 11.
Si queremos incrementar en saltos diferentes de la unidad , podemos escribir la barra
"/" :
0-8/2 : Desde las 12 hasta las 8 cada 2 horas. Equivale a 0,2,4,6,8 .
El asterisco significa "todas" ó "todo". Por tanto :
*/2 : Cada dos horas.
Ejemplos más evidentes :
# ejecutar una salvita todos los dias 5 minutos despues de las 12 de la
noche :
5 0 * * * /home/salvas/diaria.sh 1>>/home/salvas/log 2>&1
# ejecutar a las 2:15pm el primer dia de cada mes:
15 14 1 * * /home/salvas/mensual.sh 1>/dev/null 2>&1
# ejecutar de lunes a viernes a las diez de la noche - apagar la maquina
que es muy tarde
0 22 * * 1-5 shutdown -h now 1>/dev/null 2>&1
# ejecutar algo cada minuto
* * * * * /home/cosas/espia.sh
José Luis Elvira Valenzuela, ITESO-DESI 1999
128
4.3.3.- Planificación de la prioridad de los procesos.
José Luis Elvira Valenzuela, ITESO-DESI 1999
129
4.4.- Utilerías.
4.4.1.- Encontrando archivos y texto.
Por último , veremos un comando de utilidad simililar a "ls" pero con mas opciones ;
el comando "find" muestra en pantalla directorios y/o archivos atendiendo a
opciones determinadas . Si bien la sintaxis es demasiado extensa para estudiarla en
su totalidad , conviene ver algunos
ejemplos :
El comando toma como argumentos declaraciones en el formato
find <directorio base> <opciones> [-print]
Por tanto , para sacar en pantalla todos los archivos y directorios del disco , valdría
con :
# find / -print
- Si se desean sólo archivos ó sólo directorios :
# find / -type f -print
ó
# find / -type d -print
respectivamente.
Buscar todos los archivos y directorios que tengan más de 30 días de antigüedad :
# find / -atime +30 -print
El resto de las opciones sirve para buscar archivos con determinados permisos ,
mayores ó menores que un determinado tamaño.
4.4.2.- Respaldando archivos.
Utilizando tar
José Luis Elvira Valenzuela, ITESO-DESI 1999
130
El comando tar es utilizado normalmente para archivar archivos .El formato del
comando tar es :
tar opciones archivo1 archivo2 ...archivoN
donde opciones es la lista de comandos y opciones para tar, y archivo1 hasta
archivoN es la lista de archivos a añadir o extraer del archivo.
Por ejemplo, el comando :
# tar cvf backup.tar /etc
empaquetará todos los archivos de /etc en el archivo tar backup.tar.
El primer argumento de tar "cvf" es el "comando" tar. "c" le dice a tar que cree un
nuevo archivo de archivo.
La opcion "v" fuerza a tar en el modo detallado imprimiendo los nombres de los
archivos según se archivan.
La opcion "f" le dice a tar que el siguiente argumento backup.tar es el nombre del
archivo a crear.
El resto de los argumentos de tar son los nombres de archivos y directorios a añadir
al archivo.
El comando
# tar xvf backup.tar
extraerá el archivo tar backup.tar en el directorio actual. Esto puede ser peligroso
a veces cuando se extraen archivos de un archivo tar, los archivos antiguos se
sobreescriben.
Por otra parte, antes de extraer archivos tar es importante conocer donde se deben
desempaquetar los archivos. Por ejemplo, digamos que se archivaron los siguientes
archivos: /etc/hosts,/etc/group, y /etc/passwd. Si se uso el comando :
# tar cvf backup.tar /etc/hosts /etc/group /etc/passwd
José Luis Elvira Valenzuela, ITESO-DESI 1999
131
el nombre de directorio /etc se añadió al principio de cada nombre de archivo. Para
poder extraer los archivos en la localización correcta, se necesitara utilizar los
siguientes comandos:
# cd /
# tar xvf backup.tar
Puesto que los archivos se extraen con el nombre de camino almacenado en el
archivo de archivo.
Sin embargo, si se archivaron los archivos con los comandos
# cd /etc
# tar cvf hosts group passwd
Los nombres de directorio no se salvaron en el archivo de archivo. Por esto se
necesitara hacer "cd /etc" antes de extraer los archivos. Como se puede ver, el
como haya sido creado un archivo tar marca una gran diferencia en como se extrae.
Se puede usar el comando :
# tar tvf backup.tar
para mostrar un "índice" del archivo tar antes de desempaquetarlo. De esta forma se
puede ver que directorio se utilizó como origen de los nombres de los archivos, y se
puede extraer el archivo desde la localización correcta.
Los comandos gzip y compress
A diferencia de los programas de archivo para MS-DOS, tar no comprime
automáticamente los archivos según los archiva. Por ello, si se están archivando dos
archivos de un megabytes, el archivo tar resultante tendrá dos megabytes. El
comando gzip puede utilizarse para comprimir un archivo (el archivo a comprimir no
necesita ser un archivo tar). El comando :
# gzip -9 backup.tar
comprimirá backup.tar y le dejara con backup.tar.gz, que es la versión
comprimida del archivo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
132
La opcion -9 le dice a gzip que utilice el mayor factor de compresión.
El comando gunzip puede ser utilizado para descomprimir un archivo comprimido
con gzip. Equivalentemente, se puede utilizar "gzip -d".
gzip es una herramienta relativamente nueva en la comunidad UNIX. Durante
muchos años, se utilizó en su lugar el comando compress. Sin embargo, debido a
varios factores, compress se esta volviendo desfasado.
Los archivos comprimidos con compress terminan en la extensión .Z. Por ejemplo,
backup.tar.Z es la versión comprimida con compress de backup.tar, mientras
que backup.tar.gz es la versión comprimida con gzip. El comando uncompress
se utiliza para expandir un archivo comprimido con compress; gunzip sabe también
como tratar los archivos comprimidos con compress.
Juntándolo todo
Por lo tanto, para archivar un grupo de archivos y comprimir el resultado, se pueden
utilizar los comandos:
# tar cvf backup.tar /etc
# gzip -9 backup.tar
El resultado será backup.tar.gz. Para desempaquetar este archivo, se usan los
comandos contrarios:
# gunzip backup.tar.gz
# tar xvf backup.tar
Por supuesto, asegúrese siempre de que esta en el directorio correcto antes de
desempaquetar un archivo tar.
Se pueden utilizar algunas mañas de UNIX para hacer todo esto en una sola línea de
comando, como por ejemplo:
# tar cvf - /etc | gzip -9c > backup.tar.gz
Aqui estamos enviando el archivo tar a "-", que representa la salida estándar de tar.
Esto es encolado hacia gzip, que comprime el archivo tar de entrada, y el resultado
José Luis Elvira Valenzuela, ITESO-DESI 1999
133
se salva en backup.tar.gz. La opcion -c de gzip le dice que envíe su salida
hacia la salida estándar, que es redirigida a backup.tar.gz.
Un comando único para desempaquetar este archivo seria:
# gunzip -c backup.tar.gz | tar xvf -
De nuevo, gunzip descomprime el contenido de backup.tar.gz y envía el archivo
tar resultante hacia la salida estándar. Esta es redirigida hacia tar, que lee de "-",
refiriéndose esta vez a la entrada estándar de tar.
Felizmente, el comando tar también incluye la opcion z para comprimir /
descomprimir automáticamente los archivos al vuelo, utilizando el algoritmo de
compresión de gzip.
Por ejemplo, el comando
# tar cvfz backup.tar.gz /etc
es equivalente a :
# tar cvf backup.tar /etc
# gzip backup.tar
Igual que el comando
# tar xvfz backup.tar.Z
se puede utilizar en vez de :
# uncompress backup.tar.Z
# tar xvf backup.tar
Usando Diskettes y Haciendo Copias de Seguridad
Los diskettes son utilizados normalmente como medio para copias de seguridad. Si
no se tiene una unidad de cinta conectada al sistema, se pueden utilizar diskettes (a
pesar de que sean mas lentos y ligeramente menos seguros).
José Luis Elvira Valenzuela, ITESO-DESI 1999
134
También puede utilizar diskettes para contener sistemas de archivos individuales de
esta forma, se puede montar mount el diskette para acceder a los datos contenidos
en el.
Utilizando diskettes para copias de seguridad
La forma mas simple de hacer una copia de seguridad es con tar.
El comando :
# tar cvfzM /dev/fd0 /
hará una copia de seguridad completa de su sistema utilizando el diskette /dev/fd0.
La opcion "M" de tar permite que la copia de seguridad sea una copia multi-volumen;
esto es, cuando un diskette está lleno, tar pedirá el siguiente.
El comando :
# tar xvfzM /dev/fd0
puede ser utilizado para recuperar la copia de seguridad completa. Este método
puede ser utilizado también si se tiene una unidad de cinta (/dev/rmt0) conectada
al sistema.
Existen otros programas para hacer copias de seguridad multi-volumen; el programa
backflops disponible en tsx-11.mit.edu puede ser útil.
Hacer una copia de seguridad completa del sistema puede ser costoso en tiempo y
recursos. Muchos administradores de sistemas utilizan una política de copias de
seguridad increméntales, en la que cada mes se hace una copia de seguridad
completa, y cada semana solo se copian aquellos archivos que hayan sido
modificados en esa semana. En este caso, si el sistema se viene abajo a mitad de
mes, solo tiene que restaurar la ultima copia de seguridad mensual completa y,
después, las ultimas copias semanales según el caso.
El comando find puede ser útil para localizar archivos que hayan cambiado desde
una cierta fecha. Se pueden encontrar varios archivos de comandos para manejar
copias de seguridad increméntales en sunsite.unc.edu.
José Luis Elvira Valenzuela, ITESO-DESI 1999
135
Utilizando diskettes como sistemas de archivos
Puede crearse un sistema de archivos en un diskette igual que lo haría en una
partición de un disco duro. Por ejemplo :
# mke2fs /dev/fd0 1440
crea un sistema de archivos en el diskette en /dev/fd0 .
El tamaño del sistema de archivos debe corresponder al tamaño del diskette. Los
diskettes de alta densidad de 3.5" tienen un tamaño de 1.44 megabytes, o 1440
bloques. Los diskettes de alta densidad de 5.25" tienen 1200 bloques.
Para poder acceder a un diskette, se debe montar el sistema de archivos que
contiene.
Esto se puede hacer con el comando mount de la siguiente forma :
# mount -t ext2 /dev/fd0 /mnt
montará el diskette /dev/fd0 en el directorio /mnt. Ahora todos los archivos del
diskette aparecerán bajo /mnt en su unidad. "-t ext2" especifica el tipo de
sistema de archivos como ext2fs. Si crea otro tipo de sistema de archivos en el
diskette, necesitara especificárselo al comando mount.
El "punto de montaje" (el directorio donde esta montando el sistema de archivos)
debe existir en el momento de utilizar el comando mount. Si no existiese, deba
crearlo con el comando mkdir.
 Tenga en cuenta que cualquier entrada/salida al diskette se gestiona con
buffers igual que si fuese de disco duro. Si cambia datos en el diskette,
puede que no vea encenderse la luz de la unidad hasta que el nucleo decida
vaciar sus buffers. Es importante que no quite un diskette antes de haberlo
desmontado; esto puede hacerse con el comando :
# umount /dev/fd0
 No cambie los diskettes como se hace en un sistema MS-DOS; siempre que
cambie diskettes, desmonte el primero y monte el siguiente.
José Luis Elvira Valenzuela, ITESO-DESI 1999
136
4.5.- Software de administración de paquetes.
4.5.1.- Instalación de paquetes.
Manejo de paquetes con RPM
Red Hat Package Manager (RPM), es un sistema abierto de empaquetamiento
disponible para cualquiera que quiera usarlo, que funciona tanto en Linux Red Hat
como en otros sistemas Linux y UNIX. Red Hat Software invita a los demás
distribuidores a que analicen RPM y lo usen en sus propios productos. RPM se
distribuye bajo los términos de la GPL (General Public License).
RPM proporciona al usuario final gran cantidad de características que hacen el
mantenimiento del sistema algo mucho mas fácil de lo que nunca había sido. Instalar,
desinstalar, y actualizar paquetes RPM son todo órdenes de una sola línea, y todos
los sucios detalles son eliminados de su presencia. RPM mantiene una base de datos
de los paquetes instalados y de sus archivos, lo que permite realizar potentes
consultas y verificaciones del sistema. Durante las actualizaciones, RPM maneja los
archivos de configuración de manera especial, para que nunca pierda sus ajustes -una cualidad que sería imposible con el uso de los archivos .tar.gz.
RPM permite al desarrollador tomar el código fuente del programa y empaquetarlo
dentro de los paquetes de archivos binarios y de fuentes para el usuario final. Este
proceso es bastante sencillo y es gestionado mediante un único archivo, y
opcionalmente mediante las actualizaciones que se desarrollen. Esta clara definición
de fuentes “prístinas'', de sus actualizaciones y de las instrucciones de construcción,
facilita el mantenimiento de los paquetes así como de las nuevas versiones del
software conforme van siendo publicadas.
Objetivos al diseñar RPM
Antes de intentar comprender el uso de RPM, es bueno tener una idea de cuales son
los objetivos en su diseño.
 Capacidad de actualización : Con RPM puede actualizar componentes individuales
de su sistema sin necesidad de una reinstalación completa del mismo. Cuando
obtenga una nueva versión de un sistema operativo basado en RPM (como Linux
Red Hat), no tiene la necesidad de reinstalar su ordenador (como tiene que hacer
con otros sistemas operativos basados en otros sistemas de empaquetamiento).
RPM permite actualizaciones inteligentes y completamente automatizadas de su
sistema. Los archivos de configuración de los paquetes son protegidos a lo largo
de las actualizaciones, por lo que usted no perderá sus configuraciones.
José Luis Elvira Valenzuela, ITESO-DESI 1999
137
 Consultas potentes : RPM también está diseñado para tener potentes opciones de
consulta. Usted puede hacer búsquedas de paquetes o de ciertos archivos a
través de la base de datos en su totalidad. Usted puede también investigar a qué
paquete pertenece un archivo y de dónde proviene éste. Los archivos contenidos
en un paquete RPM se encuentran en formato comprimido, habitualmente con una
cabecera del archivo binario que contiene información útil acerca del paquete y su
contenido, permitiéndole buscar paquetes individuales rápida y fácilmente.
 Verificaciones del sistema : Otra característica importante es la capacidad de
verificar paquetes. Si usted está preocupado porque ha borrado un archivo
importante de algún paquete, simplemente verifique el paquete. Usted será
notificado de las anomalías. Ahora, usted puede reinstalar el paquete si es
necesario. Cualquier archivo de configuración que usted hubiera modificado se
mantendrá durante la reinstalación.
 Fuentes prístinas : Un objetivo crucial a la hora del diseño fue el permitir el uso de
la fuentes de codigo “prístinas'', tal y como son distribuidas por los autores
originales del software. Con RPM, usted tiene las fuentes prístinas así como
cualquier actualización que fuera usada, mas instrucciones completas de
construcción. Esto es una gran ventaja por muchas razones. Por ejemplo, si
aparece una nueva versión de un programa, no se tiene necesariamente que
empezar desde el principio para compilarlo. Se pueden mirar las actualizaciones
para ver qué debe hacer. Todas las opciones internas de compilación, y todos los
cambios que fueron hechos para hacer que el software se creara adecuadamente
son fácilmente visibles de esta manera.
Este objetivo puede parecer únicamente importante para los desarrolladores pero
también redunda en una mayor calidad de software para el usuario final. Nos gustaría
dar las gracias a la gente de la distribución BOGUS por el concepto original de las
fuentes prístinas.
Usando RPM
RPM tiene cinco modos básicos de operación (sin contar la construcción del
paquete): instalación, desinstalación, actualización, consulta y verificación. Esta
sección contiene un vistazo de cada modo. Para opciones y detalles completos
pruebe rpm --help, vea la página “man'' de rpm.
Instalación
Los paquetes RPM tienen típicamente nombres de archivo como foo-1.0-1.i386.rpm,
que incluye el nombre
José Luis Elvira Valenzuela, ITESO-DESI 1999
138
del paquete (foo), versión (1.0), desarrollo (1), y arquitectura (i386). Instalar un
paquete es tan sencillo como:
$ rpm -ivh foo-1.0-1.i386.rpm
foo
####################################
Como puede ver, RPM imprime en pantalla el nombre del paquete (el cual no es
necesariamente el mismo que el archivo, el cual puede ser 1.rpm), e imprime una
sucesión de símbolos de rejilla a medida que el paquete es instalado, como un
medidor del progreso de la instalación.
La instalación de paquetes está diseñada para ser sencilla, pero puede obtener
algunos errores:
Paquete ya instalado
Si el paquete está ya instalado, se verá:
$ rpm -ivh foo-1.0-1.i386.rpm
foo
package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
Si se quiere instalar el paquete de todas maneras, se puede usar --replacepkgs
en la línea de comandos, lo que le dice a RPM que ignore el error.
Conflicto de archivos
Si intenta instalar un paquete que contiene un archivo que ha sido ya instalado por
algún otro paquete, se verá:
# rpm -ivh foo-1.0-1.i386.rpm
foo
/usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
Para hacer que RPM ignore el error, use --replacefiles en la línea de
comandos.
Dependencias no resueltas
José Luis Elvira Valenzuela, ITESO-DESI 1999
139
Los paquetes RPM pueden “depender'' de otros paquetes, lo cual significa que
requieren que otros paquetes sean instalados para funcionar correctamente. Si
intenta instalar un paquete para el cual existe una dependencia no satisfecha, usted
verá:
$ rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
foo is needed by bar-1.0-1
Para arreglar este error se deberán instalar los paquetes requeridos. Si se desea
forzar la instalación de todas maneras (una mala idea ya que el paquete
probablemente no funcionará correctamente), use –nodeps en la línea de
comandos.
Desinstalación
Desinstalar un paquete es tan sencillo como instalarlo:
$ rpm -e foo
Notese que hemos usado el nombre “foo'' para el paquete, no el nombre del paquete
original “foo-1.0-1.i386.rpm''.
Se puede encontrar un error de dependencias cuando intente desinstalar el paquete
si algún otro paquete instalado depende del que está intentando borrar. Por ejemplo:
$ rpm -e foo
removing these packages would break dependencies:
foo is needed by bar-1.0-1
Para hacer que RPM ignore el error y desinstale el paquete de todas maneras (lo
cual es una mala idea porque el paquete que depende de éste probablemente falle y
no funcione correctamente), use --nodeps en la línea de comandos.
Actualizando
Actualizar un paquete es casi como instalar un paquete.
$ rpm -Uvh foo-2.0-1.i386.rpm
foo
####################################
José Luis Elvira Valenzuela, ITESO-DESI 1999
140
Lo que no ve arriba es el hecho de que RPM desinstala automáticamente cualquier
versión antigua del paquete foo. De hecho usted quizá quiera siempre usar -U para
instalar paquetes, ya que funciona bien incluso cuando no hay ninguna versión
anterior del paquete instalada.
Dado que RPM realiza actualizaciones inteligentes de los paquetes con archivos de
configuración, quizá se vea un mensaje como:
saving /etc/foo.conf as /etc/foo.conf.rpmsave
Esto significa que sus cambios al archivo de configuracion puedan no ser
“reversiblemente compatibles'' con el nuevo archivo de configuración en el paquete,
por lo que RPM salva su archivo original, e instala uno nuevo.
Se debería investigar y resolver las diferencias entre los dos archivos tan pronto
como sea posible para asegurarse de que su sistema continúa funcionando
adecuadamente.
Dado que actualizar es realmente una combinación de desinstalación e instalación,
usted puede encontar los errores de los dos modos, y uno más: Si RPM piensa que
está intentando actulizar un paquete con una versión antigua, usted verá:
$ rpm -Uvh foo-1.0-1.i386.rpm
foo
package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
Para obligar a RPM a “actualizar'' de todas maneras, use --oldpackage en la línea
de comandos.
Consulta
Consultar la base de datos de paquetes instalados se realiza mediante la opción :
rpm -q. Un uso simple es rpm -q foo lo que imprimirá el nombre, versión y
número de desarrollo del paquete instalado foo:
$ rpm -q foo
rpm-2.0-1
En lugar de especificar el nombre del paquete, se pueden usar las siguientes
opciones con -q para especificar de qué paquete(s) quiere hacer una consulta. Éstas
son llamadas Opciones de Especificacion de Paquetes (Package Specification
Options).
José Luis Elvira Valenzuela, ITESO-DESI 1999
141
-a consulta todos los paquetes instalados.
-f <file> consultará el paquete al que pernenece <file>.
-F es la misma que -f excepto que toma los nombres de archivo de la entrada
estándar (p.e. find /usr/bin | rpm -qF).
-p <packagefile> consulta el paquete <packagefile>.
-P es como -p excepto que toma el nombre de archivo del paquete desde la
entrada estándar (p.e. find /mnt/cdrom/RedHat/RPMS | rpm -qP).
Hay varias formas de especificar qué informacion mostrar sobre los paquetes
consultados. Las siguientes opciones son usadas para seleccionar la información en
la que usted está interesado. Son las llamadas “Opciones de Selección de
Información”.
-i presenta información del paquete como nombre, descripción, desarrollo, tamaño,
fecha de construcción, fecha de instalación, vendedor, y otra información miscelánea.
-l presenta la lista de archivos que el paquete posee.
-s presenta el estado de todos los archivos del paquete. Hay sólo dos posibles
estados: normal y perdido.
-d presenta un lista de archivos marcados como documentación (paginas “man”,
paginas “info”, README's, etcétera).
-c presenta una lista de archivos marcados como archivos de configuración. Estos
son los archivos que usted cambia tras la instalación para adaptar el paquete a su
sistema (sendmail.cf, passwd, inittab, etcétera).
Para aquellas opciones que presenten listas de archivos, uste puede añadir -v a la
línea de comandos para obtener la lista en el conocido formato ls -l.
Verificación
Verificar un paquete es comparar la información sobre los archivos instalados desde
un paquete con la misma información del paquete original. Entre otras cosas, verificar
compara el tamaño, chequeo MD5, permisos, tipo, usuario y grupo de cada archivo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
142
rpm -V verifica un paquete. Usted puede usar cualquiera de las Opciones de
Selección de Paquetes (Package Selection Options) listadas para consultar, para
especificar los paquetes que desea verificar. Un uso simple es rpm -V foo lo que
verifica que todas los archivos el paquete foo estén como cuando fueron
originalmente instaladas. Por ejemplo:
Para verificar que un paquete contiene un archivo en particular:
# rpm -Vf /bin/vi
Para verificar TODOS los paquetes instalados:
# rpm -Va
Para verificar un paquete instalado con su correspondiente paquete RPM:
# rpm -Vp foo-1.0-1.i386.rpm
Esto puede ser útil si sospecha que su base de datos de paquetes RPM esta
corrupta.
Si todo es verificado adecuadamente no habrá ninguna salida en pantalla. Si hay
alguna discrepancia sí habrá información presentada. El formato de la salida es una
cadena de 8 caracteres, un posible “c” denotando un archivo de configuración, y
despues el nombre del archivo. Cada uno de los 8 caracteres denota el resultado de
la comparación de un atributo del archivo con el valor de ese atributo en la base de
datos RPM. Un solo “.” (punto) significa que el test ha sido pasado. Los siguientes
caracteres denotan fallo de ciertos tests:
5
S
L
T
D
U
G
M
Chequeo MD5
Tamaño del archivo
Enlace simbólico
Modificación de la fecha del archivo
Dispositivo
Usuario
Grupo
Modo (incluye permisos y tipos de archivo)
Si se ve alguna salida en pantalla, use su mejor juicio para determinar si usted
deberá borrar o reinstalar el paquete, o alguna manera de resolver el problema.
José Luis Elvira Valenzuela, ITESO-DESI 1999
143
Utilidades del RPM
RPM es una herramienta muy útil tanto para manejar el sistema como para
diagnosticar y solucionar problemas.
La mejor manera de darnos cuenta de todas sus posibilidades es mirando algunos
ejemplos.
Supongamos que se borraron algunos archivos accidentalmente, pero no está seguro
cuales. Si se quisiera verificar todo el sistema y ver qué es lo que puede haberse
perdido, usted escribiría:
# rpm -Va
Si algunos archivos hubieran desaparecido, o parecieran estar *corruptos* , se
debería o bien reinstalar el paquete, o bien desinstalarlo, y luego reinstalarlo de
nuevo.
Digamos que se topa con un archivo que no reconoce. Para averiguar a qué paquete
pertenece, podríamos escribir :
# rpm -qf /usr/X11R6/bin/xjewel
El resultado sería:
# xjewel-1.6-1
Podemos combinar los dos ejemplos anteriores con el siguiente ejemplo. Digamos
que se está teniendo problemas con /usr/bin/paste. A usted le gustaría verificar
el paquete que contiene ese programa pero no sabe qué paquete es. Simplemente
introduzca:
# rpm -Vf /usr/bin/paste
y el paquete apropiado será verificado.
Si usted está usando un programa y quiere averiguar más información sobre él, usted
puede escribir lo siguiente para averiguar qué documentación viene con el paquete
que “posee'' ese programa (en este caso ispell):
# rpm -qdf /usr/bin/ispell
El resultado sería:
José Luis Elvira Valenzuela, ITESO-DESI 1999
144
/usr/man/man4/ispell.4
/usr/man/man4/english.4
/usr/man/man1/unsq.1
/usr/man/man1/tryaffix.1
/usr/man/man1/sq.1
/usr/man/man1/munchlist.1
/usr/man/man1/ispell.1
/usr/man/man1/findaffix.1
/usr/man/man1/buildhash.1
/usr/info/ispell.info.gz
/usr/doc/ispell-3.1.18-1/README
Usted encuentra un nuevo RPM llamado koules, pero usted no sabe qué es. Para
averiguar algo de información sobre él, escriba:
# rpm -qip koules-1.2-2.i386.rpm
El resultado sería:
Name
: koules Distribution: Red Hat Linux Colgate
Version
: 1.2
Vendor: Red Hat Software
Release
: 2
Build Date: Mon Sep 02 11:59:12 1996
Install date: (none)
Build Host: porky.redhat.com
Group
: Games
Source RPM: koules-1.2-2.src.rpm
Size
: 614939
Summary
: SVGAlib action game; multiplayer, network
Description :
This arcade-style game is novel in conception and
excellent in execution. No shooting, no blood, no guts,
no gore. The play is simple, but you still must develop
skill to play. This version uses SVGAlib to run on a
graphics console.
Ahora se quiere saber qué archivos instala el RPM koules. Usted escribiría:
# rpm -qlp koules-1.2-2.i386.rpm
El resultado es:
/usr/man/man6/koules.6
/usr/lib/games/kouleslib/start.raw
/usr/lib/games/kouleslib/end.raw
/usr/lib/games/kouleslib/destroy2.raw
/usr/lib/games/kouleslib/destroy1.raw
/usr/lib/games/kouleslib/creator2.raw
José Luis Elvira Valenzuela, ITESO-DESI 1999
145
/usr/lib/games/kouleslib/creator1.raw
/usr/lib/games/kouleslib/colize.raw
/usr/lib/games/kouleslib
/usr/games/koules
Estos son sólo algunos ejemplos. Conforme usted utilice el sistema encontrará
muchos más usos para rpm.
José Luis Elvira Valenzuela, ITESO-DESI 1999
146
5.- Linux avanzado.
5.1- El proceso de arranque.
5.1.1.- El proceso de arranque, Init.
Archivos de arranque del sistema
Cuando el sistema arranca, se ejecutan automáticamente una serie de archivos de
comandos (scripts) en el sistema, antes de que ningún usuario entre. Aqui tenemos
una descripción de lo que ocurre:
En tiempo de arranque, el nucleo arranca el proceso /etc/init. init es un
programa que lee su archivo de configuración, /etc/inittab, y arranca otros
procesos basados en el contenido de este archivo. Uno de los procesos mas
importantes arrancado desde inittab es el proceso /etc/getty, arrancado en cada
consola virtual. El proceso getty dispone la consola virtual para ser utilizada y
arranca un proceso login en ella. Esto le permite conectarse a cada consola virtual; si
/etc/inittab no contiene un proceso getty para una consola virtual
determinada, no se podrá conectar nadie a ella.
Otro proceso ejecutado desde /etc/inittab es /etc/rc, el archivo de
inicialización principal del sistema. Este archivo es simplemente un archivo de
comandos que ejecuta cualquier comando de inicialización necesario en tiempo de
arranque, como es montar los sistemas de archivos e inicializar el espacio de
intercambio (memoria virtual).
Su sistema puede ejecutar otros archivos de comandos de inicialización también,
como puede ser /etc/rc.local. El archivo /etc/rc.local contiene
normalmente comandos de inicialización específicos de su sistema, como puede ser
el establecimiento del nombre de la computadora. rc.local puede ser arrancado
desde /etc/rc o directamente desde /etc/inittab
5.1.2.-Corriendo programas durante el proceso de arranque.
El archivo /etc/rc.d/rc.local es ejecutado durante el proceso de arranque,
después de que se halla completado cualquier otra inicialización, y cuando se
cambien niveles de arranque. Aquí se pueden agregar comandos adicionales a la
inicialización. Quizá se quiera arrancar algunos demonios adicionales, o inicializar
una impresora. Además, si se requiere configurar un puerto serial, se puede editar el
José Luis Elvira Valenzuela, ITESO-DESI 1999
147
archivo /etc/rc.d/rc.serial y será ejecutado automáticamente durante el
proceso de arranque.
Por default /etc/rc.d/rc.local simplemente crea un mensaje de entrada con la
versión del kernel y el tipo de máquina.
5.1.3.- Dando de baja el sistema.
Para apagar Red Hat Linux,hay que utilizar el comando shutdown., los usos más
comunes son :
shutdown -h now
shutdown -r now
Cualquiera de los dos dará de baja el sistema limpiamente, el primero apagará la
computadora, el segundo reiniciará.
5.2.- Cambiando niveles de arranque.
5.2.1.- Introducción a los niveles de arranque.
Niveles de ejecución del proceso init
Generalmente, Linux Red Hat se ejecuta en el nivel 3 (modo multiusuario completo).
En Linux Red Hat se usan los siguientes niveles de ejecución:
0
1
2
3
4
5
6
Halt.
Modo de monousuario.
Modo Multiusuario sin NFS.
Modo multiusuario completo.
No usado
Modo multiusuario con interface X
Rearranque.
Si su máquina entra en un estado en el qué es imposible arrancar, como
consecuencia de un archivo /etc/inittab defectuoso, o no le permite registrarse
por tener corrupto el archivo /etc/passwd o simplemente por haber olvidado su
contraseña, deberá arrancar con un Modo de usuario simple, tecleando en el prompt
de arranque de LILO, linux 1. Aparecerá un sistema muy simple, con un intérprete de
comandos desde el que podrá arreglar las cosas.
José Luis Elvira Valenzuela, ITESO-DESI 1999
148
5.2.2.- Cambiando los niveles de arranque.
El nivel de arranque por default es decidido en el archivo /etc/inittab. Se debe
de tener una linea cerca del inicio del archivo como esta :
id:3:initdefault:
De esto, hay que fijarnos en la segunda columna y ver que el nivel de arranque por
default es 3, y debe de ser el caso de muchos sistemas. Si se quiere cambiar, se
puede editar /etc/inittab a mano y cambiar el 3 por otro. Hay que ser muy
cuidadosos de no dañar el archivo inittab. Si se daña, se puede arreglar reiniciando de la siguiente forma :
LILO boot:
linux single
Esto nos debe de permitir arrancar en el modo de un solo usuario tal que se puede
arreglar el archivo inittab.
5.3.- El sistema de archivos de Linux
5.3.1.- Introducción al sistema de archivos.
5.3.2.- La estructura de archivos de Linux.
José Luis Elvira Valenzuela, ITESO-DESI 1999
149
5.4.- Montando sistemas de archivos.
5.4.1.- Montando sistemas de archivos.
Para empezar, algunos conceptos acerca de sistemas de archivos. Antes de que un
sistema de archivos sea accesible al sistema, debe ser montado en algún directorio.
Por ejemplo, si se tiene un sistema de archivos en un diskette, se debe montar bajo
algún directorio, digamos /mnt, para poder acceder a los archivos que contiene. Tras
montar el sistema de archivos, todos los archivos en dicho sistema aparecen en ese
directorio. Tras desmontar el sistema de archivos, el directorio (en este caso, /mnt)
estará vacío.
Lo mismo es válido para los sistemas de archivos del disco duro. El sistema monta
automáticamente los sistemas de archivos del disco duro en tiempo de arranque. El
así llamado "sistema de archivos raíz" es montado en el directorio /. Si se tiene un
sistema de archivos separado para /usr, por ejemplo, se monta en /usr.
Si solo se tiene un sistema de archivos raíz, todos los archivos (incluyendo los de
/usr) existen en ese sistema de archivos.
El comando mount se utiliza para montar un sistema de archivos.
El comando : mount –av se ejecuta desde el archivo /etc/rc (que es el archivo de
inicialización del sistema, ejecutado en tiempo de arranque. El comando mount -av
obtiene información de los sistemas de archivos y puntos de montaje del archivo
/etc/fstab. Este es un ejemplo de archivo /etc/fstab:
# dispositivo
directorio
tipo
opciones
/dev/hda2
/dev/hda3
/dev/hda4
/proc
/
/usr
none
/proc
ext2
ext2
swap
proc
defaults
defaults
sw
none
 El primer campo es el dispositivo el nombre de la partición a montar.
 El segundo campo es el punto de montaje.
 El tercero es el tipo de sistema de archivos como puede ser ext2 (para ext2fs)
o Minix (para sistemas de archivos Minix).
José Luis Elvira Valenzuela, ITESO-DESI 1999
150
La siguiente tabla lista los distintos tipos de sistemas de archivos disponibles en
Linux. Puede que no todos estos tipos de sistemas de archivos estén disponibles en
su sistema; el núcleo debe tener soporte para ellos compilado en el.
Sistema de archivos
Second Extended
Filesystem
Extended Filesystem
Minix Filesystem
Xia Filesystem
UMSDOS Filesystem
Nombre de Comentarios
tipo
ext2
Sistema de archivos mas común en Linux
Ext
Minix
Xia
Umsdos
Reemplazado por ext2.
Sistema de archivos Minix original; no utilizado.
Como ext2, pero raras veces utilizado.
Utilizado para instalar Linux en una partición
MS-DOS.
MS-DOS Filesystem
Msdos
Utilizado para acceder a archivos MS-DOS.
/proc Filesystem
Proc
Suministra información de proceso para ps, etc.
ISO 9660 Filesystem
iso9660
Formato utilizado por muchos CD-ROMs.
Xenix Filesystem
Xenix
Sistema de archivos de Xenix.
System V Filesystem
Sysv
Variantes del System V para el x86
Coherent Filesystem
Coherent
Acceso a archivos de Coherent.
HPFS Filesystem
Hpfs
Acceso en lectura a particiones HPFS
(DoubleSpace).
Tipos de Sistemas de Archivos en Linux
El último campo del archivo fstab contiene las opciones del comando mount
normalmente, esta puesto a "defaults" (defecto).
Como se puede ver, las particiones de intercambio están incluidas en /etc/fstab
también. Tienen un punto de montaje de none y tipo swap. El comando swapon a, que se ejecuta también desde /etc/rc, se utiliza para activar el intercambio en
todos los dispositivos de intercambio listados en /etc/fstab
El archivo /etc/fstab contiene una entrada especial para el sistema de archivos
/proc. El sistema de archivos /proc se utiliza para almacenar información acerca de
los procesos del sistema, memoria disponible, y otros datos del mismo tipo. Si
/proc no esta montado, no funcionaran comandos como ps.
 El comando mount solo puede ser utilizado por root. Esto es así para
garantizar la seguridad del sistema; no es deseable que usuarios normales
estén montando y desmontando sistemas de archivos a su antojo. Existen
varios paquetes disponibles que permiten a los usuarios normales montar y
desmontar sistemas de archivos (diskettes en particular) sin comprometer la
seguridad del sistema.
José Luis Elvira Valenzuela, ITESO-DESI 1999
151
El comando mount -av realmente monta todos los sistemas de archivos excepto el
sistema de archivos raíz (en la tabla anterior, /dev/hda2). El sistema de archivos
raíz es montado automáticamente en tiempo de arranque por el nucleo.
En vez de utilizar el comando mount
a mano. El comando :
-av, se puede montar un sistema de archivos
# mount -t ext2 /dev/hda3 /usr
es equivalente a montar el sistema de archivos con la entrada /dev/hda3 del
ejemplo de archivo /etc/fstab anterior.
En general, nunca se debe montar o desmontar sistemas de archivos a mano. El
comando mount -av en /etc/rc se encarga de montar los sistemas de archivos
en tiempo de arranque. Los sistemas de archivos son desmontados por los
comandos shutdown o halt antes de cerrar el sistema.
5.4.2.- Sistemas de archivos remotos.
Configuración NFS
NFS significa “Network File System”, y es un modo de compartir archivos entre
máquinas como si estuvieran en el mismo disco duro. Linux puede ser cualquiera de
los dos, un server NFS y un cliente NFS client, lo que significa que puede exportar
sistemas de archivos a otros sistemas, y montar sistemas de archivos exportados de
otras máquinas. Mounting NFS Filesystems
Use el comando mount para montar un sistema de archivo NFS de otra máquina:
# mkdir /mnt/local
# mount bigdog:/mnt/export /mnt/local
En este comando, “bigdog” es el nombre del host del servidor de archivos NFS,
/mnt/export es el sistema de archivos que “bigdog” está exportando, y
/mnt/local es un directorio en la máquina local donde queremos montar el sistema
de archivos. Después de que el comando mount corre (y si tenemos los permisos
necesarios de “bigdog”) podemos teclear
# ls /mnt/local
José Luis Elvira Valenzuela, ITESO-DESI 1999
152
y obtener un listado de los archivos en /mnt/export en “bigdog”.
Exportando sistemas de archivos NFS
El archivo que controla que sistemas de archivos queremos exportar es
/etc/exports. Su formato es :
directorio
nombre del host (opciones)
las (opciones) son opcionales.
Por ejemplo :
/mnt/export
speedy.redhat.com
Permitirá a speedy.redhat.com montar /mnt/export.
/mnt/export
speedy.redhat.com(ro)
Permitirá a speedy montar /mnt/export como solo lectura
Cada vez que se modifica el archivo /etc/exports, se necesita indicarle a los
demonios NFS que lo examine para la nueva información. Una simple forma de hacer
esto es detener y reiniciar los demonios :
# /etc/rc.d/init.d/nfs stop
# /etc/rc.d/init.d/nfs start
También funcionará lo siguiente :
# killall -HUP rpc.nfsd rpc.mountd
5.5.- Mantenimiento de sistemas de archivos.
5.5.1.- Utilerías.
Normalmente es una buena idea el comprobar de vez en cuando los sistemas de
archivos en busca de archivos dañados o corrompidos. Algunos sistemas
comprueban automáticamente sus sistemas de archivos en tiempo de arranque (con
los comandos apropiados en /etc/rc). El comando utilizado para comprobar un
sistema de archivos depende del tipo de sistema de archivos en cuestion. Para
José Luis Elvira Valenzuela, ITESO-DESI 1999
153
sistemas de archivos ext2fs (el tipo mas utilizado normalmente), el comando es
e2fsck. Por ejemplo, el comando
# e2fsck -av /dev/hda2
comprobará el sistema de archivos ext2fs de /dev/hda2 y corregirá
automáticamente cualquier error.
Normalmente es una buena idea el desmontar un sistema de archivos antes de
comprobarlo. Por ejemplo, el comando :
# umount /dev/hda2
desmontara el sistema de archivos en /dev/hda2, tras lo cual podrá ser
comprobado. La única excepción es que no se puede desmontar el sistema de
archivos raíz. Para poder comprobar el sistema de archivos raíz cuando esta
desmontado, se debe utilizar un disquete de arranque/raíz. Tampoco se puede
desmontar un sistema de archivos si alguno de sus archivos esta "ocupado" esto es,
siendo utilizado por un proceso en ejecución. Por ejemplo, no se puede desmontar un
sistema de archivos si el directorio de trabajo de algún usuario esta en ese sistema
de archivos. Se recibirá un error "Device busy" (dispositivo ocupado) si se intenta
desmontar un sistema de archivos que este en uso.
Otros tipos de sistemas de archivos utilizan formas diferentes del comando e2fsck,
como pueda ser efsck y xfsck. En algunos sistemas, se puede utilizar el comando
fsck, que determina el tipo de sistema de archivos y ejecuta el comando apropiado.
*Es importante que se reinicialice el sistema inmediatamente después de comprobar
un sistema de archivos montado, si es que se hizo alguna corrección al sistema de
archivos. (Sin embargo, en general, no se deben comprobar sistemas de archivos
que estén montados.) Por ejemplo, si e2fsck informa que ha corregido algún error
en el sistema de archivos, se debe apagar el sistema con shutdown -r para
rearrancarlo. Esto permite al sistema resincronizar su información acerca del sistema
de archivos cuando e2fsck lo modifica.
El sistema de archivos /proc no necesita nunca ser comprobado de esta forma.
/proc es un sistema de archivos en memoria, gestionado directamente por el
nucleo.
José Luis Elvira Valenzuela, ITESO-DESI 1999
154