Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-3-
Configuracion de discos........................................................................................................................23
Configuracion de Particiones................................................................................................................24
Aplicaciones graficas para particionar discos duros........................................................................24
Gparted...............................................................................................................................................24
Parted Magic......................................................................................................................................25
Formatear y particionar discos duros desde BASH..........................................................................25
Dando formato de bajo nivel con dd...............................................................................................25
Particionando un disco duro con fdisk...........................................................................................25
Dando formato a un disco duro con mkfs......................................................................................27
Niveles de Ejecucion en Linux...................................................................................................................27
El Proceso de arranque.........................................................................................................................27
El Proceso INIT.......................................................................................................................................27
SystemV..............................................................................................................................................27
BSD.....................................................................................................................................................28
El archivo init.d........................................................................................................................................28
El archivo rcN.d.......................................................................................................................................29
El archivo inittab......................................................................................................................................29
El archivo rc.sysinit.................................................................................................................................30
El archivo rc.local....................................................................................................................................30
Niveles de Ejecucion..............................................................................................................................30
Nivel 0 –Parada Del Sistema...........................................................................................................30
Nivel 1 o S -Monousuario o Single User........................................................................................30
Nivel 2 -Multiusuario sin Red...........................................................................................................31
Nivel 3 -Multiusuario con Red..........................................................................................................31
Nivel 4. -Sin Uso................................................................................................................................31
Nivel 5. -Multiusuario Grafico..........................................................................................................31
Nivel 6. -Reinicio del Sistema..........................................................................................................31
Comando chkconfig...............................................................................................................................31
Levantando, deteniendo y reiniciando servicios................................................................................31
Manejo de Paquetes...................................................................................................................................32
Introduccion a la gestion e instalacion de software...........................................................................32
Herramienta RPM...................................................................................................................................33
Herramienta YUM...................................................................................................................................33
Configuración de YUM ....................................................................................................................34
Extensiones de YUM........................................................................................................................36
Utilidades YUM..................................................................................................................................36
Herramienta DPKG................................................................................................................................37
Herramienta APTITUDE........................................................................................................................38
Herramienta APT....................................................................................................................................38
Manejo de comandos..................................................................................................................................39
-4-
Sobre SHELL..........................................................................................................................................39
El Ambiente Linux...................................................................................................................................39
Algunas variantes del SHELL...............................................................................................................39
Bourne Shell (sh)...............................................................................................................................39
Korn Shell (ksh).................................................................................................................................40
Boune Again Shell (bash).................................................................................................................40
CShell (csh)........................................................................................................................................40
Introduccion a BASH..............................................................................................................................40
Conociendo el SHELL de nuestro equipo.....................................................................................40
Usando el comando cd.....................................................................................................................40
Rutas (Paths).....................................................................................................................................40
Rutas Absolutas.................................................................................................................................40
Rutas Relativas..................................................................................................................................41
Usando el . . (punto a punto)............................................................................................................41
Entendiendo el . (punto)...................................................................................................................41
Usando los comandos de Linux...........................................................................................................41
El comando ls.....................................................................................................................................41
Comodines.........................................................................................................................................42
El comando mkdir..............................................................................................................................43
comando touch..................................................................................................................................44
comando echo...................................................................................................................................44
comando cat y cp .............................................................................................................................44
comando mv.......................................................................................................................................44
Procesando cadenas de texto usando filtros.....................................................................................44
Listando el contenido de un archivo....................................................................................................44
Ordenando lineas de un archivo con Sort..........................................................................................45
Segmentando un texto con Cut.......................................................................................................46
Pegando texto con Paste.................................................................................................................47
Formateando parrafos......................................................................................................................48
Borrando o sustituyendo caracteres...............................................................................................48
Ver el inicio de un archivo................................................................................................................49
Ver el final de un archivo..................................................................................................................50
Uniendo multiples archivos..............................................................................................................50
Segmentando un archivo.................................................................................................................51
Eliminando lineas repetidas en un archivo ...................................................................................52
Convirtiendo archivos para imprimir...............................................................................................52
Mostrando estadisticas de un archivo...........................................................................................53
Añadiendo numeros de linea a un archivo....................................................................................53
Administracion de Archivos........................................................................................................................54
Listando el contenido de un directorio.................................................................................................54
-5-
Determinando el tipo de archivo...........................................................................................................55
Copiando Archivos.................................................................................................................................56
Copiando y convirtiendo archivos con diferente formato.................................................................57
Moviendo Archivos.................................................................................................................................57
Eliminando Archivos...............................................................................................................................58
Creando, monitorizando y matando procesos........................................................................................58
Sobre procesos.......................................................................................................................................58
Estados de un proceso.....................................................................................................................59
Diagrama de formacion de un proceso..........................................................................................59
Modelo de dos estados....................................................................................................................59
Modelo de cinco estados.................................................................................................................59
Sobre demonios......................................................................................................................................60
Caracteristicas...................................................................................................................................61
Comando ps (process state)......................................................................................................................61
Comando pstree y top............................................................................................................................62
Finalizando un proceso..........................................................................................................................63
Procesos en segundo y primer plano..................................................................................................64
Creando particiones y sistemas de archivos...........................................................................................64
Sobre fdisk...............................................................................................................................................64
Utilizando fdisk........................................................................................................................................64
Utilizando mkfs........................................................................................................................................68
Manteniendo la integridad de los sistemas de archivos...................................................................69
Monitorizando el espacio y los inodos libres del disco.....................................................................69
Monitorizando el espacio y los inodos libres del disco.....................................................................70
Comprobando la integridad del sistema de archivos........................................................................70
Montando y desmontando sistemas de archivos...................................................................................71
Controlando el montaje y desmontaje del sistema de archivos......................................................71
Administrando la tabla del sistema de archivos................................................................................71
Montando el sistema de archivos .......................................................................................................72
Desmontando el sistema de archivos..................................................................................................73
Administrando cuotas de disco.................................................................................................................74
Establecer y consultar cuotas de disco...............................................................................................74
Cuotas de Limitacion...................................................................................................................................74
Comandos de cuotas.............................................................................................................................75
quota....................................................................................................................................................75
quotaon...............................................................................................................................................76
quotaoff...............................................................................................................................................77
quotacheck.........................................................................................................................................77
edquota...............................................................................................................................................78
repquota..............................................................................................................................................79
-6-
Habilitando las cuotas............................................................................................................................79
Permisos de archivos y directorios...........................................................................................................81
Administracion de Permisos.................................................................................................................81
Permisos de archivos y directorios......................................................................................................81
Comando chmod....................................................................................................................................82
Permisos especiales..............................................................................................................................83
SUID....................................................................................................................................................83
SGID....................................................................................................................................................83
Stiky Bit...............................................................................................................................................83
Administrando el propietario de los archivos...........................................................................................84
Comando chown.....................................................................................................................................84
Comando chgrp......................................................................................................................................84
Crear y cambiar enlaces de archivos.......................................................................................................85
Creando links a archivos.......................................................................................................................85
Los Hard Links .......................................................................................................................................85
Los Symlinks ..........................................................................................................................................85
Shell, Scripting y Manejo de datos.................................................................................................................86
Personalizando y conociendo el shell.......................................................................................................86
Archivos de configuracion de BASH...................................................................................................86
Fichero /etc/profile.............................................................................................................................86
Fichero /etc/bashrc............................................................................................................................87
Ficheros /.bash_profile , /.bash_logout y /.bashrc........................................................................87
/.bash_profile......................................................................................................................................87
/.bashrc...............................................................................................................................................87
/.bash_logout......................................................................................................................................87
/inputrc................................................................................................................................................87
/.bash_profile , /.bashrc y /etc/profile, /etc/bashrc.............................................................................88
Variables de entorno..............................................................................................................................88
Como establecer la variable PATH................................................................................................89
Variables locales y globales de Shell.............................................................................................89
Funciones de Shell Bash..................................................................................................................90
Personalizar o escribir scripts simples...........................................................................................91
Comparaciones de cadenas alfanumericas.......................................................................................91
Comparacion de valores numericos....................................................................................................92
Comparaciones de atributos de fichero..............................................................................................92
Sentencia if..............................................................................................................................................92
Sentencia for...........................................................................................................................................93
Sentencia while y until............................................................................................................................93
Sentencia case........................................................................................................................................94
Sentencia select......................................................................................................................................94
-7-
Manejo de datos en MySQL.................................................................................................................95
Conectarse y desconectarse del servidor.....................................................................................95
Prompt Significado ...........................................................................................................................97
Crear y utilizar una base de datos........................................................................................................99
Crear y utilizar una base de datos................................................................................................100
Crear una tabla................................................................................................................................100
Cargar datos a una tabla................................................................................................................102
Extraer informacion de una tabla..................................................................................................103
Existen al menos dos formas de solucionarlo:............................................................................104
Seleccionar registros especificos......................................................................................................104
Seleccionar columnas concretas..................................................................................................105
Ordenar registros............................................................................................................................106
Calculos sobre fechas....................................................................................................................108
Trabajar con valores NULL...........................................................................................................111
Coincidencias de patrones............................................................................................................111
Algunas características de las expresiones regulares extendidas:.........................................113
Contar registros...............................................................................................................................114
Utilizar mas de una tabla................................................................................................................116
Instalar y configurar X Window System.................................................................................................118
Sobre X Window System....................................................................................................................118
Instalando X Window System.............................................................................................................119
Configurando el entorno X Window System....................................................................................119
Especificaciones del mouse..........................................................................................................120
Especificaciones del teclado.........................................................................................................120
Fichero xorg.conf..................................................................................................................................120
Seccion “Files”................................................................................................................................120
Seccion “Modules”..........................................................................................................................121
Seccion “InputDevice”....................................................................................................................121
Configuracion tipica de un teclado...............................................................................................122
Seccion “Device”.............................................................................................................................123
Seccion “Monitor”...........................................................................................................................123
Seccion “Screen”............................................................................................................................124
Seccion “ServerLayaout”...............................................................................................................125
Tareas Administrativas.............................................................................................................................125
Fichero /etc/passwd........................................................................................................................126
Fichero /etc/shadow........................................................................................................................126
Administración de cuentas de usuario..............................................................................................127
useradd.............................................................................................................................................127
usermod............................................................................................................................................128
userdel..............................................................................................................................................128
-8-
passwd..............................................................................................................................................129
chage................................................................................................................................................129
newusers..........................................................................................................................................130
Fichero /etc/login.defs ...................................................................................................................130
Administración de grupos...................................................................................................................131
groupadd..........................................................................................................................................131
groupmod.........................................................................................................................................131
groupdel............................................................................................................................................132
gpasswd...........................................................................................................................................132
grpck.................................................................................................................................................132
Fichero /etc/group...........................................................................................................................132
Fichero /etc/gshadow.....................................................................................................................133
pwconv y pwunconv.......................................................................................................................133
grpconv y grpunconv......................................................................................................................134
Sobre CRON.........................................................................................................................................134
Las variables:...................................................................................................................................135
Listando el crontab..........................................................................................................................135
Programando tareas.......................................................................................................................135
Directorios predefinidos: hourly, daily, weekly y monthly..........................................................136
Crontab del sistema........................................................................................................................136
Log de cron......................................................................................................................................137
Administrando la hora del equipo.................................................................................................137
Programas para controlar el reloj del sistema......................................................................................138
Ajustes de tiempo y de las zonas horarias.......................................................................................138
El procedimiento es relativamente simple:.......................................................................................138
Comando hwclock................................................................................................................................138
Servicios Esenciales del Sistema................................................................................................................140
Mail Transfer Agent Basico......................................................................................................................140
Protocolo SMTP...................................................................................................................................140
Protocolo POP3....................................................................................................................................141
Protocolo IMAP.....................................................................................................................................141
Sobre Sendmail....................................................................................................................................142
Sendmail en la actualidad..............................................................................................................142
Sobre Postfix.........................................................................................................................................143
Sobre Exim............................................................................................................................................143
Sobre Qmail..........................................................................................................................................143
Como imprimir en Linux............................................................................................................................143
En que consiste el sistema de impresion CUPS.............................................................................144
Instalar una impresora local con CUPS............................................................................................145
Fundamentos de Red.....................................................................................................................................147
-9-
Fundamentos de TCP/IP..........................................................................................................................147
Sobre TCP/IP........................................................................................................................................147
Desarrollo de TCP/IP......................................................................................................................147
Niveles en la pila TCP/IP...............................................................................................................148
Nivel Fisico..................................................................................................................................149
Nivel de Enlace de Datos..........................................................................................................149
Nivel de internet.........................................................................................................................149
Nivel de Transporte...................................................................................................................149
Nivel de Aplicacion....................................................................................................................150
Protocolo TCP.................................................................................................................................151
Establecimiento de la conexion ...................................................................................................151
Transferencia de datos..................................................................................................................151
Tamaño de ventana TCP...............................................................................................................152
Escalado de ventana......................................................................................................................153
Fin de la conexion...........................................................................................................................153
Puertos TCP.....................................................................................................................................153
Protocolo UDP.................................................................................................................................153
Puertos TCP.....................................................................................................................................154
Diferencias entre TCP y UDP........................................................................................................154
Tabla de Puertos TCP y UDP.......................................................................................................155
Direcciones IP.......................................................................................................................................157
Direcciones IPv4...................................................................................................................................157
Mascara de una direccion IP.........................................................................................................159
Creacion de Subredes....................................................................................................................159
IP dinamica......................................................................................................................................159
Asignacion de direcciones IP........................................................................................................160
Direcciones IPv6.............................................................................................................................161
Fichero /etc/services............................................................................................................................161
FTP..............................................................................................................................................................161
Telnet.....................................................................................................................................................162
Ping.........................................................................................................................................................162
Dig...........................................................................................................................................................162
Traceroute.............................................................................................................................................162
Funcionamiento...............................................................................................................................163
Configuracion de los parametros de Red.........................................................................................163
Configuracion de interfaces de Red.............................................................................................163
Configuracion del archivo /etc/hosts............................................................................................164
Configuracion del archivo /etc/resolv.conf..................................................................................164
Configuracion del archivo /etc/sysconfig/network......................................................................164
/etc/sysconfig/network-scripts/.....................................................................................................164
- 10 -
El Protocolo SSH..................................................................................................................................165
Acerca de OpenSSH...........................................................................................................................166
Instalando OpenSSH...........................................................................................................................166
Archivos de configuración de OpenSSH.....................................................................................167
/etc/ssh/............................................................................................................................................167
Archivos de configuración del lado del cliente...........................................................................167
Configuración de fichero sshd_config.........................................................................................168
Blindando el fichero sshd_config..................................................................................................168
Cambiando el puerto por defecto.................................................................................................168
Desactivando el Protocolo 1..........................................................................................................168
Deshabilitando el acceso a root....................................................................................................169
Definiendo un número máximo de intentos de conexión..........................................................169
Activando el modo estricto............................................................................................................170
Impidiendo la conexión al servidor gráfico..................................................................................170
Limitando el tiempo para autenticarse con SSH........................................................................170
Iniciar, detener o reiniciar el servidor openSSH.........................................................................170
Aprendiendo a utilizar openSSH........................................................................................................171
Copiar u obtener archivos o carpetas desde un equipo remoto..............................................172
Copiando ficheros a través de SFTP (Security File Transfer Protocol).................................173
Subir o enviar archivos o carpetas a un equipo remoto............................................................174
- 11 -
Métodos de Instalación
Metodos de instalacion alternativos
El proceso de instalación de Sistemas Operativos Linux es una tarea similar para casi todas las
distribuciones Linux existentes. Una de las formas mas usadas e implementadas es la basada en los
discos de instalación de Linux los cuales puedes descargar directamente en formato .ISO desde la
pagina oficial de la distribución Linux que tu elijas. Así mismo, existen métodos de instalación
alternativos que pueden ser aplicados cuando por ejemplo no disponemos de un lector DVD en el
equipo, algunos de estos métodos alternativos de instalacion son los siguientes:
• Mediante un servidor HTTP
• Mediante un Disco Duro
Instalacion desde CD o DVD
Varias distribuciones linux asignan diferentes nombres para la estructura de sus carpetas de sus
discos de instalacion, la estructura generica de estos directorios es la siguiente:
Carpeta paquetes
Esta carpeta contiene los paquetes precompilados de Linux. La siguiente tabla muestra los nombres
asociados a la carpeta “paquetes” de cada una de las distribuciones linux mas relevantes.
Sistema Operativo Carpeta que almacena los paquetes precompilados
CentOS CentOS
Fedora Fedora
Debian dists
Ubuntu dists
Carpeta imagenes
Esta carpeta alberga los archivos necesarios para llevar a cabo el proceso de instalacion de Linux
como son:
1.Archivos de boteo para el arranque de Linux 2.Modulos del Nucleo de Linux 3.Archivos para el
rescate de sistemas Linux Algunos de estos archivos pueden ser copiados a una memoria USB o
CD para ser usados como discos de arranque. Para sistemas operativos Linux de la familia Red Hat
la carpeta imagenes esta relacionada con las carpetas
• images
• isolinux
Para sistemas operativos Linux de la Familia Debian la carpeta imagenes esta relacionada con las
carpetas
• casper
• isolinux
- 12 -
Carpeta dosutils
Este directorio contiene herramientas que pueden ser usadas para preparar la instalacion de Linux.
Estas herramientas son programas diseñadas en MS-DOS muy partiularmente el comando rawrite.
Rawrite es un programa que graba una imagen de un archivo en un disquette,cd o USB. Puede ser
usado para grabar la imagen de un sistema operativo que sea utilizable como disco de arranque. La
versión original fue escrita por Mark E. Becker a petición de Linus Torvalds Existen versiones para
otros sistemas operativos. En Linux y otros Unix se puede usar la orden dd que ya viene incluida con
el sistema operativo.
Instalación desde un servidor HTTP
Configuracion de la instalacion HTTP
1.El primer paso sera instalar el servidor HTTP. Para sistemas operativos Linux de la familia Red
Hat la instalacion de hace de la siguiente manera
[BASH]# yum install y httpd
Para sistemas operativos Linux de la familia Debian la instalacion de hace de la siguiente manera
[BASH]# aptget install y apache2
2.El siguiente paso sera introducir el medio de instalacion DVD a la unidad lectora de discos, crear
una carpeta dentro de la carpeta publica del servidor HTTP y luego montarlo sobre dicha carpeta.
Para sistemas operativos Linux de la familia Red Hat la ubicacion de la carpeta publica es la
siguiente:
/var/www/html/
Dentro de esta ruta se tiene que crear la carpeta y nombrarla con el nombre que usted elija. Para
sistemas operativos Linux de la familia Debian la instalacion de hace de la siguiente manera
/var/www/
Dentro de esta ruta se tiene que crear la carpeta y nombrarla con el nombre que usted elija.
El comando para montar el medio de instalacion DVD es el siguiente:
[BASH]# mount t iso9660 o loop /dev/dvd /var/www/html/carpeta
Esto ultimo para sistemas operativos Linux de la familia Red Hat y para sistemas operativos Linux
de la familia Debian
[BASH]# mount t iso9660 o loop /dev/dvd /var/www/carpeta
3.Una vez montado el DVD en la carpeta publica del servidor HTTP deberas copiar el archivo
boot.iso
al escritorio de trabajo o en algun otro lugar Este archivo lo podras encontrar dentro de la carpeta
images
Esto ultimo para sistemas operativos Linux de la familia Red Hat y para sistemas operativos Linux
de la familia Debian
/var/www/carpeta/images/boot.iso
4.Graba el archivo
- 13 -
boot.iso
en formato .iso en un CD con ayuda da algun programa de grabacion de datos como K3B o Brasero.
5.Inserta el CD de arranque que acabas de crear en el lector del servidor y teclea enter.
6.Selecciona el idioma y tipo de teclado correspondiente:
7.En la seccion “Metodo de Instalacion” elige “HTTP”
8.En configuracion TCP/IP deshabilita la opcion IPv6 y solo deja habilitada la opcion Ipv4
9.En configuracion HTTP deberas teclear la direccion IP en la cual tienes montado el medio de
instalacion DVD asi como tambien el nombre del directorio publico que creaste en el servidor HTTP
y teclear el boton “Acpetar”
NOTA:Este metodo de instalacion solo es aplicable a distribuciones Linux de la familia
Red Hat
Instalacion desde un disco duro
Configuracion de la instalacion desde disco duro
1.El procedimiento es relativamente parecido al anterior para ello debera contar con lo siguiente:
• medio de Instalación DVD
• La imagen .ISO de la distribución
1.Si usted cuenta con el medio de instalación DVD deberá convertir este en una imagen .ISO, si ya
cuenta con la imagen .ISO omita este punto y salte al siguiente paso, si no es asi siga leyendo.
Inserte el medio de instalación DVD en el lector del equipo y teclee el siguiente comando para crear
la imagen .ISO
[BASH]# dd if=/dev/dvd of=/Ruta/En/Donde/Creara/La/Imagen/imagen.iso
En alguna carpeta del sistema Estos archivos los podras encontrar en la carpeta
isolinux
de la imagen .ISO que acabas de montar
5.Edita el archivo
/boot/grub/menu.lst
En esta linea se indica el disco duro y la particion del disco duro en donde se encuentra
root
localizada la imagen .ISO del sistema operativo
- 14 -
[BASH]# umount /punto/De/Montaje/imagen.iso
7.Lo siguiente sera reiniciar el equipo y justo cuando arranque el GRUB elegir la linea de instalacion
del sistema Operativo Esta accion cargara el instalador del Sistema Operativo como si estuviera
leeyendolo desde el medio de instalacion DVD
Disco de Rescate Linux
Si tu sistema operativo Linux se corrompe es posible recuperarlo usando un CD de rescate, este CD
de rescate es una version reducida de Linux que implementa un sistema de archivos en la memoria
RAM del equipo el cual tiene como funcion acceder al sistema de archivos del disco duro como
usuario “root”
Comenzado con el Disco de Rescate Linux
1.Introduce el medio de instalación DVD en el lector de discos del equipo
2.Teclea en la pantalla la palabra
#linux rescue
Esta accion nos arrojara el siguiente mensaje Presione la tecla “p” , esto nos mostrara una lista con
las distintas particiones alojadas en el disco duro, algo muy parecido al siguiente ejemplo
8.De acuerdo a la informacion obtenida en el anterior punto, monte la particion que contenga el
sistema de archivos de linux. Ejemplo:
[BASH]# mount t ext3 /dev/hda1 /tmp
9.Aplique el comando
chroot
Esto es porque existen dos sistemas de archivos , uno relacionado al virtualizando en la memoria
RAM y el segundo relacionado al sistema de archivos del disco duro. Al aplicar “chroot” sobre la
particion montada tomaremos el control sobre el sistema de archivos del disco duro y con ello
podremos ajecutar comandos administrativos sobre el equipo. 10.Por ultimo, si olvido la contraseña
de root o si esta fue cambiada por alguien mas , podra recuperarla tecleando en consola lo
siguiente:
[BASH]# passwd
Cambiando la contraseña del usuario root.
Nueva UNIX contraseña:
- 15 -
Arquitectura del Sistema
Asignacion de recursos
Para permitir que los perifericos y dispositivos del equipo se comuniquen directamente con los
recursos del sistema , en particular con el CPU (Central Processing Unit) el sistema asigna recursos
tales como líneas y canales de comunicacion para cada dispositivo. Muy particulamente, estos
recursos son conocidos como solicitudes de interrupcion (IRQ), direcciones de entrada/salida y
accesos directos a memoria(DMA).
Solicitudes de interrupcion (IRQ)
Antes de explicar que es una solicitud de interrupción, entendamos primero cual es la funcion de un
procesador. El procesador es el encargado de procesar y administrar los datos y peticiones que a
este llegan, sin embargo un solo procesador no es capaz de procesar simultaneamente varias
peticiones , por lo que solo atiende de una a una las peticiones que a el llegan, aqui es donde las
solicitudes de interrupcion empiezan a jugar un papel importante. Suponga que un programa1 está
siendo atendido por el procesador pero subitamente una solicitud de interrupción llega al
procesador,es entonces cuando el programa1 llega a ser momentaneamente suspendido por un
programa2. Este programa2 es ahora el atendido por el procesador y hasta que este termine de ser
atendido el programa1 interrumpido puede continuar ejecutándose . Una interrupción se convierte
en una interrupción de hardware cuando es solicitada por uno de los componentes de hardware del
equipo. Cuando un periférico desea acceder a un recurso, envía un pedido de interrupción al
procesador para llamar su atención. Los periféricos cuentan con un número de interrupción que se
denomina IRQ (Peticiones de Interrupción. Es como si cada periférico tirara de un "hilo" que está
atado a una campana para indicarle al equipo que desea que le preste atención. Este "hilo" es, de
hecho, una línea física que conecta cada ranura de expansión así como cada interfaz entrada/salida
a la motherboard.
Direcciones de Entrada/Salida
Las direcciones de entrada/ salida representan direcciones especificas en la memoria del sistema,
dichas direcciones son asignadas por el CPU a cada uno de los dipositivos del hardware del sistema
para que puedan escribir y leer datos sobre la misma.
Accesos Directos a Memoria (DMA)
El acceso directo a memoria (DMA) permite a cierto tipo de componentes del equipo acceder a la
memoria del sistema para leer o escribir independientemente del procesador. Muchos sistemas
hardware utilizan DMA, incluyendo controladores de unidades de disco, tarjetas gráficas y tarjetas
de sonido. DMA es una característica esencial en todos los equipos modernos, ya que permite a
dispositivos de diferentes velocidades comunicarse sin someter al procesador a una carga masiva
de interrupciones. Una transferencia DMA consiste principalmente en copiar un bloque de memoria
de un dispositivo a otro. En lugar de que el procesador inicie la transferencia, la transferencia se
lleva a cabo por el controlador DMA. Un ejemplo típico es mover un bloque de memoria desde una
memoria externa a una interna más rápida. Tal operación no ocupa el procesador y como resultado
puede ser planificado para efectuar otras tareas. Las transferencias DMA son esenciales para
aumentar el rendimiento de aplicaciones que requieran muchos recursos.
- 16 -
Regularmente un equipo consta de 8 canales DMA. Los primeros cuatro canales DMA poseen un
ancho de banda de 8 bits mientras que los DMA 4 a 7 poseen a su vez un ancho de banda de 16
bits. Los canales DMA por lo general suelen asignarse de la siguiente manera:
• DMA0: libre
• DMA1: (tarjeta de sonido)/libre
• DMA2: controlador de disquete
• DMA3: puerto paralelo (puerto de la impresora)
• DMA4: controlador de acceso directo a memoria (conectado a DMA0)
• DMA1: (tarjeta de sonido)/libre
• DMA6: (SCSI)/libre
• DMA7: disponible
Listado de asignacion de recursos
El nucleo de linux agrupa la informacion relacionada a la asignacion de recursos en la carpeta
/proc
lspci
Lspci es un comando que nos imprime informacion detallada sobre los buses y dispositivos PCI
conectados al equipo. Asi mismo nos da informacion detallada sobre los IRQ y direcciones de
Entrada/Salida asociados a los dispositivos PCI entontrados, para ello solo se tiene que agregar el
parametro -v al comando. Ejemplo
[BASH]# lspci -v
dmesg
dmesg (diagnostic message)es un comando que lista el buffer de mensajes del kernel de linux. Este
buffer contiene una gran variedad de mensajes importantes generados durante el arranque del
sistema y durante la depuración de aplicaciones. Estos mensajes pueden ser consultado en el
archivo
/var/log/messages
Soporte USB
El bus universal en serie (Universal Serial Bus) es un protocolo de comunicacion diseñado para
conectar dispositivos a un equipo de computo. Estos dispositivos estan divididos en cuatro clases
1.Dispositivos de comunicacion (Tarjetas WiFi) 2.Dispositivos de audio (Bocinas, Microfonos)
3.Dispositivos de almacenamiento de datos (Memorias, Discos Duros, Lectores DVD) 4.Dispositivos
de interfaz humana (Mouse, Teclado)
El soporte para dispositivos USB estuvo disponible hasta la version 2.2.7 del kernel de linux y con
ello la liberacion de 3 modulos o controladores para la misma.
- 17 -
Controlador Desarrollador Modulo para el Kernel
EHCI ehci-hdc.o
Asi mismo existe un comando en linux que nos imprime informacion detallada sobre los buses,
dispositivos USB conectados al equipo, IRQ y direcciones de Entrada/Salida asociados a los
dispositivos USB encontrados, el nombre de este comando es el siguiente.
[BASH]# lsusb v
El parametro -v es el encargado de listar la infomacion referente a los IRQ, DMA y las direcciones de
entrada/salida de los dispositivos USB.
Una forma para cononcer si en nuestro sistema operativo tiene soporte para estos controladores es
revisando directamente el archivo de modulos del kernel de linux. La ruta de este archivo es la
siguiente:
/proc/modules
Dispositivos SCSI
Existen dos tipos de interfaces scsi, estas son
• Una interfaz de 8 bits con un bus que soporta 8 dispositivos, esta incluye el controlador por lo
tanto sólo hay espacio para 7 dispositivos de bloque
• Una interfaz de 16 bits con un bus que soporta 16 dispositivos, esta incluye el controlador
por lo tanto sólo hay espacio para 15 dispositivos de bloque
Los dispositivos SCSI pueden ser identificados mediante una serie de 3 numeros llamados SCSI ID,
estos son:
1.El canal SCSI 2.El numero ID del dispositivo 3.Numero de unidad logica
El canal SCSI
Cada adaptador SCSI soporta un canal de datos en la que atribuimos los dispositivos SCSI (discos,
CD-ROM, etc). Estos canales están numerados de 0 en adelante
El numero ID del dispositivo
A cada dispositivo se le asigna un número único de identificación que se puede ajustar usando los
jumpers del disco SCSI. Este rango de numeros de identificacion van de 0 a 7 para las interfaces de
8 Bits y de 0 a 15 para las interfaces de 16 Bits
Numero de unidad logica
El término es originario del protocolo SCSI como una forma de diferenciar unidades de disco
individuales dentro de un bus SCSI tal que un array de discos
Deteccion de dispositivos SCSI
Todos los dispositivos SCSI son listados en el archivo
/proc/scsi/scsi
El cual contiene las caractersitcas de los dispositivos scsi que el equipo a detectado. Ejemplo:
Attached devices:
- 18 -
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: ST3200820AS Rev: 3.AA
Type: DirectAccess ANSI SCSI revision: 05
Tarjetas de Red
Las tarjetas de red son el punto neuralgico de la comunicacion del equipo con el exterior y viceversa.
Para ello el kernel debera tener soporte para este tipo de dispositivos. Una forma de obtener
informacion referente a las tarjetas de red del sistema es haciendo uso de los siguientes comandos:
[BASH]# dmesg
[BASH]# lspci
Ejemplo:
[BASH]# dmesg
eth0: ADMtek Comet rev 17 at MMIO 0xdffffc00, 00:02:2a:cb:10:2b, IRQ 19.
[BASH]# lspci
01:0a.0 Ethernet controller: ADMtek NC100 Network Everywhere Fast Ethernet 10/100 (rev
11)
En el ejemplo podemos observar que la tarjeta de red cuenta con un chipset ADMtek , direccion de
entrada/salida 0xdffffc00 y solicitud de interrupcion (IRQ)19. Esta informacion puede ser usada si el
modulo asociado a la tarjeta de red comienza a entrar en conflictos con el kernel. Tambien es util si
se requiere insertar un modulo con una diferente direccion entrada/salida a travez del comando
modprobe.
Configuracion de impresoras
Aunque el tema de impresion es tratado mas a profundidad en el curso LPI 102 aqui daremos una
breve introduccion. Desde la perspectiva del hardware, las impresoras son detectadas
automaticamente por el equipo cuando este es encendido , asi mismo las impresoras detectadas
por el sistema son listadas en el archivo
/var/log/dmesg
La forma de gestionar impresoras en linux se puede hacer de dos metodos. El primero es mediante
una herramienta actualmente en desuso llamada “printtool” la cual proporciona un entorno gráfico
para montar y gestionar impresoras, sin embargo este paquete ha desaparecido para la mayoria de
las distribuciones linux existentes. El segundo metodo es actualmente el mas implementado para la
mayoria de las distribuciones linux y este lleva por nombre CUPS. CUPS(Common Unix Printing
System) es un sistema de impresión modular para sistemas operativos de tipo Unix que permite que
un equipo actúe como servidor de impresión.
Usualmente CUPS guarda todos sus archivos de configuracion en el archivo
/etc/cups
Y generalmente hace uso del puerto 631 para llevar a cabo la administracion de estos recursos
Tarjetas de Audio
Existen dos proyectos para el soporte de audio en linux , estos son:
• OSS. Open Sound System
• ALSA. Advanced Linux Sound Architecture
- 19 -
plataformas. El controlador libre paso a formar parte del proyecto Linux a partir de la version 2.0 del
kernel de linux
ALSA (Advanced Linux Sound Architecture)
Advanced Linux Sound Architecture es un componente del núcleo de Linux destinado a sustituir al
Open Sound Sistema Algunas de las metas de este proyecto desde su concepción fueron la
configuración automática de tarjetas de sonido y el manejo de múltiples dispositivos de sonido en un
sólo sistema, metas que han sido alcanzadas en su mayor parte.
Identificando las tarjetas de audio
Una forma usual de identificar las tarjetas de audio es haciendo uso del comando dmesg el cual nos
informa si el kernel de linux detecto alguna tarjeta de audio. Ejemplo:
[BASH]# dmesg | grep ALSA
ALSA sound/pci/hda/hda_codec.c:3303: autoconfig: line_outs=4 (0x14/0x15/0x16/0x17/0x0)
ALSA sound/pci/hda/hda_codec.c:3307: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
ALSA sound/pci/hda/hda_codec.c:3311: hp_outs=0 (0x0/0x0/0x0/0x0/0x0)
ALSA sound/pci/hda/hda_codec.c:3312: mono: mono_out=0x0
ALSA sound/pci/hda/hda_codec.c:3320: inputs: mic=0x18, fmic=0x0, line=0x1a,
fline=0x0, cd=0x1c, aux=0x0
-D <identificación de
Selecciona el mezclador para el control.
dispositivo>
- 20 -
cuando se interrumpe la energía eléctrica de la computadora. Un disco duro (Hard Disk) emplea un
sistema de grabación magnética el cual es aplicado a una una serie de platos metálicos apilados
girando a gran velocidad. Sobre estos platos se sitúan los cabezales encargados de leer o escribir
los impulsos magnéticos. Existen distintos tipos de interfaces y entre las mas comunes se
encuentran las siguientes:
• IDE-ATA (Integrated Drive Electronics)
• SATA (Serial Advanced Technology Attachment)
• SCSI generalmente usado en servidores
Tipos de Discos Duros
Como anteriormente mencionamos existen 3 tipos de discos duros:
Discos Duros IDE-ATA=
Los discos duros con esta denominación hacen uso de una interfaz llamada IDE(Integrated Device
Electronics) ATA(Advanced Technology Attachment) que es la encargada de comunicar al Disco
Duro con la tarjeta madre. El estándar IDE-ATA fue diseñado originalmente para conectar discos
duros; sin embargo, se desarrolló una extensión llamada ATAPI que permite interconectar otros
periféricos de almacenamiento como unidades de CD o unidades de DVD en una interfaz IDE-ATA.
Habitualmente, un disco duro IDE-ATA puede estar configurado de 3 maneras diferentes, las cuales
son:
• Maestro.- Los discos duros con esta configuración indican a la tarjeta madre que el debe ser
el primero en ser leido y por ende el primero en arrancar
• Esclavo.- Los discos duros con este tipo de configuración no son tomados en cuenta al
momento de arrancar el sistema por lo que el disco duro maestro puede disponer de los
demás discos duros configurados como discos esclavos
• Selección por cable.- El dispositivo será maestro o esclavo en función de su posición en el
cable. Si hay otro dispositivo, también debe estar configurado como cable select. Si el
dispositivo es el único en el cable, debe estar situado en la posición de maestro.
Este diseño IDE-ATA tiene el inconveniente de que mientras se accede a un dispositivo el otro
dispositivo del mismo conector IDE no se puede usar. Este inconveniente está resuelto en discos
duros como los SATA y en SCSI, que pueden usar dos dispositivos por canal.
Los discos IDE están mucho más extendidos que los SCSI debido a su precio mucho más bajo. El
rendimiento de IDE es menor que SCSI pero se están reduciendo las diferencias. En la siguiente
figura podemos observar un diagrama que muestra la forma en cual debe ser conectado un disco
duro IDE-ATA.
Discos Duros SATA
Los discos duros con esta denominación hacen uso de una interfaz llamada Serial Advanced
Technology Attachment que es la encargada de comunicar los dotos del Disco Duro con la tarjeta
madre. Estos discos duros sustituyen a los tradicionales IDE-ATA, ademas de que proporciona
mayores velocidades, mejor aprovechamiento cuando hay varios discos, mayor longitud del cable
de transmisión de datos y capacidad para conectar discos en caliente (con la computadora
encendida). El estándar Serial ATA se basa en una comunicación en serie. Se utiliza una ruta de
- 21 -
datos para transmitir los datos y otra ruta para transmitir las confirmaciones de recepción. En cada
una de estas rutas, los datos se transmiten mediante el modo de transmisión LVDS (Señal
diferencial de bajo voltaje) que consiste en transferir una señal a un hilo y su contrapartida a un
segundo hilo para permitir que el destinatario recree la señal por diferencia. Los datos de control se
transmiten por la misma ruta que los datos mediante una secuencia específica de bits que los
distingue. Por lo tanto, la comunicación requiere de dos rutas de transmisión, cada una de las cuales
está compuesta por dos hilos, con un total de cuatro hilos utilizados para la transmisión.
Conectores de Serial ATA
El cable utilizado por el estándar Serial ATA es un cable redondeado que contiene 7 hilos con un
conector de 8 milimetros en su extremo, tres hilos tienen conexión a tierra y dos pares se utilizan
para la transmisión de datos, el conector de la fuente de alimentación también es diferente ya que
comprende 15 clavijas que alimentan al periférico con una potencia que varia entre 3.3 Volts, 5 Volts
o 12 Volts y tiene una apariencia similar al conector de datos:
Características
El estándar Serial ATA brinda una velocidad de 187.5 MB/s ó 1.5 Gb/s, cada octeto se transmite con
un bit de arranque y un bit de parada, con una velocidad efectiva teórica de 150 MB/s ó 1,2 Gb/s. El
estándar Serial ATA II debe contribuir a alcanzar 375 MB/s ó 3 Gb/s, es decir, una velocidad
efectiva teórica de 300 MB/s, y finalmente 750 MB/s ó 6 Gb/s, es decir, una velocidad efectiva
teórica de 600 MB/s. Los cables del estándar Serial ATA pueden medir hasta 1 metro de longitud
(en comparación con los 45 cm que miden los cables IDE). Además, la baja cantidad de hilos en una
envoltura redonda permite una mayor flexibilidad y una mejor circulación del aire dentro de la
carcasa que la de los cables IDE (incluso si existieran los cables IDE redondeados). A diferencia de
los periféricos del estándar ATA, los del Serial ATA se encuentran solos en cada cable y ya no es
necesario diferenciar los discos duros maestros de los discos duros esclavos. Otra de la ventajas
con este tipo de disco es que permite la conexión en caliente o en pocas palabras, mientras el
equipo esta encendido.
Discos Duros SCSI
El estándar SCSI (Small Computers System Interface) es una interfaz que se utiliza para permitir la
conexión de distintos tipos de periféricos a una computadora mediante una tarjeta denominada
adaptador SCSI o controlador SCSI generalmente mediante un conector PCI. El número de
periféricos que se pueden conectar depende del ancho del bus SCSI. Con un bus de 8 bits, se
pueden conectar 8 unidades físicas y con uno de 16 bits, 16 unidades.
Direccionamiento de los Periféricos SCSI
Los periféricos se direccionan mediante números de identificación. El primer número es el ID,
número que designa al controlador que se encuentra dentro de cada periférico (definido a través de
los caballetes posicionados en cada periférico SCSI o por el software). El periférico puede tener
hasta 8 unidades lógicas (por ejemplo, una unidad de CD-ROM con varios cajones). Las unidades
lógicas se identifican mediante un LUN (Número de unidad lógica). Por último, una computadora
puede contener diversas tarjetas SCSI y, por lo tanto, a cada una le corresponde un número
diferente.
- 22 -
SCSI asimétrico y diferencial Existen dos tipos de bus SCSI:
• el bus asimétrico, conocido como SE (por Single-Ended o Terminación única), basado en
una arquitectura paralela en la que cada canal circula en un alambre, sensible a las
interferencias. Los cables SCSI en modo SE poseen 8 alambres para una transmisión de 8
bits (que se denominan limitados) o 16 alambres para cables de 16 bits (conocidos como
extendidos). Este es el tipo de bus SCSI más común.
• el bus diferencial transporta señales a un par de alambres. La información se codifica por
diferencia entre los dos alambres (cada uno transmite el voltaje opuesto) para desplazar las
interrupciones electromagnéticas, lo que permite obtener una distancia de cableado
considerable (alrededor de 25 metros). En general, existen dos modos: el modo LVD (Voltaje
bajo diferencial), basado en señales de 3,3 V y el modo HVD (Voltaje Alto Diferencial), que
utiliza señales de 5 V. Los periféricos que utilizan este tipo de transmisión son cada vez más
raros y por lo general llevan la palabra "DIFF".
Los conectores para las dos categorías de periféricos son los mismos, pero las señales eléctricas
son diferentes. Por lo tanto, los periféricos necesitan ser identificados (mediante los símbolos
creados para tal fin) para no dañarlos.
Estándares SCSI Los estándares SCSI definen los parámetros eléctricos de las interfaces de
entrada/salida. El estándar SCSI-1 de 1986 definió los comandos estándar para el control de los
periféricos SCSI en un bus con una frecuencia de 4,77 MHz con un ancho de 8 bits, lo que implicaba
que era posible alcanzar velocidades de 5 MB/s. Sin embargo, un gran número de dichos comandos
eran opcionales, por lo que en 1994 se adoptó el estándar SCSI-2. Éste define 18 comandos,
conocidos como CCS (Conjunto de comandos comunes). Se han definido varias versiones del
estándar SCSI-2:
• El SCSI-2 extendido, basado en un bus de 16 bits (en lugar de 8), ofrece una velocidad de 10
MB/s
• El SCSI-2 rápido es un modo sincrónico rápido que permite un aumento de 5 a 10 MB/s para
el estándar SCSI y de 10 a 20 MB/s para el SCSI-2 extendido (denominado SCSI-2
extendido rápido).
• Los modos Rápido-20 y Rápido-40 duplican y cuadriplican dichas velocidades
respectivamente.
El estándar SCSI-3 incluye nuevos comandos y permite la unión de 32 periféricos, así como una
velocidad máxima de 320 MB/s (en modo Ultra-320). El siguiente cuadro resume las características
de los diversos estándares SCSI
Configuracion de discos
En Linux, los discos fisicos son listados y representados dentro de la carpeta
/dev
Recordemos: Para ser identificados, el kernel les agrega un identificador el cual comienza con hd
para el caso de discos IDE o sd para el caso de discos PATA o SCSI. Adicionalmente a cada uno de
estos identificadores se les agrega una letra del alfabeto para identificar los discos maestros de los
esclavos.
- 23 -
Identificador del Disco Duro Dispositivo Logico
Configuracion de Particiones
Asi como los discos duros son listados y representados, tambien las particiones correspondientes a
cada disco duro son representadas y listadas. Para ser identificados, el kernel le agrega un numero
al final de cada identificador para diferenciar de una particion primaria, logica o extendida.
NOTA:Los discos duros ATA y SATA permiten 4 particiones primarias, de las cuales 1
puede ser extendida.Las particiones extendidas pueden ser divididas en particiones
logicas y estas pueden tener un maximo de 64 particiones para discos ATA/SATA y 16
particiones para discos SCSI
Aplicaciones graficas para particionar discos duros
Existen aplicaciones libres como alternativas a las aplicaciones propietarias como es el caso del
Partitioning Magic, a continuación se exponen 2 de las mejores:
Gparted
GParted es el editor de particiones de GNOME. Esta aplicación es usada para crear, eliminar,
redimensionar, inspeccionar y copiar particiones, como también sistemas de archivos. Esto es útil
para crear espacio para nuevos sistemas operativos, reorganizar el uso del disco y crear imágenes
de un disco en una partición. La aplicación utiliza la librería libparted para detectar y manipular
dispositivos y tablas de partición, mientras varias herramientas de sistema de archivos dan
mantenimiento a sistemas de archivos no incluidos en libparted. Está escrito en C++ y utiliza gtkmm
como herramienta gráfica. Este acercamento es para mantener la interfaz gráfica de usuario lo más
simple posible, conforme con las Human Interface Guidelines.
Gparted LiveCD Se encuentra disponible en LiveCD, basado en Slackware y construido sobre la
última rama estable núcleo de Linux (2.6). LiveCD es actualizado con cada lanzamiento de GParted.
El LiveCD de Ubuntu incluye esta aplicación entre sus utilidades. También se encuentra disponible
en versión LiveUSB. Cuando se carga LiveCD, se inicia una mini-distribución que contiene las
siguientes aplicaciones:
• Escritorio Xfce
• Thunar como gestor de archivos
• Una aplicación para capturas de pantallas (por medio de Thunar se pueden guardan en un
pendrive)
• Documentento de ayuda
• GParted
- 24 -
• Xfree86
Capacidades y limitaciones GParted no puede incrementar el tamaño de las particiones sin existir
un espacio vacío después de dicha partición, es decir, si existen dos particiones juntas no se podrá
aumentar el tamaño de una en detrimento de la otra; pero esto es más bien una limitación técnica.
En esta tabla se muestran las capacidades de GParted, de acuerdo con cada sistema de archivos.
Si tu deseas probar esta aplicación, la puedes descargar directamente de la pagina oficial del
proyecto
http://gparted.sourceforge.net
Parted Magic
Parte Magic es un LiveCD que incluye una distribución Linux a medida para poder operar
directamente con ella sin necesidad de ser instalada en el disco duro. No estamos hablando solo de
un particionador de discos mas. En este LiveCD podemos encontrar varias herramientas entre ellas
un editor de particiones llamado VisParted basado en el genuino Gparted con la que podremos
crear, redimensionar y borrar nuestras particiones del disco duro. Parted Magic soporta los
siguientes sistemas de archivos: ext2, ext3, ext4, fat16, fat32, hfs, hfs+, jfs, linux-swap, ntfs, reiserfs,
reiser4 y xfs. Si tu deseas probar esta aplicación, la puedes descargar directamente de la pagina
oficial del proyecto
http://partedmagic.com/
Formatear y particionar discos duros desde BASH
Formatear y particionar dispositivos de almacenamiento de datos como discos duros y memorias
USB es una tarea sencilla. Para ello usaremos tres herramientas, estas son:
• dd
• fdisk
• mkfs
Dando formato de bajo nivel con dd
Esta herramienta sirve para dar formato de bajo nivel a un disco duro. La forma de implementar esta
herramienta es la siguiente:
[BASH] # dd if=/dev/zero of=/dev/sda
El comando dd (duplicate disk) es un comando bastante útil para transferir datos desde
dd
un dispositivo o archivo hacia otro dispositivo o archivo
if=/dev/ze if significa input file, es decir, lo que quieres copiar En el ejemplo de arriba llenaremos de
ro ceros el disco duro
of=/dev/s of significa output file, o sea, el dispositivo o archivo destino donde se van a copiar los
da datos.En el ejemplo de arriba nos referimos al disco duro
El proceso puede variar dependiendo del tamaño de almacenamiento del disco duro o del tipo de
interfaz (IDE o SATA), por lo que tendra que ser paciente.
Particionando un disco duro con fdisk
Fdisk nos servira para agregar, eliminar, redimensionar o dar formato a un disco duro. La forma de
aplicar esta herramienta es la siguiente:
[BASH] # fdisk l /dev/sd[a,b,c]
- 25 -
sda,b,c Hace referencia al numero de disco duro al que se le aplicara esta herramienta
La diferencia con el anterior comando radica en la forma en como fue implementado, pues en el
primer comando indicamos explicitamente que deseamos conocer las particiones anidadas en el
disco duro y con este ultimo estamos lanzando la aplicacion como tal. Una vez aplicado el comando
mostrara un mensaje como este:
Orden (m para obtener ayuda):
Prueba tecleando la letra 'm', esto desplegara un menu con las utilidades de esta aplicacion.:
Orden Acción
a Conmuta el indicador de iniciable
b Modifica la etiqueta de disco bsd
c Conmuta el indicador de compatibilidad con DOS
d Suprime una partición
l Lista los tipos de particiones conocidos
m Imprime este menú
n Añade una nueva partición
o Crea una nueva tabla de particiones DOS vacía
p Imprime la tabla de particiones
q Sale sin guardar los cambios
s Crea una nueva etiqueta de disco Sun
t Cambia el identificador de sistema de una partición
u Cambia las unidades de visualización/entrada
v Verifica la tabla de particiones
w Escribe la tabla en el disco y sale
x Funciones adicionales (sólo para usuarios avanzados)
La forma de agregar una particion al disco duro sera tecleando la letra 'n' lo cual nos desplegara la
siguiente informacion:
Acción de la orden
e Partición extendida
p Partición primaria (14)
p
solo habra que especificar si la particion a añadir sera primaria (p) o extendida (e).
NOTA:Los discos duros ATA y SATA permiten 4 particiones primarias, de las cuales 1
puede ser extendida. Las particiones extendidas pueden ser divididas en particiones
logicas y estas pueden tener un maximo de 64 particiones para discos ATA/SATA y 16
particiones para discos SCSI*
El siguiente paso sera especificar el tamaño y numero de la particion a la cual haremos el cambio.
En el siguiente ejemplo crearemos una particion que ocupara todo el tamaño del disco duro.
Número de partición (14): 1
Primer cilindro (11019, valor predeterminado 1): 1
Last cilindro, +cilindros or +size{K,M,G} (11019, valor predeterminado 1019): 1019
Si se quisiera asignar un tamaño diferente para la particion tambien se podra hacer, Para ello
podemos hacer uso de las unidades KiloBytes,Megabytes o GigaBytes pero de manera abreviada
(K,M,G) Al terminar de aplicar lo cambios solo debera ejecutar la orden 'w' lo cual escribira los
cambios al disco duro.
¡Se ha modificado la tabla de particiones!
- 26 -
Llamando a ioctl() para volver a leer la tabla de particiones.
Se están sincronizando los discos.
- 27 -
en comparacion con el sistema de inicio BSD
Existen cuatro versiones release de SystemV (SVR) , las cuales son:
1.SVR1.-Primera version de SystemV lanzada en 1984, incluia el editor de textos Vi 2.SVR2.-Incluye
mejoras con respecto al nucleo el cual esta implementado como memoria virtual paginada, el
sistema operativo Apple esta basado en este modelo. 3.SVR3.-Incluye mejoras en el sistema de
archivos asi como una nueva API de red, el sistema operativo AIX de IBM hace uso de este modelo
4.SVR4.- Fue la versión más popular de SVR asi como la fuente de varias características comunes
del sistema operativo Unix, como el script /etc/init.d
Niveles de Ejecucion
Los niveles de ejecucion en SystemV describen ciertos estados del equipo los cuales se
caracterizan por ejecutar ciertos procesos. En general existen 8 niveles de ejecucion los cuales van
del 0 al 6 y S o s, que son alias del mismo nivel de ejecucion, de estos ochos niveles, tres son
considerados reservados, estos son:
0.- Halt 1.-Single user mode 6.-Reboot
Aparte de los niveles de ejecucion 0,1 y 6 todos los sistemas operativos Linux tratan a los niveles de
ejecucion un poco diferente. El denominador comun de todas las distribuciones linux es el archivo
/etc/inittab
el cual define lo que hace cada nivel de ejecucion. A continuacion un ejemplo de cuantos niveles de
ejecucion tienen cada una de las distribuciones mas importantes de linux, asi como del sistema
operativo solaris y AIX.
En la mayoria de los sistemas operativos linux los usuarios pueden saber bajo que nivel de ejecucion
estan trabajando tecleando en una consola y como root lo siguiente:
[root@localhost ]$ runlevel
N 5
Existen tambien los archivos llamados rcN.d en donde la letra N representa cada uno de los niveles
de ejecucion en los que trabaja init.d, la funcion de estos archivos se explicara mas a detalle en el
siguiente tema.
BSD
El modelo BSD init se ejecuta mediante el script de inicializacion situado en la ruta
/etc/rc
Algunos de los sistemas operativos que se basan en este modelo son los basados en BSD como:
• FreeBSD
• NetBSD
• OpenBSD
• DragonFlyBSD
• DesktopBSD
• PCBSD
El archivo init.d
En este archivo se encuentran todos los scripts encargados de levantar cada uno de los servicios
del servidor. La ubicación de este archivo esta localizada en: Algunos de los servicios que podemos
- 28 -
encontrar en el archivo init.d son los referentes a:
• Servidor Web Apache ---->httpd
• Servidor Samba ----->smb
• Servidor de Correo --->sendmail
• Servidor DHCP ---->dhcpd
• Servidor DNS ---->named
• Manejador de Base de Datos MySQL ---->mysqld
[root@localhost ~]# cd /etc/rc.d/init.d/
[root@localhost init.d]# ls l
total 428
rwxrxrx 1 root root 2974 jun 23 10:18 dhcpd
.
.
.
rwxrxrx 1 root root 3099 feb 25 2008 httpd
rwxrxrx 1 root root 4239 mar 3 2008 mysqld
.
.
.
rwxrxr 1 root root 6154 ago 6 05:05 named
rwxrxrx 1 root root 1745 sep 18 10:26 smb
rwxrxrx 1 root root 4112 mar 29 2008 sendmail
El archivo rcN.d
rcN.d es un conjunto de directorios que representan cada uno de los niveles de ejecucion del
sistema operativo. Estos directorios a su vez contienen un conjunto de enlaces simbolicos a los
scripts del directorio /etc/rc.d/init.d La funcion que desempeñan estos directorios es organizar la
manera en como los servicios de un servidor son levantados, como por ejemplo, imaginemos que
tenemos instalado un servidor Web apache, y que lo tenemos configurado para que trabaje en los
niveles de ejecucion 3 y 5 , por ende deberiamos poder observar dichos enlaces simbolicos en las
rutas:
• /etc/rc.d/rc3.d
• /etc/rc.d/rc5.d
Otra de las caracteristicas de estos enlaces simbolicos es la sintaxis de sus propiedades. Esta
sintaxis esta conformada por 3 parametros
1.El estado del servicio, los cuales son representados con dos variables:
• La letra K.-Esta letra representa que el servicio esta dado de baja
• La letra S.-Esta letra representa que el servicio esta dado de alta
1.El orden en el que es arrancado el servicio.- Este parametro indica el orden en el que los servicios
deben ser dados de alta o de baja 2.El nombre del servicio Un ejemplo de esto lo podemos observar
de la siguiente tabla, la cual la tomamos de la ruta /etc/rc.d/rc5.d, lo cual indica que los scripts dentro
de esta carpeta se ejecutan en el nivel de ejecucion 5 Los detalles del renglon subrayado se
explican a continuacion:
El archivo inittab
La ubicación de este archivo la podemos localizar en:
El archivo inittab describe que procesos se inician en la carga asi como los scripts de inicializacion
- 29 -
del sistema, tambien distingue los multiples niveles de ejecucion bajo la cual trabaja el sistema
operativo, recordemos que los niveles de ejecucion validos son 8, de los cuales tres son reservados
y otro mas es alias de algun nivel en particular. De acuerdo a lo mostrado en la siguiente imagen
describiremos la funcion que desempeña cada linea. Para ello usamos como ejemplo el archivo
inittab del sistema operativo Centos version 5.2
1.- Este recuadro nos indica los diferentes niveles de ejecucion bajo los cuales trabaja CentOS 5.2
2.-Este es el nivel de ejecucion en el cual arranca por defecto el equipo 3.-Aqui se especifica que
script de configuracion se debe cargar para el proceso de arranque del sistema 4.-Aqui se
especifican los scripts de arranque que el sistema utilizara para cada nivel de ejecucion o tambien
llamados runlevels 5.-Esta seccion controla el reseteo del sistema. Se puede comentar esta linea
para que no pueda ser reseteado el sistema 6.-Estas dos lineas estan relacionadas con las acciones
que deben de seguirse en caso de una falla de voltaje y la segunda indica que debe hacerse cuando
el voltaje ha sido restablecido. 7.-Lineas encargadas de controlar los procesos getty 8.-Esta linea
arranca el entorno grafico del sistema, las cuales pueden ser GNOME o KDE
El archivo rc.sysinit
Este archivo esta localizado en la siguiente ruta La funcion que desempeña este archivo es ejecutar
una serie de scripts que inicializan tareas como:
• Configuracion de reloj del sistema
• Configuracion de los parametros del Kernel
• Levantamiento de dispositivos RAID y LVM
• Activacion y Actualizacion de cuotas en disco
• Activacion de la particion SWAP
El archivo rc.local
Este archivo esta localizado en la siguiente ruta Este archivo es el utimo en ser ejecutado por el
proceso init. La funcion que tiene este script es agregar comandos que nos haga facil de realizar
tareas necesarias como arrancar servicios especiales o inicializar dispositivos sin tener que escribir
scripts complejos de inicializacion en el directorio /etc/rc.d/init.d ni creando enlaces simbolicos.
Niveles de Ejecucion
Los niveles de ejecucion o tambien llamados runlevels hacen referencia a los sistemas operativos
Linux que implementan el estilo de sistema de arranque de iniciacion tipo UNIX System V del cual ya
hemos hablando extensamente. A lo largo de este tema mencionamos 8 niveles de ejecucion bajo
los cuales trabajan algunos sistemas operativos linux, en especial los de la Familia Red Hat. A
continuacion mencionaremos las caracteristicas de cada uno de ellos.
Nivel 0 –Parada Del Sistema
El nivel 0 es usado para especificarle al sistema que debe apagarse, la forma en que este lo hace es
a travez del comando halt. Al ejecutarse este comando se apagan todos los servicios que se
encuentren activos
Nivel 1 o S -Monousuario o Single User
El nivel 1 o tambien llamado nivel Single (S) solo puede ser iniciado por el administrador del sistema
(root), por lo que ningun usuario podra hacer eso de este nivel de ejecucion En este nivel no se
- 30 -
activan los servicios de Red, y tampoco se inician los procesos (daemons) de inicio por lo que
permite reparar problemas o hacer pruebas al sistema.
Nivel 2 -Multiusuario sin Red
Este nivel esta caracterizado por la capacidad de permitir que varios usuarios puedan entrar al
sistema pero sin contar con soporte en red, esto quiere decir que no se puede contar con servidores
como NFS o web.
Nivel 3 -Multiusuario con Red
Este sistema esta caracterizado por la capacidad de permitir a varios usuarios entrar al sistema, a
diferencia del nivel de ejecucion 2, este si cuenta con soporte de red.
Nivel 4. -Sin Uso
Para la mayoria de las distribuciones linux este nivel de ejecucion no tiene asignada ninguna
funcion, pero puede ser personalizado por el administrador para que cumpla con alguna funcion en
especial
Nivel 5. -Multiusuario Grafico
Este nivel de ejecucion es identico al nivel 3, la unica diferencia es el alta de entornos graficos como
GNOME o KDE para la administracion del sistema
Nivel 6. -Reinicio del Sistema
Comando chkconfig
Este comando es una herramienta util para levantar o desactivar servicios los cuales son aplicados
durante el arranque del equipo asi como tambien conocer el estado de los servicios que se estan
ejecutando.
• Para conocer el estado de los procesos que estan corriendo en su sistema puede ejecutar el
siguiente comando
[root@localhost ~]#chkconfig list
Lo cual nos mostrara bajo que niveles de ejecucion esta corriendo el proceso o servicio.
• Para levantar algun proceso o servicio durante el arranque del sistema solo teclee esto
[root@localhost ~]#chkconfig –level 35 httpd on
De esta manera estamos especificando el sistema que siempre que este inicie levante el servidor
web apache en los niveles de ejecucion 3 y 5
• Para detener algun proceso o servicio durante el arranque del sistema solo teclee esto
[root@localhost ~]#chkconfig –level 35 httpd off
De esta manera estamos especificando el sistema que siempre que este inicie tenga detenido el
servidor web apache en los niveles de ejecucion 3 y 5
Levantando, deteniendo y reiniciando servicios
Otra forma de levantar, detener o reiniciar servicios en caliente es mediante el uso del siguiente
comando el cual hace uso del archivo init.d del cual hemos hablado anteriormente. La estructura de
la sintaxis para poder ocupar el comando es la siguiente:
- 31 -
[root@localhost ~]#/etc/init.d/nombreDelServicio {start|stop|status|restart|reload}
Para detener este mismo servicio solo debemos cambiar la palabra start por stop
[root@localhost ~]#/etc/init.d/httpd stop
De igual manera si se quiere reiniciar el servicio solo debemos cambiar la palabra stop por restart
[root@localhost ~]#/etc/init.d/httpd restart
Otra manera de arrancar, detener o reiniciar servicios sin necesidad de teclear toda la ruta anterior
es mediante el uso de un alias el cual tiene la siguiente sintaxis
[root@localhost ~]# service httpd {start|stop|status|restart|reload}
De igual forma solo debemos teclear start, stop o restar según sea el caso Ejemplo:
[root@localhost ~]#service httpd start
Manejo de Paquetes
Introduccion a la gestion e instalacion de software
Instalar, actualizar o eliminar software en sistemas operativos linux diferira de la forma en como
usted lo hacia en sistemas operativos Windows o Mac, esto es debido a que la mayoria de las
aplicaciones desarrolladas para Linux no cuentan con un asistente de instalacion, en cambio, usted
tendra que aprender a aplicar una serie de comandos en su equipo para poder llevar a cabo tareas
de administracion y de gestion de paquetes. La forma en que usted llevara a cabo esta
administracion y gestion de paquetes sera mediante el uso de las siguientes herramientas
Yellow dog Updater Modified (YUM) es una herramienta de software libre de gestión de
paquetes para sistemas Linux basados en RPM, fue desarrollada principalmente para
yum
actualizar y controlar los sistemas Red Hat, Fedora, CentOS, y otras distribuciones de
GNU/Linux basadas en RPM, incluyendo el mismo Yellow Dog.
aptitude es una interfaz para APT. Muestra una lista de paquetes de software y permite al
usuario elegir de modo interactivo cuáles desea instalar o eliminar. Dispone de un
aptitude
poderoso sistema de búsqueda que utiliza patrones de búsqueda flexibles, que facilitan al
usuario entender las complejas relaciones de dependencia que puedan existir entre los
- 32 -
paquetes. En un principio, se diseñó para distribuciones GNU/Linux Debian, pero hoy día
se utiliza también en distribuciones basadas en paquetes RPM, como Mandriva.
Herramienta RPM
RPM (Red Hat Package Manager) es una herramienta de administracion y gestion de paquetes
orientada para sistemas operativos Linux, la cual es capaz de instalar, actualizar, desinstalar y
verificar paquetes. Los paquetes RPM fueron originalmente desarrollados por la empresa Red Hat
con la intencion de implementarlo en el sistema operativo Red Hat Linux. Actualmente los paquetes
RPM son utilizados por distribuciones linux como Fedora, Centos, Suse y White Box.
Comando Comentario
yum update Actualiza e instala todos los paquetes del sistema operativo
yum info paquete1 Nos ofrece informacion detallada sobre algun paquete
- 33 -
yum repolist enabled Nos permite conocer los repositorios que se encuentran habilitados
yum list available Lista los paquetes que pueden ser instalados
yum list updates Lista los paquetes que pueden ser actualizados
yum groupinfo
Obtiene información de los grupos y de sus paquetes constitutivos
"nombreDelGrupo"
yum groupinstall
Instala un grupo de aplicaciones
"nombreDelGrupo"
yum groupupdate
Actualiza un grupo de aplicaciones
"nombreDelGrupo"
los repositorios YUM configurados en sistemas operativos de la familia Red Hat se encuentran
declarados en
/etc/yum.repos.d/
Para usos más avanzados agregaremos nuevas secciones y en caso de no encontrar lo que busca
consulte man yum.conf.
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
metadata_expire=1800
installonly_limit=2
tsflasg=repackage
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
La primera cosa que podemos notar de los archivos de configuración es su estructura de bloques de
secciones con sección. Veremos que esta estructura se repite al momento de configurar los
repositorios. En este caso yum.conf en la sección main define el comportamiento general de yum y
establece las directivas base, por ejemplo, de dónde se encuentran el cache. Comentamos a abajo
- 34 -
un poco cada una de las directivas.
cachedir
Directorio donde yum debe almacenar su cache y archivos db. El valor por omisión es
‘/var/cache/yum’.
keepcache
Ya sea ‘1’ o ‘0’. Determina si yum debe o no mantener el cache de los encabezados y paquetes
después de una instalación exitosa. Valor por omisión es ’1’ (mantener los archivos)
debuglevel
Nivel de mensajes de depuración en la salida. El rango práctico es de 0-10. El valor por omisión es
‘2’.
logfile
Ruta completa al nombre de archivo donde yum debe escribir sus actividades.
exactarch
Ya sea ‘1’ o ‘0’. Puesto a ‘1’ provoca que yum update solo actualice los paquete de arquitectura que
haya instalado, es decir, con esta opción habilitada yum no instalará un paquete i686 para actualziar
un paquete i386. Por omisión el valor es ‘1’.
obsoletes
Esta opción sólo tiene efecto durante una actualización. Habilita la lógica de procesamiento de
obsolescencias yum. Es útil cuando se realiza actualizaciones de nivel de distribución (upgrade).
Vea también la documentación del comando yum upgrade para más detalles. Opción en la línea de
comando: --obsoletes
gpgcheck
Ya sea ‘1’ o ‘0’. Esto le indica a yum si debe o no realizar una verficación de firma GPG en los
paquetes. Cuando está habilitado en la sección main, establece el comportamiento por omisión para
todos los repositorios. Esta opción también determina si una instalación de un archivo local RPM
será verificado por su firma GPG o no. El valor por omisión es ‘0’.
plugins
Ya sea ‘0’ o ‘1’. Conmutador global para habilitar o deshabilitar las extensiones (plugins) de yum.
Por omisión su valor es ‘0’ (extensiones deshabilitadas). Vea la sección PLUGINS del manual
yum(8) para más información acerca de la instalación de extensiones yum.
metadata_expire
Duración en segundos después del cual los metadatos caducarán. Así entonces si los metadatos
actuales descargados son menos segundos de antiguo, entonces yum no actualizará dichos
metadatos a partir del repositorio. Si encuentra que yum no está descargando la información para
actualizaciones tan frecuente como usted quisiera, disminuya el valor de este parámetro. También
puede cambiar del formato por omisión en segundos a días, horas o minutos agregando d, h o m
respectivamente al valor especificado. El valor por omisión es 1.5 hours, para complementar yum-
updatesd ejecutándose una vez por hora. También es posible usar la palabra "never" implicando que
los metadatos nunca expirarán.
installonly_limit
- 35 -
Cantidad de paquetes listados en installonlypkgs que se deben mantener instalados al mismo
tiempo. Poner este valor a 0 deshabilita la funcionalidad. Por omisión el valor es ’3’.
tsflasg
Lista separado por comas o espacios de banderas de transacción que serán pasadas a rpm. Estas
incluyen ’noscripts’, ’notriggers’, ’nodocs’, ’test’, y ’repackage’. Puede poner todas o cualquiera de
ellas. Sin embargo, si no sabe qué hacen éstas banderas en el contexto de una transacción rpm,
mejor no toque. Por omisión la lista está vacía. Estas son sólo algunas directivas, para más, man
yum.conf. Dentro de yum.conf puede incluir la configuración de los repositorios pero esa forma de
configuracióne está en desuso y se prefiere utilizar archivos individuales en /etc/yum.repos.d/ que
comentaremos más adelante.
Extensiones de YUM
downloadonly
Este paquete nos permite descargar los paquetes RPM de alguna aplicación sin que estos sean
instalados. La forma de instalar esta herramienta sera tecleando lo siguiente ..
[BASH]# yum install yumdownloadonly
Implementando downloadonly======
La manera de usar este comando es de la siguiente forma..
[BASH]# yum install –downloadonly paquete1
fastestmirror
Esta extensión está diseñada para ordenar la lista de espejos por velocidad de respuestas de cada
uno antes de comenzar una descarga. La forma de instalar esta herramienta sera tecleando lo
siguiente ..
[BASH]# yum install yumfastestmirror
Implementando downloadonly======
La manera de usar este comando es de la siguiente forma..
[BASH]# yum install paquete1
Utilidades YUM
yumdownloader
Esta herramienta complementa al plugin downloadonly ya que dicho plugin sólo funciona si el
software deseado no está instalado. Veamos como falla y cómo podemos resolver este problema
con yumdownloader.
[BASH]# yum downloadonly install opensshserver
Loading "downloadonly" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do
Pues claro, no hay nada que instalar, ya está instalado. Intentemos ahora con yumdownloader.
[BASH]# yumdownloader opensshserver
opensshserver4.3p219.f 100% |=========================| 252 kB 00:01
- 36 -
resolverlos.
Comando Comentario
package-cleanup Lista paquetes huérfanos o aquellos paquetes que no son provistos por
--orphans ninguno de los repositorios configurados
package-cleanup
Lista los paquetes con duplicados en la base de datos RPM
--dupes
package-cleanup
Lista los problemas de dependencias en la base de datos RPM
--problems
yum-complete-transaction yum-complete-transaction es un program que busca transacciones
yum incompletas o abortadas en el sistema e intenta completarlas. Busca en los archivos
transaction-all* y transaction-done* que normalmente se encuentran en /var/lib/yum si una
transacción ha sido abortada en el medio de su ejecución. Si se encuentra más de una transacción
no terminada se intentará completar la más reciente primero. Puede ejecutar este programa más de
una vez para limpiar todas las transacciones sin terminar. Ejemplo..
[BASH]# yum-complete-transaction
Herramienta DPKG
Comando Comentario
dpkg -i
Te permite instalar paquetes deb.
paquete1.deb
dpkg -r
Borra paquete instalado en el sistemas.
paquete1.deb
dpkg --purge
Borra paquete instalado sin dejar rastro.
paquete1.deb
dpkg -l
Hace búsquedas en SO de los paquetes ya instalados.
paquete1.deb
dpkg --info
Muestra la información del paquete.
paquete1.deb
dpkg --status
Muestra el estado del paquete.
paquete1.deb
dpkg --search
Muestra la información de donde se instalo el paquete.
paquete1.deb
dpkg --configure Ayuda arreglar a terminar de configurar paquetes rotos o que no se terminaron
-a de instalar, se ocupa solo en emergencias cuando las herramientas avanzadas
- 37 -
no pueden solucionar el problema.
Herramienta APTITUDE
Comando Comentario
aptitude install
Instala paquete y con las dependencias que tenga.
paquete1
aptitude remove
Borra paquete y sus dependencias pero no las configuraciones.
paquete1
aptitude purge
Borra paquete, sus dependencias y archivos de configuración.
paquete1
aptitude hold
Bloquea paquete, para que no sean actualizados o eliminados.
paquete1
aptitude unhold
Desbloquea paquete.
paquete1
aptitude upgrade Actualiza los paquetes que tengamos instalados en nuestro sistema.
aptitude search
Busca paquetes por nombre o expresión.
paquete1
aptitude show
Muestra información detallada de un paquete.
paquete1
Herramienta APT
Comando Comentario
- 38 -
apt-get remove –purge
Borra paquete, sus dependencias y archivos de configuración.
paquete1
apt-cache dumpavail Muestra información sobre los paquetes que estan disponibles.
apt-cache pkgnames Muestra una lista rápida de todos los paquetes del sistema.
Manejo de comandos
Sobre SHELL
El shell es una interprete de comandos diseñado especificamente para sistemas operativos Unix y
derivados como Linux y BSD, su principal funcion es la de servir como puente entre los usuarios y el
hardare fisico de un equipo; Por puente me refiero a que el shell se encargara de interpretar y
traducir los comandos en un lenguaje que pueda ser entendido por el hardware del equipo. El
término shell también hace referencia a un programa particular, tal como el Bourne shell o BASH. El
BASH fue el shell usado en las primeras versiones de los sistemas operativos Unix , posteriormente
paso a convertirse en estandar para todos los sistemas operativos Linux
El Ambiente Linux
Para que entiendas lo que es y como funciona el Shell, primero te mostraré como funciona el
ambiente en capas. Para ello analizaremos la siguiente imagen.
En este gráfico se ve que la capa del hardware es la mas profunda y se encuentra conformada por
los componentes físicos de tu equipo. Envolviendo a ésta, viene la capa del kernel que es el corazón
de Linux, su núcleo, y es quien hace que el hardware funcione, efectuando su manejo y control. Los
programas y comandos que envuelven el kernel, lo utilizan para realizar las tareas especificas para
las cuales fueron desarrolladas. Encerrando todo eso viene el Shell que tiene este nombre porque en
ingles, Shell significa concha, envoltura, o sea que, queda entre los usuarios y el sistema operativo,
de forma que todo lo que interacciona con el sistema operativo, tiene que pasar por su filtro.
Algunas variantes del SHELL
Bourne Shell (sh)
Desarrollado por Stephen Bourne de la Bell Labs (de AT&T donde también fue desarrollado el Unix),
este fue durante muchos años el Shell patrón del sistema operativo Unix. Es también llamado de
Standard Shell por haber sido durante varios años, el único y hasta hoy es el mas utilizado ya que
- 39 -
fue transportado para todos los ambientes Unix y distribuciones Linux.
Korn Shell (ksh)
Desarrollado por David Korn, también de la Bell Labs, es un superconjunto del sh, o sea, posee
todas las facilidades del sh y a ellas se agregaron muchas otras. La compatibilidade total con el sh
esta atrayendo a muchos usuarios y programadores de Shell para este ambiente.
Boune Again Shell (bash)
Este es el Shell mas moderno y cuyo número de adeptos crece mas en todo el mundo, sea por ser el
Shell default de Linux, su sistema operativo natural, o sea por su gran diversidad de comandos, que
incorpora inclusive diversas instrucciones características del C Shell.
CShell (csh)
Desarrollado por Bill Joy de la Berkley University es el Shell mas utilizado en ambientes *BSD e
Xenix. La estrutura de sus comandos es bastante similar al del lenguage C. Su gran pecado fue
ignorar la compatibilidad con el sh, partiendo por un camino propio. Además de estos Shells existen
otros, pero contigo voy a hablar solamente sobre los tres primeros, tratandolos genéricamente por
Shell y señalando las peculiaridades de cada uno que eventualmente tengan.
Introduccion a BASH
Conociendo el SHELL de nuestro equipo
Una forma de conocer sobre cual SHELL estamos trabajando es tecleando el siguiente comando en
una terminal
# echo $SHELL
/bin/bash
Si obtuviste el mismo resultado que en la linea de ariba entonces estas utilizando el Shell Bash, en
caso contrario de no haber obtenido lo mismo, significa entonces que tu estas usando algun otro
Shell.
Usando el comando cd
current working directory o cd es el comando utilizado para indicar al Shell el directorio en el cual
queremos trabajar. Hagamos una prueba de este comando navegando en nuestro propio sistema de
archivos. En la terminal teclee lo siguiente:
[BASH]# cd /
Este comando le indica al BASH que queremos trabajar en el directorio /, tambien conocido como
raiz
Rutas (Paths)
Para conocer el directorio actual de trabajo en el que se encuentra el BASH escriba:
[BASH]# pwd
/
En el ejemplo anterior , el argumento / es conocido como la ruta o camino hacia donde queremos
dirigirnos. En particular, el argumento / es un ruta absoluta
Rutas Absolutas
Algunos ejemplos de rutas absolutas son las siguientes:
/boot
/etc
/root
- 40 -
/usr/local/bin
Note que todas estas rutas absolutas tienen un comun denominador, nos referimos a la barra /
Analicemos a detalle la ultima linea del ejemplo: Si usted teclea → cd /usr/local/bin En ella
indicamos al Shell a traves del comando cd (current working directory) que primero entre al
directorio / , desde ahi luego entrara al directorio usr posteriormente al directorio local y recien desde
ahi entrara a bin. Las rutas absolutas siempre comenzaran a evaluarse a partir de /.
Rutas Relativas
Las rutas relativas son todas aquellas que no comienzan a evaluarse desde / Por ejemplo, si
estamos trabajando en la ruta /usr
[BASH]# cd /usr
Entonces, ahora usted podra usar una ruta relativa para cambiar el directorio actual de trabajo a
/usr/local/bin de la siguiente forma:
[BASH]# cd local/bin
[BASH]# pwd
/usr/local/bin
En la primera seccion del ejemplo indicamos a traves del comando cd (current working directory)
que primero entre al directorio / , desde ahi luego entrara al directorio usr posteriormente al directorio
local y recien desde ahi entrara a bin. En la segunda seccion del ejemplo indicamos mediante el uso
del (../) punto punto que regrese un nivel, pero inmediatamente indicamos nuevamente que
retroceda otro nivel mas (../) Por cada retorno de nivel debera hacerse uso del (..) punto punto
Entendiendo el . (punto)
El uso del punto (. ) sirve para ejecutar algún programa situado en el directorio actual. Ejemplo :
[BASH]# ./ejecutable
En este ejemplo, se ejecutara el archivo llamado ejecutable que reside en el directorio actual de
trabajo.
Usando los comandos de Linux
El comando ls
Vamos a darle una pequeña mirada al comando ls, el cual, ya conozca tal vez, pero por si no lo sabe
, este sirve para listar el contenido del directorio actual de trabajo. Hagamos un ejercicio, con ayuda
del comando “cd” muevase al directorio de trabajo /var
[BASH]# cd /var
Ahora con ayuda del comando “ls” liste el contenido de dicho directorio
[BASH]# ls
X11R6 cache crash games lib lock log mail opt run spool tmp
Si al comando ls le agregamos el parametro -a nos listara todos los archivos del directorio
- 41 -
incluyendo los archivos ocultos.Los archivos ocultos son indentidicados por llevar un punto (.) al
princio del nombre del archivo. Ejemplo:
[BASH]# ls a
.emacs .gvfs .pulse .wapi
Para realizar un listado completo sobre la informacion de algun directorio basta con agregar al
comando ls el parametro -l Nuevamente con ayuda del comando “cd” muevase al directorio de
trabajo /var, pero esta vez use el comando ls junto el parametro -l y compare sus resultados con el
primer ejemplo
[BASH]# cd /var
[BASH]# ls l
total 52
drwxrxrx 11 root root 4096 jun 9 04:59 adm
drwxrxrx 19 root root 4096 jun 9 11:28 cache
drwxrwxrwt 2 root root 4096 dic 3 2008 crash
drwxrxrx 2 root root 4096 dic 9 2008 games
drwxrxrx 41 root root 4096 jun 9 11:28 lib
drwxrwxrt 6 root uucp 4096 jun 17 11:40 lock
drwxrxrx 13 root root 4096 jun 16 15:38 log
lrwxrwxrwx 1 root root 10 jun 9 04:46 mail > spool/mail
drwxrxrx 2 root root 4096 dic 3 2008 opt
drwxrxrx 25 root root 4096 jun 17 11:40 run
drwxrxrx 12 root root 4096 jun 9 04:49 spool
drwxrwxrwt 8 root root 4096 jun 17 10:44 tmp
drwxrxrx 3 root root 4096 dic 9 2008 X11R6
drwxrxrx 3 root root 4096 dic 9 2008 yp
La opcion -l le resultara de gran utilidad cuando quiera ver informacion sobre permisos, tiempos de
modificacion, tamaño o propiedad de los contenidos listados.
De forma mas detallada, la primer columna muestra la informacion sobre los permisos para cada
elemento listado. La columna siguiente lista el numero de links para cada objeto del sistema de
archivos. La tercer y cuarta columna listan el propietario del elemento, y el grupo al cual pertenece,
respectivamente. La quinta muestra el tamaño de los objetos, mientras que la sexta lista cuando fue
realizada la ultima modificacion del objeto . La ultima columna es el nombre del objeto. Si el archivo
es un enlace simbolico, entonces usted ver ́ una flecha --> y la ruta hacia la cual el link simbolico
apunta. En el capitulo 7 veremos mas a fondo este comando
Comodines
Los comodines son caracteres que se utilizan en lugar de otros caracteres que el sistema rellena.
Los dos comodines más frecuentes son:
• El asterisco *
• La interrogación ?
Aunque en ocasiones se confundan, su significado es diferente y producirán resultados totalmente
distintos. El asterisco significa ninguno, alguno o todos los caracteres: Ejemplo:
[BASH]# ls e*
ed edusat.txt éxito.pdf eduardo.gif educacion
Este comando mostrará todas las entradas de archivos o directorios dentro del directorio actual que
comiencen con la letra e, y que tengan cualquier número de caracteres. Hay que prestar atención a
que el comando encuentra la “e” sola y la “e” seguida de cualquier número de caracteres a
continuación. En contraste, la interrogación (?) es un contenedor para un y sólo un carácter.
- 42 -
Utilizando las mismas posibilidades que antes, el comando:
[BASH]# ls e?
ed
Encontrará entradas de archivos y directorios dentro del directorio actual que comiencen por la letra
“s” y que únicamente tengan una letra más. Si quisiésemos encontrar las entradas que comiencen
por e y cuyo nombre tenga 5 caracteres en total, utilizaríamos:
[BASH]# ls e????
En resumen, el asterisco significa todos o ninguno, y el interrogante siempre significa uno. Estos dos
comodines no son excluyentes, de modo que se pueden combinar según las necesidades. Por
ejemplo, para encontrar sólo los archivos que tengan una extensión de tres letras dentro del
directorio actual, utilizaremos:
[BASH]# ls *.???
Para complicar un poco más las cosas también podemos utilizar los corchetes ( ) para especificar
posibles valores. Todos los valores posibles deben estar dentro de los corchetes, y el shell los
tratará individualmente: En el siguiente ejemplo encontrará todas las entradas que comiencen por
“d” o por “e” y que contengan un número ilimitado de caracteres.
[BASH]# ls [de]*
Para encontrar las entradas de longitud de 3 caracteres que comiencen por “d” o por “e”,
utilizaremos:
[BASH]# ls [de]???
El número de caracteres que podemos incluir dentro de los corchetes es teóricamente ilimitado. Sin
embargo, si lo que queremos es encontrar todas las entradas que comiencen por una letra
minúscula pero no por un número u otro carácter, podemos utilizar abcdefghijklmnopqrstuvwxyz.
Debido a que esto es un rango, una forma mucho más simple de obtener el mismo resultado es
poniendo:
[BASH]# ls [az]???
Los rangos no tienen que ser series completas de números o caracteres, podemos expresar
subconjuntos de ellos. Por ejemplo, si queremos buscar entradas que comiencen por alguna letra
entre la “d” y la “t”, podemos utilizar indistintamente defghijklmnopqrst o d-t. Si la entrada puede
comenzar por esas letras tanto en mayúsculas como en minúsculas, podemos usar
DEFGHIJKLMNOPQRSTdefghijklmnopqrst o D-Td-t .
El comando mkdir
Vamos a darle una pequeña mirada ahora al comando mkdir. La funcion de este comando es la de
crear nuevos directorios. Ejemplo:
[BASH]# mkdir
agenda.emacs .gvfs .pulse .wapi
Por defecto, el comando mkdir no crea directorios padre; la ruta completa hasta el anteultimo
elemento debe existir previamente. De esta manera, si quiere crear los directorios →
principal/secundario/ultimo tendra que crearlos uno a uno.
[BASH]# mkdir principal/secundario/ultimo
mkdir: no se puede crear el directorio "principal/secundario/ultimo": No such file or
- 43 -
directory
[BASH]# mkdir principal
[BASH]# mkdir principal/secundario
[BASH]# mkdir principal/secundario/ultimo
Sin embargo, mkdir tiene la opcion -p la cual puede crear una rama de directorios en un solo paso
[BASH]# mkdir p principal/secundario/ultimo
comando touch
Touch es un comando que sirve para crear archivos sin contenido
[BASH]# touch archivo1
comando echo
Ahora que el archivo existe, le agregaremos algunos datos. Esto podemos hacerlo mediante el
comando echo , que toma sus argumentos y los imprime en la salida est ́ ndar (standard output).
Probemos como funciona el comando echo
[BASH]# echo "HELLO LINUX"
Ejecutemos ahora el mismo comando pero ahora redireccionando su salida al archivo vacio que
creamos en el punto anterior.
[BASH]# echo "HELLO LINUX" > archivo1
El signo mayor (>) le dice al BASH que escriba la salida de echo a un archivo llamado archivo1.
comando cat y cp
Para ver los contenidos de un archivo en una terminal, use el comando cat:
[BASH]# cat archivo1 HELLO LINUX
Bien,ahora podemos hacer uso del comando cp para crear una copia del archivo nombrado
“archivo1”
[BASH]# cp archivo1 copiadearchivo1
comando mv
Usemos ahora el comando mv para renombrar “archivo1” a “nuevoarchivo1”.
[BASH]# mv archivo1 nuevoarchivo1
Veamos otra manera de usar el comando mv, ya que este comando, ademas de permitirnos
renombrar archivos, nos permite mover uno o mas archivos hacia otra ubicacion. Por ejemplo, para
mover archivo1 a → /var/ escribira
[BASH]# mv archivo1 /var/
- 44 -
comando muy usado para listar los contenidos de archivos de configuracion. La sintaxis para usar
este comando es la siguiente:
[BASH]# cat nombreDelArchivo
Opciones Descripcion
Este parámetro nos sirve para indicar que las mayúsculas y las minúsculas se van a
-f
tratar de forma diferente y que por tanto se va a seguir un ordenamiento alfabético
-n Este parámetro nos sirve para ordenar los campos numéricos por su valor numérico
-u Nos permite suprimir todas las líneas repetidas después de realizar la ordenación.
- 45 -
Canonical
fedora
32
Observe el resultado, por defecto, se ordena la lista por orden numérico seguido de orden alfabético,
con mayúsculas antes que las minúsculas.
13
27
3
32
7
Canonical
centos
debian
edubuntu
fedora
Novell Inc
Red Hat
En este otro ejemplo, dos archivos se fusionan y se ordenan. También es posible ordenar listas de
nombres por campos. Los campos se pueden separar por espacios o tabuladores y son numerados
empezando por cero. Cuando se ordenan campos, el símbolo + precede al numero de campo con
cada archivo separado por espacios. Genere el archivo llamado lista con el siguiente contenido
[BASH]# vi lista
–
iliana castillo
zaira munive
alethya zamano
pilar diaz
mayra rodriguez
mariana rivera
El uso de estos campos permite mucha flexibilidad en ordenar listas en archivos. Es importante
recordar que la utilidad sort no cambia el archivo original. La salida se envía a la salida estándar
donde se puede visualizar o redireccionar hacia otro comando o archivo.
Segmentando un texto con Cut
La utilidad cut se usa para escribir partes seleccionadas de un archivo en la salida estándar o
- 46 -
BASH. La utilidad cut también se puede usar para seleccionar columnas o campos desde archivos
específicos. Es posible tambien seleccionar un trozo de una línea específica, varios trozos, o un
rango especifico. La siguiente tabla muestra la gama de opciones que pueden ser integradas al
comando cut:
Opciones Descripcion
Ahora veremos un ejemplo del comando paste aplicandolo al archivo que acabamos de generar en
conjunto con el archivo de la seccion 6.6.2 llamado listas.
[BASH]# paste listas apodos
Nos daría como resultado los nombres de la lista seguidos de los apodos.
[BASH]# paste lista apodos
–
iliana castillo hackhat
- 47 -
zaira munive gaymarc
alethya zamano bigbuitre
pilar diaz javarambo
mayra rodriguez rufodog
mariana rivera
Formateando parrafos
El comando fmt formatea cada párrafo en un archivo y la envía a la salida estandar. Este comando
es utilizado para especificar la anchura de las líneas, tambien puede juntar o separa líneas en un
esfuerzo para que estas tengan la misma longitud. Otra de las funciones de fmt es la de intentar
separar las líneas al final de cada sentencia. Cuando esto no es posible, intenta romper la línea
después de la primera palabra o antes de la última palabra de la sentencia. La anchura por defecto
que utiliza fmt para una línea es de 75 caracteres. El ancho por defecto puede ser modificado
usando la opción adecuada en el comando fmt. La siguiente tabla muestra la gama de opciones que
pueden ser integradas al comando fmt.
Opciones Descripcion
-NUMERO o
Establece la largura de la línea al NUMERO indicado
-wNumero
-p PREFIX Especifica que las líneas que empiecen por PREFIX serán modificadas
Genere el archivo llamado apodos con el siguiente contenido
[BASH]# vi fedora
–
Fedora es un sistema operativo basado en Linux que incluye lo último en software libre
y de código abierto.
Fedora es siempre gratis para que cualquiera lo use, modifique o distribuya.
Lo construye gente alrededor del mundo que trabajan juntos como una comunidad:
El Proyecto Fedora es abierto y todos son bienvenidos.
- 48 -
[BASH]# tr opciones
La siguiente tabla muestra la gama de opciones que pueden ser integradas al comando tr.
Opciones Descripcion
- 49 -
Ver el final de un archivo
Tail nos permite ver el final de un archivo. Como head, el comando tail muestra las últimas 10 lineas
de un archivo por defecto . La siguiente tabla muestra la gama de opciones que pueden ser
integradas al comando tail.
Opciones Descripcion
Indica a las instrucción que se mantenga intentando abrir un archivo cuando este
- - retry
esté inaccesible.
- 50 -
Se imprime una línea por cada línea no “pareada” encontrada en el archivo
-v FILE#
FILE#
Segmentando un archivo
La utilidad SPLIT se usa para dividir un archivo grande en varios segmentos mas pequeños. Esta
utilidad crea archivos de una cierta longitud, cuyo valor por defecto es de 1000 líneas, y los nombra
de forma secuencial. Los nombres de los archivos están formados por un prefijo, de valor “x” por
defecto, seguido por una combinación de letras que sigue el patrón de “aa”, “ab”, “ac”, etc. Si se
deben crear más de 676 archivos, la sintaxis será “zaa”, “zab”, etc. Cuando no se especifica ningún
archivo de entrada para la utilidad SPLIT, la entrada de datos estándar se utilizará por defecto. La
sintaxis correcta para el comando split es la siguiente:
[BASH]# split opciones nombreDelArchivo archivoSalida
La siguiente tabla muestra la gama de opciones que pueden ser integradas al comando split.
Opciones Descripcion
El archivo “arreglo” se divide en varios archivos nombrados “arreglosegmentado”, cada uno de los
cuales contiene cinco líneas.
- 51 -
Eliminando lineas repetidas en un archivo
El comando uniq es una herramienta que nos ayuda a eliminar los datos repetidos en un archivo
Este comando sigue la siguiente sintaxis:
[BASH]# uniq opciones nombreDelArchivo
La siguiente tabla muestra la gama de opciones que pueden ser integradas al comando uniq.
Opciones Descripcion
Por defecto, en cada página se escribe un encabezado de cinco líneas: dos líneas en blanco, una
línea con la fecha, el nombre del archivo y el contador de página, y dos líneas más en blanco.
Igualmente, también se escribe un pie de página de cinco líneas. Hay numerosas opciones para
especificar el formato producido con la utilidad PR, algunas de las cuales se muestran en la
siguiente tabla :
Opciones Descripcion
Utiliza el texto especificado en TEXTO en lugar del nombre del archivo dentro
-h TEXTO
del encabezado
- 52 -
-W Establece el ancho de página a un número de caracteres igual a CARACTERES
CARACTERES siempre. El valor por defecto es 72.
Mostrando estadisticas de un archivo
La utilidad WC cuenta el número de bytes, palabras separadas por espacios en blanco y saltos de
línea para cada uno de los archivos indicados. Se muestra una línea de resultados para cada uno de
los archivos, y si el archivo fue indicado como un argumento, muestra su nombre a continuación. Si
se indica más de un archivo, la utilidad muestra una línea final indicando los resultados acumulativos
con el texto “total”. El orden en el que se muestran los resultados es el siguiente: en primer lugar los
saltos de línea, luego las palabras y finalmente los bytes. Por defecto, cada resultado se muestra
justificado a la derecha en un campo de siete bytes con un espacio en blanco entre cada uno de los
resultados, de manera que los números y los nombres de los archivos se alinean correctamente en
columnas, algunas de las cuales se muestran en la siguiente tabla :
Opciones Descripcion
No numera las líneas. Es el valor por defecto de los encabezados y los pies de
-n
página.
- 53 -
Incrementa el número de línea en una cantidad igual a NÚMERO. El valorpor defecto
-i NUMERO
es uno.
Administracion de Archivos
Listando el contenido de un directorio
Anteriormente estuvimos trabajando un poco con el comando ls (list), el cual como explicamos en el
capitulo anterior, es un comando para listar el contenido de un directorio A continuacion
indagaremos un poco mas en el uso de este comando. El comando ls puede aceptar opciones como
argumento. Hay un gran número de opciones para éste comando que permiten un gran control sobre
el resultado. En la tabla siguiente se muestran las opciones más usadas:
Opciones Descripcion
- 54 -
Opciones Descripcion
-F Muestra el nombre del archivo con una letra para especificar el tipo de archivo
Asume que cada parada de tabulación está a cols columnas de ancho; el valor
-T COLTS predeterminado es 8. ls emplea tabuladores donde es posible en la salida, por
eficiencia. Si cols es cero, no usa tabuladores para nada.
Asume que la pantalla tiene cols columnas de ancho. El valor predeterminado se toma
-W
del controlador de terminal si es posible; si no, se emplea la variable de ambiente
COLTS
COLUMNS si está definida; de otro modo el valor predeterminado es 80
Todas éstas opciones se pueden combinar para crear una salida muy especifica
Determinando el tipo de archivo
El comando ls provee de mucha información cuando se examinan archivos, pero no muestra
información sobre el tipo de contenido de los mismos. El comando file puede ser usado para
aprender más sobre el tipo contenido de los archivos en un sistema Linux. La salida del comando file
incluye una de las siguientes palabras:
• text
• executable
• data o directory
- 55 -
Este comando acepta argumentos para especificar que archivos examina Este comando acepta
argumentos para especificar que archivos examina. Se pueden usar una serie de opciones con este
comando, como se muestran en la siguiente tabla.
Opciones Descripcion
Muestra el resultado después del chequeo. Esto puede ser útil cuando
-n trabajamos con una serie de archivos que van a ser enviados a otro
comando.
-v Muestra la versión
Especifica que los enlaces y atributos del archivo original deben ser transferidos a la
-a
nueva copia.
Especifica que se creen enlaces fuertes (ver más adelante en este capítulo) en lugar de
-l
copias del archivo.
Copia directorios y sus contenidos de forma recursiva mientras copia cada archivo como
-r
archivo estándar. Esta opción no podrá ser usada con algunos archivos especiales.
- 56 -
-s Crea enlaces simbólicos (ver más adelante) de los archivos que no sean directorios.
Especifica la localización del archivo de origen para ser utilizado en lugar de la entrada
if=FILE
estándar. Éste es el archivo de origen.
Especifica la localización del archivo de destino para ser utilizado en lugar de la salida
of=FILE
estándar. Éste es el archivo de destino.
skips=FILE Especifica los bloques a saltar en el archivo de origen antes de empezar a copiar.
seek=FILE Especifica los bloques a saltar en el archivo de destino antes de empezar a escribir.
Especifica los bloques a copiar del archivo de origen en lugar de copiar el archivo
count=FILE
completo.
Este comando tiene diferentes opciones y diferente sintaxis que el comando cp .La sintaxis utilizada
para el comando dd es la siguiente:
[BASH]# cp [opciones] origenDelArchivo destinoDelArchivo
Esto significa que se copiara bit a bit los primeros 512 bytes del dispositivo ubicado en
/dev/dispositivo a un archivo de nombre respaldombr.bkp.
Moviendo Archivos
Se puede mover un archivo manualmente copiándolo a la nueva localización y borrando luego el
archivo original. Sin embargo, Linux incluye un comando para mover archivos que automatiza esta
tarea. El comando mv (abreviatura de move) permite mover y renombrar archivos en sistemas Linux.
Este comando funciona como el comando cp, utilizando la misma sintaxis. Las opciones para el
- 57 -
comando mv son algo diferentes y se resumen en la tabla siguiente:
Opciones Descripcion
Especifica que los archivos no serán movidos al destino si tienen fecha de modificación
-u
igual o más reciente.
-d Utilizada por el superusuario. Elimina directorios sin tener en cuenta si están vacíos.
-v Elimina archivos y muestra por pantalla los nombres de los archivos eliminados.
La sintaxis para aplicar de manera correcta el comando es la siguiente:
[BASH]# rm [opciones] nombreDelArchivo
Creando, monitorizando y matando procesos
Sobre procesos
Un proceso es un concepto manejado por el sistema operativo que consiste en el conjunto formado
por:
• Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador.
• Su estado de ejecución en un momento dado, esto es, los valores de los registros de la CPU
para dicho programa.
• Su memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.
• Otra información que permite al sistema operativo su planificación.
Esta definición varía ligeramente en el caso de sistemas operativos multihilo, donde un proceso
consta de uno o más hilos, la memoria de trabajo (compartida por todos los hilos) y la información de
planificación. Cada hilo consta de instrucciones y estado de ejecución. Los procesos son creados y
destruidos por el sistema operativo, así como también este se debe hacer cargo de la comunicación
entre procesos, pero lo hace a petición de otros procesos. El mecanismo por el cual un proceso crea
- 58 -
otro proceso se denomina bifurcación o fork. Los nuevos procesos pueden ser independientes y no
compartir el espacio de memoria con el proceso que los ha creado o ser creados en el mismo
espacio de memoria. En los sistemas operativos multihilo es posible crear tanto hilos como
procesos. La diferencia estriba en que un proceso solamente puede crear hilos para sí mismo y en
que dichos hilos comparten toda la memoria reservada para el proceso.
Estados de un proceso
El principal trabajo del procesador es ejecutar las instrucciones de máquina que se encuentran en
memoria principal. Estas instrucciones se encuentran en forma de programas. Para que un
programa pueda ser ejecutado, el sistema operativo crea un nuevo proceso, y el procesador ejecuta
una tras otra las instrucciones del mismo. En un entorno de multiprogramación, el procesador
intercalará la ejecución de instrucciones de varios programas que se encuentran en memoria. El
sistema operativo es el responsable de determinar las pautas de intercalado y asignación de
recursos a cada proceso.
Diagrama de formacion de un proceso
Se trata de la utilización de dos archivos, un objeto ejecutable y una biblioteca del sistema, que
después se colocan en la imagen del proceso dentro de la memoria RAM y posteriormente también
se dan de alta dentro de la tabla de procesos, Bloque de control del proceso.
Modelo de dos estados
El modelo de estados más simple es el de dos estados. En este modelo, un proceso puede estar
ejecutándose o no. Cuando se crea un nuevo proceso, se pone en estado de No ejecución. En algún
momento el proceso que se está ejecutando pasará al estado No ejecución y otro proceso se elegirá
de la lista de procesos listos para ejecutar para ponerlo en estado Ejecución. De esta explicación se
desprende que es necesario que el sistema operativo pueda seguirle la pista a los procesos,
conociendo su estado y el lugar que ocupa en memoria. Además los procesos que no se están
ejecutando deben guardarse en algún tipo de cola mientras esperan su turno para ejecutar.
Modelo de cinco estados
El modelo anterior de 2 estados funcionaría bien con una cola FIFO y planificación por turno rotatorio
para los procesos que no están en ejecución, si los procesos estuvieran siempre listos para ejecutar.
En la realidad, los procesos utilizan datos para operar con ellos, y puede suceder que no se
encuentren listos, o que se deba esperar algún suceso antes de continuar, como una operación de
Entrada/Salida. Es por esto que se necesita un estado donde los procesos permanezcan esperando
la realización de la operación de Entrada Salida por parte del Sistema Operativo hasta que puedan
proseguir. Se divide entonces al estado No ejecución en dos estados: Listo y Espera. Se agregan
además un estado Nuevo y otro Terminado.
Los cinco estados de este diagrama son los siguientes según Osëliyo:
• Ejecución: el proceso está actualmente en ejecución.
• Listo: el proceso está listo para ser ejecutado, sólo está esperando que el planificador de
corto plazo así lo disponga.
• Espera: el proceso no puede ejecutar hasta que no se produzca cierto suceso, como la
finalización de una operación de Entrada/Salida solicitada por una llamada al sistema
operativo.
- 59 -
• Nuevo: El proceso recién fue creado y todavía no fue admitido por el sistema operativo. En
general los procesos que se encuentran en este estado todavía no fueron cargados en la
memoria principal.
• Terminado: El proceso fue expulsado del grupo de procesos ejecutables, ya sea porque
terminó o por algún fallo, como un error de protección, aritmético, etc.
Los nuevos estados Nuevo y Terminado son útiles para la gestión de procesos. En este modelo los
estados Espera y Listo tienen ambos colas de espera. Cuando un nuevo proceso es admitido por el
sistema operativo, se sitúa en la cola de listos. A falta de un esquema de prioridades ésta puede ser
una cola FIFO. Cuando se da un suceso se pasan a la cola de listos los procesos que esperaban por
ese suceso. Si existe un esquema con diferentes niveles de prioridad de procesos es conveniente
mantener varias colas de procesos listos, una para cada nivel de prioridad, lo que ayuda a
determinar cuál es el proceso que más conviene ejecutar a continuación. Asimismo, existen varias
colas en estado de espera, como mínimo una por cada periférico. Una de las razones para
implementar el estado Espera era poder hacer que los procesos se puedan mantener esperando
algún suceso, por ejemplo una Entrada/Salida. Sin embargo, al ser mucho más lentas estas
operaciones, puede suceder que en nuestro modelo de cinco estados todos los procesos en
memoria estén esperando en el estado Espera y que no haya más memoria disponible para nuevos
procesos. Podría conseguirse más memoria, aunque es probable que esto sólo permita procesos
más grandes y no necesariamente nuevos procesos. Además hay un costo asociado a la memoria y
de cualquier forma es probable que se llegaría al mismo estado con el tiempo. Otra solución es el
intercambio. El intercambio se lleva a cabo moviendo una parte de un proceso o un proceso
completo desde la memoria principal al disco, quedando en el estado Suspendido. Después del
intercambio, se puede aceptar un nuevo proceso o traer a memoria un proceso suspendido
anteriormente. El problema que se presenta ahora es que puede ser que si se decide traer a
memoria un proceso que está en el estado Suspendido, el mismo todavía se encuentre en espera.
Sólo convendría traerlo cuando ya está listo para ejecutar, esto implica que ya aconteció el suceso
que estaba esperando. Para tener esta diferenciación entre procesos suspendidos, ya sean listos
como en espera, se utilizan cuatro estados: Listo, Espera, Espera y suspendido y Listo y
suspendido.
Sobre demonios
Un demonio, daemon o dæmon (de sus siglas en inglés Disk And Execution MONitor), es un tipo
especial de proceso informático que se ejecuta en segundo plano en vez de ser controlado
directamente por el usuario (es un proceso no interactivo). Este tipo de programas se ejecutan de
forma continua (infinita), vale decir, que aunque se intente cerrar o matar el proceso, este continuará
en ejecución o se reiniciará automáticamente. Todo esto sin intervención de terceros y sin
dependencia de consola alguna. El origen de la palabra daemon (demonio), se encuentra en la
antigua Grecia, y la figura del daimon, un espíritu interior, equivalente a un "ángel protector" que
guiaba y protegía a los hombres. Los programas demonios reciben este nombre en los sistemas
UNIX. En otros sistemas existen procesos similares como los TSRs de MS-DOS o los servicios de
Windows.
- 60 -
Caracteristicas
Los demonios suelen tener las siguientes características:
• No disponen de una interfaz directa con el usuario, ya sea gráfica o textual.
• No hacen uso de la entradas y salidas estándar para comunicar errores o registrar su
funcionamiento, sino que usan archivos del sistema en zonas especiales (/var/log/ en los
UNIX más modernos) o utilizan otros demonios especializados en dicho registro como el
syslogd.
Por ejemplo, una máquina que alberga un servidor web utilizará un demonio httpd (HTTP Daemon)
para ofrecer el servicio y que los visitantes a dicha web puedan acceder. Otro ejemplo son los
demonios "cronológicos" como cron, que realizan tareas programadas como mantenimiento del
sistema en segundo plano.
Comando ps (process state)
El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el
sistema de archivos /proc, es decir, lee directamente la información de los archivos que se
encuentran en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones varían
dependiendo del estilo en que se use el comando. Estas variaciones sobre el uso de ps son las
siguientes:
• Estilo UNIX, donde las opciones van precedidas por un guión -
• Estilo BSD, donde las opciones no llevan guión
• Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guión
--
Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, varias columnas se
mostrarán en el listado de procesos que resulte, estas columnas pueden ser entre muchas otras, las
siguientes:
Opciones Descripcion
Nice, valor nice (prioridad) del proceso, un número positivo significa menos tiempo de
NI
procesador y negativo más tiempo (-19 a 19)
- 61 -
STIME Starting Time, hora de inicio del proceso
-a El comando ps también muestra los procesos iniciados por los otros usuarios.
También muestra los procesos sin terminal de control alguna o con una terminal de
-x
control diferente a la que se está utilizando.
Muestra, para cada proceso, el nombre del usuario que lo inició y la hora a la cual fue
-u
iniciado.
Opción del comando ps para mostrar información de memoria (combinese con p para
-m
obtener el número de páginas)
Podemos obtener mas informacion sobre este comando tecleando en una terminal lo siguiente:
[BASH]# man ps
O tambien
[BASH]# ps help
Como se ve a continuacion
[BASH]# pstree
- 62 -
init─┬─acpid
├─auditd─┬─audispd───{audispd}
│ └─{auditd}
├─avahidaemon
├─beagled───12*[{beagled}]
├─beagledhelper───7*[{beagledhelper}]
├─bluetoothd
├─bonoboactivati───{bonoboactivati}
├─consolekitdae───63*[{consolekitdae}]
├─cron
├─cupsd
├─2*[dbusdaemon]
├─2*[dbuslaunch]
├─dhcpcd
├─evince───{evince}
├─2*[evolutiondata───2*[{evolutiondata}]]
├─firefox───firefox───5*[{firefox}]
├─gconfd2
El segundo comando relacionado con ps es top. Éste comando, no sólo muestra los procesos
actuales, sino que automáticamente se va actualizando para mostrar los cambios acontecidos.
Adicionalmente, en la parte superior se muestra información sobre el número de días que ha estado
la maquina en marcha, el número de usuarios, la memoria, estadísticas de la memoria de
intercambio, etc. Mientras el comando top está en marcha, se pueden usar las siguientes teclas para
interactuar con él:
Opciones Descripcion
h Ayuda
q Salir
Finalizando un proceso
Bajo circunstancias normales, un proceso hijo actúa bajo el padre que lo ha creado. Cuando el
proceso hijo ya no es necesario, desaparece. Algunas veces, sin embargo, los procesos se
convierten en procesos 'fugitivos', y aunque no sea necesario que se sigan ejecutando, continúan su
ejecución consumiendo recursos innecesarios.
Un proceso padre no puede (y no debe) finalizar su ejecución mientras tenga procesos hijos
asociados a él que estén en funcionamiento. Teniendo ésto en cuenta, cuando un proceso hijo no
puede finalizar correctamente su ejecución, origina que el proceso padre se quede en un estado
inconsistente, y que no pueda, a su vez, terminar su ejecución, quedando el proceso padre (y el o
los hijos 'colgados') en un estado conocido como 'zombie', haciendo uso de recursos innecesarios
del sistema.
Un ejemplo para entender todo esto: el shell de un usuario ejecuta un proceso (A), que no puede
hacer todo por si mismo, así que ejecuta otro proceso (B), que a su vez ejecuta otro proceso (C).
Pueden suceder entonces varias cosas: Bajo condiciones normales, cuando el proceso C termina su
ejecución, se lo notifica al proceso B, y desaparece (C). El proceso B trata la información, notifica los
- 63 -
datos al proceso A, y muere (B). El proceso A, hace lo propio con los datos recibidos, y retorna la
información al shell del usuario, y entonces muere (A) En condiciones anormales, supongamos que
el proceso C, después de pasar la información al proceso padre (el proceso B), no muere. Continua
ejecutándose, lo que impide que el proceso B finalice, dado que tiene un proceso hijo (C) en marcha.
El proceso B trata la información y la reporta hacia el proceso padre (A), que a su vez, devuelve la
información hacia el shell que lo originó. Tanto el proceso A como el proceso B, no pueden finalizar
su ejecución dado que tienen procesos hijos en marcha. Así pues, un error en el proceso C, que
hace que se quede en ejecución cuando no debería, origina que haya tres procesos en marcha en el
sistema, consumiendo recursos de forma innecesaria. Otro tipo de problema, podría darse de la
siguiente manera: el proceso C, como antes, entra en un estado inestable, y no finaliza su ejecución.
Aun así, el proceso B, acaba su ejecución y desaparece. El proceso A, también finaliza dado que su
hijo, el proceso B, ha finalizado. Así pues, se queda únicamente el proceso C en marcha (en estado
inestable), pero ahora, no tiene procesos padre a los que reportar. Para resolver los problemas que
pueden ocasionar estos procesos extraños, se puede usar el comando kill. La sintaxis del comando
kill es la siguiente:
[BASH]# kill [opciones] PID
Donde
sd [a|b|c|d] [1|2|3|4]
Hace referencia a una unidad de disco duro,particion o unidad USB Al lanzar la aplicación , esta nos
- 64 -
arrojara informacion referente a numero de cabezas, sectores , cilindros, particiones o tamaño del
dispositivo. Ejemplo:
[BASH]# fdisk /dev/sda
Command (m for help):
Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Una vez que la aplicación esta iniciada, se nos presenta el siguiente mensaje:
Command (m for help):
Si usted presiona la tecla 'm' se imprimira el menu con las herramientas propias del comando fdisk.
Estas herramientas son:
Opciones Descripcion
- 65 -
Command (m for help): p
Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2575 20482875 83 Linux
/dev/sda3 2576 2706 1052257+ 82 Linux swap / Solaris
/dev/sda4 2707 4000 10394055 8e Linux LVM
Command (m for help)
Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2575 20482875 83 Linux
/dev/sda4 2707 4000 10394055 8e Linux LVM
- 66 -
cómodo proporcionar el tamaño en megas (o en K's). Una opción sería entonces dar:
+2048M
Podemos, nuevamente con "p", checar el estado de nuestra tabla de particiones actual:
Command (m for help): p
Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2575 20482875 83 Linux
/dev/sda3 2576 2706 1052257+ 83 Linux
/dev/sda4 2707 4000 10394055 8e Linux LVM
Analicemos en este punto las siete columnas que la impresión de la tabla de particiones nos da. En
la primera columna se encuentra el dispositivo resultado de la partición de disco sda. Así, podemos
observar que en este momento contamos con 4 particiones: sda1, sda2, sda3 ysda4. La segunda
columna nos informa que es la primera partición del disco la que contiene la parte booteable. La
tercera y cuarta columna nos dan información acerca del cilindro en el cual comienza y termina la
partición respectivamente. La quinta nos dice cuantos blocks ocupa ésta. Por último, con la sexta y
séptima columna sabemos el tipo de partición (Identificador y sistema respectivamente).
De nuestro ejemplo, sabemos que contamos con 3 particiones "Linux" (Id 83) y una "Linux LVM" (ide
8e). Si pensamos utilizar la partición recién creada como memoria extendida, es el momento de
asignar el tipo de partición. Ésto lo hacemos con:
Command (m for help): t
Partition number (14): 3
Hex code (type L to list codes): 82
Changed system type of partition 3 to 82 (Linux swap / Solaris)
Disk /dev/sda: 146.8 GB, 146815737856 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2575 20482875 83 Linux
/dev/sda3 2576 2706 1052257+ 82 Linux swap / Solaris
/dev/sda4 2707 4000 10394055 8e Linux LVM
Con fdisk podemos asignar muchos otros tipos de sistema. Con "l" podemos obtener la lista
completa de opciones:
Command (m for help): l
0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da NonFS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
- 67 -
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZDrive a6 OpenBSD ef EFI (FAT12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PARISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
y salimos
Utilizando mkfs
Una vez se ha creado la partición, el sistema de archivos debe ser añadido para que Linux pueda
hacer uso de este espacio. La utilidad mkfs se usa para crear sistemas de archivos en particiones
vacías. La utilidad mkfs se utiliza con muchas opciones distintas, las cuales se pueden ver en la
siguiente tabla
Opciones Descripcion
-t fstype Especifica el tipo de sistema de archivos a crear. Por defecto se usa ext2
Produce una salida con más información, incluyendo todas las órdenes específicas del
-v sistema de archivos concreto que se ejecutan. Ésto es realmente sólo útil para
comprobaciones.
Las opciones usadas por mkfs están seguidas por un argumento especificando la partición que
debe ser formateada. Después de la ejecución del comando, el código de salida de 0 (cero) indicará
que se ha llevado a cabo con éxito mientras que el código de salida 1 (uno) indicará fallo. La sintaxis
correcta para este comando es la siguiente
[BASH]# mkfs [opciones] unidadAFormatear → /dev/sd[abcd][1234]
Algunas otras utilidades del comando mkfs son las siguientes:
Opciones Descripcion
- 68 -
mkraid Inicializa y actualiza cadenas de dispositivos RAID
-h Muestra los resultados en un formato legible para las personas, incluyendo sufijos como
- 69 -
M(megabytes) y G (gigabytes).
Muestra información sobre los inodos libres en lugar de la información por defecto sobre
-i
el espacio libre en disco.
Muestra los resultados en un formato legible para las personas, incluyendo sufijos como
-h
M (megabytes) y G (gigabytes).
Visualiza un sumario para cada uno de los directorios especificados, en lugar de los
-s
totales encontrados recursivamente en cada subdirectorio.
Excluye los subdirectorios de las sumas y los totales, limitándose a totalizar los
-S
directorios.
- 70 -
Especifica el tipo de sistema de archivos a comprobar; por defecto se asume ext2. El
-t tipo valor de tipo determina que verificador específico para el sistema de archivos es
utilizado.
Utiliza una copia del superbloque alternativa. En el modo interactivo, e2fsck utiliza
-b
automáticamente superbloques alternativos. Normalmente, para restaurar un
superbloque
superbloque defectuoso, utilizarás -b 8193 en el modo no interactivo.
Device Este campo especifica la partición del sistema de archivos, por ejemplo /dev/hda1.
- 71 -
Este campo no puede contenter el dispositivo entero (/dev/sda)
Aquí se introduce el directorio donde se quiere que el dispositivo sea montado. Por
Mount point ejemplo si la partición /dev/hda1 tiene el sistema de archivos root, donde está el
sistema se montará en /
En este campo se indica que tipo de partición se trata, ext2, ext3, ext4, reiserfs,
Filesystem type
swap, iso9660
El programa dump consulta la entrada del /etc/fstab para ver cada cuanto tiempo
Dump frecuency debe hacer el backup. Normalmente tiene el valor 1 para filesystems basados en
ext2y ext3 y 0 para los demás.
El comando mount admite dos tipos de opciones, unos para el comando en si, y otros para
especificar opciones del sistema de archivos:
Opciones Descripcion
Monta todos los fileystems especificados en el /etc/fstab menos los que tengan la opción
-a
noauto
- 72 -
-o Especifica las opciones del mount en la linea de comandos
-v Salida interactiva
Establece las opciones: rw, suid, dev, exec, auto, nouser y async. Es la opcion por
defaults
defecto en sistemas ext2
Sólo puede montarse explícitamente (esto es, la opción -a no hará que el sistema de
noauto
archivos se monte)
Prohibir a un usuario ordinario (esto es, distinto de root) montar el sistema de archivos.
nouser
Esto es lo predeterminado
- 73 -
abierto un archivo de un DVD o un proceso está haciendo uso del mismo. Otros errores pueden
surgir si quitamos dispositivos removibles sin antes desmontarlos: La sintaxis básica de esta utilidad
es la siguiente:
[BASH]# umount [opciones] [dispositivo|directorio]
El comando mount admite dos tipos de opciones, unos para el comando en si, y otros para
especificar opciones del sistema de archivos.
Opciones Descripcion
Desmonta todos los filesystems descritos en /etc/mtab. Este archivo está mantenido por
-a los comando mount y umount en tiempo real, se usa normalmente cuando se
apaga/reinicia el PC.
Cada usuario puede almacenar datos libremente en el sstema de archivos hasta que
Límite soft
alcance el límite soft. Éste límite actúa como una especie de zona de aviso, advirtiendo
por usuario
al usuario que debe ir limpiando sus directorios pero, a diferencia del límite hard se le
- 74 -
permite seguir trabajando. Cuando el espacio consumido por un usuario supera el
límite soft pero no el límite hard se envían mensajes de aviso al terminal del usuario
advirtiéndole que está excediendo su cuota pero las operaciones de escritura
terminarán correctamente.
Se trata del límite final asignado a un grupo por el sistema de cuotas. Una vez que se
Límite hard
alcanza este límite, ninguno de los miembros de dicho grupo podrán realizar escrituras
por grupo
en el disco, incluso aunque no hayan excedido sus límites individuales.
Límite soft Este límite se comporta de la misma forma que el de usuario pero se controla en base
por grupo al espacio consumido por el grupo en lugar de por el usuario individual.
Una vez que se alcanza el límite soft comienza el periodo de gracia para el usuario o el
grupo. Cuando expira éste periodo de gracia, el límite soft se convierte en límite hard
Periodo de
hasta que se hayan eliminado los archivos suficientes para que se resuelva el exceso
gracia
de cuota. El periodo de gracia puede ajustarse para cualquier número de meses,
semanas, días, horas, minutos o segundos. Un valor típico es el de siete días.
Todos estos límites pueden establecerse utilizando el comando edquota, que se detallará a
continuación. Cuando una escritura en disco excede un límite hard o un límite soft con el periodo de
gracia expirado, solo se completará una parte de la operación de escritura dejando un archivo
truncado y, probablemente, inservible. Puede que el usuario no haya podido ver los mensajes de fin
de cuota porque la aplicación haya ocultado la shell y los mensajes de dicha aplicación lo lleven a
confusión al indicarle que el disco está lleno o protegido de escritura.
Comandos de cuotas
Linux proporciona una serie de comandos para gestión y consulta de las cuotas en los sistemas de
archivos Parte de la configuración requerida para establecer las cuotas inicialmente ha de hacerse a
mano y sin ninguno de los comandos específicos de cuotas. Este proceso se explicará en la seccion
→ Habilitando Cuotas.
quota
Muestra las limitaciones de cuota en usuario o en grupo. La opción -u está activada por defecto.
Solo root puede utilizar la opción -u y usuario para ver las limitaciones de otros usuarios. El resto de
los usuarios usuarios podrán usar la opción -g y grupo para ver solamente las limitaciones de los
grupos de los que sean miembros, siempre y cuando tengan permiso de lectura en los archivos
quota.group. La sintaxis básica de esta utilidad es la siguiente:
[BASH]# quota [u] [opciones] usuario
[BASH]# quota g [opciones] grupo
Se pueden utilizar muchas opciones con el comando quota. Las utilizadas más frecuentemente son
las que se muestran en la tabla siguiente:
Opciones Descripcion
-q Establece el modo “silencioso” que solo muestra las situaciones de exceso de cuota.
-v Establece el modo explícito que muestra las cuotas incluso cuando no se ha consumido
- 75 -
ningún espacio en disco o no se hayan definido.
Ejemplo 1: Siendo roo t, examina todas las cuotas del usuario mayra:
[BASH]# quota uv mayra
Disk quotas for user mayra (uid 512):
Filesystem blks quota limit grace files quota limit grace
/dev/sda9 9456 10000 10200 32 0 0
/dev/hda1 23 0 0 17 0 0
Este ejemplo muestra que el usuario mayra está cerca de consumir su límite soft de 10000 bloques,
con un límite hard de 10200 bloques en /dev/sda9, y que no tiene cuota establecida en /dev/hda1. La
línea correspondiente /dev/hda1 se muestra debido a la utilización de la opción -v. No se muestran
los valores correspondientes al periodo de gracia porque aun no se ha excedido el límite soft.
Ejemplo 2: Siendo el usuario mayra, examina las cuotas para el grupo contaduria, del que dicho
usuario es miembro:
[BASH]# quota gv contaduria
Disk quotas for user mayra (uid 513):
Filesystem blks quota limit grace files quota limit grace
/dev/sda9 1000* 990 1000 6days 34 3980 4000
/dev/hda1 0 0 0 0 0 0
En este caso, el grupo contaduria ha excedido el escaso límite soft de 990 bloques y ha alcanzado
su límite hard de 1000 bloques. El periodo de gracia original en este ejemplo se estableció en siete
días de los cuales quedan seis días restantes, lo que quiere decir que ha pasado un día desde que
se excedió el límite soft.
quotaon
Activa las cuotas configuradas previamente en uno o más sistemas de archivos. La sintaxis básica
de esta utilidad es la siguiente:
[BASH]# quotaon [opciones] puntoDeMontaje → ( Ejemplo:/home /var)
[BASH]# quotaon [opciones] a
Se pueden utilizar muchas opciones con el comando quotaon. Las utilizadas más frecuentemente
son las que se muestran en la tabla siguiente:
Opciones Descripcion
Activa las cuotas en todos los sistemas de archivos incluidos en /etc/fstab y que estén
-a marcados como de lectura-escritura y con cuotas. Normalmente se utiliza en el proceso
de arranque para activar las cuotas.
Activa las cuotas de grupo. Esta opción no es necesaria si se utiliza -a ya que ésta otra
-g
activa tanto las cuotas de usuario como las de grupo.
Establece el modo explícito de tal forma que se muestra un mensaje por cada sistema
-v
de archivos en el que se han activado las cuotas.
Ejemplo 1: Activar todas las cuotas definidas en el archivo /etc/fstab
[BASH]# quotaon av
- 76 -
quotaoff
Desactiva las cuotas de disco en uno o más sistemas de archivos La sintaxis básica de esta utilidad
es la siguiente:
[BASH]# quotaoff [opciones] puntoDeMontaje → ( Ejemplo:/home /var)
[BASH]# quotaoff [opciones] a
Se pueden utilizar muchas opciones con el comando quotaoff. Las utilizadas más frecuentemente
son las que se muestran en la tabla siguiente:
Opciones Descripcion
Desactiva las cuotas de grupo. Esta opción no es necesaria si se utiliza la -a ya que ésta
-g
última incluye tanto las cuotas de usuario como las de grupo.
Establece el modo explícito que mostrará un mensaje para cada sistema de archivos en
-v
el que se desactiven las cuotas.
Ejemplo 1: Desactivar todas las cuotas mostrando todos los mensajes
[BASH]# quotaoff av
quotacheck
Revisa los sistemas de archivos y compila las bases de datos de cuotas. Esta comando no está
incluido específicamente en los objetivos del examen LPI 101, pero es un componente importante en
el sistema de cuotas de Linux. El comando quotacheck -a debería ser ejecutado de forma regular
por medio de cron. La sintaxis básica de esta utilidad es la siguiente:
[BASH]# quotacheck [opciones] puntoDeMontaje → ( Ejemplo:/home /var)
[BASH]# quotacheck [opciones] a
Se pueden utilizar muchas opciones con el comando quotacheck. Las utilizadas más
frecuentemente son las que se muestran en la tabla siguiente:
Opciones Descripcion
Establece el modo explícito que mostrará toda la información de lo que el programa está
haciendo. Esta opción indica que el programa está activo mediante un símbolo giratorio
-v
en el terminal. Ésto queda muy bonito pero podría ser un problema si estamos
conectados mediante un módem lento.
Ejemplo 1: Inicializa todos los archivos de cuotas
- 77 -
[BASH]# quotaoff a
[BASH]# quotacheck aguv
[BASH]# quotaon a
Para actualizar los archivos de bases de datos de cuotas debemos desactivar primero las mismas.
Ejemplo 2: Con las cuotas activas, actualizar las cuotas de usuario en memoria para el sistema de
archivos /home
[BASH]# quotacheck v /home
edquota
Modifica las cuotas de usuario o grupo. Este es un comando interactivo que utiliza un editor de texto
para configurar los parámetros de cuotas para usuarios o grupos. Por defecto se utiliza el editor vi.
Cuando se envía el comando, se ejecuta un editor con un archivo temporal que contiene las
opciones de cuotas. Al guardar el archivo temporal, el editor finaliza y los cambios se guardan en las
bases de datos de cuotas. En la primera forma del comando, se modifica una lista de usuarios o
grupos separados por espacios en blanco especificados en el apartado nombres. Si se incluye la
opción -p y proto-usuario, las cuotas de ese usuario o grupo se utilizarán para los nombres y no se
lanzará ningún editor. En la segunda forma del comando, con la opción -t, se editarán
interactivamente los límites soft para cada sistema de archivos La sintaxis básica de esta utilidad es
la siguiente:
[BASH]# edquota [p protousuario] [opciones] nombres
[BASH]# edquota [opciones] t
Se pueden utilizar muchas opciones con el comando edquota. Las utilizadas más frecuentemente
son las que se muestran en la tabla siguiente:
Opciones Descripcion
Modifica las cuotas de grupo. Si se especifica -g, se asumirá que todos los nombres
-g
son grupos y no usuarios, incluso si se especificase también -u.
Duplica las cuotas del usuario prototipo para cada grupo o usuario especificado.
-p proto-
Este es el mecanismo mas habitualmente utilizado para inicializar al mismo tiempo
usuario
las cuotas de varios usuarios o grupos.
Modifica los límites soft. Este comando interpreta unidades de sec (segundos),
-t
min(minutos), hour (horas), day (días), week (semanas), y month (meses).
En este ejemplo, a mayra se le ha definido en /dev/sda9 un límite soft de 99.900 bloques, un límite
hard de 100.000 bloques, y ningún límite de archivos. No tiene ninguna limitación en /dev/hda1.
- 78 -
Ejemplo 2: Modificar los límites soft para usuarios en todos los sistemas de archivos
[BASH]# edquota tu
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda9: block grace period: 7 days,
file grace period: 3 days
/dev/hda1: block grace period: 7 days,
file grace period: 3 days
"/tmp/EdP.aiTShJB" 5 lines, 249 characters
En este caso se han establecido unos periodos de gracia de siete días para bloques (espacio en
disco) y de tres días para archivos (inodos).
repquota
Se utiliza para obtener un informe de la situación de las cuotas. En la primera forma del comando,
repquota mostrará un informe por usuario o por grupo de las cuotas de los sistemas de archivos
indicados. En la segunda forma, la opción -a hará que se muestre un sumario de todos los sistemas
de archivos con cuotas. Este comando solo podrá ejecutarlo el usuario root, a menos que los
archivos de bases de datos de las cuotas tengan permisos de lectura universales. Para cada usuario
se imprime el número de archivos y el espacio en disco utilizados en ese momento junto con las
cuotas creadas con edquota. La sintaxis básica de esta utilidad es la siguiente:
[BASH]# quotaoff [opciones] puntoDeMontaje → ( Ejemplo:/home /var)
[BASH]# quotaoff a [opciones]
Se pueden utilizar muchas opciones con el comando repquota. Las utilizadas más frecuentemente
son las que se muestran en la tabla siguiente:
Opciones Descripcion
Hace informes de todas las cuotas de todos los sistemas de archivo de lectura-escritura
-a incluidos en /etc/fstab. Se mostrarán tanto las cuotas de usuario como las de grupo
según se indique en las opciones usrquota y grpquota.
-v Activa el modo explícito, el cual añade una cabecera descriptiva a la salida del comando.
Ejemplo 1: Informe de las cuotas de usuario para el sistema de archivos /home
[BASH]# repoquota v /home
- 79 -
Estas opciones indican a las utilidades de configuración de cuotas que particiones deben ser
tratadas por dichas utilidades cuando éstas busquen en /etc/fstab.
2.Crear los archivos quota.user y quota.group en la raíz del sistema de archivos /home y dar
permisos sólo para root:
[BASH]# touch /home/quota.user /home/quota.group
[BASH]# chmod 600 /home/quota.user /home/quota.group
Estos dos archivos son las bases de datos de las cuotas de usuarios y grupos. Cada sistema de
archivos con cuotas utilizará sus propias bases de datos. Al habilitar las cuotas, estos archivos
contendrán datos binarios (no son archivos de texto). Si se quisiera que los usuarios puedan
examinar las cuotas de los grupos a los que pertenecen, el archivo quota.group necesitará un
permiso de 644 en lugar de 600.
3.Ejecutar quotacheck para inicializar las bases de datos:
[BASH]# quotacheck avug
4.Ahora, verificar que los archivos de bases de datos se han inicializado realmente, para ello nos
aseguramos que su tamaño no sea cero (en este ejemplo cada uno ocupa 16.192):
[BASH]# ls al /home/quota.*
rw 1 root root 16192 Dec 27 19:53 /home/quota.group
rw 1 root root 16192 Dec 27 19:53 /home/quota.user
6.Verificar que el script de inicialización del sistema ( /etc/rc.d/rc.sysinit o similar) activará las cuotas
cada vez que el sistema cargue. Puede ser algo similar al ejemplo siguiente aunque puede variar de
sistema a sistema:
if [ x /sbin/quotacheck ]
then
echo "Checking quotas."
/sbin/quotacheck avug
echo " Done."
fi
if [ x /sbin/quotaon ]
then
echo "Turning on quotas."
/sbin/quotaon avug
fi
7.Añadir un script al directorio crontab del sistema (por ejemplo /etc/crontab.weekly) para que se
ejecute quotacheck rutinariamente. El script del ejemplo puede ser válido:
#!/bin/bash
/sbin/quotacheck avug
En este momento, el sistema de archivos /home está listo para aceptar cuotas de usuario o de
grupo, controlarlas y emitir informes sobre ellas.
- 80 -
Permisos de archivos y directorios
Administracion de Permisos
Los comandos que usaremos para asignar permisos tanto a carpetas como a archivos seran los
sigueintes: La forma es como deben ser usados estos comando sera de la siguiente manera:
Permisos de archivos y directorios
Los componentes informativos de un archivo estan compuestos por 1 campo y 3 secciones, este
campo y secciones son las siguientes:
Estas 3 secciones estan compuestas por los siguientes elementos
Opciones Descripcion
Indica la ausencia de permiso. Por ejemplo, r-x indica que ese usuario puede leer y
- (guion)
ejecutar, pero no escribir
El elemento llamado campo es un identificador que indica si un elemento es un directorio, un
documento o un enlace simbolico
Por tanto, los 10 campos de permisos se resumen en:
1.Tipo de elementro (archivo, directorio, otro) 2.El propietario puede leer 1.El propietario
puede escribir 2.El propietario puede ejecutar 3.El grupo puede leer 4.El grupo puede
escribir 5.El grupo puede ejecutar 6.Usuario (no pertenece al grupo y al propietario) puede
leer 7.Usuario puede escribir 8.Usuario puede ejecutar
Estos permisos tienen valores numéricos como se muestran en la siguiente tabla
Permiso Valor Numerico
r 4
w 2
x 1
- (guion) 0
Los valores numéricos hacen posible añadir permisos a la vez y expresarlo de un modo sencillo. Por
- 81 -
ejemplo, si un archivo permite al usuario rwx, el valor numérico sería 4(r)+2(w)+1(x)=7. El formato
del conjunto de los permisos de un archivo se muestra en la siguiente figura.
La tabla siguiente muestra la conversión numérica de un conjunto de distintos permisos posibles:
Permiso Valor Numerico
1 --------x
2 -------w-
3 -------wx
4 ------r--
5 ------r-x
6 ------rw-
10 -----x---
11 -----x--x
22 -----w--w-
33 ----wx-wx
55 ---r-xr-x
77 ---rwxrwx
100 --x------
101 --x-----x
111 --x--x--x
222 -w--w--w-
311 -wx--x--x
322 -wx-w--w-
400 r--------
444 r--r--r--
511 r-x---x--x
544 r-xr--r--
644 rw-r--r--
666 rw-rw-rw
755 rwxr-xr-x
777 rwxrwxrwx
Comando chmod
Chmod ( change mode ) permite cambiar los permisos de acceso de un archivo o directorio.
- 82 -
La sintaxis básica de esta utilidad es la siguiente:
[BASH]# chmod [modificadores] [opciones] [archivo/directorio]
Lista los archivos y directorios a los que se les va aplicando el comando a medida que el
-v
mismo se ejecuta
Permisos especiales
Pueden ser utilizados 3 tipos de permisos en determinadas circunstancias. Aparte de los siempre
aplicables de lectura, escritura y ejecución, algunas veces es necesario algo más para un archivo o
directorio. Estos permisos especiales son los 3 siguientes:
• Asignar ID de usuario (set user ID) (SUID)
• Asignar ID de grupo (set group ID) (SGID)
• Sticky bit
SUID
La asignación de ID de usuario se aplica cuando se desea que un determinado usuario ejecute un
programa que de otro modo no podría. Por ejemplo, sólo el usuario root sería capaz de ejecutar la
función funcion xyz (comenzar backups, restaurar el sistema, entrar en otros recursos, etc) a causa
de las ramificaciones de seguridad, pero se necesita que los usuarios ejecuten un shell script para
realizar esta acción, porque no se dispone del tiempo necesario para hacerlo personalmente. Se
puede crear este shell script como root y asignar el permiso SUID de modo que el usuario que
ejecute el script sea root sólo dentro de ese script. Antes y después del manuscrito, es únicamente
un usuario, pero durante la ejecucion del script es como si fuera root. El permiso numerico de SUID,
4000, es sumado al valor de otros permisos. Una vez aplicado este, cambia la x en el campo del
ejecutable para el propietario de los permisos a una s:
SGID
Similar en la naturaleza a SUID, el permiso de la identificación de grupo del sistema se aplica
cuando es necesario que la persona que ejecuta el archivo sea un miembro del grupo que posee el
archivo (y no el propietario). Esto cambia el x en el permiso del grupo a un s, y el valor numérico es
2000:
Stiky Bit
Este permiso no trabaja como los otros permisos especiales. Con un valor numérico de 1000, sus
operaciones difieren cuando están aplicadas a un directorio o a un archivo. Cuando está aplicado a
un directorio, evita que los usuarios supriman archivos de las carpetas que les conceden el permiso
de escritura, a menos que sean el propietario del archivo. Por defecto, cualquier usuario que tenga
permiso de escritura en un directorio puede suprimir archivos dentro de ese directorio, incluso si no
tiene el permiso de escritura de ese archivo.
- 83 -
Cuando se aplica sobre un archivo, el archivo se convierte en “sticky” (bloqueado). La primera vez
que se accede o se ejecuta el archivo y se carga en memoria, permanece cargado en memoria física
(RAM) o espacio swap de modo que pueda funcionar más rápidamente que si se lee desde el disco.
Si el archivo no es ejecutable, el último bit de permiso ( para otra categoria) se convierte en T. Si el
archivo es un archivo ejecutable, o el permiso se aplica a un directorio, el bit pasado se convierte en
una t. Cuando se aplica el permiso chmod y las letras, aparece t de todos modos (sea archivo o
directorio).
Administrando el propietario de los archivos
Comando chown
El comando chown cambia el propietario de cada archivo, usuario o grupo, si sólo se da un nombre
de usuario (o UID numérico), entonces ese usuario se convierte en el propietario de cada archivo
dado, y el grupo al que pertenece el archivo no cambia. Si al nombre de usuario sigue un signo de
dos puntos y un nombre de grupo o GID numérico, sin espacios entre ellos, entonces también se
cambia el grupo al que pertenece cada archivo, se usa con la siguiente sintaxis: La sintaxis básica
de esta utilidad es la siguiente:
[BASH]# chown [opciones] usuario:grupo archivo
Se pueden utilizar muchas opciones con el comando quotaon. Las utilizadas más frecuentemente
son las que se muestran en la tabla siguiente:
Opciones Descripcion
Comando chgrp
El comando chgrp se usa para cambiar el grupo propietario de un archivo o directorio. El comando
busca en el archivo /etc/group para confirmar la existencia del grupo especificado antes de cambiar
los permisos. La sintaxis básica de esta utilidad es la siguiente:
[BASH]# chgrp [opciones] grupo archivo
Se pueden utilizar muchas opciones con el comando quotaon. Las utilizadas más frecuentemente
son las que se muestran en la tabla siguiente:
Opciones Descripcion
Actúa sobre enlaces simbólicos propiamente en vez de sobre lo que apunten. Disponible
-h
solamente si el sistema proporciona la primitiva lchown
- 84 -
Cambia recursivamente el grupo al que pertenecen directorios y sus contenidos. (Y
-R
continúa incluso si se encuentran errores.)
Los Symlinks
Estos enlaces si que pueden extenderse a otros sistemas de archivos. También pueden hacer
referencia a directorios, de hecho, pueden referenciar hasta archivos inexistentes. La lectura y
escritura, así como la copia del enlace, afectan al archivo objetivo, mientras que el borrado afecta al
propio enlace. Borrar el archivo objetivo tampoco elimina el enlace automáticamente. Su sintaxis es
como sigue:
[BASH]# ln s /ruta/completa/archivo nombre_enlace
- 85 -
Shell, Scripting y Manejo de datos
El shell es un interprete de comandos para la interaccion entre el usuario y el hardware del equipo. Existen
diferentes variantes del SHELL, de las cuales las mas conocidas son el bash, el csh o zsh. El mas utilizado
debido a sus grandes cualidades es el bash. El kernel o nucleo del sistema es el responsable de la
comuncacion entre los programas, las instrucciones de bajo nivel y el hardware del sistema. Este capítulo
explica cómo personalizar su sistema modificando sus archivos de inicialización y estableciendo las variables
de entorno más comunes
Los archivos de inicialización encargados de la configuración del sistema dependen del shell que el
administrador del sistema haya especificado como shell predeterminado cuando instaló el sistema. El Shell
Bourne es el shell predeterminado para la mayoria de los sistemas operativos GNU/LINUX, pero también
puede usar el C shell o el Korn Shell . Cada uno de estos shell dispone de su propio archivo o archivos de
inicialización. Si no estás seguro de que shell es el shell predeterminado de su equipo ejecute el siguiente
comando:
[BASH]# echo $SHELL
/bin/bash
Sin tener en cuenta el shell que esté usando, cuando entra por primera vez en el sistema, éste procesa
generalmente el archivo perfil: /etc/profile. Usualmente, el administrador del sistema es el dueño de este
archivo, y los usuarios lo pueden leer pero no escribir en él. Después de que el sistema ejecute el perfil del
sistema, este procesa el perfil del usuario contenido en el fichero /.bash_profile. El perfil del usuario es uno o
varios archivos de inicialización que definen el entorno de trabajo. Por ejemplo, si javier se encuentra en el
entorno fedora su sistema comprobará dicho archivo o grupo de archivos cada vez que empiece una nueva
Herramienta del shell o una ventana de la Herramienta de comandos. Según que shell predeterminado esté
establecido, su perfil de usuario será uno de los siguientes:
.bash_profile (para los shell Bourne y Korn)
.login y .cshrc (para el shell C)
Su fichero o ficheros de perfil de usuario están situados en su directorio de usuario y le permiten configurar su
entorno de trabajo según sus preferencias.
Fichero /etc/profile
Este fichero contiene la configuracion del sistema y se ejecuta durante el inicio de cada sesion, contiene la
definicion de las variables globales para todos los usuarios.
- 86 -
Fichero /etc/bashrc
Fichero con las funciones y los alias comunes que sera invocado a travez del fichero /bashrc de cada usuario.
Existen tres ficheros en el directorio de cada usuario los cuales tienen un significado especial para el shell
Bash. Estos ficheros permiten al usuario configurar el entorno de su cuenta automaticamente cuando entra en
el sistema, cuando arranca un subshell o ejecutar comandos cuando sale del sistema. Los nombres de estos
ficheros son /.bash_profile, /.bashrc y /.bash_logout. Si ninguno de estos ficheros existe en el directorio del
usuario, /etc/profile es utilizado por el sistema como fichero de configuracion de bash.
/.bash_profile
Este fichero es el mas importante de los tres. Es leido y los comandos incluidos en el, ejecutados, cada vez
que el usuario entra en el sistema. Cualquier cambio hecho en este fichero no tendra efecto hasta que
salgamos y entremos en el sistema de nuevo. Bash permite dos sinonimos para este fichero, .bash_login
(derivado del C shell) y .profile (derivado del Bourne y Korn shell). Si .bash_profile no existe, el sistema
buscara primero .bash_login y luego .profile. Solamente uno de estos ficheros es leido, en el caso que existan
simultaneamente.
/.bashrc
Es leido cuando el usuario arranca un subshell, escribiendo por ejemplo bash en la linea de comandos. Esto
nos permite ejecutar diferentes comandos para la entrada al sistema o para la ejecucion de un subshell.
/.bash_logout
Es el fichero leido por Bash, cuando salimos del sistema. Podemos definir, por ejemplo que se borren los
ficheros temporales creados en nuestra ultima sesion o registrar el tiempo que hemos estado utilizando el
sistema. Si .bash_logout no existe, ningun comando sera ejcutado a nuestra salida.
/inputrc
Define las opciones de entrada del teclado. Para eliminar el sonido de error se agrega la siguiente linea al final
del fichero
/etc/inputrc
- 87 -
Diferencias entre
Variables de entorno
El sistema establece el entorno de sistema mediante un conjunto de especificaciones definidas en los archivos
de inicialización. Si desea modificar temporalmente su entorno para la sesión actual de trabajo puede escribir
comandos directamente en su BASH. Sin embargo, si desea modificar su entorno de trabajo de un modo más
permanente, puede almacenar variables de entorno “permanentes” en los archivos .bash_profile, .bash_login,
o .cshrc.
Para mostrar las variables de entorno establecidas actualmente asignadas en su sistema teclee lo siguiente :
[BASH]# env
HISTORY=100 HOME=/home/hack HZ=100 LOGNAME=hack MAIL=/var/spool/mail/hack
MANSECTS=\1:1m:1c:1f:1s:1b:2:\3:3c:3i:3n:3m:3k:3g:3e:3x11:3xt:3 w:3b:9:4:5:7:8
PATH=/usr/bin SHELL=/bin/bash TERM=xterm TZ=EST5EDT
A continuacion tenemos la lista de variables reservadas por el interprete de comandos mas comunes. Todas
ellas tienen un significado especial para el mismo, algunas de ellas solo se pueden leer, a otras se le asignan
ciertos valores automaticamente y algunas pierden su significado si le cambiamos los valores que tienen por
defecto. Muchas de dichas variables pueden estar ya incluidas en su perfil de usuario. Como ya se mencionó
anteriormente en su archivo de perfil de usuario (.bash_profile para los shell Bourne y Korn, y .cshrc para el
shell C).
CDPATH Especifica los directorios que se han de buscar cuando se escribe un único nombre
de directorio sin un nombre de ruta de acceso completo.
HOME Define la ruta de acceso absoluta de su directorio raíz. El sistema utiliza esta
información para determinar que el directorio cambie cuando escriba el comando cd sin
argumentos.
IFS Una lista de caracteres para separar campos; usado cuando el interprete de
comandos separa palabras como parte de una expansion.
MAIL Si este parametro tiene un fichero definido y la variable MAILPATH no esta
definida, bash informa al usuario de la llegada de correo al fichero especificado.
MAILPATH Una lista de ficheros separada por comas, en los cuales el interprete de
comandos comprueba periodicamente de la llegada de correo.
PATH Una lista de directorios, separados por comas, en los cuales el interprete de
comandos busca por comandos
PS1 Prompt principal. El valor por defecto es “'\s\v\$ '
PS2 El prompt secundario. El valor por defecto es '> '
BASH La ruta de acceso completa usada para ejecutar la instancia actual de bash
- 88 -
BASH_ENV Si esta variable esta definida cuando bash es llamado para ejecutar un
script, su valor es expandido y usado como el nombre del fichero leido antes de
ejecutar el script.
BASH_VERSION El numero de version de bash usada
EUID El identificador numerico de usuario del usuario actual
GROUPS Una matriz que contiene la lista de los grupos a que pertenece el usuario actual
La variable de entorno PATH se usa para ubicar comandos dentro de la jerarquía de directorios de
GNU/LINUX. Al fijar PATH se crea un conjunto de directorios fijos que el sistema buscará siempre que un
usuario. escriba el nombre de un comando.
Por ejemplo, si no tiene establecida ninguna variable PATH y quiere copiar un archivo, tendrá que introducir el
nombre de ruta de acceso completo para el comando, /usr/bin/cp. Sin embargo, si ha establecido la variable
PATH para incluir el directorio /usr/bin, podrá simplemente escribir cp y el sistema ejecutará siempre el
comando. Esto es debido a que su sistema busca el comando cp en todos los directorios nombrados en la
variable PATH y lo ejecuta cuando lo encuentra. Para los shell Bourne y Korn, la variable PATH se especifica
en el archivo .bash_profile de su directorio personal utilizando la siguiente sintaxis:
PATH=/usr/bin:/home/bin
Estas variables pueden ser variables locales y son definidas solo en el BASH local. Tu puedes pasar estas
variables de locales a globales exportandolas a tu entorno de desarrollo
Ejemplo:
[BASH]# saludo='Linux Para Todos'
[BASH]# echo $saludo Linux Para Todos
[BASH]# bash
[BASH]# echo $saludo
[BASH]# exit exit
Como podemos observar asignamos a la variable “saludo” la cadena “Linux Para Todos” y luego mostramos
su contenido. Seguido a ello invocamos una segunda terminal y nuevamente imprimimos el contenido de la
- 89 -
variable “saludo”, la cual no es mostrada debido a que es una variable local y no global. Para solucionar este
problema se debe exportar la variable local lo cual hara que la variable se convierta en variable global.
Ejemplo:
[BASH]# saludo='Linux Para Todos'
[BASH]# export saludo
[BASH]# bash
[BASH]# echo $saludo Linux Para Todos
[BASH]# exit exit
El comando “export” convierte la variable local a global, para excluir la variable recien exportada use
el comando “unset”
Ejemplo:
[BASH]# unset saludo
Alias para el Shell Bash
El comando alias permite al usuario crear atajos a los comandos mas implementados.
Ejemplo:
[BASH]# ls
amsn_received Documents Objetivos.png RPMComo.pdf bin kernelfedora.pdf
El comando anterior tiene la funcion de listar el contenido de un directorio, suponga que usted quisiera
implementar este comando para ademas de listar el contenido le arroje datos mas relevantes como por
ejemplo, permisos de ejecucion, numero de enlaces, fecha de creacion y tamaño, para ello se implementan los
alias de comandos.
Ejemplo:
[BASH]# alias ls='ls l'
[BASH]# ls drwx 2 hack users 4096 jun 29 09:46 amsn_received drwxrxrx 2 hack
users 4096 jun 9 05:01 bin drwxrxrx 2 hack users 4096 jun 9 05:01 Documents rwxrxr
x 1 hack users 64472 jun 1 17:23 Objetivos.png rwxrxrx 1 hack users 78002 jun 5
15:25 RPMComo.pdf rwrr 1 hack users 1439863 jun 16 10:38 kernelfedora.pdf
[BASH]# unalias ls
Las funciones son muy perecidas a los alias pero estas admiten una gama mas amplia de instrucciones para
su ejecución. Las funciones se construyen mediante la siguiente sintaxis
Function nombreDeLafuncion() {listaDeComandos;}
- 90 -
Donde
function Orden que invoca al comando function , es opcional
nombreDeLaFuncion() El nombre de la funcion
listaDeComandos El cuerpo de la funcion
[BASH]# function listado() { pwd; ls;}
[BASH]# function
/home/valdo/lpic/generallinux2/notes CVS _whizzy_gl2.notes.fmt _whizzy_gl2.notes.pag
Ejemplos validos en la declaracion de funciones
[BASH]# function look() { pwd; ls;}
[BASH]# function look { pwd; ls; }
[BASH]# $ look() { pwd; ls;}
[BASH]# look()
> { > pwd; > ls; > }
Ejemplos invalidos en la declaracion de funciones
[BASH]# function look() pwd; ls;
[BASH]# look() { pwd; ls }
[BASH]# function look() {pwd; ls;}
En este capitulo estudiaremos la forma de crear sencillos scripts mediante la implementacion de sentencias de
control. Estas construcciones nos ayudan a controlar la ejecucion de un script y a obtener diversos resultados
dependiendo de las condiciones que se cumplan o no cuando ejecutamos el script.
if/else: Ejecuta una serie de comandos dependiendo si una cierta condicion se cumple o
no.
for: Ejecuta una serie de comandos un numero determinado de veces.
while: Ejecuta una seria de comandos mientras que una determinada condicion sea cumpla.
until: Ejecuta una serie de comandos hasta que una determinada condicion se cumpla.
case: Ejecuta una o varias listas de comandos dependiendo del valor de una variable.
select: Permite seleccionar al usuario una opcion de una lista de opciones en un menu.
La mayoria de condiciones utilizadas con estas construcciones son comparaciones de cadenas alfanumericas
o numericas, valores de terminacion de comandos y comprobaciones de atributos de ficheros. Antes de seguir
viendo como estas construcciones se pueden utilizar, vamos a ver como las condiciones se pueden definir.
Operador Significado
cadena1 = cadena2 cadena1 es igual a cadena2
cadena1 != cadena2 cadena1 no es igual a cadena2
cadena1 < cadena2 cadena1 es menor que cadena2
cadena1 > cadena 2 cadena1 es mayor que cadena 2
- 91 -
n cadena1 cadena1 no es igual al valor nulo (longitud mayor que 0)
z cadena1 cadena1 tiene un valor nulo (longitud 0)
Operador Significado
x lt y x menor que y
x le y x menor o igual que y
x eq y x igual que y
x ge y x mayor o igual que y
x gt y x mayor que y
x ne y x no igual que y
Operador Significado
d fichero Fichero existe y es un directorio
e fichero Fichero existe
f fichero Fichero existe y es un fichero regular
r fichero Tienes permiso de lectura en fichero
s fichero Fichero existe y no esta vacio
w fichero Tienes permiso de escritura en fichero
x fichero Tienes permiso de ejecucion en fichero
O fichero Eres el dueño del fichero
G fichero El grupo del fichero es igual al tuyo
fichero1 nt fichero2 fichero1 es mas reciente que fichero2
fichero1 ot fichero2 fichero1 es mas antiguo que fichero2
Sentencia if
La sentencia if es un condicional simple, tal vez la hayas visto antes en algunos otros lenguajes de
programacion.
Su sintaxis es la siguiente:
if cmd
then cmd1 cmd2 cmdn
elif cmd3 then cmd4 else cmd5 cmd6 cmdm fi
La sentencia if trabaja de la siguiente forma: En caso que el comando cmd haya sido ejecutado con éxito, los
comandos del bloque del then (cmd1, cmd2 y cmdn) serán ejecutados, en caso contrario, los comandos
ejecutados serán los del bloque opcional elif el cual verifica los comandos del bloque del then (cmd3) los
cuales seran ejecutados, en caso contrario sera pasado al siguiente bloque, el else (cmd3, cmd4 y cmdm),
terminando con un fi.
Ejemplo
#!/bin/bash
- 92 -
echo ' Adivina el valor numerico de la variable' read A if [ $A = 1 ] then echo "Acertaste" exit 0 elif [ $A = 2 ] then
echo "Muy cerca" else echo "Lejosss...." fi exit 0
Sentencia for
El bucle for en Bash es un poco distinto a los bucles for tradicionales de otros lenguajes como C o Java, sino
que se parece más al bucle for each de otros lenguajes, ya que aquí no se repite un número fijo de veces, sino
que se procesan las palabras de una frase una a una. Su sintaxis es la siguiente:
for var [in lista]
do ∙∙∙∙∙ Sentencias que usan $var ∙∙∙∙∙ done
Si se omite in lista, se recorre el contenido de $@, pero aunque vayamos a recorrer esta variable, en este
tutorial la indicaremos explícitamente por claridad. Por ejemplo si queremos recorrer una lista de planetas
podemos hacer:
for planeta in Mercury Venus Terra Marte Jupiter Saturno
do echo $planeta # Imprime cada planeta en una línea done
La lista del bucle for puede contener comodines. Por ejemplo, el siguiente bucle muestra información detallada
de todos los ficheros en el directorio actual:
for fichero in *
do ls l "$fichero" done
while comando
do ∙∙∙∙∙ done
until comando
do ∙∙∙∙∙ done
En este caso el comando también puede ser una condición encerrada entre [ ]. La única diferencia entre while
y until es que while se ejecuta mientras que el código de terminación del comando sea exitoso, es decir 0,
mientras que until se ejecuta hasta que el código de terminación sea exitoso, según esto until se puede
interpretar como ejecutar varias veces un comando hasta que tenga exito.
Ejemplo
#!/bin/bash
Script que muestra los directorios de PATH
path=$PATH while [ $path ]; do echo ${path%%:} if [ ${path#:} = $path ]; then path=
else path=${path#:} fi done
- 93 -
Sentencia case
Mientras que esta sentencia en lenguajes como C o Java se usa para comprobar el valor de una variable
simple, como un entero o un carácter, en Bash esta sentencia permite realizar una comparación de patrones
con la cadena a examinar.
Su sintaxis es la siguiente:
case cadena in
patron1) Sentencias ;; patron2) Sentencias ;; ∙∙∙∙∙ esac
Cada patrón puede estar formado por varios patrones separados por el carácter |. Si cadena cumple alguno de
los patrones, se ejecutan sus correspondientes sentencias (las cuales se separan por ;) hasta ;;.
Ejemplo:
/bin/bash
Script que convierte ficheros de imagen al formato .jpg
for fichero in "$@" do fichero_ppm=${fichero%.}.ppm case $fichero in
.jpg) exit 0;;
.tga) tgatoppm $fichero > $fichero_ppm;;
.xpm) xpmtoppm $fichero > $fichero_ppm;;
.pcx) pcxtoppm $fichero > $fichero_ppm;;
.tif) tifftopnm $fichero > $fichero_ppm;;
.gif) figtoppm $fichero > $fichero_ppm;;
.pnm|.ppm) ;;
) echo "Formato .${fichero##.} no soportado"
exit 1;; esac fichero_salida=${fichero_ppm%.ppm}.jpg pnmtojpeg $fichero_ppm >
$fichero_salida if ! [ $fichero = $fichero_ppm ]; then rm $fichero_ppm fidone
Sentencia select
La sentencia select nos permite generar fácilmente un menú simple. Su sintaxis es la siguiente:
select variable [in lista]
do Sentencias que usan $variable done
Vemos que tiene la misma sintaxis que el bucle for, excepto por la palabra select en vez de for. La sentencia
genera un menú con los elementos de lista, donde asigna un número a cada elemento, y pide al usuario que
introduzca un número. El valor elegido se almacena en variable, y el número elegido en la variable REPLY.
Una vez elegida una opción por parte del usuario, se ejecuta el cuerpo de la sentencia y el proceso se repite
en un bucle infinito. Aunque el bucle de select es infinito (lo cual nos permite volver a pedir una opción cuantas
veces haga falta), el bucle se puede abandonar usando la sentencia break. La sentencia break, al igual que en
C y Java, se usa para abandonar un bucle, y se puede usar en el caso, tanto de select, como de los bucles for,
while y until. Pero a diferencia de C y Java no sirve para abandonar la sentencia case, sino que ésta se
abandona usando los dos puntos comas ;;. El prompt que usa la función es el definido en la variable de
entorno PS3, y es habitual cambiar este prompt antes de ejecutar select para que muestre al usuario un
mensaje más descriptivo. Por defecto el valor de PS3 es #?, lo cual no es un prompt que suela gustar
- 94 -
especialmente a los usuarios.
[BASH]# mysql h host u user p
Enter password:
host y user representan el nombre del ordenador donde se está ejecutando el servidor de bases de datos
MySQL y el nombre de usuario de la cuenta que se usará para conectarse. Reemplácelos por los valores
apropiados para elcaso. Los asteriscos (********) representan la contraseña, debe ingresarse cuando mysql
muestra Enter password:.
Si todo funciona bien, se verá una información de ingreso seguida por el prompt mysql>:
[BASH]# mysql h host u user p
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL
connection id is 25338 to server version: 5.0.9betastandard Type 'help;' or '\h' for
help. Type '\c' to clear the buffer. mysql>
El prompt anuncia que mysql está listo para procesar comandos. Algunas instalaciones de MySQL permiten
conectarse como usuario anónimo (sin nombre) si el servidor se está ejecutando en el ordenador local. Si esto
sucede en su caso, deberia poder conectarse al servidor ejecutando mysql sin ningún parámetro:
[BASH]# mysql
Después de haberse conectado, puede desconectarse en cualquier momento escribiendo QUIT (o \q) en el
prompt mysql>:
mysql> QUIT
Bye
En Unix, también puede desconectarse presionando Control-D. La mayoría de los ejemplos en las secciones
siguientes asumen que ya se ha conectado al servidor. Por eso muestran el prompt mysql>.
Cerciórese de haberse conectado al servidor, tal como se describe en la sección anterior. Esto en sí mismo no
selecciona ninguna base de datos para trabajar. En este punto es más importante aprender un poco más
acerca de cómo realizar consultas que ir directamente a crear tablas, cargar datos, y recuperarlos. Esta
sección describe los principios básicos del ingreso de comandos, empleando varias consultas que puede
- 95 -
realizar para familiarizarse con la forma en que funciona mysql. Aquí tiene un comando simple que ordena al
servidor que muestre su número de versión y la fecha actual. Ingréselo a continuación del prompt mysql> y
presione Enter:
mysql> SELECT VERSION(), CURRENT_DATE;
+++
VERSION() CURRENT_DATE
+++
5.0.7betaMax 20050711
+++ 1 row in set (0.01 sec) mysql>
Un comando normalmente consiste en una sentencia SQL seguida de punto y coma. (Hay excepciones donde
el punto y coma puede omitirse. QUIT, mencionado anteriormente, es una de ellas. Luego conocerá otras.)
Cuando ingresa un comando, mysql lo envía al servidor para ser ejecutado e imprime los resultados. A
continuación muestra de nuevo el prompt mysql> para informarle que está listo para otro comando.
mysql imprime los resultados de la consulta en forma tabulada (filas y columnas). La primera fila contiene
etiquetas para las columnas. Las filas siguientes son los resultados de la consulta. Generalmente, el nombre
de cada columna es el nombre del campo que trae desde la base de datos. Si está trayendo el valor de una
expresión, en lugar del contenido de un campo o columna de una tabla (como en el ejemplo anterior), mysql
etiqueta la columna usando el texto de la expresión.
mysql informa cuántas filas fueron devueltas y cuánto tiempo le tomó ejecutarse a la consulta, lo cual da una
idea aproximada del rendimiento del servidor. Estos valores son imprecisos porque representan tiempo de
reloj corriente (no tiempo de CPU), y además porque están afectados por factores como la carga del servidor o
la latencia de red. (Para simplificar los ejemplos de este capitulo, a partir de ahora no se mostrará la línea
“rows in set”.)
Las palabras clave pueden ingresarse en cualquier combinación de minúsculas y mayúsculas. Las siguientes
consultas son equivalentes:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date; mysql> SeLeCt vErSiOn(), current_DATE;
Aqui tiene otra consulta que demuestra que mysql puede usarse como calculadora:
mysql> SELECT SIN(PI()/4), (4+1)*5;
+++
SIN(PI()/4) (4+1)5
+++
0.70710678118655 25
+++ 1 row in set (0.02 sec)
Las consultas mostradas hasta ahora han sido relativamente cortas, sentencias de una sola línea. Se puede
inclusive ingresar múltiples sentencias en una misma línea. Solamente deben separarse con punto y coma:
mysql> SELECT VERSION(); SELECT NOW();
++
VERSION()
- 96 -
++
5.0.7betaMax
++
1 row in set (0.00 sec) ++
NOW()
++
20050711 17:59:36
++ 1 row in set (0.00 sec)
No es necesario que un comando sea ingresado en una sola línea, de ese modo, comandos extensos que
requieren varias lineas no son un problema. mysql determina cuando una sentencia ha llegado a l final
observando si termina en un punto y coma, no si se llegó al final de la línea física. (En otras palabras, mysql
acepta un formato libre para las entradas: recolecta lineas pero no las ejecuta hasta que encuentra el punto y
coma.)
mysql> SELECT
> USER()
> ,
→
CURRENT_DATE;
+++
USER() CURRENT_DATE
+++
jon@localhost 20050711
+++
1 row in set (0.00 sec)
Observe en este ejemplo que el prompt cambia de mysql> a -> después que se ha ingresado la primera línea
de una consulta de múltiples líneas. Esta es la forma en que mysql advierte que no se ha completado la
sentencia y aún espera por el resto. El prompt es un aliado, puesto que suministra información valiosa. Si se
emplea, siempre se sabrá lo que mysql está esperando.
Si durante el ingreso de un comando decide que no quiere ejecutarlo, cancélelo tipeando \c:
mysql> SELECT
> USER()
> \c
mysql>
Una vez más observe el prompt. Cambia a mysql> después de que ingresa \c, informándole que mysql está
listo para un nuevo comando. La siguiente tabla muestra cada uno de los indicadores que podrá ver y sintetiza
lo que dicen acerca del estado en que se encuentra mysql:
Prompt Significado
mysql> Listo para un nuevo comando.
> Esperando la siguiente línea en un comando de múltiples líneas
- 97 -
'> Esperando la siguiente línea, se encuentra abierta una cadena que comienza con
apostrofo (''').
"> Esperando la siguiente línea, se encuentra abierta una cadena que comienza con
comillas dobles ('"').
`> Esperando la siguiente línea, se encuentra abierta una cadena que comienza con
tilde ('`').
/> Esperando la siguiente línea, se encuentra abierto un comentario que comienza con
/.
El prompt /> fue introducido en la serie 5.0 a partir de MySQL 5.0.6. Es frecuente que se origine una sentencia
de múltiples lineas cuando accidentalmente le da entrada a un comando de una sola línea pero olvida
terminarlo con punto y coma. En ese caso, mysql aguarda por más caracteres:
mysql> SELECT USER()
>
Si esto le ocurre (considera que ha ingresado una sentencia completa pero solamente obtiene un prompt ->),
la mayoría de las veces es porque mysql está esperando por el punto y coma. Si no advierte lo que el indicador
trata de decirle, podría demorar un buen tiempo en hacer lo que necesita. Ingrese un punto y coma para
completar la sentencia, y mysql la ejecutará:
mysql> SELECT USER()
> ;
++
USER()
++
joesmith@localhost
++
Los prompts '> y "> aparecen durante el ingreso de cadenas. Puede escribir cadenas delimitadas por ''' o '"'
(por ejemplo, 'hola' o "adios"), y mysql le permite ingresar cadenas divididas en múltiples líneas. Cuando ve un
prompt '> o "> significa que ha comenzado a ingresar una cadena comenzando con ''' o '"' pero no ha
ingresado el correspondiente caracter de terminación. A menudo esto significa que inadvertidamente omitió
este carácter. Por ejemplo:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
Si ingresa esta sentencia SELECT, presiona ENTER y espera por el resultado, nada ocurrirá. En lugar de
asombrarse por el tiempo que consume la consulta, note lo que el prompt '> le está diciendo. Indica que mysql
espera por el final de una cadena inconclusa. (¿Ve el error en la sentencia? La cadena 'Smith no tiene el
apóstrofo de cierre.) ¿Qué hacer llegado a este punto? Lo más simple es cancelar el comando. No obstante,
no puede simplemente tipear \c en este caso, ¡porque mysql interpretará que es parte de la cadena que está
ingresando!. En lugar de eso, tipee el caracter de cierre que falta y entonces ingrese \c.>:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c mysql>
El prompt cambia de nuevo a mysql>, informando que mysql está listo para un nuevo comando. El prompt `>
es similar a '> y "> , pero informa que está pendiente de completar un identificador delimitado por tildes. Es
importante conocer el significado de estos indicadores, ya que si por error se ingresa una cadena incompleta,
todo lo que se ingrese posteriormente será aparentemente ignorado por mysql — incluyendo el comando
- 98 -
QUIT. Esto puede ser sumamente desconcertante, en particular si no se conoce lo que debe hacer para
terminar la línea y cancelar el comando.
Una vez que se sabe la forma de ingresar comandos, es el momento de acceder a una base de datos.
Suponga que en su hogar posee varias mascotas y desea registrar distintos tipos de información sobre ellas.
Puede hacerlo si crea tablas para almacenar sus datos e introduce en ellas la información deseada. Entonces,
podrá responder una variedad de preguntas acerca de sus mascotas recuperando datos desde las tablas.
Esta sección le muestra como:
Crear una base de datos
Crear una tabla
Introducir datos en la tabla
Recuperar datos desde la tabla de varias maneras
Emplear múltiples tablas
La base de datos menagerie (en inglés significa "colección de animales") se ha hecho deliberadamente
simple, pero no es difícil imaginar situaciones del mundo real donde podría usarse un tipo similar de base de
datos. Por ejemplo, para un granjero que desee hacer el seguimiento de su hacienda, o para los registros de
los pacientes de un veterinario. En el sitio web de MySQL pueden descargarse archivos de texto con datos de
ejemplo y algunas de las sentencias empleadas en las siguientes secciones.
Mediante la sentencia SHOW se encuentran las bases de datos que existen actualmente en el servidor:
mysql> SHOW DATABASES;
++
Database
++
mysql
test
tmp
++
Probablemente la lista obtenida sea distinta en su ordenador, pero es casi seguro que tendrá las bases de
datos mysql y test. La base de datos mysql es necesaria porque es la que describe los privilegios de acceso
de los usuarios. La base de datos test se provee para que los usuarios hagan pruebas. Tenga en cuenta que si
no tiene el privilegio SHOW DATABASES, no podrá ver todas las bases de datos que hay en el servidor.
mysql> USE test
Database changed
Advierta que, al igual que QUIT, USE no necesita que ponga un punto y coma al final (aunque puede hacerlo
si lo desea). La sentencia USE tiene otra particularidad: debe escribirse en una sola linea.
Puede colocar los ejemplos siguientes en la base de datos test, si tiene acceso a ella, pero si trabaja en un
- 99 -
ambiente compartido, lo que deposite allí puede ser fácilmente borrado por alguien más que tenga el acceso.
Por este motivo, debería pedirle a su administrador permiso para usar una base de datos propia. Suponga que
quiere llamarla menagerie. El administrador necesitará ejecutar un comando como este:
mysql> GRANT ALL ON menagerie.* TO 'su_nombre_mysql'@'su_host_cliente';
mysql> CREATE DATABASE menagerie;
En ambientes Unix, los nombres de las bases de datos son case sensitive (al contrario que las palabras clave),
de modo que siempre debe referirse a su base de datos como menagerie, y no Menagerie, MENAGERIE, o
una variante similar. Esto también se aplica a los nombres de tablas.Esta restricción no existe en Windows,
aunque puede utilizar el mismo esquema de mayúsculas cuando se refiera a bases de datos y tablas en una
consulta dada. Al crear una base de datos, ésta no se selecciona para su uso, debe hacerlo explicitamente.
Para convertir a menagerie en la base de datos actual, use este comando:
mysql> USE menagerie
Database changed
Las bases de datos sólo necesitan ser creadas una sola vez, pero deben ser seleccionadas cada vez que se
inicia una sesión de mysql. Puede hacerse a través del comando USE como se muestra en el ejemplo, o
puede indicar la base de datos en la linea de comandos al ejecutar mysql. Simplemente debe indicar el
nombre de la base de datos a continuación de los parámetros que necesite ingresar. Por ejemplo:
shell> mysql h host u user p menagerie
Enter password:
mysql> SHOW TABLES;
Empty set (0.00 sec)
La parte difícil es decidir cómo debería ser la estructura de su base de datos: qué tablas necesitará, y qué
columnas habrá en cada tabla. Querrá una tabla para contener un registro por cada mascota. Esta tabla puede
- 100 -
llamarse pet, y debería contener, como mínimo, el nombre de cada animal. Dado que el nombre no es muy
relevante por sí mismo, tendría que tener más información. Por ejemplo, si más de una persona en su familia
tendrá mascotas, querrá listar también el dueño de cada animal. Y algunos otros datos descriptivos básicos,
como especie y sexo. ¿Qué hacer con la edad? Podría ser de interés, pero no es un buen dato para almacenar
en una base de datos. La edad cambia a medida que pasa el tiempo, lo cual significa que debería actualizar la
base de datos a menudo. En lugar de esto, es mejor almacenar un valor fijo, como la fecha de nacimiento. De
este modo, cada vez que requiera saber la edad, podrá calcularla como la diferencia entre la fecha de
nacimiento y la fecha actual. MySQL provee funciones para realizar cálculos con fechas, por lo que no es
dificultoso. Almacenar la fecha de nacimiento en lugar de la edad tiene otras ventajas:
Puede usar la base de datos para tareas como generar recordatorios para los próximos cumpleaños de
mascotas. (Si piensa que este tipo de consultas no es importante, considere que es lo mismo que haría en un
contexto de base de datos de negocios para identificar aquellos clientes a los que habrá que enviar una tarjeta
por su cumpleaños, para conseguir ese toque personal con la asistencia del ordenador).
Puede calcular edades en relación a otras fechas además de la actual. Por ejemplo, almacenar la fecha de
muerte de una mascota le posibilita calcular la edad que tenía a ese momento.
Probablemente pensará en otros tipos de información que resultarían útiles dentro de la tabla pet pero los
identificados hasta ahora son suficientes: name (nombre), owner (propietario), species (especie), sex (sexo),
birth (nacimiento) y death (muerte).
Debe usar la sentencia CREATE TABLE para especificar la estructura de una tabla:
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
El tipo de dato VARCHAR es una buena elección para las columnas name, owner, y species porque los datos
que allí se almacenan no son de longitud uniforme. En realidad no es necesario que todas estas columnas
tengan la misma longitud ni que ésta sea 20. En MySQL 5.0.3 y versiones posteriores, normalmente se puede
adoptar cualquier longitud entre 1 y 65535, según lo que se crea más razonable. (Nota: Anteriormente a
MySQL 5.0.3, el límite de longitud era 255.) Si en el futuro debiera aumentar la longitud de estos campos,
MySQL tiene la sentencia ALTER TABLE. Hay varios tipos de datos que podrían usarse para representar el
sexo en los registros de animales, tal como 'm' y 'f', o 'male' (masculino) y 'female' (femenino). Lo más simple
es usar los caracteres 'm' y 'f'. Es obvio el uso del tipo de dato DATE para las columnas birth y death.
Luego de crear una tabla, SHOW TABLES debería producir una salida:
mysql> SHOW TABLES;
++
Tables in menagerie
++
pet
++
Para verificar que la tabla ha sido creada en la forma esperada, utilice la sentencia DESCRIBE:
mysql> DESCRIBE pet;
- 101 -
+++++++
Field Type Null Key Default Extra
+++++++
DESCRIBE puede ser utilizada en cualquier momento, por ejemplo, si olvida los nombres o el tipo de dato de
las columnas de la tabla.
Dado que está comenzando con una tabla vacía, una forma fácil de completarla es creando un fichero de texto
que contenga una línea por cada animal, y luego insertando el contenido del fichero en la tabla mediante una
sola sentencia. Para esto, debería crear un fichero de texto llamado pet.txt, conteniendo un registro por linea,
con cada valor separado por un carácter de tabulación, y dispuestos en el orden en el cual se especificaron las
columnas en la sentencia CREATE TABLE. Para valores ausentes (como sexo desconocido o fechas de
muerte de animales con vida), puede usar valores NULL. Para representar estos valores en el archivo de texto,
utilice \N (barra diagonal y N mayúscula). Por ejemplo, el registro de Whistler se vería del modo siguiente (el
espacio en blanco entre cada valor es un solo carácter de tabulación):
Para cargar el fichero pet.txt dentro de la tabla pet, utilice este comando:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
Si trabaja en Windows, con un editor que emplea \r\n (retorno de carro + nueva linea) como caracteres de fin
de línea, debería usar:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
> LINES TERMINATED BY '\r\n';
- 102 -
(En un ordenador Apple bajo OS X, probablemente quiera utilizar LINES TERMINATED BY '\r'.)
Opcionalmente puede especificar en la sentencia LOAD DATA los caracteres que actuarán como separador
de campo y fin de línea, pero los valores por defecto son tabulación y nueva línea. Estos son suficientes para
que la sentencia lea correctamente el fichero pet.txt Cuando lo que desea es agregar nuevos registros de a
uno por vez, la sentencia INSERT resulta de utilidad. De esta sencilla manera, se suministran valores para
cada columna, dispuestos en el orden en el cual se especificaron las columnas en la sentencia CREATE
TABLE statement. Suponga que Diane obtiene un nuevo hamster llamado "Puffball". Se podría agregar un
nuevo registro, usando la sentencia INSERT de este modo:
mysql> INSERT INTO pet
> VALUES ('Puffball','Diane','hamster','f','19990330',NULL);
Observe que las cadenas alfanuméricas y las fechas son representados como cadenas delimitadas por
apóstrofos. También, con INSERT, se pueden insertar valores NULL directamente, para indicar un valor
ausente. No se debe utilizar \N como se hace con LOAD DATA. A partir de este ejemplo queda demostrado
que lleva mucho más trabajo realizar una carga inicial de registros empleando varias sentencias INSERT que
si se hace mediante la sentencia LOAD DATA.
mysql> INSERT INTO pet
> VALUES ('Puffball','Diane','hamster','f','19990330',NULL);
seleccionar_esto es lo que se quiere ver. Puede ser una lista de columnas, o para indicar “todas las
columnas.” desde_tabla indica la tabla donde están los datos a recuperar. La cláusula WHERE clause is
optional. es opcional. Si está presente, condiciones representa las condiciones que cada registro debe cumplir
para retornar como resultado.
mysql> SELECT * FROM pet;
+++++++
name owner species sex birth death
+++++++
Esta forma de SELECT es útil si se quiere revisar la tabla completa, por ejemplo, despues de haberla cargado
- 103 -
con un conjunto de datos inicial. Por ejemplo, puede ocurrir que la fecha de nacimiento de Bowser no parezca
correcta. Consultando los papeles de pedigri, se descubre que el año correcto de nacimiento es 1989, no
1979.
Editando el fichero pet.txt para corregir el error, vaciando la tabla y volviendola a llenar con los datos. Para esto
se usan las sentencias DELETE y LOAD DATA:
mysql> DELETE FROM pet;
mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet;
UPDATE modifica solo el registro en cuestión y no requiere que se vuelva a llenar la tabla.
mysql> SELECT * FROM pet WHERE name = 'Bowser';
+++++++
name owner species sex birth death
+++++++
salida confirma que el año fue correctamente registrado como 1989, ya no es 1979. Normalmente, las
comparaciones de cadenas no son case sensitive, por eso puede escribir el nombre como 'bowser',
'BOWSER', etc. El resultado de la consulta será el mismo. Se pueden indicar condiciones a cumplir por
cualquier columna, no solamente por name. Por ejemplo, si quisiera saber qué animales han nacido luego de
1998, necesita evaluar la columna birth:
mysql> SELECT * FROM pet WHERE birth > '199811';
+++++++
name owner species sex birth death
+++++++
- 104 -
Puffball Diane hamster f 19990330 NULL
+++++++
mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
+++++++
name owner species sex birth death
+++++++
La consulta anterior emplea el operador lógico AND. También existe el operador OR:
mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
+++++++
name owner species sex birth death
+++++++
AND and OR pueden ser combinadas, si bien AND tiene mayor precedencia que OR. Si utiliza ambos
operadores, es buena idea emplear paréntesis para indicar explicitamente la forma en que las condiciones
deben agruparse:
mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
> OR (species = 'dog' AND sex = 'f'); +++++
++
name owner species sex birth death
+++++++
mysql> SELECT name, birth FROM pet;
+++
name birth
+++
Fluffy 19930204
Claws 19940317
Buffy 19890513
Fang 19900827
Bowser 19890831
Chirpy 19980911
- 105 -
Whistler 19971209
Slim 19960429
Puffball 19990330
+++
mysql> SELECT owner FROM pet;
++
owner
++
Harold
Gwen
Harold
Benny
Diane
Gwen
Gwen
Benny
Diane
++
Observe que esta sentencia retorna el campo owner de cada registro, y algunos de ellos aparecen más de una
vez. Para reducir la salida, recupere solamente una vez cada registro repetido, agregando la palabra clave
DISTINCT:
mysql> SELECT DISTINCT owner FROM pet;
++
owner
++
Benny
Diane
Gwen
Harold
++
Puede emplearse una clásula WHERE para combinar la selección de ciertas filas y de ciertas columnas. Por
ejemplo, para obtener únicamente la fecha de nacimiento de perros y gatos, ejecute esta consulta:
mysql> SELECT name, species, birth FROM pet
> WHERE species = 'dog' OR species = 'cat';
++++
name species birth
++++
- 106 -
Ordenar registros
Quizá advirtió, en los ejemplos anteriores, que las filas resultantes se mostraron sin ningún orden en particular.
A menudo es más fácil examinar la salida de una consulta cuando las filas se ordenan de algún modo
significativo. Para ordenar un resultado, se usa la clásula ORDER BY.
Aqui tiene las fechas de cumpleaños de los animales, ordenadas por fecha:
mysql> SELECT name, birth FROM pet ORDER BY birth;
+++
name birth
+++
Buffy 19890513
Bowser 19890831
Fang 19900827
Fluffy 19930204
Claws 19940317
Slim 19960429
Whistler 19971209
Chirpy 19980911
Puffball 19990330
+++
Por lo general, cuando se trata de columnas de tipo carácter, la ordenación, — al igual que otras operaciones
de comparación — no es case-sensitive. Significa que el orden permanece indefinido para las columnas que
son idénticas excepto por sus mayúsculas y minúsculas. Puede no obstante forzar a que una columna se
ordene en forma sensible a mayúsculas empleando el modificador BINARY: ORDER BY BINARY columna. El
sentido de ordenación, por defecto, es ascendente, con los valores más pequeños primero. Para ordenar en
sentido inverso (descendente), agregue la palabra clave DESC luego del nombre de la columna por la que
ordena:
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+++
name birth
+++
Puffball 19990330
Chirpy 19980911
Whistler 19971209
Slim 19960429
Claws 19940317
Fluffy 19930204
Fang 19900827
Bowser 19890831
Buffy 19890513
+++
Puede ordenar basándose en varias columnas, y cada columna en un sentido diferente. Por ejemplo, para
ordenar por tipo de animal en sentido ascendente y, dentro de cada tipo, ordenar por nacimiento en sentido
descendente (los animales más jóvenes primero) utilice la siguiente consulta:
mysql> SELECT name, species, birth FROM pet
> ORDER BY species, birth DESC; ++++
- 107 -
name species birth
++++
Advierta que la palabra clave DESC se aplica sobre la columna inmediatamente anterior (birth); no afecta el
sentido de ordenación de la columna species.
mysql> SELECT name, birth, CURDATE(),
> (YEAR(CURDATE())YEAR(birth))
> (RIGHT(CURDATE(),5)<RIGHT(birth,5))
> AS age
> FROM pet;
+++++
name birth CURDATE() age
+++++
En el ejemplo anterior, YEAR() trae la parte correspondiente al año de una fecha, y RIGHT() trae los 5
primeros caracteres contando desde la derecha, que representan la parte MM-DD de la fecha. La porción de
la expresión que compara los valores MM-DD devuelve 1 o 0, lo cual se corresponde con la diferencia de 1
año a restar de la edad si el dia de la fecha devuelto por CURDATE() ocurre antes que la fecha de nacimiento
birth. La expresión completa es un tanto confusa para usar como encabezado, por lo que se emplea un alias
(age) para que el encabezado sea más comprensible. La consulta funciona bien, pero los resultados podrían
revisarse más fácilmente si las filas se presentaran en algún orden. Esto puede hacerse agregando la cláusula
- 108 -
ORDER BY name para ordenar por nombre la salida:
mysql> SELECT name, birth, CURDATE(),
> (YEAR(CURDATE())YEAR(birth)) > (RIGHT(CURDATE(),5)<RIGHT(birth,5)) > AS age >
FROM pet ORDER BY name; +++++
name birth CURDATE() age
+++++
Para ordenar la salida por edad (age) en lugar de por nombre (name), solo hay que utilizar una cláusula
ORDER BY diferente:
mysql> SELECT name, birth, CURDATE(),
> (YEAR(CURDATE())YEAR(birth))
> (RIGHT(CURDATE(),5)<RIGHT(birth,5))
> AS age
> FROM pet ORDER BY age;
+++++
name birth CURDATE() age
+++++
Una consulta similar se utiliza para determinar la edad a la fecha de muerte de los animales. Se determinan los
animales que han muerto verificando si el valor de la columna death es NULL. Entonces, para todos los
valores no NULL calcula la diferencia entre las fechas de muerte (death) y nacimiento (birth):
mysql> SELECT name, birth, death,
> (YEAR(death)YEAR(birth)) – (RIGHT(death,5)<RIGHT(birth,5))
> AS age
> FROM pet WHERE death IS NOT NULL ORDER BY age;
+++++
name birth death age
+++++
La consulta utiliza la expresión death IS NOT NULL en lugar de death <> NULL porque NULL es un valor
- 109 -
especial, que no puede ser comparado mediante los operadores lógicos habituales . ¿Qué tal si se quisiera
saber qué animales cumplen años el próximo mes? Para esta clase de cálculos, el año y el día son
irrelevantes; simplemente se desea extraer de la columna birth la parte correspondiente al mes. MySQL
cuenta con varias funciones para extraer partes de fechas, como YEAR(), MONTH(), y DAYOFMONTH().
MONTH() es la función apropiada para este caso. Para verla en funcionamiento, ejecute una consulta que
muestra tanto el valor de birth como el de MONTH(birth):
mysql> SELECT name, birth, MONTH(birth) FROM pet;
++++
name birth MONTH(birth)
++++
Fluffy 19930204 2
Claws 19940317 3
Buffy 19890513 5
Fang 19900827 8
Bowser 19890831 8
Chirpy 19980911 9
Whistler 19971209 12
Slim 19960429 4
Puffball 19990330 3
++++
Encontrar los animales que cumplen años el mes siguiente es también sencillo. Suponga que el mes actual es
abril. De modo que su número es 4, y se buscan los animales nacidos en Mayo (mes 5), de esta forma:
mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+++
name birth
+++
Buffy 19890513
+++
Esto se complica ligeramente cuando el mes actual es Diciembre. No se puede simplemente sumarle 1 al
número del mes (12) y buscar animales nacidos en el mes 13, porque no existe tal mes. En lugar de eso, se
debe buscar por animales nacidos en Enero (mes 1). Se puede incluso escribir la consulta de forma que
funcione sin importar cual es el mes actual. Así, no se necesitará indicar un mes en particular en la consulta.
DATE_ADD() sirve para sumar un intervalo de tiempo a una fecha dada. Si se adiciona un mes al valor de
CURDATE(), y se extrae el mes mediante MONTH(), el resultado será el mes en el que se buscarán
cumpleaños:
- 110 -
Enero (1).
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+++++
1 = NULL 1 <> NULL 1 < NULL 1 > NULL
+++++
Claramente, no se obtienen valores significativos a partir de estas comparaciones. Use en su lugar los
operadores IS NULL y IS NOT NULL:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+++
1 IS NULL 1 IS NOT NULL
+++
0 1
+++
Observe que en MySQL, 0 o NULL se intepretan como falso, y cualquier otro valor, como verdadero. El valor
por defecto para una operación booleana es 1. Este tratamiento especial de NULL es debido a que, en la
sección anterior, fue necesario determinar qué animales ya no estaban vivos utilizando death IS NOT NULL en
lugar de death <> NULL. Dos valores NULL son considerados iguales por la cláusula GROUP BY. Cuando se
realiza un ORDER BY, los valores NULL se presentan en primer lugar si se emplea ORDER BY ... ASC, y al
final si se ordena con ORDER BY ... DESC. Un error muy común cuando se trabaja con valores NULL es
asumir que es imposible insertar un valor cero o una cadena vacía en una columna definida como NOT NULL,
pero no es así. Los mencionados son efectivamente valores, mientras que NULL significa "no hay un valor".
Puede comprobar esto fácilmente empleando IS [NOT] NULL como se muestra aquí:
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+++++
0 IS NULL 0 IS NOT NULL '' IS NULL '' IS NOT NULL
+++++
0 1 0 1
+++++
Por lo tanto, es totalmente posible insertar cadenas vacias o ceros en columnas marcadas como NOT NULL,
ya que son valores NOT NULL
- 111 -
Coincidencias de patrones
MySQL posee capacidades estándar para utilizar patrones así como también una forma de patrones basada
en expresiones regulares extendidas similares a las que se encuentran en utilidades de UNIX, como ser vi,
grep, y sed. Los patrones SQL permiten emplear el caracter '_' para representar coincidencia con un carácter
individual y '%' En MySQL, por defecto, los patrones SQL no son case-sensitive. Abajo se muestran algunos
ejemplos. Advierta que no se emplean los operadores = o <> para trabajar con patrones SQL, en lugar de eso
se usan los operadores de comparación LIKE o NOT LIKE.
mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+++++++
name owner species sex birth death
+++++++
mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+++++++
name owner species sex birth death
+++++++
mysql> SELECT * FROM pet WHERE name LIKE '%w%';
+++++++
name owner species sex birth death
+++++++
Para encontrar nombres que contengan exactamente 5 caracteres, use 5 veces el caracter patrón '_':
mysql> SELECT * FROM pet WHERE name LIKE '_____';
+++++++
name owner species sex birth death
+++++++
- 112 -
Los otros patrones que pueden emplearse con MySQL usan expresiones regulares extendidas. Cuando
busque coincidencias con este tipo de patrones, use los operadores REGEXP y NOT REGEXP (o bien los
sinónimos RLIKE y NOT RLIKE).
Una clase de carácter '[...]' detecta coincidencia con cualquier caracter entre los corchetes. Por ejemplo, '[abc]'
coincidirá con 'a', 'b', o 'c'. Para hacer referencia a un rango de caracteres, use un guión. '[a-z]' detecta
coincidencia con cualquier letra, mientras que '[0-9]' lo hace con cualquier dígito.
'*' detecta coincidencia con cero o más apariciones de los caracteres que lo preceden. Por ejemplo, 'x' detecta
cualquier número de caracteres 'x', '[0-9]' detecta cualquier cantidad de dígitos, y '.' coincidirá con cualquier
número de cualquier carácter.
REGEXP tendrá éxito si el patrón suministrado encuentra coincidencia en cualquier parte del valor examinado
(esto difiere de LIKE en que este último solo tiene éxito si el patrón concuerda con todo el valor).
Para lograr que un patrón detecte coincidencias solamente al principio o al final del valor examinado, utilice '^'
al principio o '$' al final del patrón.
Para demostrar el funcionamiento de las expresiones regulares extendidas, las consultas con LIKE expuestas
anteriormente se han reescrito utilizando REGEXP. Para hallar nombres que comiencen con 'b', use '^' para
buscar coincidencia al principio del valor:
mysql> SELECT * FROM pet WHERE name REGEXP '^b';
+++++++
name owner species sex birth death
+++++++
En MySQL 5.0, si realmente quiere forzar a que la comparación realizada por REGEXP sea case sensitive,
utilice la palabra clave BINARY para convertir a una de las cadenas en una cadena binaria. Esta consulta
solamente encontrará coincidencia con 'b' minúsculas al comienzo de un nombre:
mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
Para hallar nombres finalizados en 'fy', emplee '$' para buscar la coincidencia en el final del nombre:
mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
+++++++
name owner species sex birth death
+++++++
- 113 -
Para encontrar nombres conteniendo una 'w', utilice esta consulta:
mysql> SELECT * FROM pet WHERE name REGEXP 'w';
+++++++
name owner species sex birth death
+++++++
Debido a que un patrón de expresión regular encuentra coincidencia sin importar el lugar del valor donde se
produce, en la consulta previa no es necesario colocar un comodín a cada lado del patrón para obtener
coincidencia en cualquier parte del valor, como hubiera sucedido de utilizar un patrón SQL Para hallar
nombres conteniendo exactamente cinco caracteres, use '^' y '$' para obligar a que la coincidencia deba estar
al principio y al final del nombre, y cinco instancias de '.' entre ellas.
mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
+++++++
name owner species sex birth death
+++++++
La consulta anterior también se podría haber escrito empleando el operador '{n}' “repetir-n-veces”:
mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
+++++++
name owner species sex birth death
+++++++
Contar registros
Una pregunta frecuente que deben responder las bases de datos es: “¿qué tan a menudo aparece en la tabla
un cierto tipo de dato?” Por ejemplo, se podría querer averiguar la cantidad de mascotas de que se dispone, o
cuantas mascotas tiene cada propietario, o varios otros recuentos sobre los animales. Contar la cantidad total
de animales es la misma pregunta que “¿cuántos registros hay en la tabla pet?”, ya que hay un registro por
mascota. COUNT() cuenta el número de filas, por ello, la consulta para contar animales luce así:
mysql> SELECT COUNT(*) FROM pet;
++
COUNT()
++
- 114 -
++
Anteriormente se recuperaban los nombres de la gente que poseía mascotas. Se puede usar COUNT() para
hallar cuantas mascotas tiene cada propietario:
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
+++
owner COUNT()
+++
Benny 2
Diane 2
Gwen 3
Harold 2
+++
Observe el uso de GROUP BY para agrupar todos los registros de cada propietario. Sin dicha cláusula, todo lo
que se hubiera obtenido sería un mensaje de error:
mysql> SELECT owner, COUNT(*) FROM pet;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP
columns is illegal if there is no GROUP BY clause
COUNT() y GROUP BY son útiles para presentar datos en varias formas. Los siguientes ejemplos muestran
diferentes operaciones: Cantidad de animales por especies:
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
+++
species COUNT()
+++
bird 2
cat 2
dog 3
hamster 1
snake 1
+++
mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
+++
sex COUNT()
+++
NULL 1
f 4
m 4
+++
(En esta salida, NULL indica "sexo desconocido") Cantidad de animales por combinación de especies y sexo:
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
++++
species sex COUNT()
- 115 -
++++
bird NULL 1
bird f 1
cat f 1
cat m 1
dog f 1
dog m 2
hamster f 1
snake m 1
++++
mysql> SELECT species, sex, COUNT(*) FROM pet
> WHERE species = 'dog' OR species = 'cat'
> GROUP BY species, sex;
++++
species sex COUNT()
++++
cat f 1
cat m 1
dog f 1
dog m 2
++++
O si desea la cantidad de animales de cada sexo contando solamente los que tienen sexo conocido:
mysql> SELECT species, sex, COUNT(*) FROM pet
> WHERE sex IS NOT NULL
> GROUP BY species, sex;
++++
species sex COUNT()
++++
bird f 1
cat f 1
cat m 1
dog f 1
dog m 2
hamster f 1
snake m 1
++++
Un campo con el nombre de la mascota para saber a quien pertenece cada evento registrado.
La fecha en que ocurrió el evento.
Un campo con la descripción del evento.
Un campo con el tipo de evento, a fin de poder clasificarlo.
- 116 -
Teniendo en cuenta estas consideraciones, la sentencia CREATE TABLE para la tabla event ("eventos", en
inglés) podría ser así:
mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
> type VARCHAR(15), remark VARCHAR(255)); }}} Como se hizo con la tabla pet, es más
fácil realizar la carga inicial de datos si se crea un archivo de texto delimitado con
tabulaciones que contenga la información a agregar:
name date type remark
Fluffy 15/05/95 litter 4 kittens, 3 female, 1 male
Buffy 19930623 litter 5 puppies, 2 female, 3 male
Buffy 19940619 litter 3 puppies, 3 female
Chirpy 19990321 vet needed beak straightened
Slim 19970803 vet broken rib
Bowser 19911012 kernnel
Fang 19911012 kernnel
Fang 28/08/98 birthday Gave him a new chew toy
Claws 19980317 birthday Gave him a new flea collar
Whistler 19981209 birthday First birthday
mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;
Con base en lo que se ha aprendido a partir de las consultas efectuadas sobre la tabla pet, se debería poder
recuperar registros de la tabla event; los principios son los mismos. Pero en un momento dado la tabla event
por sí sola es insuficiente para responder las preguntas que pueden formularse. Suponga que se desea saber
a qué edad tuvo sus crías cada mascota. Anteriormente se aprendió a calcular edades a partir de dos fechas.
La fecha en que la mascota tuvo sus crias está en la tabla event, pero para calcular su edad, se necesita su
fecha de nacimiento, la cual está localizada en la tabla pet. Esto significa que la consulta requiere ambas
tablas:
mysql> SELECT pet.name,
> (YEAR(date)YEAR(birth)) (RIGHT(date,5)<RIGHT(birth,5)) AS age,
> remark
> FROM pet, event
> WHERE pet.name = event.name AND event.type = 'litter';
++++
name age remark
++++
Fluffy 2 4 kittens, 3 female, 1 male
Buffy 4 5 puppies, 2 female, 3 male
Buffy 5 3 puppies, 3 female
++++
La cláusula FROM menciona dos tablas porque la consulta necesita traer datos de ambas
Cuando se combina (también se denomina join -unión, en inglés-) información desde múltiples tablas, se
necesita indicar qué registro de una tabla se combinará con qué registro de la otra. Esto es sencillo porque
ambas tablas tienen una columna name. La consulta emplea la cláusula WHERE para hacer coincidir registros
de las dos tablas basándose en el valor de name.
Dado que la columna name aparece en ambas tablas, se debe especificar a cuál tabla pertenece la columna al
hacer referencia a ella. Esto se hace anteponiendo el nombre de la tabla al nombre de la columna.
- 117 -
No es necesario tener dos tablas diferentes para establecer una unión. A veces es útil combinar una tabla
consigo misma, si se desea comparar entre sí registros de una misma tabla. Por ejemplo, para formar parejas
de mascotas para reproducción, podría unir la tabla pet consigo misma para generar pares de animales
macho y hembra de la misma especie:
mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
> FROM pet AS p1, pet AS p2 > WHERE p1.species = p2.species AND p1.sex = 'f' AND
p2.sex = 'm'; ++++++
name sex name sex species
++++++
En la consulta anterior se especificaron alias para la tabla con el fin de indicar a qué instancia de la tabla
pertenece cada columna referenciada.
El sistema de ventanas X (en inglés X Window System) fue desarrollado a mediados de los años 1980 en el
MIT para dotar de una interfaz gráfica a los sistemas Unix. Este protocolo permite la interacción gráfica en red
entre un usuario y una o más computadoras haciendo transparente la red para éste. Generalmente se refiere a
la versión 11 de este protocolo, X11, el que está en uso actualmente. X es el encargado de mostrar la
información gráfica y es totalmente independiente del sistema operativo. El sistema de ventanas X distribuye el
procesamiento de aplicaciones especificando enlaces cliente-servidor. El servidor provee servicios para
acceder a la pantalla, teclado y ratón, mientras que los clientes son las aplicaciones que utilizan estos recursos
para interacción con el usuario. De este modo mientras el servidor se ejecuta de manera local, las aplicaciones
pueden ejecutarse remotamente desde otras máquinas, proporcionando así el concepto de transparencia de
red. Debido a este esquema cliente-servidor, se puede decir que X se comporta como una terminal gráfica
virtual. El hecho que exista un estándar definido para X permite que se desarrollen servidores X para distintos
sistemas operativos y plataformas, lo que hace que el código sea muy portable. Por ejemplo. permite tener
clientes X ejecutándose en un potente servidor UNIX mientras los resultados son visualizados en una PC de
escritorio con cualquier otro sistema operativo funcionando. La comunicación entre el cliente X y el servidor se
realiza por medio de un protocolo conocido como Xprotocol (Protocolo base del sistema X Window), que
consiste en una serie de bytes interpretados como comandos básicos para generar ventanas, posicionarlas, o
controlar eventos. Los clientes X acceden al Xprotocol mediante el uso de una biblioteca llamada Xlib, que
evita al programador de clientes X tener que lidiar con el código binario del Xprotocol. Sin embargo, los
aspectos de decoración de ventana y manejos de ventanas no están definidos en esta biblioteca. X NO ES UN
gestor de ventanas, necesita de uno para controlar el manejo de ventanas. Esto trae la ventaja de que permite
al usuario instalar el administrador de ventanas que más le agrade, e incluso tener varios instalados eligiendo
el más apropiado a la hora de acceder a X. También trae la ventaja de que hace de X estrictamente un
sistema gráfico, de tal modo que un cliente X podría estar enviando un gráfico a una pantalla, a una impresora
- 118 -
o a cualquier otro hardware sin darse cuenta, flexibilizando la salida gráfica. Por otro lado, la desventaja que
trae el hecho de no tener un único gestor de ventanas es que los programadores de clientes X que desean
hacer uso de los recursos de los gestores de ventanas (botones, barras de deslizamientos, etc) deben elegir
un gestor de ventanas específico para programar y contar que el usuario tenga por los menos las bibliotecas
de dicho gestor de ventanas instalado. Las bibliotecas de los gestores de ventanas se conocen como
"Toolkits", el estándar X provee sólo de un conjunto de herramientas básicas llamadas Xintrisics que permiten
a los programadores de los gestores de ventanas armar sus Toolkits sobre éstas.
[BASH] # yum install xorgx11
[BASH] # aptget install xwindowsystem
Lo primero que tenemos que hacer es recopilar la información necesaria, para la correcta configuración del
servidor gráfico Xorg
Especificaciones del monitor
Chip y cantidad de memoria de la tarjeta gráfica (vídeo)
Especificaciones del ratón
Especificaciones del teclado
Especificaciones del monitor
Usaremos las especificaciones del monitor para determinar la resolución y frecuencia de refresco a la que
funcionara. Dichas especificaciones vienen en la documentación del monitor, o bien la obtenemos desde la
web del fabricante.
Frecuencia de refresco horizontal
Frecuencia de refresco vertical
Resolución máxima.
Con esta información sabemos como hemos de configurar nuestro monitor para no dañarlo o quemarlo.
- 119 -
El chip de la tarjeta gráfica también llamada tarjeta de vídeo, define que controlador utilizaremos para que
funcione correctamente.
La memoria de la tarjeta gráfica determina la resolución máxima y la profundidad de color máxima con la que
el sistema puede trabajar.
Las especificaciones del ratón son muy fáciles, basta con observar dicho ratón para saber:
Las especificaciones del teclado al igual que las del ratón, con observar dicho teclado conocemos la
información:
Fichero xorg.conf
La configuración del servidor gráfico xorg se encuentra en el fichero xorg.conf, en la siguiente ruta:
/etc/X11
Y se encuentra dividido en las siguientes secciones:
Section "Files" Ruta o path de los archivos
Section "Modules" Carga módulos dinámicos
Section "InputDevice" Descripción de los dispositivos periféricos
Section "Device" Descripción de los dispositivos gráficos
Section "Monitor" Descripción del monitor
Section "Screen" Configuración de la pantalla
Section "ServerLayout" Esquema global
Cada sección comienza con la instrucción Section seguido del nombre de la "sección entre comillas" las
opciones, driver, etc.. y terminada con EndSection.
Seccion “Files”
- 120 -
Esta sección define la ruta de archivos necesarios para levantar el servidor X.
Section “Files”
RgbPath “/usr/lib/X11/rgb”
EndSection
Seccion “Modules”
La sección Module especifica que módulos cargará el servidor gráfico X, dichos módulos añaden
funcionalidad adicional al servidor X.
Section “Module”
Load “dbe” Load “extmod” Load “type1” Load “freetype” Load “glx”
EndSection
Seccion “InputDevice”
Cada sección InputDevice configura un dispositivo de entrada para el servidor X. Los sistemas Xorg tienen
mínimo dos secciones InputDevice:
Un Mouse
Un Teclado
Configuracion tipica de un mouse
Ejemplo:
Section “InputDevice”
Identifier “Mouse0” Driver “mouse” Option “Protocol” “Auto” Option “Device”
“/dev/psaux” Option “Emulate3Buttons” “no” Option “ZaxisMapping” “4 5”
EndSection
Identifier: Especifica un nombre para esta sección
Driver: Especifica el controlador que debe cargar para el correcto funcionamiento del ratón. "mouse": soporta
cuatro tipos de mouse:
Serial
Bus
PS/2
USB
- 121 -
"ImPS/2"
"ExplorerPS/2"
"MouseMan"
"Microsoft"
"Mousesystems"
"IntelliMouse"
"ThinkingMouse"
"ThinkingMousePS/2"
"NetScrollPS/2"
"NetMousePS/2"
"GlidePoint"
"GlidePointPS/2"
"MouseManPlusPS/2"
NOTA:
Los mouse seriales antiguos de dos o tres botones estan normalmente soportados por el protocolo "Microsoft"
o "MouseMan"
Los mouse seriales con rueda los soporta el protocolo "IntelliMouse"
Los mouse PS/2 los soporta el protocolo "ImPS/2"
El protocolo "auto" se usa siempre que este es capaz de detectar el mouse.
CorePointer: Indica que el ratón definido es el mouse principal
Device: Indica la ubicación del dispositivo físico (donde se encuentra conectado), las opciones son las
siguientes:
/dev/input/mice (conectado al puerto USB)
/dev/psaux (conectado al puerto PS/2)
/dev/ttyS0 (conectado al puerto Serial 0)
/dev/ttyS1 (conectado al puerto Serial 1)
Emulate3Buttoms: Especifica si un mouse de dos botones se comporte como uno de tres
botones, cuando se presionen ambos botones simultáneamente.
Section “InputDevice”
Identifier “Generic Keyboard” Driver “kbd” Option “CoreKeyboard” Option “XkbRules”
“xorg” Option “XkbModel” “pc105” Option “XkbLayout” “es” EndSection
Identifier: Especifica un nombre para esta sección.
Driver: Especifica el controlador que debe cargar para el correcto funcionamiento del teclado.
- 122 -
CoreKeyboard: Especifica que es el teclado principal
"pc101"
"pc102"
"pc104"
"pc105"
"microsoft"
XkbLayout: Especifica el lenguaje que usaremos, "es" (español), "us" (ingles)
Seccion “Device”
Ejemplo:
Section “Device”
Identifier “Device0” Driver “nvidia” VendorName “NVIDIA Corporation” Option
“RenderAccel” “true” Option “AllowGLXWithCompisite” “true” Option “dpms” EndSection
Identifier: Especifica un nombre para esta sección.
Driver: Especifica el controlador que debe cargar para el correcto funcionamiento del vídeo.
BusID: Este parámetro es opcional, especifica el bus en el que se encuentra conectada la tarjeta gráfica, Esta
opción únicamente es necesaria para sistema con múltiples tarjetas gráficas.
Screen: Este parámetro es opcional, especifica que conector del monitor en la tarjeta gráfica configura la
sección Device. Esta opción en muy útil solamente para tarjetas con múltiples conectores.
Si dos monitores o mas son conectados en diferentes conectores en la misma tarjeta gráfica, deben existir en
xorg.conf secciones Device separadas y cada una de estas secciones debe tener un valor Screen diferente.
Los valores para la entrada Screen debe ser enteros. El primer conector de la tarjeta de vídeo tiene el valor 0.
El valor para cada conector adicional incrementa este valor en uno.
Option "nombre_opción": Este parámetro es opcional. Reemplace "nombre_opción" con una de las opciones
listadas para esta sección en la pagina man de xorg.conf
Una de las opciones mas habituales es "dpms" (Display Power Management Signalling), se usa para activar el
estado de ahorro de energía del monitor.
- 123 -
Seccion “Monitor”
Ejemplo:
Section “Monitor”
Identifier “Acer X203W” Option “DPMS” HorizSync 3083 VertRefresh “5575” EndSection
Identifier: Especifica un nombre para esta sección. Puede existir varias secciones
"Monitor" en el archivo xorg.conf, cada una con diferente identificación (Identifier),
esto es causado porque disponemos de dos o mas monitores conectados al ordenador.
HorizSync: Especifica la frecuencia de barrido horizontal del monitor, expresado en kHz. Puede ser una
frecuencia fija (30.5), multiples frecuencias fijas (30.5, 35.8), un rango (30-110), o varios rangos (15-25, 30-
64)
VertRefresh: Especifica la frecuencia de barrido vertical del monitor, expresado en Hz, los valores son iguales
a la opción HorizSync.
Seccion “Screen”
Esta sección es la que va a definir la pantalla, vinculando una tarjeta gráfica (Device) con la sección "Monitor"
Ejemplo:
Section “Screen”
Identifier “Default Screen” Device “nvidia geforce mx400” Monitor “AcerX203W”
DefaultDepth 24 Options “AddARGBGLXvVisuals” “True” Subseccion “Display” Depth 1 Modes
“1600x1050” ”1200x1024” ”1024x768” ”800x600” “640X400” Subseccion “Display” Depth 4
Modes “1600x1050” ”1200x1024” ”1024x768” ”800x600” “640X400” Subseccion “Display” Depth
8 Modes “1600x1050” ”1200x1024” ”1024x768” ”800x600” “640X400” Subseccion “Display”
Depth 15 Modes “1600x1050” ”1200x1024” ”1024x768” ”800x600” “640X400” Subseccion
“Display” Depth 16 Modes “1600x1050” ”1200x1024” ”1024x768” ”800x600” “640X400”
Subseccion “Display” Depth 24 Modes “1600x1050” ”1200x1024” ”1024x768” ”800x600”
“640X400” EndSection
Monitor: Especifica el nombre único de una sección "Monitor" existente en fichero xorg.conf
Observación: las entradas "Device y Monitor" tienen que tener el mismo valor que la entrada "Identifier" de las
secciones "Device" y "Monitor". De esta manera se entrelazan las configuraciones de las diferentes secciones.
SubSection "Display": Especifica los modos disponibles de la pantalla para una profundidad de color en
particular.
- 124 -
Observación: Una sección "Screen" puede tener múltiples subsecciones "Display", pero debe existir al menos
una para la profundidad de color especificada en la entrada "DefaultDepth"
Depth: Especifica la profundidad de color de la subsección, los valores posibles son: 1, 4, 8, 15, 16 y 24 bits
Modes: Especifica las resoluciones que podremos visualizar según nuestro monitor. Puede especificarse una
sola resolución "1680x1050" (si sabemos que nuestro monitor la soporta), o un listado de estas: "1680x1050"
"1280x1024" "1024x768" "800x600" "640x480". Por defecto se usa la primera en la lista, siempre que este
soportada por nuestro monitor, si no se usa la siguiente, y asi hasta la ultima resolución que tengamos listada.
Nota: Dependiendo de nuestro monitor y tarjeta grafica (si son de gama "media baja" o inferior), puede darse
los siguientes casos:
Seccion “ServerLayaout”
Esta sección es la que vincula los dispositivos de entrada y salida que controla el servidor xorg.
Como mínimo, esta sección debe especificar un dispositivo de salida (monitor) y al menos dos de entrada ( un
teclado y un ratón)
En Particular esta sección junta todos los identificadores "Identifier" de cada sección.
Section “ServerLayout”
Identifier “Default Layout” Screen “Default Screen” InputDevice “Generic Layout”
InputDevice “Configured Mouse” EndSection
Screen: Especifica el nombre de la sección "Screen" a ser usado por el servidor xorg. Pueden estar presente
más de una opción "Screen"
Tareas Administrativas
En este capitulo abodaremos temas como son la creacion, eliminacion, suspencion y cambio en las cuentas
de usuario del sistema, tambien aprenderemos a crear y eliminar grupos, y por ultimo estudiaremos la manera
- 125 -
de cambiar el grupo al cual pertenece un usuario y anexarlo a otro. Comenzaremos hablando de los ficheros
directamente relacionados con las cuentas de los usuarios y la funcion que estos desempeñan.
Fichero /etc/passwd
Este fichero almancena datos sobre las cuentas de usuario del sistema, dichos datos se encuentran
organizados linea a linea, de las cuales cada una corresponde a un usuario. Tambien puede encontrar en este
fichero algunos servicios del sistema como son , el servidor web o el de correo. Cada una de estas lineas se
encuentra formada por 7 campos los cuales se encuentran separadpos por el operador
:
Los campos de los cuales hablamos son conformados por los siguientes parametros
UserName
1 X
2 UserID
3 GroupID
4 UserInfo
5 HomeDir
6 Shell
7
El segundo campo es comunmente conocido como el campo de password y se encuentra directamente ligado
a la contraseña del usuario. Este campo puede adoptar 3 parametros posibles, estos parametros son:
x La letra 'x' indica que el password del usuario se encuentra cifrado y ligado directamente al fichero
/etc/shadow
*
o! Los parametros o ! indican que el usuario no podra loearse en el sistema, esta opcion es comunmente
asignada a usuarios que hacen uso de servicios como FTP o correo
vacio Si se encontrace este campo vacio significa entonces que el usuario no tiene asignada ninguna
contraseña
Un ejemplo del fichero /etc/passwd se muestra a continuacion:
Usuario.
-Nombre de la cuenta con la que el usuario se logeara para acceder al sistema Password.
-Contraseña asignada al usuario UID.-Identificador del Usuario GID.
-Identificador que indica a cual grupo pertenece el usuario Informacion Adicional.
-Informacion detallada del usuario Home del Usuario.
-Directorio de trabajo del usuario Shell.
-Interprete de comandos asignado al usuario
Fichero /etc/shadow
Este este fichero almacena las contraseñas cifradas de cada usuario del sistema, estos datos se encuentran
- 126 -
organizados linea a linea, de las cuales cada una corresponde a un usuario. Cada una de estas lineas se
encuentra formada por 9 campos los cuales se encuentran separados por el operador
:
Estos 9 campos se encuentran conformados por los siguientes parametros
Las cuentas de usuario estan localizadas en el fichero /etc/passwd, las contraseñas cifradas de los usuarios
son asignadas al fichero /etc/shadow. Cuando una nueva cuenta de usuario es creada (usando el comando
useradd) por default toma la plantilla (opcion -m) /etc/skel para generar el entorno de trabajo del usuario.
useradd
Para generar una cuenta de usuario haremos uso del comando useradd que a su vez debera seguir la
siguiente estructura :
- 127 -
a) -G desarrolloJava
b) -G ventasMedicas
c) -G soportePHP
-u Identificador o uid que sera asignado al usuario, por defecto Linux asignara UID's a partir del numero
500
-m Copia el contenido de la carpeta /etc/skel a la carpeta del usuario recien creado.
-s Interperete de comandos SHELL que sera asignado al usuario, entre las opciones disponibles estan:
usermod
El comando usermod modifica los parametros de acceso asignados a una cuenta existente del sistema.
Sintaxis:
[BASH]# usermod l carlita carita
Casi seguro también cambiará el nombre del directorio de inicio o HOME en /home, pero si no fuera así,
entonces:
[BASH]# usermod d /home/carlita carlita
[BASH]# usermod c "supervisor de area" s /bin/ksh g 505 carlita
Lo anterior modifica el comentario de la cuenta, su shell por defecto que ahora sera Korn shell y su grupo
principal de usuario quedó establecido al GID 505 y todo esto se aplicó al usuario ’sego’ que como se observa
debe ser el último argumento del comando.
- 128 -
userdel
El comando userdel remueve un usuario del sistema. Sintaxis:
[BASH]# userdel r nombreDelUsuario
Opciones Descripcion
-r Este parametro indica al sistema que sera eliminada la carpeta de trabajo del usuario. Si se usara el
comando userdel sin el parametro -r solo eliminara al usuario del sistema
-f La opción -f es igual que la opción -r, elimina todo lo del usuario, cuenta, directorios y archivos del
usuario, pero además lo hace sin importar si el usuario esta actualmente en el sistema trabajando. Es una
opción muy radical, además de que podría causar inestabilidad en el sistema, asi que hay que usarla solo en
casos muy extremos.
passwd
El comando passwd se utiliza para cambiar contraseñas. Cuando se emplea el comando passwd sin
opciones, se cambia la contraseña del usuario que lo invocó. Con el comando passwd primero se exigirá la
contraseña vigente y luego se pedirá dos veces la nueva para prevenir cualquier error. La utilización del
comando passwd con los parámetros usuario y contraseña sólo es posible para root. Si se utiliza sólo el
parámetro usuario cuando se hace uso de este comando, entonces root puede cambiar la contraseña para ese
usuario.
#*,.;:_-+!$%&/|?{[()]}
Sintaxis:
[BASH]# passwd [Opciones] nombreDelUsuario
Opciones:
Opciones Descripcion
-e Esta opcion forzara al usuario a cambiar su contraseña en su siguiente login al sistema
-l Con esta opcion, el administrador del sistema puede inhabilitar la cuenta de algun usuario especifico
-u Con esta opcion, el administrador del sistema puede deshabilitar la cuenta de algun usuario especifico
chage
Se usa para listar o cambiar el tiempo en el que expira una contraseña de usuario
Sintaxis:
- 129 -
[BASH]# change [opciones] nombreDelUsuario
Opciones
Opciones Descripcion
-d [dias]Cuenta el número de días (desde 01-01-1970) transcurridos desde que cambió la contraseña por
última vez
-E [fecha] Modifica la fecha en que la cuenta del usuario expirará y será bloqueada
-l [dias] Modifica cuantos días puede permanecer una cuenta con una contraseña expirada antes de ser
bloqueada
-M [dias] Modifica el número máximo de días durante los que es válida la contraseña de usuario.
Pasados los días, el usuario deberá de modificarla
-m [dias] Modifica el número mínimo de días entre cambio de contraseña
-W [dias] Modifica el número de días que se avisará al usuario antes de cambiar la contraseña
newusers
La mayoría de las veces que vamos a crear un nuevo usuario utilizamos el comando useradd pero cuando
tenemos una red de muchos usuarios o tenemos que crear o actualizar multiples usuarios en un servidor se
hace útil poderlo hacer desde una lista, para esto podemos utilizar el comando newusers. El comando
newusers toma un archivo de texto plano que debe tener el mismo formato que el de el archivo /etc/passwd de
nuestro sistema. Al ejecutar el comando y darle como parámetro la ruta al archivo de texto creará los usuarios
no existentes y actualizará los que ya existen, así mismo si no existe la carpeta /home/nobreDelUsuario la
creará por nosotros. Para hacer uso de este comando haremos lo siguiente: Primero creamos el archivo de
texto con los usuarios:
[BASH]# touch /root/batchnuevosusuarios.txt
[BASH]# chmod 0600 /root/batchnuevosusuarios.txt
Es importante que este archivo sólo pueda ser leido por root (por eso el chmod 0600) ya que las claves en este
archivo estarán en texto plano. Ahora editamos el archivo
[BASH]# vim /root/batchnuevosusuarios.txt
Y ahora agregamos la lista de usuarios, recuerden que debe tener el mismo formato que /etc/passwd:
usuario1:password:1001:513:Cuenta Mercadeo:/home/usuario1:/bin/bash
usuario2:password:1002:513:Usuario Ventas:/home/usuario2:/bin/bash
pepe:password:1110:501:Cuenta Invitado:/home/guest:/bin/menu
Agreguen cuantos usuarios quieran, igualmente pueden agregar los usuarios que quieran actualizar. (muy util
para hacer un reset de password masivo).
[BASH]# newusers /root/batchnuevosusuarios.txt
- 130 -
Fichero /etc/login.defs
En el archivo de configuración /etc/login.defs están definidas las variables que controlan los aspectos de la
creación de usuarios y de los campos de shadow usadas por defecto. Algunos de los aspectos que controlan
estas variables son:
Número máximo de días que una contraseña es válida PASS_MAX_DAYS
El número mínimo de caracteres en la contraseña PASS_MIN_LEN
Valor mínimo para usuarios normales cuando se usa useradd UID_MIN
El valor umask por defecto UMASK
Administración de grupos
groupadd
Para dar de alta grupos de trabajo en el sistema usaremos el comando groupadd el cual debera ser aplicado
segun la siguiente sintaxis:
[BASH]# groupadd [opciones] nombreDelGrupo
Opciones:
Opciones Descripcion
-g Define mediante un valor numerico el ID del grupo, este numero no puede ser uno negativo
-r Define un grupo del sistema. Un grupo del sistema es aquel que tiene un numero de identidad
(GID) de grupo por debajo del numero 500
Este particular GID es utilizado por los servicios del sistema como un servidor web o de correo|
- 131 -
groupmod
El comando groupmod permite modificar el nombre o GID de un grupo. Sintaxis:
Opciones Descripcion
-g Esta opcion cambia el GID de un grupo existente en el sistema
-n Esta opcion sirve para cambiar el nombre de un grupo existente por otro
groupdel
El comando groupdel elimina un grupo del sistema Sintaxis:
[BASH]# groupdel nombreDelGrupo
gpasswd
Permite administrar los grupos,se puede utilizar para añadir y eliminar usuarios, señalar un administrador e
indicar una contrasela para el grupo.
NOTA: Las contraseñas de grupo solo son necesarias su un usuario que no es miembro del mismo quisiera
anexarse al grupo y convertirlo en uno de sus grupos efectivos, para ello debera proporcioonar la contraseña
del grupo
Sintaxis:
[BASH]# gpasswd opciones [nombreDelGrupo]
Opciones Descripcion
-R Hace que el grupo sea reservado para miembros
-A [usuario,,] [grupo] Señala como administrador de un grupo particular a un usuario del grupo
-M [usuario,,] [grupo] Añade miembros a un grupo
-r [grupo] Elimina la contraseña del grupo
Opciones para el administrador del grupo
Opciones Descripcion
-a [usuario,,] [grupo] Se añade permanentemente un usuario a un grupo
-d [usuario,,] [grupo] Se borra permanentemente a un usuario del grupo
-r [grupo] Elimina la contraseña del grupo
grpck
El comando grpck revisa un grupo de sistema Sintaxis:
- 132 -
[BASH]# grpck nombreDelGrupo
Fichero /etc/group
Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del sistema, contiene una línea
para cada usuario con tres o cuatro campos por usuario: Ejemplo:
El campo 1 indica el usuario.
El campo 2 ‘x’ indica la contraseña del grupo, que no existe, si hubiera se mostraría
un ‘hash’ encriptado.
El campo 3 es el Group ID (GID) o identificación del grupo.
El campo 4 es opcional e indica la lista de grupos a los que pertenece el usuario
Actualmente al crear al usuario con useradd se crea también automáticamente su grupo principal de trabajo
GID, con el mismo nombre del usuario. Es decir, si se añade el usuario ’paola’ también se crea el /etc/group el
grupo ’paola’.
Fichero /etc/gshadow
Este fichero almacena las contraseñas cifradas de los grupos,los administradores de cada grupo y los
usuarios que pertenecen a cada grupo, contiene una linea para cada grupo con cuatros campos por grupo:
Ejemplo:
:
La lista de administradores y miembros de un grupo deben estar separados mediante el identificador
pwconv y pwunconv
El comportamiento por defecto de todas las distros modernas de GNU/Linux es activar la protección extendida
del archivo /etc/shadow, que (se insiste) oculta efectivamente el ‘hash’ cifrado de la contraseña de
/etc/passwd
Pero si por alguna bizarra y extraña situación de compatibilidad se requiriera tener las contraseñas cifradas en
el mismo archivo de /etc/passwd se usaría el comando pwunconv:
[BASH]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash hack:x:501:500:Hack Beastie:/home/hack:/bin/bash
La 'x' en el campo 2 indica que se hace uso de /etc/shadow como mencionamos anteriormente.
[BASH]# more /etc/shadow
root:ghy675gjuXCc12r5gt78uuu6R:10568:0:99999:7:7:1::
- 133 -
hack:rfgf886DG778sDFFDRRu78asd:10568:0:1:9:1:1::
[BASH]#pwunconv
[BASH]# more /etc/passwd
root:ghy675gjuXCc12r5gt78uuu6R:0:0:root:/root:/bin/bash
sergio:rfgf886DG778sDFFDRRu78asd:501:500:Hack Beastie:/home/hack:/bin/bash
[BASH]# pwconv
[BASH]# ls l /etc/passwd /etc/shadow
rwrr 1 root root 1106 20070708 01:07 /etc/passwd
r 1 root root 699 20090708 01:07 /etc/shadow
Se vuelve a crear el archivo shadow, además nótese los permisos tan restrictivos (400) que tiene este archivo,
haciendo sumamente difícil que cualquier usuario que no sea root lo lea.
grpconv y grpunconv
Estos comandos funcionan de la misma manera que pwconv y pwunconv, solo que aplicados a los ficheros
/etc/group
/etc/gshadow
Automatizar tareas de administración del sistema mediante la programación de scripts de trabajo
Sobre CRON
Cron es un administrador o planificador de tareas de segundo plano. Es un demonio que ejecuta procesos,
programas o scripts, a intervalos regulares programados. Por ejemplo podemos instruirlo para ejecutar un
script cada cinco minutos, una copia de seguridad diaria, o una exportacion semanal de la base de datos. Las
horas a las que deben ejecutarse dichos procesos se indican en el fichero crontab correspondiente al usuario.
En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que
ejecuta procesos o scripts a intervalos regulares (por ejemplo, cada minuto, de semana o mes). Los procesos
que deben ejecutarse y la hora en la que deben hacerlo se especifican en el archivo crontab correspondiente.
El fichero crontab de root se guarda en /var/spool/cron/crontabs/root, pero nunca editaremos los ficheros de
cron directamente. Para editar el crontab (fichero donde se guardan las tareas programadas) de root,
utilizaremos siempre la utilidad crontab. Concretamente utilizaremos la orden crontab -e
- 134 -
[BASH]# crontab e
Utilizaremos siempre esta orden en lugar de ir a buscar el fichero con un editor de texto ya que asi nos
garantizamos que estamos editando un fichero auxiliar en exclusiva, y evitaremos problemas de concurrencia
con otros administradores. Probablemente crontab nos presentara un fichero vacio o bien con la siguiente
lınea de cabeceras:
# m h dom mon dow command
Esta linea simplemente nos servira de guion para escribir debajo de ella nuestras tareas. Como se puede ver
nos esta indicando el formato, primero los minutos, luego la hora, el dia del mes, el mes y el dia de la semana,
es decir:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin/:/bin/:/usr/sbin:/usr/bin
MAILITO=sistemas@factor.com
m h dom mon dow command
Las variables:
Listando el crontab
Para obtener un listado de las tareas programadas de root, ejecute lo siguiente:
[BASH]# crontab l
Programando tareas
Para programar una tarea utilizaremos la orden crontab -e. Por ejemplo para programar una tarea que a las
19h genere un mensaje en un log, escribiremos lo siguiente:
[BASH]# crontab e
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
m h dom mon dow command
0 19 echo "Son las 19h." >> /var/log/micron.log
Si quisieramos que se ejecutase a las 19:30h pero solo los lunes pondriamos:
- 135 -
# m h dom mon dow command
30 19 1 echo "Son las 19:30h. del lunes." >> /var/log/micron.log
# m h dom mon dow command
30 19 1 12 echo "Son las 19:30h. del 1 de diciembre." >> /var/log/micron.log
¿Que pasa si queremos que se ejecute a las 19 y 19:30? Se puede poner mas de un valor en cada campo,
separandolos por comas:
# m h dom mon dow command
0,30 19 echo "Son las 19 o las 19:30h. No estoy seguro." >> /var/log/micron.log
¿Y para ejecutarlo cada 5 minutos? Se podria poner “5,10,15,20,25” pero hay una abreviatura, asi “/min”
# m h dom mon dow command
/5 echo "Han pasado cinco minutos." >> /var/log/micron.log
Los sistemas UNIX modernos vienen con unos directorios predefinidos para que cron los lee y ejecute lo que
hay dentro en los intervalos que su nombre indica:
/etc/cron.daily
/etc/cron.hourly
/etc/cron.weekly
/etc/cron.monthly
Dichos directorios se suelen utilizar para enlazar guiones que deban ser llamados en el intervalo
correspondiente al directorio, sin argumentos. Por ejemplo, si creamos un guion de bash y lo guardamos en
/root/bin, le damos permisos de ejecucion, y lo enlazamos en /etc/cron.hourly, cron lo ejecutar ́ cada hora:
[BASH]# chmod +x /root/bin/miScript.sh
[BASH]# ln s /root/bin/miScript.sh /etc/cron.hourly/
El archivo de cron de sistema es /etc/crontab. Si ponemos tareas en dicho archivo seran ejecutadas
igualmente, pero no es recomendable. Este crontab se deja para que lo maneje la distribucion y sus
programas. Es igual que el crontab de root, salvo que en este podemos especificar con que usuario se ejecuta
cada cosa, y cron hara una suplantacion previa a la ejecucion.
[BASH]# cat /etc/crontab
etc/crontab: systemwide crontab
Unlike any other crontab you don’t have to run the ‘crontab’
command to install the new version when you edit this file
and files in /etc/cron.d. These files also have username fields,
- 136 -
that none of the other crontabs do.
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
m h dom mon dow user command
17 root cd / && runparts report /etc/cron.hourly 25 6 root test x /usr/sbin/anacron
|| ( cd / && runparts report /etc/cron.daily ) 47 6 7 root test x /usr/sbin/anacron
|| ( cd / && runparts report /etc/cron.weekly ) 52 6 1 root test x
/usr/sbin/anacron || ( cd / && runparts report /etc/cron.monthly )
Log de cron
En Debian 5 Lenny el log de cron viene desactivado por defecto. Para activarlo tendremos que editar el
fichero /etc/default/cron y eliminar la almohadilla (#) del principio de la linea EXTRA_OPTS="-L 2" dejando el
fichero asi:
# cat /etc/default/cron
Cron configuration options
Uncomment this option for LSB name support in /etc/cron.d/
LSBNAMES=’l’
Whether to read the system’s default environment files (if present)
This will make cron set a proper charset for the mails it sends
Comment this or set it to something other than ’yes’ to prevent
cron from reading it.
READ_ENV="yes"
Extra options for cron, see cron(8)
For example, set a higher log level to audit cron’s work
EXTRA_OPTS="L 2"
De esta forma conseguiremos que cron vaya dejando un rastro en /var/log/syslog que podremos observar, por
ejemplo, asi:
[BASH]# tail f /var/log/syslog
En este capitulo aprenderemos a configuar la hora del sistema mediante el uso de servidores de tiempo NTP.
Reloj de Hardware
Reloj de Software
Un equipo personal tiene un reloj de hardware alimentado por una batería. Esa batería asegura que el reloj
continúe trabajando aún cuando la computadora se encuentre sin suministro eléctrico. El reloj de hardware
puede ser modificado (o definido) desde la pantalla de configuración de la BIOS o desde cualquier sistema
operativo. El kernel Linux mantiene la fecha y hora de manera independiente al reloj de hardware. Durante el
- 137 -
inicio de un sistema Linux, el kernel configura su propio reloj de software accediendo a la fecha y hora
mantenida por el reloj de hardware. Luego, ambos relojes trabajan independientemente. Linux mantiene su
propio reloj debido a que leer el reloj de hardware constantemente es lento y complicado. El reloj del kernel
siempre muestra la hora universal, por lo que no necesita conocer como utilizar usos horarios. La simplicidad
de este modo de trabajar proporciona alta confiabilidad y facilita actualizar la información de la zona horaria.
Cada proceso realiza las conversiones de zona horaria de manera independiente. El reloj de hardware puede
estar en formato de hora local u hora universal. Usualmente es mejor que el reloj de hardware mantenga la
hora universal, porque de esta manera no será necesario modificar la hora del reloj cuando el horario de
verano empiece o finalice.
Bajo linux existen 2 herramientas principales que son implementadas para administrar el reloj hardware y el de
software del sistema, estas herramientas son:
hwclock Controla el reloj de hardware
date Controla el reloj del sistema
localtime Por ubicacion geografica
UTC El tiempo universal coordinado, o UTC, en español, también conocido como tiempo civil, es el tiempo
de la zona horaria de referencia respecto a la cual se calculan todas las otras zonas del mundo
Ajuste de la hora en Linux
1) El primero consiste en ajustar el reloj de Hardware a traves de la configuracion del BIOS 2) El segundo
consiste en establecer la variable de entorno TZ a la zona horaria adecuada utilizando el siguiente comando
[BASH]# tzselect
Alternativa al paso 2 Utilice el programa tzconfig que establecerá un enlace simbólico de la siguiente forma:
[BASH]# ln s /usr/share/zoneinfo/Mexico/General /etc/localtime
3) El tercero consiste en decirle a Linux que nuestro reloj de hardware y de sistema correb bajo UTC, para ello
teclee lo siguiente:
[BASH]# hwclock utc hctosys
- 138 -
Comando hwclock
Sintaxis:
[BASH]# hwclock [opciones]
Opciones:
Opciones Descripcion
--show Lee el reloj del hardware y muestra la hora en la salida estándar.
--set Pone el reloj del hardware a la hora dada por la opción --date
--hctosys Pone el tiempo del sistema a partir del reloj del hardware. Ésta es una buena opción para
poner en uno de los guiones de arranque del sistema.
--systohc Pone el reloj del hardware a la hora del sistema actual.
--adjust Añade o sustrae tiempo del reloj del hardware para tener en cuenta el desvío sistemático desde la
última vez que el reloj se puso o se ajustó. Vea la discusión al respecto más adelante.
--utc Indica que el reloj del hardware se mantiene en el tiempo universal coordinado (UTC). Es cosa suya si
mantiene su reloj en hora local o UTC, pero nada en el reloj le dice qué es lo que ha escogido. Así que con esta
opción es como le da esa información a hwclock.
Comando date
Sintaxis:
[BASH]# date [opciones] [+FORMATO]
Formato:
Opciones Descripcion
%% Una literal %
%a Localización del nombre abreviado del día de la semana (Sun,Sat)
%A Localización del nombre completo del día de la semana (Sunday,Saturday)
%b Localización del nombre abreviado del nombre del mes
- 139 -
%c Localizacion de fecha y hora (Sat Nov 04 12:02:33 EST 1989)
%C Siglo (año dividido por 100 y truncado a un entero) [00-99]
%d Dia del mes (01..31)
%D Fecha (mm/dd/yy)
%e Dia del mes (1..31,), a diferencia de %d este suprime el espacio en blanco
%F Lo mismo que %Y-%m-%d
%h Lo mismo que %b
%H Hora (00..23)
%I Hora (01..12)
%j Dia del año (001..366)
%k Hora (0..23)
%l Hola (1..12)
%m Mes (01..12)
%M Minutos (00..59)
%n Una nueva linea
%N Nanosegundos (000000000..999999999)
%p Indicacion de PM o AM en mayusculas
%P Indicacion de pm o am en minusculas
%r Tiempo en 12 horas ( hh:mm:ss AP M)
%R Tiempo en 24 horas ( hh:mm )
%s Segundos desde `00:00:00 1970-01-01 UTC' (una extesion de GNU )
%S Segundos (00..60);
%t Un tabulador horizontal
%T Tiempo , 24 horas (hh:mm:ss)
%u Dia de la semana (1..7) el dia 1 representa el lunes
%U Número de semana del año con el domingo como primer día de la semana (00..53)
%V Número de semana del año con el lunes como primer día de la semana (00..53)
%w Dia de la samana (0..6); 0 representa el Domingo
%W Numero de la semana del año con Lunes como primer dia de la semana (00..53)
%x Representacion de la fecha local (mm/dd/yy)
%X Representacion de la hora local (%H:%M:%S)
%y Los ultimos dos digitos del año (00..99)
%Y Año (1970..)
Protocolo SMTP
- 140 -
Simple Mail Transfer Protocol (SMTP) Protocolo Simple de Transferencia de Correo, es un protocolo de la
capa de aplicación. Protocolo de red basado en texto utilizado para el intercambio de mensajes de correo
electrónico entre computadoras u otros dispositivos SMTP se basa en el modelo cliente-servidor, donde un
cliente envía un mensaje a uno o varios receptores. La comunicación entre el cliente y el servidor consiste
enteramente en líneas de texto compuestas por caracteres ASCII. El tamaño máximo permitido para estas
líneas es de 1000 caracteres. Las respuestas del servidor constan de un código numérico de tres digitos,
seguido de un texto explicativo. El número va dirigido a un procesado automático de la respuesta por
autómata, mientras que el texto permite que un humano interprete la respuesta. En el protocolo SMTP todas
las órdenes, réplicas o datos son líneas de texto, delimitadas por el carácter <CRLF>. Todas las réplicas
tienen un código numérico al comienzo de la línea. En el conjunto de protocolos TCP/IP, el SMTP va por
encima del TCP, usando normalmente el puerto 25 en el servidor para establecer la conexión.
Protocolo POP3
POP3 está diseñado para recibir correo, no para enviarlo; le permite a los usuarios con conexiones
intermitentes ó muy lentas (tales como las conexiones por módem), descargar su correo electrónico mientras
tienen conexión y revisarlo posteriormente incluso estando desconectados. Cabe mencionar que la mayoría de
los clientes de correo incluyen la opción de dejar los mensajes en el servidor, de manera tal que, un cliente que
utilice POP3 se conecta, obtiene todos los mensajes, los almacena en la computadora del usuario como
mensajes nuevos, los elimina del servidor y finalmente se desconecta. En contraste, el protocolo IMAP permite
los modos de operación conectado y desconectado. Los clientes de correo electrónico que utilizan IMAP dejan
por lo general los mensajes en el servidor hasta que el usuario los elimina directamente. Esto y otros factores
hacen que la operación de IMAP permita a múltiples clientes acceder al mismo buzón de correo. La mayoría
de los clientes de correo electrónico soportan POP3 ó IMAP; sin embargo, solo unos cuantos proveedores de
internet ofrecen IMAP como valor agregado de sus servicios.
Protocolo IMAP
Internet Message Access Protocol, o su acrónimo IMAP, es un protocolo de red de acceso a mensajes
electrónicos almacenados en un servidor. Mediante IMAP se puede tener acceso al correo electrónico desde
cualquier equipo que tenga una conexión a Internet. IMAP tiene varias ventajas sobre POP, que es el otro
protocolo empleado para obtener correo desde un servidor. Por ejemplo, es posible especificar en IMAP
carpetas del lado servidor. Por otro lado, es más complejo que POP ya que permite visualizar los mensajes de
manera remota y no descargando los mensajes como lo hace POP.
Al utilizar POP3, los clientes se conectan brevemente al servidor de correo, solamente el tiempo que les tome
descargar los nuevos mensajes. Al utilizar IMAP, los clientes permanecen conectados el tiempo que su
interfaz permanezca activa y descargan los mensajes bajo demanda. Esta manera de trabajar de IMAP puede
- 141 -
dar tiempos de respuesta más rápidos para usuarios que tienen una gran cantidad de mensajes o mensajes
grandes.
A través de la utilización de señales definidas en el protocolo IMAP4 de los clientes, se puede vigilar el estado
del mensaje, por ejemplo, si el mensaje ha sido o no leído, respondido o eliminado. Estas señales se
almacenan en el servidor, de manera que varios clientes conectados al mismo correo en diferente tiempo
pueden detectar los cambios hechos por otros clientes.
IMAP4 proporciona un mecanismo para que los clientes pidan al servidor que busque mensajes de acuerdo a
una cierta variedad de criterios. Este mecanismo evita que los clientes descarguen todos los mensajes de su
buzón de correo, agilizando, de esta manera, las búsquedas.
Sobre Sendmail
Las raíces de Sendmail se remontan al nacimiento del correo electrónico, una década antes de que naciese
ARPANET, el precursor de Internet. Por entonces, cada buzón de usuario era un fichero con derechos de sólo
lectura y las aplicaciones de correo eran simplemente texto incorporado en ese fichero. Cada usuario tenía que
abrir y meterse de lleno en el fichero de correo para buscar correos antiguos y leer el correo nuevo era toda
una faena. La primera transferencia real de un fichero de mensaje de correo entre dos equipos tuvo lugar
hasta el año de 1972, año en el que el correo electrónico empezó a transferirse por FTP a través de un
protocolo de red NCP. Este método de comunicación más sencillo muy pronto se hizo popular, incluso hasta el
punto de representar la mayor parte del tráfico de ARPANET en menos de un año. Sin embargo, la falta de
estándares entre los protocolos existentes convirtió al correo electrónico en más difícil de enviar desde algunos
sistemas y así continuó hasta que ARPANET creó el estándar TCP/IP en 1982. Un nuevo protocolo, SMTP,
que se materializaba en el transporte de mensajes. Estos avances, en combinación con la sustitución de los
ficheros host por dns, permitieron que se materializasen los agentes MTA con funciones completas. Sendmail,
que creció a partir de un precedente sistema de entrega de correo electrónico denominado Delivermail, muy
pronto se convirtió en estándar a medida que Internet comenzaba a expandirse y a utilizarse más
ampliamente. El unico punto debil que preseta sendmail es que este este posee el mayor numero de errores
los cuales son reparados casi de inmediato.
Sendmail en la actualidad
Algunos analisis y encuentas nos expresan comentarios muy buenos sobre Sendmail, esto de acuerdo a una
encuesta realizada por la editorial O'Reilly, la cual formulo la siguiente pregunta ¿Cuantas empresas tienen
implementado como servidor de correo a Sendmail? Para dicha encuesta se seleccionaron al rededor de 400
000 dominios, de los cuales el 12.3 % de los encuestados respondieron que tenian implementado a Sendmail
como servidor de correo, el segundo lugar fue para Postfix con un 8.6 % y en tercer lugar tenemos a Postini
con el 8.5%
- 142 -
Sobre Postfix
Postfix es un Agente de Transporte de Correo (MTA) de software libre / código abierto, un programa
informático para el enrutamiento y envío de correo electrónico, creado con la intención de que sea una
alternativa más rápida, fácil de administrar y segura al ampliamente utilizado Sendmail. Formalmente conocido
como VMailer e IBM Secure Mailer, fue originalmente escrito por Wietse Venema durante su estancia en el
Thomas J. Watson Research Center de IBM, y continúa siendo desarrollado activamente. Postfix es el agente
de transporte por omisión en diversas distribuciones de Linux y en las últimas versiones del Mac OS X.
Sobre Exim
Exim (EXperimental Internet Mailer) es un agente de transporte de correo (Mail Transport Agent, usualmente
MTA) desarrollado por la Universidad de Cambridge y puede ser utilizado en la mayoría de los sistemas Unix
(entre ellos GNU/Linux). Si bien puede compilarse en sistemas operativos Windows, se recomienda que sea
utilizado en producción sobre sistemas operativos de la familia Unix. Se distribuye sin costo bajo la licencia
GNU GPL por lo que es, además, software libre. Tiene una gran flexibilidad en los caminos que pueden seguir
los mensajes según su origen y por presentar funcionalidades para control de spam, listas de bloqueo
basados en DNS (DNSBL), virus, control de relay, usuarios y dominios virtuales y otros, que se configuran y
mantienen en forma más o menos sencilla. El proyecto cuenta con buena documentación, ejemplos y recetas
claras de “como hacer” determinadas tareas. En términos generales se destaca que no existen situaciones
para las que Exim sea una opción incorrecta y en muchas situaciones se desempeña como la mejor opción.
Exim es el MTA por defecto en las distribuciones Debian GNU/Linux.
Sobre Qmail
Qmail es un servidor de correo electrónico (SMTP) hecho para Unix. Utiliza el formato maildir para almacenar
mensajes (un archivo por mensaje), eliminando varios problemas asociados al manejo del formato mbox.
Qmail es distribuido como código fuente (sourcecode), escrito en lenguaje C.
1.Escribir directamente en la impresora: la forma más sencilla de imprimir un archivo en Linux es enviarlo
directamente a la impresora. Por ejemplo, para imprimir investigacion.txt haremos:
- 143 -
[BASH]#cat investigacion.txt > /dev/lp0
2.El sistema lpr/lpd es la versión para Linux del sistema lp (Line Printer) de UNIX. Hasta que apareció CUPS
era el sistema estándar de imprimir en Linux. Incluso ahora, es el sistema que se instala por defecto.
3.El sistema CUPS (Common UNIX Printing System): actualmente es el sistema estándar de impresión en
Linux.
En el entorno gráfico, las aplicaciones que pueden imprimir son compatibles tanto con lpr/lpd como con CUPS:
utilizarán el sistema que esté instalado, trabajarán sobre él y obtendrán automáticamente las propiedades de
la impresora.
El sistema de impresión CUPS reemplaza al sistema de impresión lpr/lpd y consiste en lo siguiente: 1.El
demonio de impresión cupsd (print spooler daemon): vigila los directorios spool buscando trabajos a imprimir.
Cuando aparece alguno, cupsd lanza una copia de sí mismo que imprimirá el archivo en la impresora
apropiada. 2.La cola de impresión (spool): ubicada en el directorio /var/spool/cups, donde se almacenan los
trabajos a imprimir. Los nuevos trabajos a imprimir se colocan en la cola de impresión a la espera: el primero
que entra es el primero que sale. 3.Los comandos lpr/lpd para manejar la cola de impresión: el sistema lpr/lpd
es uno de los estándares de UNIX, y las aplicaciones asumen que tendrán los comandos de este sistema de
impresión disponibles. Por este motivo CUPS proporciona su propia versión de esos comandos, que son:
lpr (o lp): enviar trabajos a la cola de impresión. Este comando copia el archivo a imprimir en el directorio de
spool, donde permanece hasta que el demonio cupsd lo imprime. Su sintaxis es:
[BASH]# lpr <archivo>
lpq: consultar los trabajos pendientes en la cola de impresión.
lpc: configurar las impresoras.
lprm: eliminar trabajos de la cola de impresión.
4.los drivers PPD de las impresoras PostScript: en Linux, cuando una aplicación envía un documento a la
impresora genera un archivo PostScript. Si la impresora entiende el lenguaje PostScript puede imprimir el
documento directamente. Sólo tenemos que decirle a CUPS cuáles son las características de la impresora, y
eso lo hace el archivo PPD (Postscript Printer Description): contiene todas las características de la impresora,
como tamaños de papel, colores, resoluciones disponibles, etc.
Si la impresora no entiende PostScript debemos traducir los documentos que generan las aplicaciones
(PostScript) a un lenguaje que entienda la impresora, por lo que necesitamos un filtro. De esto se encarga
Foomatic (paquete foomatic-db-engine): proporciona el archivo PPD y los filtros necesarios para traducir los
documentos (trabaja sobre GhostScript). En ambos casos, el archivo PPD de la impresora se puede descargar
desde LinuxPrinting (linuxprinting.org) o desde la web de CUPS (cups.org) y se debe guardar en el
directorio /usr/share/cups/model.
- 144 -
lpinfo
lpadmin
enable
disable
accept
reject
lpoptions
lpstat
Veamos cómo instalar una impresora local con CUPS utilizando su interfaz web:
conectamos la impresora.
conseguimos e instalamos el archivo PPD de nuestra impresora.
instalamos Foomatic si la impresora no es PostScript.
reiniciamos el demonio de CUPS:
[BASH]# /etc/init.d/cups start
accedemos al interfaz web de CUPS:
http://localhost:631
entramos a Administracion
pulsamos Añadir impresora e introducimos Nombre de la impresora: HP Lasser Jet,
Ubicación: Oficina: HP Laser.
en la siguiente pantalla nos preguntará Tipo de conexión:
seleccionamos el modelo.
nos pedirá Usuario y Contraseña, ya que para administrar impresoras hay que tener
permisos de root (la contraseña se envía en texto plano, sin encriptar).
y ya tenemos la impresora instalada.
pulsando en Impresoras iremos a la página de la nueva impresora. Desde aquí podemos
monitorizar los trabajos de impresión, cambiar las opciones de configuración y
seleccionarla como impresora predeterminada.
para terminar, comprobamos que realmente funciona lanzando una página de prueba con
Imprimir página de prueba.
Compartir nuestra impresora
1.que CUPS escuche conexiones de máquinas remotas Los equipos que dispongan de un cliente IPP (Linux,
Unix, Mac y Windows XP) podrán conectar con el demonio de impresión cupsd de nuestra máquina mediante
el protocolo IPP (Internet Printing Protocol, puerto 631 TCP), e imprimir en nuestra impresora, una vez que les
permitamos acceder. Para ello, en el archivo de configuración de CUPS, /etc/cups/cupsd.conf
especificaremos qué máquinas tienen acceso a CUPS. Buscaremos las líneas:
<Location />
Order Deny,Allow Deny All Allow 127.0.0.1 </Location>
Vemos que por defecto sólo puede acceder a CUPS la propia máquina (127.0.0.1). Para que puedan acceder
las máquinas de la LAN añadiremos la línea:
Allow 192.168.0.0/255.255.255.0
- 145 -
Para terminar reiniciamos el demonio de CUPS:
[BASH]# /etc/init.d/cups restart
Vamos a configurar el servidor Samba para compartir nuestra impresora. Primero crearemos en nuestro
sistema un usuario específico (smbprint) para que acceda a la impresora mediante Samba. Si queremos
permitir acceso anónimo lo podemos crear sin contraseña:
[printers]
browseable = yes printable = yes public = yes guest only = yes guest account = smbprint
path = /home/smbprint
Además tenemos que decirle a Samba que el sistema de impresión es CUPS, no lpr/lpd, por lo que
cambiaremos /etc/samba/smb.conf para que quede:
[global]
printcap name = cups printing = cups
[BASH]# /etc/init.d/samba restart
localizamos nuestra máquina en el Explorador de archivos. Veremos que tiene una impresora compartida.
pulsamos Conectar... e instalamos los drivers desde el CD del fabricante.
- 146 -
Fundamentos de Red
Fundamentos de TCP/IP
Sobre TCP/IP
La familia de protocolos de Internet es un conjunto de protocolos de red en la que se basa Internet y que
permiten la transmisión de datos entre redes de computadoras. En ocasiones se le denomina conjunto de
protocolos TCP/IP, en referencia a los dos protocolos más importantes que la componen: Protocolo de Control
de Transmisión (TCP) y Protocolo de Internet (IP), que fueron los dos primeros en definirse, y que son los más
utilizados de la familia. Existen tantos protocolos en este conjunto que llegan a ser más de 100 diferentes,
entre ellos se encuentra el popular HTTP (HyperText Transfer Protocol), que es el que se utiliza para acceder
a las páginas web, además de otros como el ARP (Address Resolution Protocol) para la resolución de
direcciones, el FTP (File Transfer Protocol) para transferencia de archivos, y el SMTP (Simple Mail Transfer
Protocol) y el POP (Post Office Protocol) para correo electrónico, TELNET para acceder a equipos remotos,
entre otros. El TCP/IP es la base de Internet, y sirve para enlazar computadoras que utilizan diferentes
sistemas operativos, incluyendo PC, minicomputadoras y computadoras centrales sobre redes de área local
(LAN) y área extensa (WAN). TCP/IP fue desarrollado y demostrado por primera vez en 1972 por el
Departamento de Defensa de los Estados Unidos, ejecutándolo en ARPANET, una red de área extensa de
dicho departamento. La familia de protocolos de Internet puede describirse por analogía con el modelo OSI
(Open System Interconnection), que describe los niveles o capas de la pila de protocolos, aunque en la
práctica no corresponde exactamente con el modelo en Internet. En una pila de protocolos, cada nivel
soluciona una serie de problemas relacionados con la transmisión de datos, y proporciona un servicio bien
definido a los niveles más altos. Los niveles superiores son los más cercanos al usuario y tratan con datos más
abstractos, dejando a los niveles más bajos la labor de traducir los datos de forma que sean físicamente
manipulables. El modelo de Internet fue diseñado como la solución a un problema práctico de ingeniería. El
modelo OSI, en cambio, fue propuesto como una aproximación teórica y también como una primera fase en la
evolución de las redes de ordenadores. Por lo tanto, el modelo OSI es más fácil de entender, pero el modelo
TCP/IP es el que realmente se usa. Sirve de ayuda entender el modelo OSI antes de conocer TCP/IP, ya que
se aplican los mismos principios, pero son más fáciles de entender en el modelo OSI.
Desarrollo de TCP/IP
La Familia de Protocolos de Internet fueron el resultado del trabajo llevado a cabo por la Agencia de
Investigación de Proyectos Avanzados de Defensa (DARPA por sus siglas en inglés) a principios de los 70.
Después de la construcción de la pionera ARPANET en 1969 DARPA comenzó a trabajar en un gran número
de tecnologías de transmisión de datos. En 1972, Robert E. Kahn fue contratado por la Oficina de Técnicas de
Procesamiento de Información de DARPA, donde trabajo en la comunicación de paquetes por satélite y por
ondas de radio, reconoció el importante valor de la comunicación de estas dos formas. En la primavera de
- 147 -
1973, Vint Cerf, desarrollador del protocolo de ARPANET, Network Control Program(NPC) se unió a Kahn con
el objetivo de crear una arquitectura abierta de interconexión y diseñar así la nueva generación de protocolos
de ARPANET. Para el verano de 1973, Kahn y Cerf habian conseguido una remodelación fundamental, donde
las diferencias entre los protocolos de red se ocultaban usando un Protocolo de comunicaciones y además, la
red dejaba de ser responsable de la fiabilidad de la comunicación, como pasaba en ARPANET , era el host el
responsable. Cerf reconoció el mérito de Hubert Zimmerman y Louis Pouzin, creadores de la red CYCLADES,
ya que su trabajo estuvo muy influenciado por el diseño de esta red. Un ordenador denominado router (un
nombre que fue después cambiado a gateway, puerta de enlace, para evitar confusiones con otros tipos de
Puerta de enlace) esta dotado con una interfaz para cada red, y envía Datagrama de ida y vuelta entre ellos.
Los requisitos para estor routers están definidos en (Request for Comments 1812).
Esta idea fue llevada a la práctica de una forma mas detallada por el grupo de investigación que Cerf tenía en
Stanford durante el periodo de 1973 a 1974, dando como resultado la primera especificación TCP (Request
for Comments 675) Entonces DARPA fue contratada por BBN Technologies, la Universidad de Stanford, y la
University College de Londres para desarrollar versiones operacionales del protocolo en diferentes
plataformas de hardware. Se desarrollaron así cuatro versiones diferentes: TCP v1, TCP v2, una tercera
dividida en dos TCP v3 y IP v3 en la primavera de 1978, y después se estabilizó la versión TCP/IP v4 — el
protocolo estándar que todavía se emplea en Internet actualmente En 1975, se realizó la primera prueba de
comunicación entre dos redes con protocolos TCP/IP entre la Universidad de Stanford y la University College
de Londres(UCL). En 1977, se realizó otra prueba de comunicación con un protocolo TCP/IP entre tres redes
distintas con ubicaciones en Estados Unidos, Reino Unido y Noruega. Varios prototipos diferentes de
protocolos TCP/IP se desarrollaron en múltiples centros de investigación entre los años 1978 y 1983. La
migración completa de la red ARPANET al protocolo TCP/IP concluyó oficialmente el día 1 de enero de 1983
cuando los protocolos fueron activados permanentemente. En marzo de 1982, el Departamento de Defensa de
los Estados Unidos declaró al protocolo TCP/IP el estándar para las comunicaciones entre redes militares.En
1985, el Centro de Administración de Internet (Internet Architecture Board IAB por sus siglas en inglés)
organizó un Taller de Trabajo de tres días de duración, al que asistieron 250 comerciales promocionando así
el protocolo lo que contribuyó a un incremento de su uso comercial.
Hay algunas discusiones sobre como encaja el modelo TCP/IP dentro del modelo OSI. Como TCP/IP y modelo
OSI no están delimitados con precisión no hay una respuesta que sea la correcta. El modelo TCP/IP no está lo
suficientemente dotado en los niveles inferiores como para detallar la auténtica estratificación en niveles:
necesitaría tener una capa extra (el nivel de Red) entre los niveles de transporte e Internet. Protocolos
específicos de un tipo concreto de red, que se sitúan por encima del marco de hardware básico, pertenecen al
nivel de red, pero sin serlo. Ejemplos de estos protocolos son el ARP (Protocolo de resolución de direcciones)
y el STP (Spanning Tree Protocol). De todas formas, estos son protocolos locales, y trabajan por debajo de las
capas de Internet. Cierto es que situar ambos grupos (sin mencionar los protocolos que forman parte del nivel
de Internet pero se sitúan por encima de los protocolos de Internet, como ICMP) todos en la misma capa
puede producir confusión, pero el modelo OSI no llega a ese nivel de complejidad para ser más útil como
modelo de referencia. El siguiente diagrama intenta mostrar la pila OSI y otros protocolos relacionados con el
modelo OSI original: Normalmente, los tres niveles superiores del modelo OSI (Aplicación, Presentación y
- 148 -
Sesión) son considerados simplemente como el nivel de aplicación en el conjunto TCP/IP. Como TCP/IP no
tiene un nivel de sesión unificado sobre el que los niveles superiores se sostengan, estas funciones son
típicamente desempeñadas (o ignoradas) por las aplicaciones de usuario. La diferencia más notable entre los
modelos de TCP/IP y OSI es el nivel de Aplicación, en TCP/IP se integran algunos niveles del modelo OSI en
su nivel de Aplicación. Una interpretación simplificada de la pila TCP/IP se muestra debajo:
Nivel Fisico
El nivel físico describe las características físicas de la comunicación, como las convenciones sobre la
naturaleza del medio usado para la comunicación (como las comunicaciones por cable, fibra óptica o radio), y
todo lo relativo a los detalles como los conectores, código de canales y modulación, potencias de señal,
longitudes de onda, sincronización y temporización y distancias máximas.
Nivel de internet
Como fue definido originalmente, el nivel de red soluciona el problema de conseguir transportar paquetes a
través de una red sencilla. Ejemplos de protocolos son X.25 y Host/IMP Protocol de ARPANET.
Con la llegada del concepto de Internet, nuevas funcionalidades fueron añadidas a este nivel, basadas en el
intercambio de datos entre una red origen y una red destino. Generalmente esto incluye un enrutamiento de
paquetes a través de una red de redes, conocida como Internet. En la familia de protocolos de Internet, IP
realiza las tareas básicas para conseguir transportar datos desde un origen a un destino. IP puede pasar los
datos a una serie de protocolos superiores; cada uno de esos protocolos es identificado con un único "Número
de protocolo IP". ICMP y IGMP son los protocolos 1 y 2, respectivamente.
Algunos de los protocolos por encima de IP como ICMP (usado para transmitir información de diagnóstico
sobre transmisiones IP) e IGMP (usado para dirigir tráfico multicast) van en niveles superiores a IP pero
realizan funciones del nivel de red e ilustran una incompatibilidad entre los modelos de Internet y OSI. Todos
los protocolos de enrutamiento, como BGP, OSPF, y RIP son realmente también parte del nivel de red, aunque
ellos parecen pertenecer a niveles más altos en la pila.
Nivel de Transporte
Los protocolos de enrutamiento dinámico que técnicamente encajan en el conjunto de protocolos TCP/IP (ya
- 149 -
que funcionan sobre IP) son generalmente considerados parte del nivel de red; un ejemplo es OSPF (protocolo
IP número 89).
TCP (protocolo IP número 6) es un mecanismo de transporte fiable y orientado a conexión, que proporciona un
flujo fiable de bytes, que asegura que los datos llegan completos, sin daños y en orden. TCP realiza
continuamente medidas sobre el estado de la red para evitar sobrecargarla con demasiado tráfico. Además,
TCP trata de enviar todos los datos correctamente en la secuencia especificada. Esta es una de las
principales diferencias con UDP, y puede convertirse en una desventaja en flujos en tiempo real (muy
sensibles a la variación del retardo) o aplicaciones de enrutamiento con porcentajes altos de pérdida en el
nivel de Internet. Más reciente es SCTP, también un mecanismo fiable y orientado a conexión. Está
relacionado con la orientación a byte, y proporciona múltiples sub-flujos multiplexados sobre la misma
conexión. También proporciona soporte de multihoming, donde una conexión puede ser representada por
múltiples direcciones IP (representando múltiples interfaces físicas), así si hay un fallo la conexión no se
interrumpe. Fue desarrollado inicialmente para aplicaciones telefónicas (para transportar SS7 sobre IP), pero
también fue usado para otras aplicaciones. UDP (protocolo IP número 17) es un protocolo de datagramas sin
conexión. Es un protocolo no fiable (best effort al igual que IP) - no porque sea particularmente malo, sino
porque no verifica que los paquetes lleguen a su destino, y no da garantías de que lleguen en orden. Si una
aplicación requiere estas características, debe llevarlas a cabo por sí misma o usar TCP. UDP es usado
normalmente para aplicaciones de streaming (audio, video, etc) donde la llegada a tiempo de los paquetes es
más importante que la fiabilidad, o para aplicaciones simples de tipo petición/respuesta como el servicio DNS,
donde la sobrecarga de las cabeceras que aportan la fiabilidad es desproporcionada para el tamaño de los
paquetes. DCCP está actualmente bajo desarrollo por el IETF. Proporciona semántica de control para flujos
TCP, mientras de cara al usuario se da un servicio de datagramas UDP. TCP y UDP: son usados para dar
servicio a una serie de aplicaciones de alto nivel. Las aplicaciones con una dirección de red dada son
distinguibles entre sí por su número de puerto TCP o UDP. Por convención, los puertos bien conocidos (well-
known ports) son asociados con aplicaciones específicas. RTP es un protocolo de datagramas que ha sido
diseñado para datos en tiempo real como el streaming de audio y video que se monta sobre UDP.
Nivel de Aplicacion
El nivel de aplicación es el nivel que los programas más comunes utilizan para comunicarse a través de una
red con otros programas. Los procesos que acontecen en este nivel son aplicaciones específicas que pasan
los datos al nivel de aplicación en el formato que internamente use el programa y es codificado de acuerdo con
un protocolo estándar. Algunos programas específicos se considera que se ejecutan en este nivel.
Proporcionan servicios que directamente trabajan con las aplicaciones de usuario. Estos programas y sus
correspondientes protocolos incluyen a HTTP (HyperText Transfer Protocol), FTP (Transferencia de archivos),
SMTP (correo electrónico), SSH (login remoto seguro), DNS (Resolución de nombres de dominio) y a muchos
otros. Una vez que los datos de la aplicación han sido codificados en un protocolo estándar del nivel de
aplicación son pasados hacia abajo al siguiente nivel de la pila de protocolos TCP/IP. En el nivel de transporte,
las aplicaciones normalmente hacen uso de TCP y UDP, y son habitualmente asociados a un número de
puerto bien conocido (well-known port). Los puertos fueron asignados originalmente por la IANA.
- 150 -
Protocolo TCP
Las conexiones TCP se componen de tres etapas: establecimiento de conexión, transferencia de datos y fin
de la conexión. Para establecer la conexión se usa el procedimiento llamado negociación en tres pasos (3-way
handshake). Una negociación en cuatro pasos (4-way handshake) es usada para la desconexión. Durante el
establecimiento de la conexión, algunos parámetros como el número de secuencia son configurados para
asegurar la entrega ordenada de los datos y la robustez de la comunicación.
Establecimiento de la conexion
Aunque es posible que un par de entidades finales comiencen una conexión entre ellas simultáneamente,
normalmente una de ellas abre un socket en un determinado puerto tcp y se queda a la escucha de nuevas
conexiones. Es común referirse a esto como apertura pasiva, y determina el lado servidor de una conexión. El
lado cliente de una conexión realiza una apertura activa de un puerto enviando un paquete SYN inicial al
servidor como parte de la negociación en tres pasos. En el lado del servidor se comprueba si el puerto está
abierto, es decir, si existe algún proceso escuchando en ese puerto. En caso de no estarlo, se envía al cliente
un paquete de respuesta con el bit RST activado, lo que significa el rechazo del intento de conexión. En caso
de que sí se encuentre abierto el puerto, el lado servidor respondería a la petición SYN válida con un paquete
SYN/ACK. Finalmente, el cliente debería responderle al servidor con un ACK, completando así la negociación
en tres pasos (SYN, SYN/ACK y ACK) y la fase de establecimiento de conexión. Es interesante notar que
existe un número de secuencia generado por cada lado, ayudando de este modo a que no se puedan
establecer conexiones falseadas (spoofing).
Transferencia de datos
Durante la etapa de transferencia de datos, una serie de mecanismos claves determinan la fiabilidad y
robustez del protocolo. Entre ellos están incluidos el uso del número de secuencia para ordenar los segmentos
TCP recibidos y detectar paquetes duplicados, checksums para detectar errores, y asentimientos y
temporizadores para detectar pérdidas y retrasos. Durante el establecimiento de conexión TCP, los números
iniciales de secuencia son intercambiados entre las dos entidades TCP. Estos números de secuencia son
usados para identificar los datos dentro del flujo de bytes, y poder identificar (y contar) los bytes de los datos
de la aplicación. Siempre hay un par de números de secuencia incluidos en todo segmento TCP, referidos al
número de secuencia y al número de asentimiento. Un emisor TCP se refiere a su propio número de secuencia
cuando habla de número de secuencia, mientras que con el número de asentimiento se refiere al número de
secuencia del receptor. Para mantener la fiabilidad, un receptor asiente los segmentos TCP indicando que ha
recibido una parte del flujo continuo de bytes. Una mejora de TCP, llamada asentimiento selectivo (SACK,
Selective Acknowledgement) permite a un receptor TCP asentir los datos que se han recibido de tal forma que
el remitente solo retransmita los segmentos de datos que faltan. A través del uso de números de secuencia y
asentimiento, TCP puede pasar los segmentos recibidos en el orden correcto dentro del flujo de bytes a la
aplicación receptora. Los números de secuencia son de 32 bits (sin signo), que vuelve a cero tras el siguiente
byte después del 232-1. Una de las claves para mantener la robustez y la seguridad de las conexiones TCP es
la selección del número inicial de secuencia (ISN, Initial Sequence Number). Un checksum de 16 bits,
- 151 -
consistente en el complemento a uno de la suma en complemento a uno del contenido de la cabecera y datos
del segmento TCP, es calculado por el emisor, e incluido en la transmisión del segmento. Se usa la suma en
complemento a uno porque el acarreo final de ese método puede ser calculado en cualquier múltiplo de su
tamaño (16-bit, 32-bit, 64-bit...) y el resultado, una vez plegado, será el mismo. El receptor TCP recalcula el
checksum sobre las cabeceras y datos recibidos. El complemento es usado para que el receptor no tenga que
poner a cero el campo del checksum de la cabecera antes de hacer los cálculos, salvando en algún lugar el
valor del checksum recibido; en vez de eso, el receptor simplemente calcula la suma en complemento a uno
con el checksum incluido, y el resultado debe ser igual a 0. Si es así, se asume que el segmento ha llegado
intacto y sin errores.
Hay que fijarse en que el checksum de TCP también cubre los 96 bit de la cabecera que contiene la dirección
origen, la dirección destino, el protocolo y el tamaño TCP. Esto proporciona protección contra paquetes mal
dirigidos por errores en las direcciones. El checksum de TCP es una comprobación bastante débil. En niveles
de enlace con una alta probabilidad de error de bit quizá requiera una capacidad adicional de
corrección/detección de errores de enlace. Si TCP fuese rediseñado hoy, muy probablemente tendría un
código de redundancia cíclica (CRC) para control de errores en vez del actual checksum. La debilidad del
checksum está parcialmente compensada por el extendido uso de un CRC en el nivel de enlace, bajo TCP e
IP, como el usado en el PPP o en Ethernet. Sin embargo, esto no significa que el checksum de 16 bits es
redundante: sorprendentemente, inspecciones sobre el tráfico de Internet han mostrado que son comunes los
errores de software y hardware[cita requerida] que introducen errores en los paquetes protegidos con un CRC,
y que el checksum de 16 bits de TCP detecta la mayoría de estos errores simples. Los asentimientos (ACKs o
Acknowledgments) de los datos enviados o la falta de ellos, son usados por los emisores para interpretar las
condiciones de la red entre el emisor y receptor TCP. Unido a los temporizadores, los emisores y receptores
TCP pueden alterar el comportamiento del movimiento de datos. TCP usa una serie de mecanismos para
conseguir un alto rendimiento y evitar la congestión de la red (la idea es enviar tan rápido como el receptor
pueda recibir). Estos mecanismos incluyen el uso de ventana deslizante, que controla que el transmisor
mande información dentro de los límites del buffer del receptor, y algoritmos de control de flujo, tales como el
algoritmo de Evitación de la Congestión (congestion avoidance), el de comienzo lento (Slow-start), el de
retransmisión rápida, el de recuperación rápida (Fast Recovery), y otros.
El tamaño de la ventana de recepción TCP es la cantidad de datos recibidos (en bytes) que pueden ser
metidos en el buffer de recepción durante la conexión. La entidad emisora puede enviar una cantidad
determinada de datos pero antes debe esperar un asentimiento con la actualización del tamaño de ventana
por parte del receptor. Un ejemplo sería el siguiente: un receptor comienza con un tamaño de ventana x y
recibe y bytes, entonces su tamaño de ventana será (x - y) y el transmisor sólo podrá mandar paquetes con un
tamaño máximo de datos de (x - y) bytes. Los siguientes paquetes recibidos seguirán restando tamaño a la
ventana de recepción. Esta situación seguirá así hasta que la aplicación receptora recoja los datos del buffer
de recepción.
- 152 -
Escalado de ventana
Para una mayor eficiencia en redes de gran ancho de banda, debe ser usado un tamaño de ventana mayor. El
campo TCP de tamaño de ventana controla el movimiento de datos y está limitado a 16 bits, es decir, a un
tamaño de ventana de 65.535 bytes. Como el campo de ventana no puede expandirse se usa un factor de
escalado. La escala de ventana TCP (TCP window scale) es una opción usada para incrementar el máximo
tamaño de ventana desde 65.535 bytes, a 1 Gigabyte. La opción de escala de ventana TCP es usada solo
durante la negociación en tres pasos que constituye el comienzo de la conexión. El valor de la escala
representa el número de bits desplazados a la izquierda de los 16 bits que forman el campo del tamaño de
ventana. El valor de la escala puede ir desde 0 (sin desplazamiento) hasta 14. Hay que recordar que un
número binario desplazado un bit a la izquierda es como multiplicarlo en base decimal por 2.
Fin de la conexion
La fase de finalización de la conexión usa una negociación en cuatro pasos (four-way handshake), terminando
la conexión desde cada lado independientemente. Cuando uno de los dos extremos de la conexión desea
parar su "mitad" de conexión transmite un paquete FIN, que el otro interlocutor asentirá con un ACK. Por tanto,
una desconexión típica requiere un par de segmentos FIN y ACK desde cada lado de la conexión.
Una conexión puede estar "medio abierta" en el caso de que uno de los lados la finalice pero el otro no. El lado
que ha dado por finalizada la conexión no puede enviar más datos pero la otra parte si podrá.
Puertos TCP
TCP usa el concepto de número de puerto para identificar a las aplicaciones emisoras y receptoras. Cada lado
de la conexión TCP tiene asociado un número de puerto (de 16 bits sin signo, con lo que existen 65536
puertos posibles) asignado por la aplicación emisora o receptora. Los puertos son clasificados en tres
categorías: bien conocidos, registrados y dinámicos/privados. Los puertos bien conocidos son asignados por
la Internet Assigned Numbers Authority (IANA), van del 0 al 1023 y son usados normalmente por el sistema o
por procesos con privilegios. Las aplicaciones que usan este tipo de puertos son ejecutadas como servidores
y se quedan a la escucha de conexiones. Algunos ejemplos son: FTP (21), SSH (22), Telnet (23), SMTP (25) y
HTTP (80). Los puertos registrados son normalmente empleados por las aplicaciones de usuario de forma
temporal cuando conectan con los servidores, pero también pueden representar servicios que hayan sido
registrados por un tercero (rango de puertos registrados: 1024 al 49151). Los puertos dinámicos/privados
también pueden ser usados por las aplicaciones de usuario, pero este caso es menos común. Los puertos
dinámicos/privados no tienen significado fuera de la conexión TCP en la que fueron usados (rango de puertos
dinámicos/privados: 49152 al 65535, recordemos que el rango total de 2 elevado a la potencia 16, cubre
65536 números, del 0 al 65535).
Protocolo UDP
- 153 -
User Datagram Protocol (UDP) es un protocolo del nivel de transporte basado en el intercambio de
datagramas. Permite el envío de datagramas a través de la red sin que se haya establecido previamente una
conexión, ya que el propio datagrama incorpora suficiente información de direccionamiento en su cabecera.
Tampoco tiene confirmación ni control de flujo, por lo que los paquetes pueden adelantarse unos a otros; y
tampoco se sabe si ha llegado correctamente, ya que no hay confirmación de entrega o recepción. Su uso
principal es para protocolos como DHCP, BOOTP, DNS y demás protocolos en los que el intercambio de
paquetes de la conexión/desconexión son mayores, o no son rentables con respecto a la información
transmitida, así como para la transmisión de audio y vídeo en tiempo real, donde no es posible realizar
retransmisiones por los estrictos requisitos de retardo que se tiene en estos casos.
Puertos TCP
UDP utiliza puertos para permitir la comunicación entre aplicaciones. El campo de puerto tiene una longitud de
16 bits, por lo que el rango de valores válidos va de 0 a 65.535. El puerto 0 está reservado, pero es un valor
permitido como puerto origen si el proceso emisor no espera recibir mensajes como respuesta. Los puertos 1
a 1023 se llaman puertos "bien conocidos" y en sistemas operativos tipo Unix enlazar con uno de estos
puertos requiere acceso como superusuario. Los puertos 1024 a 49.151 son puertos registrados. Los puertos
49.152 a 65.535 son puertos efímeros y son utilizados como puertos temporales, sobre todo por los clientes al
comunicarse con los servidores.
UDP: proporciona un nivel de transporte no fiable de datagramas, ya que apenas añade la información
necesaria para la comunicación extremo a extremo al paquete que envía al nivel inferior. Lo utilizan
aplicaciones como NFS (Network File System) y RCP (comando para copiar ficheros entre ordenadores
remotos), pero sobre todo se emplea en tareas de control y en la transmisión de audio y vídeo a través de una
red. No introduce retardos para establecer una conexión, no mantiene estado de conexión alguno y no realiza
seguimiento de estos parámetros. Así, un servidor dedicado a una aplicación particular puede soportar más
clientes activos cuando la aplicación corre sobre UDP en lugar de sobre TCP.
TCP: es el protocolo que proporciona un transporte fiable de flujo de bits entre aplicaciones. Está pensado
para poder enviar grandes cantidades de información de forma fiable, liberando al programador de la dificultad
de gestionar la fiabilidad de la conexión (retransmisiones, pérdida de paquetes, orden en el que llegan los
paquetes, duplicados de paquetes...) que gestiona el propio protocolo. Pero la complejidad de la gestión de la
fiabilidad tiene un coste en eficiencia, ya que para llevar a cabo las gestiones anteriores se tiene que añadir
bastante información a los paquetes que enviar. Debido a que los paquetes para enviar tienen un tamaño
máximo, cuanta más información añada el protocolo para su gestión, menos información que proviene de la
aplicación podrá contener ese paquete (el segmento TCP tiene una sobrecarga de 20 bytes en cada
segmento, mientras que UDP solo añade 8 bytes). Por eso, cuando es más importante la velocidad que la
fiabilidad, se utiliza UDP. En cambio, TCP asegura la recepción en destino de la información para transmitir.
109.5 Protocolo ICMP El Protocolo de Mensajes de Control de Internet o ICMP (por sus siglas de Internet
Control Message Protocol) es el sub protocolo de control y notificación de errores del Protocolo de Internet
- 154 -
(IP). Como tal, se usa para enviar mensajes de error, indicando por ejemplo que un servicio determinado no
está disponible o que un router o host no puede ser localizado. ICMP difiere del propósito de TCP y UDP ya
que generalmente no se utiliza directamente por las aplicaciones de usuario en la red. La única excepción es la
herramienta ping y traceroute, que envían mensajes de petición Echo ICMP (y recibe mensajes de respuesta
Echo) para determinar si un host está disponible, el tiempo que le toma a los paquetes en ir y regresar a ese
host y cantidad de hosts por los que pasa.
Puerto/Protocolo Descripcion
1/tcp Multiplexor TCP
7/tcp Protocolo Echo (Eco) Reponde con eco a llamadas remotas
7/udp Protocolo Echo (Eco) Reponde con eco a llamadas remotas
9/tcp Protocolo Discard Elimina cualquier dato que recibe
9/udp Protocolo Discard Elimina cualquier dato que recibe
13/tcp Protocolo Daytime Fecha y hora actuales
17/tcp Quote of the Day (Cita del Día)
19/tcp Protocolo Chargen Generador de caractéres
19/udp Protocolo Chargen Generador de caractéres
0 FTP File Transfer Protocol (Protocolo de Transferencia de Ficheros) datos
21/tcp FTP File Transfer Protocol (Protocolo de Transferencia de Ficheros) control
22/tcp SSH, scp, SFTP
23/tcp Telnet comunicaciones de texto inseguras
25/tcp SMTP Simple Mail Transfer Protocol (Protocolo Simple de Transferencia de Correo)
37/tcp time
43/tcp nicname
53/tcp DNS Domain Name System (Sistema de Nombres de Dominio)
53/udp DNS Domain Name System (Sistema de Nombres de Dominio)
67/udp BOOTP BootStrap Protocol (Server), también usado por DHCP
68/udp BOOTP BootStrap Protocol (Client), también usado por DHCP
69/udp TFTP Trivial File Transfer Protocol (Protocolo Trivial de Transferencia de
Ficheros)
0 Gopher
79/tcp Finger
0 HTTP HyperText Transfer Protocol (Protocolo de Transferencia de HiperTexto) (WWW)
88/tcp Kerberos Agente de autenticación
0 POP3 Post Office Protocol (Email)
111/tcp sunrpc
113/tcp ident (auth) antiguo sistema de identificación
119/tcp NNTP usado en los grupos de noticias de usenet
123/udp NTP Protocolo de sincronización de tiempo
123/tcp NTP Protocolo de sincronización de tiempo
135/tcp epmap
137/tcp NetBIOS Servicio de nombres
137/udp NetBIOS Servicio de nombres
138/tcp NetBIOS Servicio de envío de datagramas
138/udp NetBIOS Servicio de envío de datagramas
139/tcp NetBIOS Servicio de sesiones
139/udp NetBIOS Servicio de sesiones
143/tcp IMAP4 Internet Message Access Protocol (Email)
161/tcp SNMP Simple Network Management Protocol
161/udp SNMP Simple Network Management Protocol
162/tcp SNMPtrap
162/udp SNMPtrap
177/tcp XDMCP Protocolo de gestión de displays en X11
177/udp XDMCP Protocolo de gestión de displays en X11
389/tcp LDAP Protocolo de acceso ligero a Bases de Datos
- 155 -
389/udp LDAP Protocolo de acceso ligero a Bases de Datos
443/tcp HTTPS/SSL usado para la transferencia segura de páginas web
445/tcp MicrosoftDS (Active Directory, compartición en Windows, gusano Sasser,
Agobot)
445/udp MicrosoftDS compartición de ficheros
0 IPSec ISAKMP, Autoridad de Seguridad Local
512/tcp exec
513/tcp login
514/udp syslog usado para logs del sistema
0 RIP
591/tcp FileMaker 6.0 (alternativa para HTTP, ver puerto 80)
631/tcp CUPS sistema de impresión de Unix
666/tcp identificación de Doom para jugar sobre TCP
993/tcp IMAP4 sobre SSL (Email)
995/tcp POP3 sobre SSL (Email)
0 SOCKS Proxy
1337/tcp suele usarse en máquinas comprometidas o infectadas
1352/tcp IBM Lotus Notes/Domino RCP
1433/tcp MicrosoftSQLServer
1434/tcp MicrosoftSQLMonitor
1434/udp MicrosoftSQLMonitor
1494/tcp Citrix MetaFrame Cliente ICA
1512/tcp WINS
1521/tcp Oracle listener por defecto
0Enrutamiento y Acceso Remoto para VPN con L2TP.
1723/tcp Enrutamiento y Acceso Remoto para VPN con PPTP.
1761/tcp Novell Zenworks Remote Control utility
1863/tcp MSN Messenger
0 NFS Archivos del sistema de red
0 CPanel puerto por defecto
0 Web Host Manager puerto por defecto
2427/upd Cisco MGCP
0 NetPanzer
0 NetPanzer
3128/tcp HTTP usado por web caches y por defecto en Squid cache
3128/tcp NDLAAS
0 MySQL sistema de gestión de bases de datos
3389/tcp RDP (Remote Desktop Protocol)
3396/tcp Novell agente de impresión NDPS
0 Subversion (sistema de control de versiones)
4662/tcp eMule (aplicación de compartición de ficheros)
4672/udp eMule (aplicación de compartición de ficheros)
4899/tcp RAdmin (Remote Administrator), herramienta de administración remota
(normalmente troyanos)
0 Universal plugandplay
0 Session Initiation Protocol (SIP)
0 AOL y AOL Instant Messenger
5222/tcp XMPP/Jabber conexión de cliente
5223/tcp XMPP/Jabber puerto por defecto para conexiones de cliente SSL
5269/tcp XMPP/Jabber conexión de servidor
5432/tcp PostgreSQL sistema de gestión de bases de datos
5517/tcp Setiqueue proyecto SETI@Home
5631/tcp PCAnywhere protocolo de escritorio remoto
5632/udp PCAnywhere protocolo de escritorio remoto
0 VNC protocolo de escritorio remoto (usado sobre HTTP)
0 VNC protocolo de escritorio remoto (usado sobre HTTP)
0 VNC protocolo de escritorio remoto (usado sobre HTTP)
0 VNC protocolo de escritorio remoto (usado sobre HTTP)
0 VNC protocolo de escritorio remoto (usado sobre HTTP)
0 VNC protocolo de escritorio remoto (conexión normal)
6000/tcp X11 usado para Xwindows
6112/udp Blizzard
6129/tcp Dameware Software conexión remota
6346/tcp Gnutella compartición de ficheros (Limewire, etc.)
6347/udp Gnutella
6348/udp Gnutella
- 156 -
6349/udp Gnutella
0 Gnutella
6355/udp Gnutella
6667/tcp IRC IRCU Internet Relay Chat
6881/tcp BitTorrent puerto por defecto
6969/tcp BitTorrent puerto de tracker
0 Servidor de Fuentes X11
7100/udp Servidor de Fuentes X11
0 iRDMI por lo general, usado erróneamente en sustitución de 8080. También
utilizado en el servidor de streaming ShoutCast.
0 HTTP HTTPALT ver puerto 80. Tomcat lo usa como puerto por defecto.
8118/tcp privoxy
0 Pichat peertopeer chat server
9898/tcp Gusano Dabber (troyano/virus)
0 Webmin (Administración remota web)
19226/tcp Panda SecurityPuerto de comunicaciones de Panda Agent.
12345/tcp NetBus en:NetBus (troyano/virus)
31337/tcp Back Orifice herramienta de administración remota (por lo general
troyanos)
Direcciones IP
Una dirección IP es un número que identifica de manera lógica y jerárquica a una interfaz de un dispositivo
(habitualmente una computadora) dentro de una red que utilice el protocolo IP (Internet Protocol), que
corresponde al nivel de red del protocolo TCP/IP. Dicho número no se ha de confundir con la dirección MAC
que es un número hexadecimal fijo que es asignado a la tarjeta o dispositivo de red por el fabricante, mientras
que la dirección IP se puede cambiar. Es habitual que un usuario que se conecta desde su hogar a Internet
utilice una dirección IP. Esta dirección puede cambiar cada vez que se conecta; y a esta forma de asignación
de dirección IP se denomina una dirección IP dinámica (normalmente se abrevia como IP dinámica). Los sitios
de Internet que por su naturaleza necesitan estar permanentemente conectados, generalmente tienen una
dirección IP fija (se aplica la misma reducción por IP fija o IP estática), es decir, no cambia con el tiempo. Los
servidores de correo, DNS, FTP públicos, y servidores de páginas web necesariamente deben contar con una
dirección IP fija o estática, ya que de esta forma se permite su localización en la red. A través de Internet, los
ordenadores se conectan entre sí mediante sus respectivas direcciones IP. Sin embargo, a los seres humanos
nos es más cómodo utilizar otra notación más fácil de recordar y utilizar, como los nombres de dominio; la
traducción entre unos y otros se resuelve mediante los servidores de nombres de dominio DNS. Existe un
protocolo para asignar direcciones IP dinámicas llamado DHCP (Dynamic Host Configuration Protocol).
Direcciones IPv4
En su versión 6.55, una dirección IP se implementa con un número de 32 bit que suele ser mostrado en cuatro
grupos de números decimales de 8 bits (IPv4). Cada uno de esos números se mueve en un rango de 0 a 255
(expresado en decimal), o de 0 a FF (en hexadecimal) o de 0 a 11111111 (en binario). Las direcciones IP se
pueden expresar como números de notación decimal: se dividen los 32 bits de la dirección en cuatro octetos.
El valor decimal de cada octeto puede ser entre 0 y 255 (el número binario de 8 bits más alto es 11111111 y
esos bits, de derecha a izquierda, tienen valores decimales de 1, 2, 4, 8, 16, 32, 64 y 128, lo que suma 255 en
total).
- 157 -
En la expresión de direcciones IPv4 en decimal se separa cada octeto por un carácter ".". Cada uno de estos
octetos puede estar comprendido entre 0 y 255, salvo algunas excepciones. Los ceros iniciales, si los hubiera,
se pueden obviar.
En una red de clase A, se asigna el primer octeto para identificar la red, reservando los tres últimos octetos (24
bits) para que sean asignados a los hosts, de modo que la cantidad máxima de hosts es 224 - 2 (las
direcciones reservadas de broadcast [últimos octetos a 255] y de red [últimos octetos a 0]), es decir, 16 777
214 hosts.
En una red de clase B, se asignan los dos primeros octetos para identificar la red, reservando los dos octetos
finales (16 bits) para que sean asignados a los hosts, de modo que la cantidad máxima de hosts es 216 - 2, o
65 534 hosts.
En una red de clase C, se asignan los tres primeros octetos para identificar la red, reservando el octeto final (8
bits) para que sea asignado a los hosts, de modo que la cantidad máxima de hosts es 28 - 2, ó 254 hosts.
La dirección 0.0.0.0 es utilizada por las máquinas cuando están arrancando o no se les ha asignado dirección.
La dirección que tiene su parte de host a cero sirve para definir la red en la que se ubica. Se denomina
dirección de red.
La dirección que tiene su parte de host a unos sirve para comunicar con todos los hosts de la red en la que se
ubica. Se denomina dirección de broadcast.
Las direcciones 127.x.x.x se reservan para pruebas de retroalimentación. Se denomina dirección de bucle
local o loopback.
Hay ciertas direcciones en cada clase de dirección IP que no están asignadas y que se denominan
direcciones privadas. Las direcciones privadas pueden ser utilizadas por los hosts que usan traducción de
dirección de red (NAT) para conectarse a una red pública o por los hosts que no se conectan a Internet. En
una misma red no puede existir dos direcciones iguales, pero sí se pueden repetir en dos redes privadas que
no tengan conexión entre sí o que se sea a través de NAT. Las direcciones privadas son:
- 158 -
mínimas posibles, para rodear el problema que las distribución por clases había estado gestando. Este
sistema es, de hecho, el empleado actualmente para la delegación de direcciones. Muchas aplicaciones
requieren conectividad dentro de una sola red, y no necesitan conectividad externa. En las redes de gran
tamaño a menudo se usa TCP/IP. Por ejemplo, los bancos pueden utilizar TCP/IP para conectar los cajeros
automáticos que no se conectan a la red pública, de manera que las direcciones privadas son ideales para
ellas. Las direcciones privadas también se pueden utilizar en una red en la que no hay suficientes direcciones
públicas disponibles. Las direcciones privadas se pueden utilizar junto con un servidor de traducción de
direcciones de red (NAT) para suministrar conectividad a todos los hosts de una red que tiene relativamente
pocas direcciones públicas disponibles. Según lo acordado, cualquier tráfico que posea una dirección destino
dentro de uno de los intervalos de direcciones privadas no se enrutará a través de Internet.
La máscara permite distinguir los bits que identifican la red y los que identifican el host de una dirección IP.
Dada la dirección de clase A 10.2.1.2 sabemos que pertenece a la red 10.0.0.0 y el host al que se refiere es el
2.1.2 dentro de la misma. La máscara se forma poniendo a 1 los bits que identifican la red y a 0 los bits que
identifican el host. De esta forma una dirección de clase A tendrá como máscara 255.0.0.0, una de clase B
255.255.0.0 y una de clase C 255.255.255.0. Los dispositivos de red realizan un AND entre la dirección IP y la
máscara para obtener la dirección de red a la que pertenece el host identificado por la dirección IP dada. Por
ejemplo un router necesita saber cuál es la red a la que pertenece la dirección IP del datagrama destino para
poder consultar la tabla de encaminamiento y poder enviar el datagrama por la interfaz de salida.
Creacion de Subredes
El espacio de direcciones de una red puede ser subdividido a su vez creando subredes autónomas separadas.
Un ejemplo de uso es cuando necesitamos agrupar todos los empleados pertenecientes a un departamento de
una empresa. En este caso crearíamos una subred que englobara las direcciones IP de éstos. Para
conseguirlo hay que reservar bits del campo host para identificar la subred estableciendo a uno los bits de red-
subred en la máscara. Por ejemplo la dirección 172.16.1.1 con máscara 255.255.0.0 nos indica que los dos
primeros bytes identifican la red (por ser una dirección de clase B), el tercer byte identifica la subred (a 1 los
bits en la máscara) y el tercero identifica el host (a 0 los bits correpondientes dentro de la máscara). Hay dos
direcciones de cada subred quedan reservadas: aquella que identifica la subred (campo host a 0) y la
dirección para realizar broadcast en la subred (campo host a 1).
IP dinamica
Una dirección IP dinámica es una IP asignada mediante un servidor DHCP (Dynamic Host Configuration
Protocol) al usuario. La IP que se obtiene tiene una duración máxima determinada. El servidor DHCP provee
parámetros de configuración específicos para cada cliente que desee participar en la red IP. Entre estos
parámetros se encuentra la dirección IP del cliente. DHCP apareció como protocolo estándar en octubre de
1993. El estándar RFC 2131 especifica la última definición de DHCP (marzo de 1997). DHCP sustituye al
- 159 -
protocolo BOOTP, que es más antiguo. Debido a la compatibilidad retroactiva de DHCP, muy pocas redes
continúan usando BOOTP puro. Las IP dinámicas son las que actualmente ofrecen la mayoría de operadores.
Éstas suelen cambiar cada vez que el usuario reconecta por cualquier causa.
Ventajas
Reduce los costos de operación a los proveedores de servicios internet (ISP).
Reduce la cantidad de IP´s asignadas (de forma fija) inactivas.
Desventajas
Obliga a depender de servicios que redirigen un host a una IP.
Asignacion de direcciones IP
Dependiendo de la implementación concreta, el servidor DHCP tiene tres métodos para asignar las
direcciones IP:
manualmente, cuando el servidor tiene a su disposición una tabla que empareja direcciones MAC con
direcciones IP, creada manualmente por el administrador de la red. Sólo clientes con una dirección MAC
válida recibirán una dirección IP del servidor.
automáticamente, donde el servidor DHCP asigna permanentemente una dirección IP libre, tomada de un
rango prefijado por el administrador, a cualquier cliente que solicite una.
dinámicamente, el único método que permite la reutilización de direcciones IP. El administrador de la red
asigna un rango de direcciones IP para el DHCP y cada ordenador cliente de la LAN tiene su software de
comunicación TCP/IP configurado para solicitar una dirección IP del servidor DHCP cuando su tarjeta de
interfaz de red se inicie. El proceso es transparente para el usuario y tiene un periodo de validez limitado.
IP fija
Una dirección IP fija es una IP asignada por el usuario de manera manual. Mucha gente confunde IP Fija con
IP Publica e IP Dinámica con IP Privada. Una IP puede ser Privada ya sea dinámica o fija como puede ser IP
Publica Dinámica o Fija. Una IP Publica se utiliza generalmente para montar servidores en internet y
necesariamente se desea que la IP no cambie por eso siempre la IP Publica se la onfigura de manera Fija y no
Dinámica, aunque si se podría. En el caso de la IP Privada generalmente es dinámica asignada por un
servidor DHCP, pero en algunos casos se configura IP Privada Fija para poder controlar el acceso a internet o
a la red local, otorgando ciertos privilegios dependiendo del número de IP que tenemos, si esta cambiara
(fuera dinámica) seria más complicado controlar estos privilegios (pero no imposible) Las IP Publicas fijas
actualmente en el mercado de acceso a Internet tienen un coste adicional mensual. Estas IP son asignadas
por el usuario después de haber recibido la información del proveedor o bien asignadas por el proveedor en el
momento de la primera conexión. Esto permite al usuario montar servidores web, correo, FTP, etc. y dirigir un
nombre de dominio a esta IP sin tener que mantener actualizado el servidor DNS cada vez que cambie la IP
como ocurre con las IP Publica dinámica.
Ventajas
Permite tener servicios dirigidos directamente a la IP.
Desventajas
Son más vulnerables al ataque, puesto que el usuario no puede conseguir otra IP.
Es más caro para los ISP puesto que esa IP puede no estar usándose las 24 horas del día.
- 160 -
Direcciones IPv6
La función de la dirección IPv6 es exactamente la misma a su predecesor IPv4, pero dentro del protocolo IPv6.
Está compuesta por 8 segmentos de 2 bytes cada uno, que suman un total de 128 bits, el equivalente a unos
3.4x1038 hosts direccionables. La ventaja con respecto a la dirección IPv4 es obvia en cuanto a su capacidad
de direccionamiento. Su representación suele ser hexadecimal y para la separación de cada par de octetos se
emplea el símbolo ":". Un bloque abarca desde 0000 hasta FFFF. Algunas reglas acerca de la representación
de direcciones IPv6 son:
Los bloques contiguos de ceros se pueden comprimir empleando "::". Esta operación sólo se puede hacer una
vez.
Ejemplo: 2001:0:0:0:0:0:0:4 -> 2001::4. Ejemplo no válido: 2001:0:0:0:2:0:0:1 -> 2001::2::1 (debería ser
2001::2:0:0:1 ó 2001:0:0:0:2::1).
Fichero /etc/services
El fichero /etc/services contiene una lista de todos los puertos que GNU/Linux utiliza. Para listar el contenido
de este fichero teclee lo siguiente:
[BASH]# cat /etc/services
FTP
FTP (sigla en inglés de File Transfer Protocol - Protocolo de Transferencia de Archivos) en informática, es un
protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP, basado en la
arquitectura cliente-servidor. Desde un equipo cliente se puede conectar a un servidor para descargar
archivos desde él o para enviarle archivos, independientemente del sistema operativo utilizado en cada
equipo. El Servicio FTP es ofrecido por la capa de Aplicación del modelo de capas de red TCP/IP al usuario,
utilizando normalmente el puerto de red 20 y el 21. Un problema básico de FTP es que está pensado para
ofrecer la máxima velocidad en la conexión, pero no la máxima seguridad, ya que todo el intercambio de
información, desde el login y password del usuario en el servidor hasta la transferencia de cualquier archivo,
se realiza en texto plano sin ningún tipo de cifrado, con lo que un posible atacante puede capturar este tráfico,
acceder al servidor, o apropiarse de los archivos transferidos. Para solucionar este problema son de gran
utilidad aplicaciones como scp y sftp, incluidas en el paquete SSH, que permiten transferir archivos pero
cifrando todo el tráfico.
- 161 -
Telnet
Telnet (TELecommunication NETwork) es el nombre de un protocolo de red (y del programa informático que
implementa el cliente), que sirve para acceder mediante una red a otra máquina, para manejarla remotamente
como si estuviéramos sentados delante de ella. Para que la conexión funcione, como en todos los servicios de
Internet, la máquina a la que se acceda debe tener un programa especial que reciba y gestione las
conexiones. El puerto que se utiliza generalmente es el 23.
Ping
La utilidad ping comprueba el estado de la conexión con uno o varios equipos remotos por medio de los
paquetes de solicitud de eco y de respuesta de eco (ambos definidos en el protocolo de red ICMP) para
determinar si un sistema IP específico es accesible en una red. Es útil para diagnosticar los errores en redes o
enrutadores IP. Muchas veces se utiliza para medir la latencia o tiempo que tardan en comunicarse dos puntos
remotos, y por ello, se utiliza entre los aficionados a los juegos en red el término PING para referirse al lag o
latencia de su conexión. Existe otro tipo, Ping ATM, que se utiliza en las redes ATM (como puede ser una
simple ADSL instalada en casa) y, en este caso, las tramas que se transmiten son ATM (nivel 2 del modelo
OSI). Este tipo de paquetes se envían para probar si los enlaces ATM están correctamente definidos.
Dig
Dig es una herramienta (linea de comandos) disponible en prácticamente cualquier distribución linux que te
permite hacer consultas a un servidor dns. Dig precisa conocer la dirección IP de un servidor DNS al que
consultar por defecto, dirección IP que toma del archivo resolv.conf, y en sistemas GNU/Linux en
/etc/resolv.conf
Traceroute
Traceroute es una herramienta de diagnóstico de redes que permite seguir la pista de los paquetes que van
desde un host (punto de red) a otro. Se obtiene además una estadística del RTT o latencia de red de esos
paquetes, lo que viene a ser una estimación de la distancia a la que están los extremos de la comunicación.
Esta herramienta se llama traceroute en UNIX y GNU/linux, mientras que en Windows se llama tracert.
Ejemplo:
[BASH]# traceroute www.google.com
- 162 -
7 sl-bb20-mia-5-0-0.sprintlink.net (144.232.9.198) 95 ms 93 ms 93 ms 8 sl-crs1-mia-0-4-0-0.sprintlink.net
(144.232.2.248) 94 ms 95 ms 95 ms 9 sl-crs1-atl-0-0-0-1.sprintlink.net (144.232.20.48) 104 ms 104 ms 103
ms 10 sl-st20-atl-1-0-0.sprintlink.net (144.232.18.133) 104 ms 103 ms 11 144.223.47.234 (144.223.47.234)
103 ms 103 ms 103 ms 12 64.233.174.86 (64.233.174.86) 98 ms 97 ms 64.233.174.84 (64.233.174.84) 103
ms 13 216.239.48.68 (216.239.48.68) 105 ms 104 ms 106 ms 14 72.14.236.200 (72.14.236.200) 106 ms 105
ms 15 72.14.232.21 (72.14.232.21) 110 ms 109 ms 107 ms 16 yo-in-f99.google.com (64.233.169.99) 100 ms
99 ms
Funcionamiento
El número de la primera columna es el número de salto, los tres tiempos siguientes son el tiempo de respuesta
para los paquetes enviados (un asterisco indica que no se obtuvo respuesta), posteriormente viene el nombre
y la dirección IP del nodo por el que pasa. Estas herramientas (traceroute y tracert) son órdenes ejecutables
en una consola en modo texto. Tracert utiliza el campo Time To Live (TTL) de la cabecera IP. Este campo
sirve para que un paquete no permanezca en la red de forma indefinida (por ejemplo, debido a la existencia en
la red de un bucle cerrado en la ruta). El campo TTL es un número entero que es decrementado por cada nodo
por el que pasa el paquete. De esta forma, cuando el campo TTL llega al valor 0 ya no se reenviará más, sino
que el nodo que lo esté manejando en ese momento lo descartará. Lo que hace tracert es mandar paquetes a
la red de forma que el primer paquete lleve un valor TTL=1, el segundo un TTL=2, etc. De esta forma, el
primer paquete será eliminado por el primer nodo al que llegue (ya que éste nodo decrementará el valor TTL,
llegando a cero). Cuando un nodo elimina un paquete, envía al emisor un mensaje de control especial
indicando una incidencia. Tracert usa esta respuesta para averiguar la dirección IP del nodo que desechó el
paquete, que será el primer nodo de la red. La segunda vez que se manda un paquete, el TTL vale 2, por lo
que pasará el primer nodo y llegará al segundo, donde será descartado, devolviendo de nuevo un mensaje de
control. Esto se hace de forma sucesiva hasta que el paquete llega a su destino.
/etc/hosts Este archivo de configuración contiene los nombres de equipos dentro de una red local y se
utilizar para resolver su nombre cuando no se tiene un servidor de DNS en la red local, también este archivo
define la dirección de loopback que representa al propio equipo independientemente de la dirección IP que se
le haya asignado.
/etc/resolv.conf Este archivo especifica las direcciones IP de los servidores DNS
/etc/sysconfig/network Este archivo de configuración es utilizado para definir las características de red
deseadas
/etc/sysconfig/network scripts/ifcfg-<interfaz> Estos archivos de configuración son utilizados para
especificar la configuración de la tarjeta de red.
- 163 -
Configuracion del archivo /etc/hosts
Este archivo de texto asocia las direcciones IP con el nombre del equipo (hostname). Este archivo debe tener
la siguiente forma:
nameserver Define las direcciones IP de los servidores de nombre en los cuales se deberán resolver las
búsquedas. El archivos hosts solo permite hasta 3 servidores de nombre diferentes
domain Define el nombre de dominio local en el cual pertenecen los equipos en una red local.
search Este parámetro define la lista de búsqueda nombres de equiposes útil cuando se busca un equipo
dentro de la red local por un nombre corto
sortlist Este parámetro indica la preferencia de los nameserver definidos
/etc/sysconfig/network-scripts/
Dentro de este directorio se encuentran los archivos de configuración de los dispositivos, dependiendo del
numero de interfaces de red instaladas en el computadora será el numero de archivos de configuración, el
nombre de estos archivos depende del tipo de dispositivo
- 164 -
Ethernet ifcfg-eth0, ifcfg-eth1, ..., ifcfg-ethN.
Wi-Fi ifcfg-wlan0, ifcfg-wlan1, ..., Ifcfg-wlanN.
Modem ifcfg-ppp0, ifcfg-ppp1, ..., ifcfg-pppN.
en donde N representa el numero de interfaz a configurar. Los parámetros que admiten los archivos de
configuración de la interfaz de red Ethernet son los siguientes:
DEVICE=eth0
BOOTPROTO=static IPADDR=192.168.2.10 NETMASK=255.255.255.0 NETWORK=192.168.2.0
GATEWAY=192.168.2.254 DNS1=192.168.2.1 HWADDR= 00:1E:EC:6E:CD:51
Tareas de Administracion de Seguridad
El Protocolo SSH
El protocolo SSH (Secure Shell) es una herramienta que nos permite conectarnos a equipos remotos
(Servidores en Producción) así mismo, nos da la capacidad de llevar a cabo tareas administrativas dentro del
mismo como, activar o apagar servicios, Además de la conexión a otros equipos, SSH nos permite copiar
datos de forma segura, gestionar claves RSA para no escribir claves al conectar a las máquinas y pasar los
datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH. Una clave RSA (Sistema
Criptografico con Clave Publica) es un algoritmo que genera un par de llaves de autenticacion, la publica y la
privada. La publica se distribuye en forma autenticada y la privada que generalmente es guardada en secreto
por el propietario. El protocolo SSH (Secure Shell) esta implementado bajo el estándar TCP/IP, el cual a su
vez se encuentra dividido en 5 secciones:
1.Nivel Físico 2.Nivel De Enlace 3.Nivel de Internet 4.Nivel de Transporte 5.Nivel de Aplicación
Por lo que el protocolo SSH esta ubicado en la quinta capa del modelo TCP/IP, nos referimos a la capa de
- 165 -
aplicación La capa de aplicación es el nivel que los programas más comunes utilizan para comunicarse a
través de una red con otros programas. Los procesos que acontecen en este nivel son aplicaciones
específicas que pasan los datos al nivel de aplicación en el formato que internamente use el programa y es
codificado de acuerdo con un protocolo estándar. De manera predeterminada, el protocolo SSH atiende
peticiones por el puerto 22 En este capitulo haremos uso de OpenSSH la cual es la alternativa libre y abierta al
programa propietario SSH
Acerca de OpenSSH
OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas
a través de una red, usando como base al protocolo SSH. Este proyecto es liderado actualmente por Theo de
Raadt quien actualmente es fundador y líder de proyectos como OpenBSD. Los desarrolladores de OpenSSH
aseguran que este es más seguro que el original, lo cual es debido a la conocida reputación de los
desarrolladores de OpenBSD por crear código limpio y perfectamente auditado, lo que contribuye a que sea
más seguro. Su seguridad también es atribuible al hecho de que su código fuente se distribuya libremente con
una licencia BSD. Aunque todo el código fuente del SSH original también está disponible, existen restricciones
con respecto a su uso y distribución, lo que convierte a OpenSSH en un proyecto mucho más atractivo a la
hora de atraer nuevos desarrolladores.
Además de la conexión a otros equipos, openSSH nos permite copiar datos de forma segura mediante la
implementación de dos herramientas proporcionadas por openSSH, estas son:
SCP
SFTP
Estas herramientas en realidad tienen la misma función de copiado solo se diferencian en la forma en como
son aplicadas tema del cual hablaremos mas adelante.
Instalando OpenSSH
A partir de este punto empezaremos a descargar los paquetes necesarios para el perfecto funcionamiento de
openSSH, de esta manera si usted se encuentra trabajando bajo algún ambiente gráfico, sea KDE o GNOME
le pedimos abra una terminal de BASH, por otra parte si usted se encuentra trabajando bajo linea de
comandos no tendrá que hacer nada. Los paquetes a descargar son los siguientes:
openssh
opensshclients
opensshserver
[root@ localhost ] # yum install y openssh opensshclients opensshserver
Una vez finalizado el proceso de instalación pasaremos con las configuraciones propias de openSSH, nos
referimos a los ficheros de configuración
- 166 -
Archivos de configuración de OpenSSH
OpenSSH dispone de dos conjuntos diferentes de ficheros de configuración: uno completamente dedicado al
cliente (ssh, scp y sftp) y otro orientado completamente al servidor.
/etc/ssh/
Dentro del directorio podemos encontrar los siguientes ficheros de configuración:
sshd_config El archivo de configuración para el demonio sshd
ssh_host_dsa_key La clave privada DSA usada por el demonio sshd
ssh_host_dsa_key.pub La clave pública DSA usada por el demonio sshd
ssh_host_key La clave privada RSA usada por el demonio sshd para la versión 1 del
protocolo SSH.
ssh_host_key.pub La clave pública RSA usada por el demonio sshd para la versión 1 del
protocolo SSH.
ssh_host_rsa_key La clave privada RSA usada por el demonio sshd para la versión 2 del
protocolo SSH.
ssh_host_rsa_key.pub La clave pública RSA usada por el demonio sshd para la
versión 2 del protocolo SSH.
- 167 -
cliente SSH está conectado al servidor SSH correcto
La función que desempeñan los ficheros de configuración de openSSH son de vital importancia para la
seguridad de nuestro servidor , ya que si no se llegaran a configurar apropiadamente estos ficheros la
vulnerabilidad de nuestro servidor seria demasiado sensible a ataques informáticos, es por ello que le
enseñaremos la manera apropiada en la que deberá ser configurado este vital fichero.
/etc/ssh/
El siguiente paso sera abrir el fichero con la ayuda del editor de textos VI
[root@ localhost #] vi /etc/ssh/sshd_config
Para modificar esta opción y las siguientes que iremos mencionando editaremos el fichero de configuración
shd_config, que por defecto se encuentra en el directorio /etc/ssh/. Se recomienda usar un puerto cualquiera
por encima del 1024, así que usted puede elegir el que quiera. En este ejemplo usaremos el 34765, por lo que
tendrá que editar el parámetro Port del fichero de configuración el cual deberá quedar así:
# The strategy used for options in the default sshd_config shipped with
OpenSSH is to specify options with their default value where
possible, but leave them commented. Uncommented options change a
default value.
Port 34567
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
Desactivando el Protocolo 1
Hay dos versiones de ssh en cuanto a su protocolo de comunicación, estas son:
Versión 1
Versión 2
La versión 1 de openSSH hace uso de varios algoritmos de cifrado de datos mas sin embargo, algunos de
estos algoritmos han dejado de ser mantenidos por sus creadores y por lo tanto presenta serios huecos de
- 168 -
seguridad que potencialmente permite a un intruso insertar datos en el canal de comunicación. Para evitar el
uso del protocolo 1 y sus posibles ataques a este, basta con indicar que solo admita comunicaciones de ssh
basadas en el protocolo 2, por lo que tendrá que editar el parámetro Protocol del fichero de configuración el
cual deberá quedar así:
# Disable legacy (protocol version 1) support in the server for new
installations. In future the default will change to require explicit
activation of protocol 1
Protocol 2
# Authentication:
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 6
# Authentication:
LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 2
El número 2 indica la cantidad de veces que podemos equivocarnos al ingresar el usuario y/o contraseña, en
este caso después de dos intentos, se perderá o cerrará la conexión. Claro, es totalmente posible volver a
intentarlo, pero con solo dos intentos por vez.
- 169 -
Activando el modo estricto
La opción StrictModes debe activarse para que, por ejemplo, los usuarios que establecen permisos de
escritura para todos en sus ficheros y directorios no se lleven una desagradable noticia cuando otro usuario los
modifique, de esta manera se protege la información de los usuarios. Para llevar a cabo estos cambios tendrá
que editar el parámetro StrictModes del fichero de configuración el cual deberá quedar de la siguiente manera:
# Authentication:
LoginGraceTime 2m
PermitRootLogin no StrictModes yes MaxAuthTries 2
# Accept localerelated environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv
LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION
LC_ALL
AllowTcpForwarding yes
GatewayPorts no
X11Forwarding yes
# Authentication:
LoginGraceTime 30 PermitRootLogin no StrictModes yes MaxAuthTries 2
Llegado a este punto usted ya deberá contar con las configuraciones de seguridad apropiadas, por lo que solo
faltaría iniciar el servicio de SSH. Para iniciar el servicio de SSH tendrá que teclear en consola y como root lo
siguiente:
[root@ localhost ]# /etc/init.d/sshd start
Igualmente existen opciones ya sea para reiniciar, detener, recargar o conocer el status en el que se encuentra
el servicio. Estas opciones pueden ser consultadas en la siguiente tabla:
- 170 -
start Inicia el servicio
stop Detiene el servicio
restart Reinicia el servicio.La diferencia con reload radica en que al ejecutar
un restart este mata todos los procesos relacionado con el servicio y los vuelve a
generar de nueva cuenta
reload Recarga el servicio.La diferencia con restart radica en que al ejecutar un
reload este solamente carga las actualizaciones hechas al fichero de configuración del
servicio sin necesidad de matar los procesos relacionados con el mismo, por lo que
podría entenderse que hace el cambio en caliente.
condrestart Reinicio Condicional. Solamente se inicia si el servicio se encuentra
ejecutándose.
status Da a conocer el estado en el que se encuentra el servicio
Para añadir el servicio de SSH al arranque del servidor solo tendrá que teclear en consola y como root lo
siguiente:
[root@ localhost ]# chkconfig sshd on
Esto es útil cuando por motivos ajenos a usted se reinicia el servidor, de esta manera cuando el equipo
arranque, automáticamente levantara el servicio de SSH sin necesidad de levantarlo manualmente después.
[root@ localhost ]# ssh usuarioRemoto@ipDelServidorRemoto
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá especificar el puerto por
el cual requiere autenticarse al servidor. Ejemplo
[root@ localhost ]# ssh p[puertoDeEscucha] usuarioRemoto@ipDelServidorRemoto
Ejemplo 1: La empresa Factor Integración para la cual trabajamos, nos ha pedido reiniciar el servicio de
apache , para ello nos ha proporcionado los siguientes datos:
IP del servidor remoto > 207.249.25.60
Nombre del usuario remoto > adminlog
Puerto de autenticacion > 34765
Solución: 1.Para conectarnos al servidor remoto habrá que especificar el puerto de
escucha, el usuario remoto y la IP del servidor remoto (Recuerde que no esta permitido
conectarse como root desde SSH)
- 171 -
2.-El siguiente paso sera teclear la contraseña del usuario remoto
3.-Una vez dentro del servidor remoto nos logearemos ahora si como “root”
[adminlog@ web ]# su
Contraseña: xxxxxxxxxxxxxxxxxx [root@ web ]#
[root@ web ]# /etc/init.d/httpd restart
[root@ web ]# exit
Connection to 207.249.25.60 closed. [root@ localhost ] # _
Para copiar archivos, ficheros o carpetas desde un equipo remoto hacia nuestro equipo existen dos maneras:
Es un medio de transferencia segura de archivos entre un equipo local y uno remoto haciendo uso del
protocolo Open Secure Shell (openSSH). La diferencia en utilizar SCP (Shell ) y SFTP (Security File Transfer
Protocol) para copiar archivos, carpetas o ficheros radica en que para SCP tenemos que conocer exactamente
donde se encuentra el recurso que queremos copiar, de otra forma nunca lo descargara, en cambio SFTP nos
deja navegar entre las carpetas lo cual hace mas sencillo la ubicación del recurso que deseamos copiar. La
única desventaja que presenta SCP es que únicamente permite la transferencia de archivos (descarga y
subida de ficheros). La sintaxis de SCP para llevar a cabo esta operación es la siguiente:
[root@ localhost ]#scp usuarioRemoto@ipDelServidorRemoto:rutaDelRecursoRemoto
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá especificar el puerto por
el cual requiere autenticarse al servidor. Ejemplo:
Aunado a esto, para descargar una carpeta tendrá que seguir la siguiente sintaxis:
Ejemplo 2: La misma empresa, Factor Integración, nos ha pedido copiar la carpeta de inventarios de la
empresa la cual esta hospedada en un servidor remoto , para ello nos ha proporcionado los siguientes datos:
IP del servidor remoto > 207.249.25.60
Nombre del usuario remoto > adminlog
- 172 -
Puerto de autenticacion > 34567
Ruta del Recurso Remoto > /tmp/Conta
Solución: Para poder hacer la copia desde servidor remoto habrá que especificar el
puerto de escucha, el usuario remoto, la IP del servidor remoto y la ruta (sin errores)
del recurso remoto.
Lo anterior nos copiará la carpeta "/tmp/Conta" remota en el directorio actual "." naturalmente siempre que
usuario tenga permisos sobre la carpeta y su cuenta esté entre las de los que pueden hacer ssh. La opción "-r"
significa recursivo, es decir, copia la carpeta y todo su contenido, incluidas las subcarpetas y el contenido de
éstas.
[root@ localhost]# sftp usuarioRemoto@ipDelServidorRemoto
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá especificar el puerto por
el cual requiere autenticarse al servidor. Ejemplo.
[root@ localhost]# sftp o Port=[PuertoDeEscucha] usuarioRemoto@ipDelServidorRemoto
El siguiente paso sera autenticarnos con la contraseña del usuario remoto
Connecting to IPDelServidorRemoto...
usuarioRemoto@IPDelServidorRemoto's password: xxxxxxxxxxxxxxxxxxxxxx
Una vez dentro del servidor solo bastara ejecutar el comando “get” para descargar algún fichero o archivo.
[root@ localhost]# sftp o Port=[PuertoDeEscucha] usuarioRemoto@ipDelServidorRemoto
Connecting to IPDelServidorRemoto... usuarioRemoto@IPDelServidorRemoto's password:
xxxxxxxxxxxxxxxxxxxxxx sftp> get recursoRemoto
La siguiente tabla explica mas a detalle los comandos que pueden ser utilizados con SFTP:
cd [rutaRemota] Cambia de directorio dentro del servidor remoto
lcd [rutaLocal] Cambia de directorio en el equipo local
chgrp [grp] [rutaRemota] Cambia el grupo de trabajo de un fichero remoto. El [grp]
tiene que ser un Group ID
chmod [opciones] [rutaRemota] Cambia los permisos de Lectura, Escritura o de
Ejecución a un fichero remoto
chown [own] [rutaRemota] Cambia el grupo de trabajo de un fichero remoto. El [own]
tiene que ser un User ID
get [rutaRemota] [rutaLocal] Copia un recurso remoto en un equipo local
lmkdir [rutaLocal] Crea una carpeta en el equipo local
lpwd Imprime la ruta local en la cual estamos trabajando
mkdir [rutaRemota] Crea una carpeta en el equipo remoto
put [rutaLocal] [rutaRemota] Sube un fichero o archivo desde una ruta local hasta
una ruta remota
- 173 -
pwd Imprime la ruta remota en la cual estamos trabajando
exit Salimos de SFTP
rename [rutaLocal] [rutaRemota] Renombra un un fichero remoto
rmdir [rutaRemota] Borra una carpeta remota
rm [rutaRemota] Borra un fichero remoto
Ejemplo 3: La misma empresa, Factor Integración, nos ha pedido copiar el fichero inventarioEnero.odt que se
encuentra dentro la ruta “/tmp/Conta/” , para ello nos ha proporcionado los siguientes datos:
IP del servidor remoto > 207.249.25.60
Nombre del usuario remoto > adminlog
Puerto de autenticacion > 34567
Ruta del Recurso Remoto > /tmp/Conta
Solución: 1.Para poder traer la copia desde servidor remoto hacia nuestro equipo habrá
que especificar el puerto de escucha, el usuario remoto y la IP del servidor remoto
2.- Nos pedirá autenticarnos con la contraseña del usuario remoto, en este caso la contraseña del usuario
“adminlog”
3.-Una vez autenticados con el servidor nos dará acceso a través de SFTP
4.- Nos moveremos entre directorios con la ayuda del comando “cd” hasta estar ubicados en “/tmp/Conta”
5.-Dentro de la carpeta “Conta” aplicar el comando “dir” para visualizar el contenido de la misma
sftp>dir
inventarioEnero.odt inventarioFebrero.odt inventarioMarzo.odt
6.-Con la ayuda del comando “get” descargaremos el fichero nombrado “inventarioEnero.odt” dentro de la
carpeta “home” de nuestro sistema
Para subir archivos, ficheros o carpetas desde nuestro equipo hacia un equipo remoto existen dos maneras:
Mediante el uso del comando SCP
Mediante el uso del comando SFTP
Enviando ficheros a través de SCP (Shell Secure Copy)
La sintaxis de SCP para llevar a cabo esta operación es la siguiente:
[root@ localhost ]#scp rutaDelRecursoLocal usuarioRemoto@ipDelServidorRemoto:rutaRemota
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá especificar el puerto por
el cual requiere autenticarse al servidor. Ejemplo
Aunado a esto, para subir una carpeta tendrá que seguir la siguiente sintaxis:
- 174 -
[root@ localhost ]#scp P[puertoDeEscucha] r directorioLocal
usuarioRemoto@ipDelServidorRemoto:rutaRemota
Ejemplo 4: Se nos ha pedido subir una actualización referente a la pagina web de la empresa , para ello nos ha
proporcionado los siguientes datos:
IP del servidor remoto > 207.249.25.60
Nombre del usuario remoto > adminlog
Puerto de autenticacion > 34567
Ruta del Servidor a donde se tiene que subir la información -> /tmp/Conta
Solución: Para subir este directorio al servidor remoto habrá que especificar la ruta del directorio local,el puerto
de escucha, el usuario remoto, la IP del servidor remoto y la ruta (sin errores) a donde se quiere enviar el
directorio
Luego de haber hecho esto nos pedirá autenticarnos con la contraseña del usuario remoto
adminlog@207.249.25.60's password:xxxxxxxxxxxxx
Al finalizar nos mostrara un ventana mostrando el progreso de cada copia hecha al servidor remoto como la
que se muestra a continuación.
Actualizacion1.html 100% 0.0KB/s 05:00
actualizacion2.html 100% 0.0KB/s 07:00 actualizacion3.html 100% 0.0KB/s 15:00 actualizacion4.html 100%
0.0KB/s 15:00 actualizacion5.html 100% 0.0KB/s 25:00 actualizacion6.html 100% 0.0KB/s 30:00
actualizacion7.html 100% 0.0KB/s 31:00 actualizacion8.html 100% 0.0KB/s 40:00
Enviando ficheros a través de SFTP (Security File Transfer Protocol)
La sintaxis de SFTP para llevar a cabo esta operación es la siguiente:
[root@ localhost]# sftp usuarioRemoto@ipDelServidorRemoto
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá especificar el puerto por
el cual requiere autenticarse al servidor. Ejemplo.
[root@ localhost]# sftp o Port=[PuertoDeEscucha] usuarioRemoto@ipDelServidorRemoto
Connecting to IPDelServidorRemoto...
usuarioRemoto@IPDelServidorRemoto's password: xxxxxxxxxxxxxxxxxxxxxx
Una vez dentro del servidor solo bastara ejecutar el comando “put” para descargar algún fichero o archivo.
[root@ localhost]# sftp o Port=[PuertoDeEscucha] usuarioRemoto@ipDelServidorRemoto
Connecting to IPDelServidorRemoto... usuarioRemoto@IPDelServidorRemoto's password:
xxxxxxxxxxxxxxxxxxxxxx sftp> put recursoLocal
La siguiente tabla explica mas a detalle los comandos que pueden ser utilizados con SFTP:
cd [rutaRemota] Cambia de directorio dentro del servidor remoto
lcd [rutaLocal] Cambia de directorio en el equipo local
chgrp [grp] [rutaRemota] Cambia el grupo de trabajo de un fichero remoto. El [grp]
tiene que ser un Group ID
- 175 -
chmod [opciones] [rutaRemota] Cambia los permisos de Lectura, Escritura o de
Ejecución a un fichero remoto
chown [own] [rutaRemota] Cambia el grupo de trabajo de un fichero remoto. El [own]
tiene que ser un User ID
get [rutaRemota] [rutaLocal] Copia un recurso remoto en un equipo local
lmkdir [rutaLocal] Crea una carpeta en el equipo local
lpwd Imprime la ruta local en la cual estamos trabajando
mkdir [rutaRemota] Crea una carpeta en el equipo remoto
put [rutaLocal] [rutaRemota] Sube un fichero o archivo desde una ruta local hasta
una ruta remota
pwd Imprime la ruta remota en la cual estamos trabajando
exit Salimos de SFTP
rename [rutaLocal] [rutaRemota] Renombra un un fichero remoto
rmdir [rutaRemota] Borra una carpeta remota
rm [rutaRemota] Borra un fichero remoto
Ejemplo 5: Se nos ha pedido subir una actualización referente a la pagina web de la empresa , pero esta vez
sera usando SFTP, para ello nos ha proporcionado los siguientes datos:
IP del servidor remoto > 207.249.25.60
Nombre del usuario remoto > adminlog
Puerto de autenticacion > 34567
Ruta del Servidor a donde se tiene que subir la información > /tmp/Conta
Solución:
1.- Para subir este directorio al servidor remoto habrá que especificar el puerto de escucha, el usuario remoto y
la IP del servidor remoto 2.- Nos pedirá autenticarnos con la contraseña del usuario remoto, en este caso la
contraseña del usuario “adminlog” 3.-Una vez autenticados con el servidor nos dará acceso a través de SFTP
4.- Nos moveremos entre directorios con la ayuda del comando “cd” hasta estar ubicados en “/tmp/Conta” 5.-
Dentro de la carpeta “Conta” aplicar el comando “lpwd” para verificar la ruta en la cual estamos ubicados
localmente
sftp> lpwd
Local working directory: /home/juanito}}} 6.Si no se encuentra ubicado en el
directorio de trabajo indicado cámbiese de directorio mediante el comando “lcd”
sftp> lcd /home/juanito/datosActualizados
lcd /home/juanito/datosActualizados}}} 7. Cuando este ubicado en el directorio de
trabajo que contiene la información que desea subir al servidor remoto teclee lo
siguiente:
sftp> put datosactuales
El comando “put” tiene la funcionalidad de subir archivos desde una maquina local hasta
un equipo remoto. 8. Por ultimo teclee la palabra exit para salir del “SFTP”
sftp> exit
[root@localhost ]
- 176 -
Fuente Original:
http://www.linuxparatodos.net/web/comunidad/base-de-
conocimiento/-/wiki/Base+de+Conocimiento/Certificaci%C3%B3n+LPI
http://creativecommons.org/licenses/by-nc-sa/2.5/mx/
- 177 -