Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Historia......................................................................................................................................................5
2. Instalación de Ubuntu Linux..................................................................................................................6
2.1. Iniciando Linux...................................................................................................................................7
2.2. Habilitar la cuenta de usuario root......................................................................................................8
2.2.1 Usuarios sudoers...........................................................................................................................9
2.3. Instalando y actualizando software...................................................................................................11
2.3.1 Desde la línea de comandos........................................................................................................12
2.3.2 Orígenes del software................................................................................................................. 13
2.4. Gestor de arranque GRUB................................................................................................................15
2.5. Recuperación del sistema..................................................................................................................18
2.5.1 Desde el menú de inicio de GRUB.............................................................................................18
2.5.2 Restaurar el menú de GRUB al iniciar el sistema.......................................................................21
2.5.3 Recuperar GRUB desde un CD live........................................................................................... 22
2.5.4 Recuperar GRUB con el paquete Super Grub Disk....................................................................23
2.5.5 Acelerar el inicio del sistema......................................................................................................27
2.5.6 Sistema de tolerancia a fallos RAID 5........................................................................................28
2.6. Protocolo TCP/IP..............................................................................................................................36
2.6.1 Protocolo IPv4 (Internet Protocol)..............................................................................................38
2.6.2 Protocolo IPv6 (Internet Protocol version 6)..............................................................................40
2.6.3 Protocolo TCP (Transmission Control Protocol)........................................................................41
2.6.4 Administración de las tarjetas de red desde la línea de comandos.............................................42
2.6.5 Nombre de host...........................................................................................................................46
2.6.6 Servidores DNS..........................................................................................................................47
2.7. Redes inalámbricas........................................................................................................................... 48
2.8. Administración de Bluetooth............................................................................................................52
2.9. Servidor DHCP.................................................................................................................................54
2.9.1 Ejemplo de archivo /etc/dhcpd.conf........................................................................................... 57
3. El Kernel.................................................................................................................................................58
4. Sistemas de archivos..............................................................................................................................60
5. Administración de los sistemas de archivos.........................................................................................64
5.1. Archivo /etc/fstab..............................................................................................................................66
5.2. Creación de sistemas de archivos..................................................................................................... 70
5.2.1 Crear particiones.........................................................................................................................70
5.2.2 Formatear particiones..................................................................................................................74
5.3. Particiones y archivos de intercambio..............................................................................................76
6. Administración de sistemas de archivos remotos...............................................................................78
6.1. Sistema de archivos NFS..................................................................................................................78
6.2. Administración de samba..................................................................................................................82
6.2.1 Introducción................................................................................................................................82
6.2.2 Instalación y configuración.........................................................................................................82
6.2.3 Autenticación de usuarios...........................................................................................................85
6.2.4 Agrupación de servidores........................................................................................................... 86
7. Proceso de inicialización del sistema....................................................................................................87
8. Administración de servicios..................................................................................................................90
9. El shell.....................................................................................................................................................91
9.1. Escritura de órdenes..........................................................................................................................91
9.2. Redireccionamiento.......................................................................................................................... 92
9.3. Historia de órdenes........................................................................................................................... 93
9.4. Tipos de shell....................................................................................................................................94
9.5. Archivos de configuración del shell................................................................................................. 95
9.6. Terminales virtuales..........................................................................................................................98
10. Comandos de Unix/Linux....................................................................................................................99
10.1. Archivos especiales.........................................................................................................................99
10.2. Nombres de archivos.....................................................................................................................100
10.3. Comandos para la gestión de directorios y archivos.....................................................................101
10.3.1 Comando cat........................................................................................................................... 101
10.3.2 Comando cd............................................................................................................................101
1
10.3.3 Comando cp............................................................................................................................101
10.3.4 Comando df.............................................................................................................................101
10.3.5 Comando du............................................................................................................................102
10.3.6 Comando file...........................................................................................................................102
10.3.7 Comando find..........................................................................................................................103
10.3.8 Comando less..........................................................................................................................105
10.3.9 Comando ln.............................................................................................................................107
10.3.10 Comando ls........................................................................................................................... 107
10.3.11 Comando lshw......................................................................................................................109
10.3.12 Comando mkdir.................................................................................................................... 109
10.3.13 Comando more......................................................................................................................109
10.3.14 Comando mv.........................................................................................................................111
10.3.15 Comando nl...........................................................................................................................111
10.3.16 Comando od..........................................................................................................................111
10.3.17 Comando pwd.......................................................................................................................112
10.3.18 Comando rm..........................................................................................................................112
10.3.19 Comando rmdir.....................................................................................................................113
10.4. Comandos para operar con ficheros de texto................................................................................114
10.4.1 Comando cat........................................................................................................................... 114
10.4.2 Comando cut...........................................................................................................................114
10.4.3 Comando grep.........................................................................................................................114
10.4.4 Comando paste........................................................................................................................115
10.4.5 Comando pr.............................................................................................................................115
10.4.6 Comando sort..........................................................................................................................116
10.4.7 Comando tail...........................................................................................................................117
10.4.8 Comando tee........................................................................................................................... 118
10.4.9 Comando touch.......................................................................................................................118
10.4.10 Comando wc......................................................................................................................... 118
10.5. Otros comandos Unix/Linux.........................................................................................................119
10.5.1 Comando clear........................................................................................................................119
10.5.2 Comando date......................................................................................................................... 119
10.5.3 Comando finger...................................................................................................................... 121
10.5.4 Comando id.............................................................................................................................121
10.5.5 Comando logname..................................................................................................................122
10.5.6 Comando sleep........................................................................................................................122
10.5.7 Comando stty..........................................................................................................................122
10.5.8 Comando tty............................................................................................................................123
10.5.9 Comando uname..................................................................................................................... 123
10.5.10 Comando hostname...............................................................................................................124
11. El editor de textos vi.......................................................................................................................... 125
11.1. Introducción..................................................................................................................................125
11.2. Entrada al editor vi........................................................................................................................126
11.3. Salida del editor vi........................................................................................................................127
11.4. Órdenes de desplazamiento del cursor..........................................................................................128
11.5. Órdenes para modificar texto........................................................................................................131
11.6. Órdenes de edición avanzada........................................................................................................133
11.6.1 Órdenes de borrado.................................................................................................................133
11.6.2 Órdenes de copia.....................................................................................................................135
11.6.3 Órdenes de cambio de caracteres............................................................................................137
11.7. Órdenes para buscar y sustituir caracteres....................................................................................139
11.8. Edición de múltiples archivos.......................................................................................................141
11.9. Buffers del editor vi......................................................................................................................142
11.9.1 Buffers numéricos...................................................................................................................142
11.9.2 Buffers alfabéticos..................................................................................................................143
11.10. Ejecución de órdenes del shell....................................................................................................144
11.11. Configuración del editor vi.........................................................................................................145
11.12. Abreviaturas................................................................................................................................148
11.13. Macros.........................................................................................................................................149
11.14. Archivo de configuración del editor vi.......................................................................................150
12. Administración de cuentas de usuario.............................................................................................151
2
12.1. Creación de cuentas de usuario.....................................................................................................151
12.2. Eliminación de cuentas de usuario................................................................................................154
12.3. Modificación de cuentas de usuario..............................................................................................155
12.4. Otras consideraciones sobre las cuentas de usuario......................................................................156
13. Administración de contraseñas de usuario......................................................................................157
14. Administración de cuentas de grupos de usuarios..........................................................................159
14.1. Creación de cuentas de grupo.......................................................................................................159
14.2. Eliminación de cuentas de grupo..................................................................................................160
14.3. Modificación de cuentas de grupo................................................................................................161
15. Administración de permisos..............................................................................................................162
15.1. Cambio de permisos......................................................................................................................163
15.2. Cambio de propietario...................................................................................................................166
15.3. Máscara de permisos. Orden umask............................................................................................. 167
15.4. Otras consideraciones................................................................................................................... 168
16. Administración de impresoras..........................................................................................................169
16.1. Impresora local..............................................................................................................................169
16.2. Impresora TCP/IP......................................................................................................................... 170
16.3. Impresora SAMBA.......................................................................................................................171
16.3.1 Conexión desde Windows a una impresora en un servidor SAMBA.....................................171
16.3.2 Conexión desde Linux a una impresora en un servidor Windows..........................................171
16.3.3 Conexión desde Linux a una impresora en un servidor SAMBA...........................................171
16.4. Impresora remota utilizando CUPS..............................................................................................172
16.5. Instalación de una impresora PDF................................................................................................173
16.6. Comandos para realizar las tareas de impresión...........................................................................174
16.6.1 Comando lpr............................................................................................................................174
16.6.2 Comando lpq...........................................................................................................................176
16.6.3 Comando lprm........................................................................................................................ 177
16.6.4 Comando lpc...........................................................................................................................178
17. Administración de procesos..............................................................................................................180
17.1. Multiusuario y multitarea..............................................................................................................180
17.2. Planificación de los procesos a ejecutar........................................................................................182
17.2.1 Demonio cron y atd.................................................................................................................182
17.2.2 Comando at.............................................................................................................................183
17.2.3 Comando batch....................................................................................................................... 185
17.2.4 Comando crontab....................................................................................................................186
17.2.5 Comando nohup......................................................................................................................188
17.3. Supervisión de usuarios conectados..............................................................................................189
17.4. Supervisión del estado de los procesos.........................................................................................191
17.5. Finalización de los procesos......................................................................................................... 195
17.5.1 Captura de señales...................................................................................................................197
17.6. Prioridad de los procesos..............................................................................................................198
17.6.1 Comando nice......................................................................................................................... 198
17.6.2 Comando renice......................................................................................................................198
18. Guiones shell.......................................................................................................................................199
18.1. Introducción..................................................................................................................................199
18.2. Variables.......................................................................................................................................200
18.2.1 Definición de variables...........................................................................................................201
18.2.2 Asignación de valores.............................................................................................................202
18.2.3 Gestión de parámetros.............................................................................................................204
18.2.4 Visualización del contenido de las variables..........................................................................205
18.3. Expresiones...................................................................................................................................206
18.4. Evaluación de condiciones............................................................................................................207
18.4.1 Datos numéricos......................................................................................................................207
18.4.2 Cadenas...................................................................................................................................208
18.4.3 Archivos..................................................................................................................................209
18.4.4 Operadores..............................................................................................................................210
18.4.5 Otras consideraciones............................................................................................................. 211
18.5. Rupturas de control.......................................................................................................................212
18.5.1 Instrucción if...........................................................................................................................212
18.5.2 Instrucción case.......................................................................................................................213
3
18.6. Bucles............................................................................................................................................214
18.6.1 while........................................................................................................................................215
18.6.2 until.........................................................................................................................................216
18.6.3 for............................................................................................................................................217
18.7. Funciones......................................................................................................................................218
18.8. Ejecución de los guiones shell......................................................................................................219
4
1. Historia.
En el año 1.970, Ken Thompson escribió la primera versión de Unix en ensamblador, que fue
reescrita en un 95% en C por Dennis Ritchie, en 1.973. La compañía Western Electric lo
comercializó en 1.975.
AT&T.
Desarrolló, en 1.983, el estándar de Unix System V, que, en las sucesivas versiones que
han ido apareciendo, ha ido desarrollando Unix en cuanto a su tamaño, herramientas y
utilidades.
Añadió numerosas características y realizó grandes cambios en Unix, que han servido para
que sus versiones sean la más avanzadas técnicamente en algunos aspectos.
Sun Microsystems.
Microsoft Corporation.
Linus Torvald inicia un proyecto para hacer del sistema operativo Minix, que era una versión de
Unix ampliamente extendida entre estudiantes de todo el mundo, una versión de Unix para PC,
destinada a los usuarios de Minix. Este proyecto fue conocido a través de Internet y se
sumaron multitud de expertos, comenzando a desarrollarse Linux. La versión 0.11 de Linux se
lanzó en 1.991. Actualmente sigue desarrollándose por programadores, que incorporan
aplicaciones y características estándar de Unix.
El sistema operativo Linux dispone de la Licencia General Pública GNU. GNU quiere decir que
el software tiene copyright, pero sus autores han dado su autorización para que se distribuya
de acuerdo a determinadas condiciones. Estas condiciones se refieren a la obligatoriedad de
suministrar códigos fuente y de no incluir copyright a ninguna parte del software de Linux. De
esta forma, los usuarios no pueden utilizar en sus programas códigos fuente protegidos por
copyright sin permitir, previamente, el acceso público a sus códigos fuente. Un programador
puede exigir el pago de una cuota por utilizar su programa, pero en dicha cuota se incluirá el
acceso a los códigos fuente del programa que está siendo utilizado.
5
2. Instalación de Ubuntu Linux.
Existen numerosas versiones del sistema operativo Linux. En este apartado se va a describir la
instalación de Ubuntu Linux.
Antes de instalar cualquier sistema operativo, es necesario realizar un estudio sobre los
distintos sistemas que van a convivir en el mismo equipo. Es fundamental que este estudio se
realice de forma concienzuda, para realizar las particiones necesarias donde se ubicarán los
distintos sistemas operativos. El tamaño de cada partición dependerá de los programas que se
vayan a instalar en cada una de ellas y de los datos que soportarán cada uno de los
programas.
Actualmente, la mayor parte de dispositivos y periféricos son admitidos por Linux, por lo que no
tendremos problemas con ellos durante la instalación.
Al lanzar la instalación tenemos que seleccionar la zona horaria, el idioma con el que se va a
configurar el sistema operativo, configurar el teclado para comprobar que el idioma
seleccionado es el apropiado para escribir todos los caracteres de nuestro país, particionar el
disco duro, importar cuentas de usuario de los sistemas operativos de Microsoft, si tenemos
alguna partición en el equipo con uno de estos sistemas instalados, escribir nuestro nombre, el
nombre del usuario que va a iniciar sesión, su contraseña y el nombre del equipo. Este nombre
de usuario es muy importante porque es el único usuario con el que podremos iniciar sesión
una vez finalizada la instalación, ya que el usuario root está deshabilitado y no podremos iniciar
sesión con él. Seguidamente, el sistema se instalará, debiendo reiniciar el equipo para poder
trabajar.
6
2.1. INICIANDO LINUX.
Una vez reiniciado el sistema después de la instalación tenemos que escribir el nombre de
usuario que introducimos durante la instalación y su contraseña, accediendo al escritorio de
GNOME. Desde el Escritorio de Ubuntu, además de las tareas que se pueden realizar desde
los accesos directos (navegador web, correo electrónico, configuración de la tarjeta de red,
etc. ), tenemos tres menús desde los que se pueden realizar todas las tareas del sistema
operativo: el menú Aplicaciones, el menú Lugares y el menú Sistema.
Al igual que en el resto de sistemas operativos con interfaz gráfica, se pueden crear accesos
directos, añadir opciones en la barra de tareas, etc.
7
2.2. HABILITAR LA CUENTA DE USUARIO ROOT.
Cuando se instala Ubuntu, la única cuenta de usuario con la que se puede iniciar sesión es la
que creamos durante el proceso de instalación. Esta cuenta está limitada para realizar tareas
administrativas, por lo que hay que ejecutar la orden sudo cada vez que queramos ejecutar una
orden para administrar el sistema. La cuenta root está creada pero no está activa porque no
tiene contraseña.
Para habilitar la cuenta de usuario root, hay que abrir un terminal (ejecutar la opción Terminal
del menú Accesorios, que se encuentra en el menú Aplicaciones) y ejecutar la orden sudo
passwd root. El sistema nos pide la contraseña del usuario que creamos durante el proceso de
instalación y la contraseña que se va a asignar al usuario root.
Una vez iniciada la sesión con el usuario root conviene activar las tareas que puede realizar.
Para ello, hay que ejecutar la herramienta Usuarios y grupos del menú Administración, que se
encuentra en el menú Sistema, seleccionar el usuario root y pulsar el botón Propiedades,
accediendo a una ventana en la que debemos abrir la ficha Privilegios del usuario y activar las
casillas correspondientes.
8
2.2.1 Usuarios sudoers.
Cuando se instala el sistema, sólo el usuario creado durante la instalación puede realizar tareas
administrativas, siempre que se ejecute la orden sudo. Si no queremos ejecutar la orden sudo
contínuamente, se puede ejecutar sudo su una sóla vez, en cada sesión, y, a partir de ese
momento, realizar las tareas administrativas.
Si queremos utilizar el usuario root, hay que habilitarlo de la forma descrita en el punto anterior.
Por cuestiones de seguridad, no es conveniente iniciar una sesión con el usuario root para
trabajar normalmente. Es más seguro iniciar una sesión con cualquier otro usuario y ejecutar la
orden sudo o sudo su cuando se quieran realizar tareas administrativas.
Cuando se crean nuevos usuarios, estos no pueden realizar tareas administrativas con la orden
sudo, debido a que sólo los usuarios incluidos en el grupo admin pueden ejecutar la orden
sudo para administrar el sistema. Esta configuración se realiza en el archivo /etc/sudoers, cuyo
contenido se muestra a continuación:
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
# Host alias specification
# Defaults
Defaults !lecture,tty_tickets,!fqdn
La última línea de este archivo es la que indica que todos los usuarios miembros del grupo
admin pueden realizar tareas administrativas con la orden sudo.
Si consultamos el archivo /etc/group, que es el archivo que contiene los grupos creados, y sus
miembros, creados en el sistema, veremos una línea parecida a la siguiente:
admin:x:117:coralio,root
Esta línea indica que los usuarios coralio y root son los únicos usuarios miembros del grupo
admin y, por lo tanto, sólo estos usuarios pueden realizar tareas administrativas con la orden
sudo.
Para incluir un usuario en el grupo admin, se puede ejecutar la orden adduser usuario admin,
donde usuario es la cuenta que se quiere agregar al grupo admin. Las siguientes líneas
muestran la salida de esta orden:
Terminado.
9
Si visualizamos el contenido del archivo /etc/group, veremos la siguiente línea:
admin:x:117:coralio,root,usuario
En esta línea observamos que el usuario con nombre usuario se ha añadido al grupo admin y,
por lo tanto, podrá realizar tareas administrativas con la orden sudo.
10
2.3. INSTALANDO Y ACTUALIZANDO SOFTWARE.
Todo el software que se va a instalar o actualizar se encuentra disponible en repositorios, que
son archivos de software. Por lo tanto, cada vez que vamos a realizar estas operaciones, nos
conectaremos con un repositorio desde el que descargaremos los paquetes requeridos.
Para actualizar o instalar software, Ubuntu nos ofrece dos gestores. El primero está ubicado en
el menú Aplicaciones, opción Centro de software de Ubuntu. Se accede a una ventana desde la
que se pueden realizar las tareas de instalación, actualización y desinstalación de software.
Para instalar nuevos paquetes hay que seleccionarlos, abrir el menú emergente, elegir la
opción Marcar para instalar y pulsar el botón Aplicar.
Para desinstalar un paquete instalado hay que seleccionarlo, abrir el menú emergente, elegir la
opción Marcar para eliminar o Marcar para eliminar completamente y pulsar el botón Aplicar.
El botón Buscar se utiliza para escribir el nombre del software que se desea instalar y que el
gestor de paquetes localizará.
Cuando se instala un nuevo paquete el gestor busca otras aplicaciones que necesitan ser
instaladas (dependencias) para que el nuevo software funcione correctamente, aunque no
siempre instala todas las dependencias necesarias. Para asegurarnos que siempre se instale
todo el software necesario, hay que abrir el menú Configuración y ejecutar la opción
Preferencias y, en la ventana que se muestra, activar la casilla Considerar los paquetes
recomendados como si fuesen dependencias.
Para actualizar paquetes ya instalados hay que seleccionarlos en la ventana de Synaptic, abrir
el menú contextual y ejecutar la opción Marcar para actualizar. Seguidamente, hay que pulsar
el botón Aplicar para actualizar el software seleccionado. Mediante este procedimiento, también
se puede reinstalar un paquete instalado previamente.
Cuando se instala Ubuntu por primera vez hay que actualizar el sistema para instalar
actualizaciones del software instalado y parches de seguridad del sistema. Estas
actualizaciones se detectan automáticamente y el sistema nos avisa para proceder con la
descarga e instalación.
En esta primera actualización el kernel se actualizará, debiendo reiniciar el sistema para que
los cambios tengan efecto.
Cuando se actualiza el kernel el sistema conserva una opción de arranque del equipo con la
antigua versión del kernel,para que se pueda utilizar como medida de seguridad por si el nuevo
kernel no funciona correctamente, alguna aplicación ha dejado de funcionar, etc. El nuevo
menú de inicio del equipo se muestra en la ventana de la Figura 2.3.1.
Figura 2.3.1
Una vez que se ha comprobado que la actualización del kernel funciona correctamente, se
puede eliminar la opción del menú de inicio que apunta al anterior kernel (ver el punto 2.4
Gestor de arranque GRUB).
11
2.3.1 Desde la línea de comandos.
Para instalar, actualizar y eliminar software desde la línea de comandos, se utiliza la orden apt-
get.
update.
Se utiliza para actualizar las últimas versiones de todos los paquetes disponibles.
Conviene ejecutarla antes de instalar para que se actualicen los repositorios locales.
upgrade.
install paquete.
remove paquete.
autoremove.
12
Con esta opción se eliminan todos los paquetes que se no se han borrado cuando se
ha eliminado el software del que dependían, limpiando así el sistema de la “basura” que
permanece cuando se desinstalan paquetes instalados.
-d paquete.
-f.
En algunas ocasiones, necesitamos instalar o borrar paquetes con la extensión .deb, que han
sido desarrollados por Debian GNU/Linux. Estos paquetes se instalan con la orden dpkg -i
paquete.deb y se eliminan con la orden dpkg -r paquete.deb.
Algunos paquetes que nos descargamos desde Internet, tienen la extensión .tar.gz, .tar.bz2,
.tar o .tgz, que indica que son archivos comprimidos. Para descomprimirlos, hay que ejecutar la
orden tar -xfvz paquete.extensión. A continuación, hay que acceder a la carpeta en la que se ha
descomprimido el paquete y lanzar el programa de instalación (normalmente INSTALL), aunque
hay algunos paquetes que, una vez descomprimidos, ya están listos para ejecutarse. En la
carpeta donde se ha descomprimido el paquete, se suele incluir un archivo README con
instrucciones sobre la instalación. Hay algunos de estos paquetes que necesitan ser
compilados para poder instalarse. Los programas necesarios para compilar los paquetes se
pueden instalar todos de una vez instalando el paquete build-essential.
Con los métodos de instalación y actualización del software descritos anteriormente, podemos
gestionar las aplicaciones soportadas oficialmente por Ubuntu. Estas aplicaciones se
encuentran en repositorios, que son archivos de software.
Los repositorios de Ubuntu no son demasiado grandes, por lo que hay que activar otros
repositorios para tener acceso a las miles de aplicaciones disponibles para Linux.
Los repositorios externos más importantes son Universe y Multiverse. Estos repositorios tienen
que estar activados para poder acceder a ellos durante las tareas de instalación y actualización
del software.
Para activarlos desde el entorno gráfico, hay que ejecutar la opción Orígenes del software, que
se encuentra en el menú Administración del menú Sistema. Se muestra la ventana de la Figura
2.3.2.1.
Figura 2.3.2.1
En esta ventana, hay que activar las casillas correspondientes a los repositorios que queramos
acceder para instalar y actualizar el software.
Para activar los repositorios de Universe y Multiverse desde la línea de comandos, hay que
editar el archivo /etc/apt/sources.list y quitar los comentarios de las líneas que incluyen las
direcciones de internet de estos repositorios. Estas líneas son:
13
deb-src http://es.archive.ubuntu.com/ubuntu/ feisty universe
Una vez realizadas estas operaciones, hay que ejecutar la orden apt-get update para tener
accesibles las últimas versiones de todo el software disponible.
Si instalamos software que no ha sido desarrollado por Ubuntu y queremos que se actualice
automáticamente, hay que incluir las líneas necesarias en el archivo /etc/apt/sources.list. En la
página web del software descargado encontraremos la línea que hay que incluir en este
archivo.
Para actualizar los repositorios locales hay que ejecutar la orden apt-get update. El sistema
informa de un error porque no se ha instalado la clave pública de Linux Max para acceder a su
repositorio. Esta clave pública se instala con la orden apt-get install max-keyring. Si ahora
volvemos a ejecutar la orden apt-get update no se genera ningún error. Desde este momento
tenemos disponible todo el repositorio de la distribución Max de Linux.
14
2.4. GESTOR DE ARRANQUE GRUB.
GRUB es la abreviatura de GRand Unified Bootloader. GRUB es el programa que se ejecuta
para iniciar el sistema, permitiendo seleccionar el sistema operativo con el que el equipo se va
a iniciar. La versión actual de GRUB es grub2. La ventana del gestor de arranque de GRUB es
la que se muestra en la Figura 2.4.1.
Figura 2.4.1
En esta ventana, aparece una opción por cada uno de los distintos sistemas operativos
existentes en el equipo. La configuración de GRUB consiste en especificar el sistema operativo
por defecto que se iniciará en el equipo y el tiempo que GRUB esperará la selección de otros
sistemas operativos antes de que se inicie el que se ha indicado por defecto. Además, hay que
seleccionar la partición de cada sistema operativo e introducir un nombre para cada uno de
ellos. Este nombre es el que se muestra en la ventana de la Figura 2.4.1.
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
function savedefault {
if [ -z ${boot_once} ]; then
saved_entry=${chosen}
save_env saved_entry
fi
}
function recordfail {
set recordfail=1
if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi
}
insmod ext2
set root='(hd0,2)'
search --no-floppy --fs-uuid --set 74ea5808-3c13-4008-90e6-973de3e29f12
if loadfont /usr/share/grub/unicode.pf2 ; then
15
set gfxmode=640x480
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
fi
fi
insmod ext2
set root='(hd0,2)'
search --no-floppy --fs-uuid --set 74ea5808-3c13-4008-90e6-973de3e29f12
set locale_dir=($root)/boot/grub/locale
set lang=es
insmod gettext
if [ ${recordfail} = 1 ]; then
set timeout=-1
else
set timeout=10
fi
### END /etc/grub.d/00_header ###
16
insmod ext2
set root='(hd0,2)'
search --no-floppy --fs-uuid --set 74ea5808-3c13-4008-90e6-973de3e29f12
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###
La información activa (son las líneas que no están comentadas) de este archivo es la siguiente:
La línea set default indica la partición que se iniciará por defecto si, transcurrido el tiempo
especificado en timeout, el usuario no selecciona otra partición. El valor 0 se refiere a la
primera etiqueta menuentry que aparece en el archivo /boot/grub/grub.cfg, el valor 1 se
refiere a la segunda etiqueta menuentry que aparece en el archivo /boot/grub/grub.cfg, y
así sucesivamente.
La línea set timeout indica los segundos que el sistema esperará para iniciar el sistema
operativo por defecto. De forma predeterminada, el menú GRUB no se muestra al iniciar el
sistema, arrancando en la opción definida en la línea set default (normalmente, set
default=”0”). Para que este menú se visualice hay que asignar un valor a timeout al final del
archivo, para que sea esta última asignación la que prevalezca sobre las que se realizan en
el resto del archivo. Por ejemplo, se puede incluir la línea set timeout=60 para que el menú
se muestre, durante 60 segundos, al iniciar el equipo.
Los parámetros quiet splash se utilizan para que durante el inicio del sistema se visualice
un entorno gráfico. Si quitamos estos argumentos el inicio del sistema se visualiza en modo
texto.
17
entorno se sale escribiendo reboot, si hemos accedido al entorno desde el menú de inicio del
sistema, o escribiendo quit, si hemos accedido al entorno una vez iniciado el sistema.
Desde la ventana de la Figura 2.4.1 también se pueden editar líneas del archivo
/boot/grub/grub.cfg para modificar sus valores e iniciar el sistema con los nuevos valores
introducidos. Para ello, hay que pulsar la tecla e en la ventana de la Figura 2.4.1.
Si no se puede iniciar el sistema porque GRUB no se carga, debemos seguir los pasos
indicados en los puntos 2.5.2 Restaurar el menú de GRUB al iniciar el sistema, 2.5.3
Recuperar Grub desde un CD live y 2.5.4 Recuperar GRUB con el paquete Super Grub Disk.
Figura 2.5.1.1
18
En la parte inferior de esta ventana, se indica que se pueden teclear las teclas e (para editar las
órdenes de inicio de la línea seleccionada) o c (para acceder al entorno de GRUB). Desde este
entorno se pueden introducir órdenes para intentar reparar el sistema (ver el punto 2.5.3
Recuperar GRUB desde un CD live).
Si se utiliza un menú gráfico, no se pueden teclear estas órdenes. Para poder acceder a este
menú, hay que pulsar la tecla Esc en el menú gráfico.
Figura 2.5.1.2
En esta ventana, se muestran las líneas que el gestor de arranque ejecuta para iniciar el
sistema. Desde esta ventana, podemos editar la línea seleccionada, acceder al entorno de
GRUB, añadir una nueva línea, borrar la línea seleccionada, iniciar el sistema o regresar al
menú de GRUB (ventana de la Figura 2.5.1.1).
Figura 2.5.1.3
En esta ventana, podemos pulsar las teclas Control-D para continuar con el inicio del sistema o
introducir la contraseña del usuario root para iniciar una sesión en modo texto y poder introducir
órdenes del sistema operativo para reparar la partición.
19
Figura 2.5.1.4
Figura 2.5.1.5
Desde esta ventana, se pueden realizar distintos chequeos de la memoria (esta operación
tarda bastante tiempo en completarse) y visualizar resultados de los test realizados.
Si tenemos instalado un menú gráfico para presentar GRUB al iniciar el sistema, hay que pulsar
la tecla Esc para acceder a la ventana de la Figura 2.5.1.1.
20
2.5.2 Restaurar el menú de GRUB al iniciar el sistema.
21
2.5.3 Recuperar GRUB desde un CD live.
1. Crear un directorio para montar la partición de sistema del disco duro, ejecutando la
orden sudo mkdir /media/disk-2.
2. Consultar el dispositivo asociado a la partición del disco duro donde está instalado
Ubuntu, ejecutando la orden sudo fdisk -l.
3. Montar la partición en el directorio creado en el punto 1. Para ello, hay que ejecutar la
orden sudo mount /dev/sda1 /media/disk-2 (/dev/sda1 es el dispositivo que nos ha
devuelto la orden sudo fdisk -l ejecutada en el punto 2.)
Otra forma de recuperar GRUB desde un CD live es, una vez iniciado el sistema, entrar en el
entorno de GRUB, buscar la partición donde está instalado Ubuntu, posicionarnos en esta
partición e instalar GRUB. El resultado de estas operaciones se indican a continuación (para
entrar en el entorno de GRUB hay que ejecutar la orden sudo grub):
grub>find /boot/grub/stage1
(hd0,2)
grub>root (hd0,2)
grub>setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
22
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 17 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,2)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.
grub>
La orden find /boot/grub/stage1 (hd0,2), busca la partición en la que está instalado Ubuntu y
devuelve (hd0,2). La línea root (hd0,2) se posiciona en la partición de Ubuntu (observar que en
esta orden se incluye la partición que ha devuelto la orden find /boot/grub/stage1). La línea
setup (hd0) instala GRUB en el disco duro desde el que se inicia el equipo.
Existe una aplicación, llamada Super Grub Disk, que se utiliza para arrancar el sistema desde
cualquier partición de sistema instalada en nuestro equipo. La página oficial de Super Grub
Disk es: http://geocities.com/supergrubdisk/. Desde esta página, siguiendo los enlaces
incluidos, nos podemos descargar el software necesario para iniciar el sistema desde un puerto
usb, desde un disquete o desde un cd o dvd.
Una vez descargado el software y preparado el soporte desde el que se va a iniciar el equipo,
hay que arrancar el odenador, accediendo a la ventana principal de Super Grub Disk y, desde
esta, a la ventana de la Figura 2.5.4.1.
Figura 2.5.4.1
Si, desde esta ventana, pulsamos la tecla -> (flecha derecha) con una de las dos primeras
opciones seleccionadas, se muestra la ventana de la Figura 2.5.4.2.
23
Figura 2.5.4.2
En esta ventana, seleccionamos el idioma deseado y se visualiza información de Super Grub
Disk. Una vez leída la información, se muestra la ventana de la Figura 2.5.4.3.
Figura 2.5.4.3
En esta ventana, si pulsamos la tecla -> con la opción Gnu/Linux seleccionada, accedemos a la
ventana de la Figura 2.5.4.4.
24
Figura 2.5.4.4
En esta ventana, podemos intentar la reparación del arranque de Linux (pulsando la opción
Arregla Arranque de Gnu/Linux (GRUB)) y reiniciar el equipo si la reparación ha sido exitosa, o
iniciar la partición de Linux (pulsando las opciones Arranque Gnu/Linux o Arranque Gnu/Linux
Directamente). Si pulsamos la opción Gnu/Linux (Avanzado), se muestra la ventana de la
Figura 2.5.4.5.
Figura 2.5.4.5
Desde esta ventana, se pueden intentar varias opciones de reparación y arranque del sistema.
25
Figura 2.5.4.6
Desde esta ventana, se pueden realizar varias operaciones para intentar arrancar el equipo.
Figura 2.5.4.7
En esta ventana, se pueden restaurar los gestores de arranque de Linux (GRUB y LILO) y de
Windows. La opción Arranque especial nos permite intercambiar discos duros, de tal forma que
el disco 1 pase a ser el disco 2 y viceversa. La opción Configuración permite cambiar opciones
como el color, teclado, etc. La opción Miscelanea permite arrancar Linux desde GRUB.
Si, en la ventana de la Figura 2.5.4.1, seleccionamos la opción GRUB => MBR & !LINUX! (1)
AUTO, GRUB se instala en el MBR y se carga el menú de GRUB para iniciar el sistema.
26
Si, en la ventana de la Figura 2.5.4.1, seleccionamos la opción GRUB => MBR & !LINUX! (>=2)
MANUAL, accederemos a unas ventanas en las que deberemos seleccionar la partición donde
se encuentra GRUB y, posteriormente, GRUB se instalará en el MBR y se cargará el menú de
GRUB para iniciar el sistema.
Si, en la ventana de la Figura 2.5.4.1, seleccionamos las opciones !LINUX! (1) AUTO o !LINUX!
(>=2) MANUAL, el sistema se iniciará desde Linux, pero GRUB no se instalará en el MBR.
Si, en la ventana de la Figura 2.5.4.1, seleccionamos la opción WIN -> MBR & !WIN!, el sistema
se iniciará desde la partición donde está instalado Windows y el arranque de Windows se
instalará en el MBR.
Ubuntu utiliza el proceso readahead para que el inicio del sistema sea más rápido. La función
de este proceso es cargar en la memoria caché del disco todos los archivos que serán
necesarios para iniciar el sistema. La lista de estos archivos se encuentra en el fichero
/etc/readahead/boot.
Para solucionar este problema, Cuando se muestre el menú de GRUB, hay que pulsar la tecla
e con la opción de nuestra partición de arranque seleccionada, pasando al estado de edición de
las órdenes de inicio de esta partición. Seguidamente, hay que seleccionar la línea kernel
/boot/vmlinuz-..., pulsar la tecla e para editar esta línea, añadir, al final de la línea, el parámetro
profile, pulsar la tecla Intro y pulsar la tecla b para iniciar el sistema.
Con estas acciones, el archivo /etc/readahead/boot se actualizará con los elementos que
realmente existen en el sistema. La siguiente vez que iniciemos el sistema, no se ejecutará el
parámetro profile, ya que este parámetro sólo se habrá activado para el arranque en el que se
ha incluido.
27
2.5.6 Sistema de tolerancia a fallos RAID 5.
Supongamos que tenemos tres discos duros y queremos grabar la información 110 011. Esta
información se grabará en dos discos (110 en el primero y 011 en el segundo) y en el tercer
disco se guardará la información de paridad. Si utilizamos la paridad par (el número de 1 de
cada dígito entre los tres discos ha de ser par), en el tercer disco se grabaría 101. Si un disco
se deteriora, su información se reconstruye calculando la paridad con el resto de los discos.
Para implementar este sistema de tolerancia a fallos en Linux, hay que instalar el paquete
mdadm, actualizando previamente los repositorios.
28
Para crear el sistema de tolerancia a fallos RAID 5 y probar que todo funciona correctamente
cuando un disco se estropea y después de repararlo y reconstruir el raid, hay que seguir los
siguientes pasos:
1. Los siguientes ejercicios los vamos a realizar con VirtualBox. La primera acción a
realizar es convertir el disco duro instalado en el ordenador en disco SATA e iniciar el
sistema para comprobar que el disco está ubicado en el dispositivo lógico /dev/sda.
Apagar el sistema.
2. Añadir tres discos duros nuevos, del mismo tamaño, para crear el RAID 5. Estos discos
los convertiremos a discos SATA.
3. Crear una partición, en cada uno de los discos duros nuevos, que ocupe todo el disco.
La salida de la orden fdisk para crear la partición en el disco duro /dev/sdb se muestra
en las siguientes líneas (la ejecución para los otros dos discos duros sería de igual
forma, cambiando la orden fdisk /dev/sdb por fdisk /dev/sdc y fdisk /dev/sdd):
29
/dev/md0:
Version : 00.90.03
Creation Time : Mon Feb 11 12:06:57 2008
Raid Level : raid5
Array Size : 16771584 (15.99 GiB 17.17 GB)
Device Size : 8385792 (8.00 GiB 8.59 GB)
Raid Devices : 3
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent
Layout : left-symmetric
Chunk Size : 64K
30
Cuando ejecutemos la orden cat /proc/mdstat y el RAID 5 esté construido, la salida del
comando será la siguiente:
En estas líneas se indica que los dispositivos /dev/sdb1 /dev/sdc1 /dev/sdd1 se van a
utilizar para formar parte de sistemas RAID y, además, que estos mismos dispositivos
forman el sistema RAID creado en el dispositivo /dev/md0, que es el que acabamos de
crear.
31
[ 4874.499757] RAID5 conf printout:
[ 4874.500425] --- rd:3 wd:3
[ 4874.500572] disk 0, o:1, dev:sdb1
[ 4874.500694] disk 1, o:1, dev:sdc1
[ 4874.500800] disk 2, o:1, dev:sdd1
8. De esta forma, el sistema RAID 5 está activado pero no es accesible, ya que todavía
no se ha realizado la operación de montaje. Para realizar esta operación, hay que
proceder de la siguiente forma:
32
10. Reiniciar el sistema y comprobar que el dispositivo RAID 5 se ha montado
automáticamente. Para ello, hay que ejecutar la orden ls /raid5. La salida de esta orden
es la siguiente:
root@plantilla-desktop:~# ls /raid5
lost+found prueba
Puede ocurrir que el sistema sea capaz de iniciar el dispositivo RAID 5 o que el
dispositivo no se inicie. En el primer caso, si consultamos el contenido del archivo
/var/log/dmesg, se habrán incluido las siguientes líneas:
En estas líneas, vemos que el RAID 5 se ha iniciado sólo con dos discos.
13. Visualizar el contenido del dispositivo RAID 5 con la orden ls /raid5. La salida de esta
orden es la siguiente:
root@plantilla-desktop:~# ls /raid5
lost+found prueba
33
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
17. Apagar el equipo y añadir un nuevo disco duro para reconstruir el RAID 5 (recordar que
este disco hay que convertirlo a SATA). En este caso, vamos a añadir el disco que
quitamos anteriormente, simulando con ello que este disco ha sido reparado. Si
añadimos un nuevo disco, seguiremos en el punto 21.
34
md0 : active raid5 sdd1[3] sdb1[0] sdc1[1]
16771584 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[==============>......] recovery = 74.8% (6275808/8385792) finish=2.5min
speed=13554K/sec
19. Consultar el contenido del directorio /raid5 y del archivo /raid5/prueba para comprobar
que todo funciona correctamente.
20. Reiniciar el equipo y consultar el contenido del directorio /raid5 y del archivo
/raid5/prueba para comprobar que todo funciona correctamente.
21. Si hemos añadido un disco duro distinto (recordad que hay que convertirlo a disco
SATA), debemos realizar las siguientes acciones:
21.4.El sistema raid 5 comienza a reconstruirse. Podemos ejecutar las órdenes para
ver la reconstrucción en curso.
21.5.Al finalizar el proceso de reconstrucción, el sistema raid 5 se habrá montado
automáticamente. Podemos comprobarlo visualizando el contenido del directorio
/raid5 y del archivo /raid5/prueba.
35
2.6. PROTOCOLO TCP/IP.
El Departamento de Defensa de EEUU, preocupado por el corte de la comunicación en una
guerra, crea un sistema de información basado en la unión de todos sus puntos de
comunicación por varios destinos distintos. De esta forma, si se corta un punto el resto siguen
comunicados por otros. Para unir los distintos puntos utilizan la red telefónica y así nace
ARPANET (Advanced Research Project Agency Network) en 1970.
Es el que asegura que los datos son transmitidos correctamente. Está orientado a la
transmisión y controla si la información llega en orden (si no llega ordenada, la ordena), si
hay errores, etc.
Permite que las aplicaciones se ejecuten independientemente del hardware que se esté
utilizando, tanto a nivel local como en la red. Proporciona un sistema de entrega de
paquetes no fiable.
36
Todo esto implica que, mediante el protocolo TCP/IP, se pueden conectar ordenadores de
diferentes tipos, con distinto hardware y con distintos sistemas operativos, tanto en redes de
área local como en redes con equipos conectados a larga distancia.
El funcionamiento del protocolo TCP/IP se realiza según el estándar OSI (Open System
Interface), que consiste en la transmisión de datos por niveles. Para poder controlar la
transmisión, cada nivel incorpora al nivel siguiente su propia cabecera. Cuando la información
llega a su destino, la comunicación entre niveles se realiza de forma inversa, quitando las
cabeceras recibidas y comprobando que la transmisión es correcta.
Los siete niveles o capas del modelo OSI son los siguientes:
• Capa física.
• Capa de enlace.
En este nivel los datos digitales se traducen en señales a las que se añaden elementos
para formar tramas o paquetes.
Algunos elementos que se añaden son las direcciones físicas del emisor y del destinatario,
que hacen referencia a las tarjetas de red.
• Capa de red.
• Capa de transporte.
Se encarga de comprobar la transmisión correcta de los paquetes entre los emisores y los
receptores.
• Capa de sesión.
• Capa de presentación.
• Capa de aplicación.
37
Este nivel constituye la interfaz de comunicación con el usuario. La interfaz puede actuar
como un software específico (navegadores, gestores de correo electrónico, etc.) o como
comandos del sistema operativo (ftp, telnet, etc.).
Una dirección IP es una dirección lógica de 32 bits, que sirve para identificar cada nodo
(equipo) en la red, por lo que cada adaptador de la red dispondrá de su propia dirección IP, que
será distinta para cada uno de los nodos.
Las direcciones IP se representan por cuatro bytes, que se escriben separados por un punto
(notación decimal puntuada). Cada uno de estos bytes está representado por 8 bits, por lo que
su rango de valores oscilará entre 0 y 255.
Las direcciones IP constan de dos campos: un identificador de red (netid), que identifica la red
a la que está conectada la estación, y un identificador de host (hostid), que identifica cada host
dentro de la red.
En terminología TCP/IP, una red es un grupo de hosts que pueden comunicarse entre sí sin
utilizar un encaminador. Todos los hosts TCP/IP que forman una misma red deben tener
asignado el mismo identificador de red. Los hosts con distintos identificadores de red deben
comunicarse mediante un encaminador.
Dependiendo del número de bits tomados para definir el identificador de red, existen distintas
clases de redes, que vienen diferenciadas por el número de redes y de hosts disponibles. Estos
valores se indican en la máscara de subred, de forma análoga a las direcciones IP, por lo que
tienen 4 bytes y 32 bits. Si un byte tiene el valor 255, indica que dicho byte en la dirección IP se
refiere al identificador de red y si tiene el valor 0 indica que dicho byte en la dirección IP se
refiere al identificador de host.
38
Clase A.
Contiene el valor 255.0.0.0. Esta máscara de subred indica que el primer byte de la
dirección IP se destina al identificador de red. Este byte sólo puede contener un valor
comprendido entre 1 y 126. Los restantes 3 bytes se destinan al identificador de host. Por
lo tanto, en esta red se pueden definir 256 redes (1 byte = 8 bits = 2^8 = 256) y 16.777.216
estaciones (3 bytes = 24 bits = 2^24 = 16.777.216). En realidad, en redes de tipo A sólo se
admiten 128 redes y no 256, porque sólo se utilizan los 7 primeros bits y no los 8. El primer
bit contiene siempre el valor 0, que indica el tipo de red.
Para utilizar direcciones IP de esta clase en una Intranet con salida a Internet se usan las
direcciones IP que comiencen por 10, es decir, 10.0.0.0. Estas direcciones IP no existen en
Internet.
Clase B.
Contiene el valor 255.255.0.0. Esta máscara de subred indica que los dos primeros bytes
de la dirección IP se destinan al identificador de red. El primer byte sólo puede contener un
valor comprendido entre 128 y 191. Los restantes 2 bytes se destinan al identificador de
hosts. Por lo tanto, en esta red se pueden definir 65.536 redes (2 bytes = 16 bits = 2^16 =
65.536) y 65.536 estaciones (2 bytes = 16 bits = 2^16 = 65.536). En realidad, en redes de
tipo B sólo se admiten 16.384 redes y no 65.536, porque sólo se utilizan los 14 primeros
bits y no los 16. Los dos primeros bits contienen el valor 10, que indican el tipo de red.
El rango de direcciones IP disponibles en este tipo de redes es desde 128.0.0.0 hasta
191.0.0.0.
Para utilizar direcciones IP de esta clase en una Intranet con salida a Internet se usan las
direcciones IP que comiencen por 172.16, es decir, 172.16.0.0. Estas direcciones IP no
existen en Internet.
Clase C.
Contiene el valor 255.255.255.0. Esta máscara de subred indica que los tres primeros
bytes de la dirección IP se destinan al identificador de red. El primer byte sólo puede
contener un valor comprendido entre 192 y 223. El byte restante se destina al identificador
de hosts. Por lo tanto, en esta red se pueden definir 16.777.216 redes (3 bytes = 24 bits =
2^24 = 16.777.216) y 256 estaciones (1 byte = 8 bits = 2^8 = 256). En realidad, en redes de
tipo C sólo se admiten 2.097.152 redes y no 16.777.216, porque sólo se utilizan los 21
primeros bites y no los 24. Los tres primeros bits contienen el valor 110, que identifican el
tipo de red.
Para utilizar direcciones IP de esta clase en una Intranet con salida a Internet se usan las
direcciones IP que comiencen por 192.168, es decir, 192.168.0.0. Estas direcciones IP no
existen en Internet.
Clase D.
Cuando un nodo de la red quiere enviar información a otro pero sólo conoce su dirección IP
y no conoce su dirección MAC, el protocolo ARP envía un mensaje broadcast solicitando al
39
nodo destino su dirección física. Todos los nodos de la red reciben el mensaje pero sólo
responde el que tiene la dirección IP conocida.
Este mensaje lleva como máscara de subred el valor 255 en la parte de la dirección IP que
se refiere a los hosts.
Así, si una dirección IP tiene el valor 192.124.255.255 quiere decir que se está enviando un
mensaje de multidifusión a todos los hosts de la red 192.124.0.0.
• Clase E.
Actualmente, las direcciones de clase A están agotadas, las direcciones de clase B están
disponibles sólo para grandes empresas y las direcciones de clase C son las únicas
disponibles, aunque ya son muy escasas. Los proveedores disponen de bloques de direcciones
IP para proporcionar a sus clientes. Para disponer de nuevas direcciones IP, se está trabajando
sobre la versión 6 de IP, que se denomina IPNG (IP Next Generation).
Todos los equipos tienen una dirección IP local o look back, que es la 127.0.0.1. Esta dirección
IP no se puede asignar a ningún puesto.
La combinación de una dirección IP y la máscara de red nos indica la red a la que está
conectado un equipo. Por ejemplo, el puesto con dirección IP 192.168.1.110 y máscara de red
255.255.255.0 está conectado a la red 192.168.1.0; el puesto con dirección IP 192.168.1.111 y
máscara de red 255.255.255.0 está conectado a la red 192.168.1.0; el puesto con dirección IP
192.168.2.210 y máscara de red 255.255.255.0 está conectado a la red 192.168.2.0; el puesto
con dirección IP 192.168.2.211 y máscara de red 255.255.255.0 está conectado a la red
192.168.2.0; el puesto con dirección IP 192.168.3.110 y máscara de red 255.255.0.0 está
conectado a la red 192.168.0.0; el puesto con dirección IP 192.168.3.111 y máscara de red
255.255.0.0 está conectado a la red 192.168.0.0; y así sucesivamente.
Aunque el protocolo IPv4 permite direccionar 4.000 millones de dispositivos, muchas de las
direcciones no se pueden utilizar debido a su distribución poco eficaz en un momento en el que
no podía preveerse la explosión de Internet.
El protocolo IPv6 permite direccionar un gran número de dispositivos, ya que las direcciones se
codifican en 16 bytes (128 bits) en lugar de los 4 (32 bits) de IPv4. Además, se ha previsto el
uso de redes de alta velocidad y el transporte de datos multimedia.
40
2.6.3 Protocolo TCP (Transmission Control Protocol).
Es un protocolo de transporte que asegura un servicio fiable. Es el que asegura que los datos
son transmitidos correctamente. Está orientado a la transmisión y controla si la información
llega en orden (si no llega ordenada, la ordena), si hay errores, etc. Actúa en la capa de
transporte.
Al realizar el control de los datos, la transmisión es más lenta pero se libera a las aplicaciones
que utilizan los servicios de TCP del control de la integridad de los datos.
41
2.6.4 Administración de las tarjetas de red desde la línea de comandos.
Para administrar las tarjetas de red desde la línea de comandos, se utiliza la orden ifconfig. La
sintaxis de esta orden es la siguiente:
Si se ejecuta la orden sin parámetros, se muestran todas las tarjetas de red instaladas en el
equipo.
La interfaz hace referencia a la tarjeta de red instalada. Las tarjetas de red se nombran como
eth0, eth1, ...
up.
down.
Dirección IP.
netmask.
42
Ejemplo: La orden ifconfig eth0 192.168.1.2 netmask 255.255.255.0 asigna la dirección
IP 192.168.1.2 y la máscara de red 255.255.255.0 a la interfaz eth0.
Para saber si la tarjeta de red funciona correctamente, se utiliza la orden ping dirección IP. Si la
tarjeta funciona correctamente, la orden ping devuelve una respuesta de la dirección IP
especificada. En caso contrario, devuelve un error.
, pipe 3
Si queremos administrar el servicio que controla la interfaz de red, hay que ejecutar la orden
/etc/init.d/networking {start,stop,restart,force-reload}. En algunas distribuciones de Linux, el
servicio networking se llama network.
La orden route se utiliza para administrar la puerta de enlace que utiliza la interfaz de
comunicaciones. La salida de la orden route podría ser la siguiente:
root@alsico-laptop:~# route
43
Destination Gateway Genmask Flags Metric Ref Use Iface
Con estas órdenes, tanto la dirección IP como la puerta de enlace sólo son asignadas
temporalmente para la sesión actual. Cuando se reinicie el equipo, la dirección IP y la puerta de
enlace serán las que tiene asignada de forma permanente (más adelante se explica el proceso
a seguir para asignar estos parámetros de forma permanente).
La salida de la orden route después de realizar las asignaciones anteriores sería la siguiente:
root@alsico-laptop:~# route
Los archivos que administra el servicio networking son /etc/iftab, que contiene la dirección MAC
de la tarjeta de red, y /etc/network/interfaces, que contiene una lista con las tarjetas de red
instaladas en el equipo. El contenido de estos archivos podría ser el siguiente:
44
root@alsico-laptop:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet dhcp
auto wlan0
iface wlan0 inet dhcp
Para asignar una dirección IP fija, habría que añadir las siguientes líneas:
Si, además, queremos asignar una puerta de enlace, habría que añadir la línea gateway
192.168.100.1.
También se puede asignar una nueva dirección IP a la misma tarjeta de red, añadiendo las
siguientes líneas:
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 192.168.100.2
netmask 255.255.255.0
gateway 192.168.100.1
auto eth1:0
iface eth1:0 inet static
address 192.168.100.3
netmask 255.255.255.0
auto wlan0
iface wlan0 inet dhcp
Para activar los cambios realizados en el archivo /etc/network/interfaces, hay que ejecutar la
orden ifup eth1, para la interfaz eth1, o ifup eth1:0, para la interfaz eth1:0.
45
root@plantilla-desktop:~# ifconfig
eth1 Link encap:Ethernet HWaddr 00:0C:29:86:07:61
inet addr:192.168.100.2 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe86:761/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:498 errors:0 dropped:0 overruns:0 frame:0
TX packets:712 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:501435 (489.6 KiB) TX bytes:74657 (72.9 KiB)
Interrupt:18 Base address:0x1400
Para cambiar el nombre del equipo, hay que modificar el archivo /etc/hostname.
En este archivo, se indica que el nombre del equipo es plantilla-desktop. Si queremos cambiar
este nombre por el de prueba, el archivo /etc/hostname quedaría como sigue:
Si abrimos un terminal después de reiniciar el sistema, veremos el nuevo nombre del equipo en
el shell:
root@prueba:~#
46
2.6.6 Servidores DNS.
Para asignar la dirección de los servidores DNS que se van a utilizar, hay que modificar el
archivo /etc/resolv.conf. El contenido de este archivo es el siguiente:
nameserver 80.58.61.250
nameserver 80.58.61.254
Si queremos añadir el servidor DNS con dirección IP 80.58.0.33, tendríamos que añadir la línea
nameserver 80.58.0.33 en el archivo /etc/resolv.conf.
47
2.7. REDES INALÁMBRICAS.
Para utilizar la tarjeta de red inalámbrica, hay que descargar e instalar el paquete ndiswrapper,
que usará los drivers de la tarjeta de red inalámbrica para los sistemas de Microsoft.
Para instalar la tarjeta de red inalámbrica, hay que seguir los siguientes pasos:
Figura 2.7.1
48
Si la descarga e instalación la realizamos desde la línea de comandos, hay que
ejecutar la orden apt-get install ndiswrapper-utils-1.9 (esta es la última versión de este
paquete en el momento de la elaboración de estos apuntes).
2. Insertar el DVD con los drivers de Microsoft para la tarjeta inalámbrica. En la Figura
2.7.2, se muestran estos drivers para el sistema operativo Windows XP, que son los
drivers que vamos a instalar.
Figura 2.7.2
En esta ventana, están seleccionados los archivos i2220ntx.sys y neti2220.inf, que son
los que hay que copiar para la instalación de los drivers. Estos archivos los vamos a
copiar en la carpeta drivers que crearemos en /opt.
root@alsico-laptop:~# cd /opt/drivers
root@alsico-laptop:/opt/drivers# ls /etc/ndiswrapper/neti2220
root@alsico-laptop:/opt/drivers# ndiswrapper -l
49
5. Ejecutar la orden ndiswrapper -m. Esta orden crea el archivo ndiswrapper en el
directorio /etc/modprobe.d, cuyo contenido es la línea alias wlan0 ndiswrapper, que
indica que se va a utilizar el alias wlan0 para la tarjeta de red inalámbrica. La salida de
la orden ndiswrapper -m es la siguiente:
root@alsico-laptop:/opt/drivers# ndiswrapper -m
6. Ejecutar la orden ifconfig wlan0 para activar la tarjeta de red inalámbrica. Si, después
de ejecutar esta orden, hacemos clic sobre el icono de administración de las tarjetas de
red, se visualizarán todas las redes inalámbricas a nuestro alcance. La ventana de la
Figura 2.7.3 muestra un posible aspecto de esta acción.
Figura 2.7.3
Figura 2.7.4
Observar, en esta ventana, que se ha seleccionado ASCII WEP de 64/128 bits como
Seguridad inalámbrica, que es el tipo de cifrado de contraseña utilizado habitualmente.
50
Figura 2.7.5
Figura 2.7.6
9. Finalmente, para que la tarjeta de red se active al encender el ordenador, hay que
editar el archivo /etc/modules y añadir la línea ndiswrapper.
51
2.8. ADMINISTRACIÓN DE BLUETOOTH.
Para poder enviar y recibir información a través de Bluetooth, hay que instalar el paquete
bluez-utils. Una vez instalado podemos acceder a los archivos de configuración, ubicados en el
directorio /etc/bluetooth.
Para escanear los dispositivos Bluetooth a nuestro alcance, hay que ejecutar la orden hcitool
scan. En el siguiente ejemplo, esta orden devuelve la dirección MAC y el nombre de un teléfono
móvil que tiene activada la conectividad Bluetooth.
Scanning ...
Para enviar un archivo desde nuestro sistema al dispositivo Bluetooth, hay que seleccionarlo en
el Navegador de archivos, abrir el menú emergente y ejecutar la opción Enviar a. Se muestra la
ventana de la Figura 2.8.1.
52
Figura 2.8.1
En esta ventana, hay que desplegar la lista Enviar como y seleccionar Bluetooth (OBEX Push).
El dispositivo detecta automáticamente el terminal Bluetooth a nuestro alcance, según se
muestra en la ventana de la Figura 2.8.2.
Figura 2.8.2
En esta ventana, hay que pulsar el botón Enviar y, una vez aceptada la recepción del archivo
en el dispositivo Bluetooth, el envío es completado, según se muestra en la ventana de la
Figura 2.8.3.
Figura 2.8.3
Para visualizar el dispositivo Bluetooth activo en nuestro sistema, se pueden ejecutar las
órdenes hcitool dev o hciconfig. A continuación, se muestran unos ejemplos de la ejecución de
estos comandos.
Devices:
hci0 00:80:5A:65:28:E9
root@alsico-laptop:~# hciconfig
53
BD Address: 00:80:5A:65:28:E9 ACL MTU: 384:8 SCO MTU: 64:8
Para instalar el servicio DHCP, hay que ejecutar la orden apt-get install dhcp3-server. Conviene
recordar que el servidor que se configura como servidor DHCP debe tener la dirección IP fija. Si
no tiene una dirección IP fija, cuando intenta iniciar el servicio después de la instalación, se
produce un error.
Si, después de la instalación (una vez que el servidor tiene una dirección IP fija), se iniciar el
servicio, se genera un error. Este error se puede consultar en el archivo /var/log/syslog, donde
encontramos las líneas que se muestran a continuación.
Este error se produce porque no se ha definido la red y la máscara de red en la que el servidor
DHCP servirá direcciones IP. Para ello, hay que modificar el archivo de configuración del
servidor DHCP, que se denomina /etc/dhcp3/dhcpd.conf. Las líneas que hay que incluir en este
archivo para que el servicio se pueda iniciar sin errores son las siguientes (suponemos que el
servidor DHCP tiene la dirección IP 192.168.7.2 y la máscara de red 255.255.255.0):
La línea range 192.168.7.20 192.168.7.200; no es necesaria para iniciar el servicio DHCP sin
errores, pero esta línea es la que define el ámbito de direcciones IP que se van a servir
54
automáticamente y, si se omitiera, el servicio funcionaría correctamente pero no se servirían
direcciones IP.
Algunas opciones que se pueden configurar en el servidor DHCP, que deben incluirse en el
archivo /etc/dhcp3/dhcpd.conf, son las siguientes:
Para servir a un cliente la dirección IP del router que se utilizará en la red junto con su
dirección IP, se utiliza la directiva option routers, incluida en las directivas subnet y
netmask. Por ejemplo, las líneas
Para servir automáticamente las direcciones IP de los servidores DNS que van a utilizar las
estaciones cliente, se utiliza la directiva option domain-name-servers dirIP1[, dirIP2, ...];.
Esta directiva siempre debe ubicarse antes de las líneas donde se definen la red, máscara
de red, ámbito de direcciones IP y direcciones IP de los routers.
Desde los clientes, se pueden consultar las direcciones de los servidores DNS visualizando
el contenido del archivo /etc/resolv.conf.
host linuxubuntu40 {
55
hardware ethernet 00:0C:29:DF:80:1B;
fixed-address 192.168.7.40;
}
Una vez que se ha configurado o modificado el archivo /etc/dhcp3/dhcpd.conf, hay que reiniciar
el servicio dhcp3-server.
Los clientes pueden obtener una dirección IP del servidor DHCP con la orden dhclient eth1,
donde eth1 es el nombre de la tarjeta de red a la que se va a asignar la dirección IP. En las
siguientes líneas se muestra la ejecución de esta orden.
root@linuxubuntu40:~# dhclient
Internet Systems Consortium DHCP Client V3.0.4
Copyright 2004-2006 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Listening on LPF/eth1/00:0c:29:dd:ca:15
Sending on LPF/eth1/00:0c:29:dd:ca:15
Sending on Socket/fallback
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 3
DHCPOFFER from 192.168.7.2
DHCPREQUEST on eth1 to 255.255.255.255 port 67
DHCPACK from 192.168.7.2
SIOCADDRT: Network is unreachable
bound to 192.168.7.40 -- renewal in 256 seconds.
# All times in this file are in UTC (GMT), not your local timezone. This is
# not a bug, so please don't ask about it. There is no portable way to
56
# The format of this file is documented in the dhcpd.leases(5) manual page.
lease 192.168.100.100 {
client-hostname "prueba";
#
# Archivo /etc/dhcp3/dhcpd.conf para configurar el servidor DHCP.
#
# Cada vez que se modifique este archivo, hay que reiniciar el servicio dhcpd.
#
# Algunas directivas para configurar el servicio DCHP son las siguientes:
#
#
# Directiva para servir las direcciones IP de los DNS.
#
option domain-name-servers 194.179.1.100, 193.144.238.1;
#
# Directiva para definir la red en la que va a servir direcciones IP el
# servidor DHCP, el ámbito de direcciones IP que se van a servir y la
# dirección IP del router que se servirá a los clientes junto con su
# dirección IP.
#
subnet 192.168.7.0 netmask 255.255.255.0 {
range 192.168.7.20 192.168.7.200;
option routers 192.168.7.1;
}
#
# Directiva para reservar direcciones IP a determinadas estaciones.
#
host linuxubuntu40 {
hardware ethernet 00:0C:29:DF:80:1B;
fixed-address 192.168.7.40;
}
#
# Fin del archivo /etc/dhcpd.conf.
#
57
3. El Kernel.
El kernel es la parte del sistema operativo que reside en memoria. Se encarga de programar
los procesos, asignar el almacenamiento de la memoria y de los discos, supervisar la
transferencia de datos entre la memoria y los periféricos y atender los requerimientos de los
procesos.
La administración de procesos consiste en asignar recursos, lanzar los procesos y atender las
solicitudes de los procesos.
Un sistema Unix ejecuta instrucciones que forman parte de un proceso generado por un
usuario e instrucciones propias del kernel. El reloj interno es la parte que se encarga de
mantener la integridad del sistema. El reloj interrumpe periódicamente los procesos que se
están ejecutando para evaluar sus prioridades y cambiar la ejecución de los distintos procesos
según sus prioridades. Una interrupción es una señal de hardware que puede desviar la
ejecución hacia una rutina especial de software. Cuando un programa de usuario necesita un
servicio del sistema operativo, se genera una llamada al sistema que hace que se ejecute,
desde el kernel, dicho servicio. En las operaciones de E/S, el resto de procesos pueden quedar
en suspenso mientras se realiza la transferencia de datos, aunque, siempre que sea posible, se
intentarán ejecutar procesos de otros usuarios.
58
El sistema Unix emplea el tiempo compartido para la ejecución de los procesos. Cuando el
ordenador sólo tiene un procesador, el tiempo de ejecución se debe repartir entre los distintos
procesos. En cada momento, sólo un proceso se estará ejecutando, permaneciendo el resto en
espera. Los procesos que están en espera se dividen en dos grupos: los que están listos para
ejecutarse y los que están bloqueados. Los procesos pueden estar bloqueados por varias
causas, como, por ejemplo, porque estén realizando operaciones de E/S o porque necesiten
datos de otros procesos. Para liberar memoria RAM y, por lo tanto, los procesos que están
listos para ser ejecutados lo hagan más rápidamente, el sistema almacena los procesos
bloqueados en disco en las áreas de swap o de intercambio.
Toda la información que necesita el kernel para ejecutar los procesos se almacena en la tabla
de procesos y en la tabla de usuario o segmento de datos.
Existe una tabla de usuario para cada proceso activo y los programas del kernel sólo pueden
acceder directamente a la tabla de usuario del proceso que se está ejecutando.
Cada sistema Unix permite un número determinado de entradas en la tabla de procesos, por lo
que no es posible tener más procesos activos que el número de entradas en la tabla de
procesos. La creación de un proceso comprende la inicialización de una posición en la tabla de
procesos, la inicialización de la tabla de usuario y la carga de los datos y del texto del proceso.
Cuando un proceso finaliza, la posición que ocupaba en la tabla de procesos se borra para que
pueda ser utilizada por otros procesos.
59
4. Sistemas de archivos.
El sistema operativo Unix almacena toda la información en archivos, que son organizados en
directorios y subdirectorios.
Unix utiliza una estructura jerárquica en forma de árbol para organizar los directorios. La
estructura principal del árbol parte de un directorio principal que se denomina root (raíz) y se
representa por el carácter “/”.
Un directorio se comporta a todos los efectos como un archivo, con la característica de que sus
registros son de longitud fija.
El sistema de archivos actual en Linux es ext4 (fourth extended filesystem o «cuarto sistema de
archivos extendido»), que es un sistema de archivos con registro por diario (en inglés
Journaling), anunciado el 10 de octubre de 2006 por Andrew Morton, como una mejora
compatible de ext3. El 25 de diciembre de 2008 se publicó el kernel Linux 2.6.28, que elimina
ya la etiqueta de "experimental" de código de ext4.
• Los extents han sido introducidos para reemplazar al tradicional esquema de bloques
usado por los sistemas de archivos ext2/3. Un extent es un conjunto de bloques físicos
contiguos, mejorando el rendimiento al trabajar con ficheros de gran tamaño y
60
reduciendo la fragmentación. Un extent simple en ext4 es capaz de mapear hasta
128Mb de espacio contiguo con un tamaño de bloque igual a 4Kb. Por ejemplo, en las
anteriores versiones, para almacenar un fichero de 1Gb se utilizarían 256.000 bloques
de 4Kb cada uno, que podrían estar contiguos o no. En este caso, el sistema debe
realizar 256.000 comprobaciones de bloques para alojar el fichero. Con el sistema
extents se utilizarían 8 (8 extents*128Mb=1024Mb) extents simples, consiguiendo sólo
8 comprobaciones para alojar el fichero. Además, con el método Allocate-on-flush
explicado más abajo, es muy probable que los bloques extents sean contiguos.
El contenido de los directorios no apunta directamente a los bloques de datos de los archivos o
subdirectorios que dependen de él, sino a unas tablas, que se llaman inodos, separadas de la
estructura. El contenido de los inodos es el que realmente apunta a los bloques físicos de los
archivos dentro del disco.
Cada registro del directorio tiene una longitud fija de 256 bytes, que contienen un apuntador a
la tabla de inodos y el resto de datos del archivo (nombre, tipo, permisos, fechas, etc.).
Normalmente, la mayor parte del sistema operativo reside en dos sistemas de archivos: el
sistema de archivos raíz (/) y el sistema de archivos de usuario, montado bajo /usr.
Algunos de los directorios o sistemas de archivos que se montan durante la inicialización del
sistema son los siguientes:
61
Directorio bin.
Directorio sbin.
Directorio etc.
Contiene la mayor parte de los archivos de configuración del sistema, como el archivo de
contraseñas (passwd), lista de archivos que se montan al iniciarse el sistema (fstab), etc.
Directorio dev.
Contiene archivos de dispositivos, que se utilizan para acceder a los distintos dispositivos
hardware del sistema.
/dev/cdrom.
/dev/console.
/dev/fd.
/dev/hd.
/dev/null.
/dev/tty.
Se refieren a las consolas virtuales del mismo sistema. Las consolas virtuales se
utilizan para iniciar sesiones con distintos usuarios en un mismo equipo de forma
simultánea. La primera consola virtual será /dev/tty0, la segunda /dev/tty1, y así
sucesivamente.
/dev/ttyS.
Hacen referencia a los puertos serie. El puerto Com1 se corresponde con /dev/ttyS0,
Com2 con /dev/ttyS1, y así sucesivamente. El ratón se referencia como /dev/mouse,
que es un enlace simbólico con el dispositivo ttyS que le corresponde.
62
Directorio proc.
Directorio home.
En este directorio se ubican los directorios de todos los usuarios. El directorio home de los
usuarios se define durante la creación de los mismos y, por defecto, se le asigna el mismo
nombre que el usuario, aunque se pueden cambiar tanto el nombre como la ubicación.
Directorio var.
Contiene archivos que se utilizan durante la ejecución de Unix. El tamaño de los archivos
varía durante la sesión de trabajo.
Directorio usr.
bin.
etc.
include.
lib.
man.
src.
local.
Este directorio se utiliza para instalar el software que se va a utilizar en cada equipo de
manera local.
63
5. Administración de los sistemas de archivos.
Como hemos dicho, los directorios de una partición, de diferentes particiones, de diferentes
discos duros o de diferentes ordenadores, pueden formar un sistema de ficheros. Estos
elementos se tienen que montar en un directorio existente, que se denomina punto de montaje.
SistemaDeFicheros.
PuntoDeMontaje.
-a.
-f.
Realiza un montaje virtual del sistema de ficheros, pero el sistema de ficheros no se monta
realmente.
-n.
-r.
64
El sistema de ficheros se monta en modo sólo lectura.
-t tipo.
Especifica el tipo de sistema de ficheros que se ha montado. Los tipos válidos son minix,
ext, ext2, ext3, xiafs, msdos, hpfs, proc, nfs, umsdos, iso9660 y sysv.
-v.
-w.
-o opciones.
Aplica las opciones especificadas al sistema de ficheros que se está montando. Para la
lista de opciones, consultar la página de la orden man para la orden mount.
Para visualizar los sistemas de archivos montados se utiliza la orden fdisk -l.
Los sistemas de ficheros montados tienen que desmontarse. La orden para desmontar un
sistema de ficheros es umount. Su sintaxis es:
Ver la página de la orden man para la orden umount y consultar los argumentos de la sintaxis.
Los disquetes y los Cd-Rom se tienen que montar para poder utilizarse. Una vez que se ha
montado un disquete o un Cd-Rom, para utilizar uno distinto, hay que desmontar el que está
montado, insertar el nuevo disquete o Cd-Rom y volverlo a montar. Hay que tener en cuenta
que lo que se monta es el diskete o Cd-Rom y no la unidad de disquetes o la unidad de Cd-
Rom.
Para montar un disquete, se puede utilizar la siguiente orden: mount /dev/fd0 /media/floppy. A
partir de este momento, todas las operaciones con el disquete se realizarán sobre el directorio
/media/floppy.
Para montar un Cd-Rom, se puede utilizar la siguiente orden: mount /dev/scd0 /media/cdrom. A
partir de este momento, todas las operaciones con el Cd-Rom se realizarán sobre el directorio
/media/cdrom.
Figura 5.1
65
Una vez que el Cd está montado, no se puede abrir la unidad de Cd-Rom. Para desmontar y,
por lo tanto, sacar el Cd, hay que abrir el menú contextual del icono de la Figura 5.1 y ejecutar
la opción Expulsar, según se muestra en la Figura 5.2.
Figura 5.2
5.1. ARCHIVO /ETC/FSTAB.
En el archivo /etc/fstab (file system table o tabla del sistema de archivos) se configuran
determinados sistemas de ficheros para montarlos de forma abreviada. Este archivo contiene,
entre otras, estas dos líneas (estas líneas pueden variar en distintos equipos):
Estas dos líneas quieren decir que, al montar los dispositivos, se pueden omitir los nombres
/dev/fd0 y /dev/scd0. Por lo tanto, para montar el disquete se podría utilizar la orden mount
/media/floppy0, y para montar el Cd-Rom se puede escribir la orden mount /media/cdrom0. En
el caso de los disquetes, esta sintaxis no funciona si el disquete ha sido formateado en otro
sistema operativo, debiendo utilizar la sintaxis completa con el argumento –t tipo. Por ejemplo,
para montar un disquete formateado en un sistema operativo de Microsoft, hay que ejecutar la
orden mount /dev/fd0 /media/floppy0 -t msdos.
El archivo /etc/fstab se utiliza para montar sistemas de archivos durante el proceso de arranque
del sistema. Los valores de cada una de las líneas de este archivo son los siguientes (en el
orden que aparecen en cada línea):
Indica el sistema de archivos que se va a montar. El valor none se utiliza para sistemas de
archivos especiales, como archivos de intercambio, dejándolos activos y no visibles. En el
archivo /etc/fstab de Ubuntu se incluye la línea proc /proc proc defaults 0 0, que se utiliza
para el sistema de archivos virtual que señala el espacio de información de los procesos de
memoria. No es un dispositivo real.
Punto de montaje.
Tipo.
ext.
Sistema de archivos local con nombres de archivos más largos e inodos más grandes.
Se ha sustituido por el tipo ext2 y prácticamente no se utiliza.
ext2.
hpfs.
Sistema de archivos local para particiones del sistema de archivos de alto rendimiento
de OS/2.
66
iso9660.
minix.
msdos.
nfs.
swap.
sysv.
umsdos.
xiafs.
ntfs-3g.
Opciones de montaje.
Se puede incluir una lista de opciones de montaje, separadas por comas, para el sistema
de archivos.
async.
atime.
auto.
defaults.
67
Utiliza las opciones por defecto, que son: rw, suid, dev, exec, auto, nouser y async.
dev.
force.
noatime.
noauto.
nodev.
noexec.
nosuid.
nouser.
Es la opción por defecto. El sistema de ficheros no puede ser montado por usuarios
normales.
remount.
ro.
rw.
suid.
68
sw.
sync.
Frecuencia de volcado.
Número de secuencia.
Especifica el orden de comprobación de los sistemas de archivos por la orden fsck cuando
el sistema se inicia. El sistema de archivos raíz debe tener el valor 1. El resto de sistemas
tendrían el valor 2. Si no se especifica ningún valor o se indica el valor 0, la consistencia
del sistema de archivos no se comprobará durante el arranque del equipo.
69
5.2. CREACIÓN DE SISTEMAS DE ARCHIVOS.
Para crear un nuevo sistema de archivos, primero hay que crear una partición y,
posteriormente, formatearla. Las particiones posibles que se pueden crear se encuentran en el
directorio /dev, y se nombran como hd seguido de una letra (a,b,c, etc.), que indica el disco
duro, y de un número (1,2,...), que indica el número de la partición dentro del disco duro. De
esta forma, /dev/hda1 indica la primera partición del primer disco duro, /dev/hda2 indica la
segunda partición del primer disco duro, /dev/hdb1 indica la primera partición del segundo
disco duro, y así sucesivamente.
Para crear una partición, se utiliza la orden fdisk. Un disco puede tener cuatro particiones
primarias o tres particiones primarias y una extendida, en la que podemos crear unidades
lógicas. La sintaxis de fdisk es la siguiente:
fdisk Dispositivo
El parámetro Dispositivo indica el disco duro en el que se van a realizar las operaciones con
fdisk (hda, hdb, sda, sdb, etc.)
Una vez ejecutado el comando fdisk, se muestra la línea Orden (m para obtener ayuda):, para
introducir las órdenes necesarias para realizar las distintas acciones de fdisk. Las órdenes que
se pueden introducir son las siguientes:
a.
c.
d.
Elimina una partición. En algunas versiones Unix/Linux, esta opción no borra las
particiones. En estos casos, para borrar una partición hay que eliminarla con esta opción y
crear una nueva con +0Kb de tamaño.
l.
m.
Muestra una lista con las órdenes que se pueden ejecutar en fdisk.
n.
p.
70
q.
t.
u.
Cambia las unidades de visualización y entrada. Con esta opción, el listado de las
particiones que se obtiene con el comando p se mostrará en sectores o en cilindros.
v.
w.
x.
Se utiliza para ejecutar funciones por usuarios expertos. Cuando se ejecuta el comando x,
se muestra la línea Expert command (m for help):. Los comandos que se pueden ejecutar
son los siguientes:
b.
c.
d.
e.
h.
p.
q.
r.
71
Vuelve al menú principal, que es la línea Orden (m para obtener ayuda):.
s.
w.
La primera línea de este listado, muestra el disco actual (/dev/hda), que tiene 255 cabezas, 63
sectores y 523 cilindros.
La segunda línea, nos informa de que las unidades de visualización están en cilindros de 16065
* 512 bytes (8.225.280 bytes) cada una. Al tener 523 cilindros con 8.225.280 bytes cada uno,
se deduce que el disco puede contener 4.301.821.440 bytes (523 * 8.225.280), que son unos 4
Gb.
Las siguientes líneas, muestran cada una de las particiones, la partición que tiene activado el
indicador de arranque (carácter * en la columna Boot), el cilindro de comienzo y de final de
cada una de ellas, el tamaño en bytes y el tipo de sistema de archivos en número (columna Id)
y en letra (columna System).
Para crear una partición, hay que introducir la opción n. Se muestra la siguiente información:
Acción de la orden
e Partición extendida
p Partición primaria (1-4)
Hay que introducir el número de partición que vamos a asignar a la nueva partición, que ha de
ser un número que todavía no se haya asignado a ninguna otra partición.
Este mensaje indica el primer y último cilindro libre, debiendo introducir el número de cilindro
donde va a comenzar la partición.
72
tamaño en bytes, Mb o Kb, hay que introducir una valor como +número, +númeroM o
+númeroK, respectivamente. Por ejemplo, si se introduce +100, el tamaño será de 100 bytes, si
se introduce +100M, el tamaño será de 100 Mb y si se introduce +100K, el tamaño será de 100
Kb.
Las particiones creadas con Linux Ubuntu son del tipo 83, correspondiente al sistema de
archivos Linux. Si queremos cambiar el sistema de archivos, hay que introducir el comando t, el
número de partición que se desea cambiar y el tipo de sistema de archivos, que se lista con el
comando l. Por ejemplo, si queremos que la partición creada sea de intercambio, hay que
introducir el tipo 82.
Cuando salimos de fdisk almacenando los cambios realizados, hay que reiniciar el sistema para
que las nuevas particiones se reconozcan.
Si ejecutamos la orden fdisk -l, se visualizan los sistemas de archivos montados en el equipo.
73
5.2.2 Formatear particiones.
Una vez que se ha creado la partición, es necesario crear el sistema de archivos que se va a
utilizar en dicha partición. Para ello, hay que ejecutar el comando mkfs. La sintaxis es la
siguiente:
-v.
Cuando se ejecuta mkfs, se visualizan detalles de las operaciones que se están realizando.
-t tipo.
Indica el sistema de archivos que se va a construir. Los tipos válidos son minux, ext, ext2,
ext3, xiafs, msdos, hpfs, proc, nfs, umsdos, iso9660 y sysv. Si se omite, mkfs genera un
sistema de archivos de tipo ext2. Se puede indicar el formato ext3 escribiendo la orden
mkfs.ext3.
Las particiones que van a ser utilizadas desde otros sistemas operativos, tienen que ser
formateadas con los comandos proporcionados por Unix para crear los sistemas de
archivos específicos. Por ejemplo, para crear una partición que va a ser utilizada desde los
sistemas operativos de Microsoft, hay que utilizar el comando mkdosfs.
Ejemplo.
Vamos a crear una partición de tipo msdos para que se pueda ver desde los sistemas
operativos de Microsoft. Los pasos a seguir son los siguientes:
Ejecutar el comando fdisk y crear una partición primaria o una unidad lógica en una
partición extendida.
Reiniciar el equipo.
fs –opciones.
Especifica las opciones del sistema de archivos que se pasarán al programa que construye
dicho sistema de archivos. Las opciones son las siguientes (estas opciones funcionan en la
mayoría de los programas de construcción de sistemas de archivos, pero no en todos):
-c.
74
-l NombreDeFichero.
Lee desde el fichero especificado una lista de los bloques incorrectos en el disco.
-v.
Visualiza detalles de las operaciones que realiza el constructor del sistema de archivos.
dispositivo.
tamaño.
Si queremos asignar una etiqueta a un sistema de archivos, hay que instalar el paquete
e2fsprogs (en Linux Ubuntu 9.04 ya está instalado) y ejecutar la orden e2label. Por ejemplo, la
orden e2label /dev/sda6 `Datos Linux` establece la etiqueta Datos Linux al sistema de archivos
creado en la partición /dev/sda6 (observar que se han utilizado los acentos graves en el
nombre de la etiqueta por contener un espacio en blanco).
75
5.3. PARTICIONES Y ARCHIVOS DE INTERCAMBIO.
Las particiones de intercambio se utilizan como memoria virtual. Linux puede utilizar, además
de particiones de intercambio, archivos de intercambio, que son archivos de gran tamaño
ubicados en un sistema de archivos normal y que se utilizan como área de intercambio. Es
preferible utilizar una partición de intercambio, pues la información que se gestione en ella
siempre estará almacenada consecutivamente, mientras que un archivo de intercambio puede
que no esté creado en bloques continuos. Los archivos de intercambio son útiles cuando se
quiere ampliar la zona de intercambio pero no hay espacio en el disco para realizar nuevas
particiones.
Para crear una partición de intercambio se utiliza el comando fdisk, identificando la partición
con el tipo 82. Para que la nueva partición la reconozca el sistema, hay que reiniciar el equipo.
Seguidamente, hay que preparar la partición con el comando mkswap. La sintaxis es la
siguiente:
-c.
dispositivo.
tamaño.
Una vez que se ha creado y preparado la partición de intercambio, hay que activarla para que
pueda ser utilizada por el kernel de Linux. La orden para activar una partición de intercambio es
swapon. La sintaxis es la siguiente:
dispositivo.
Indica el dispositivo donde está ubicada la partición de intercambio que se quiere activar.
-s.
-a.
-h.
76
Muestra la sintaxis completa de la orden swapon.
-p prioridad.
Las particiones de intercambio se pueden desactivar con el comando swapoff, debiendo indicar
el dispositivo donde está ubicada la partición de intercambio que se quiere desactivar.
Para crear un archivo de intercambio se utiliza la orden dd (consultar la página de la orden man
para ver la sintaxis completa de la orden dd). Una vez creado, hay que prepararlo y activarlo.
Ejemplo.
swapon /swap
swapoff /swap
77
6. Administración de sistemas de archivos remotos.
6.1. SISTEMA DE ARCHIVOS NFS.
Los sistemas de archivos remotos o de red se utilizan para montar, en la estructura de
directorios local, un sistema de archivos de un equipo remoto. El sistema de archivos remoto se
denomina NFS (Network File System) y utiliza el protocolo TCP/IP.
Por defecto, Ubuntu no instala el paquete necesario para configurar los sistemas de archivos
en red. Para instalarlos, hay que ejecutar la orden apt-get install nfs-kernel-server en un
terminal, que, demás de algunas librerías, instala los paquetes nfs-common y portmap,
necesarios para poder utilizar el sistema de archivos NFS. Una vez finalizada la instalación de
NFS, el sistema activa los servicios necesarios.
Para definir un sistema de archivos remoto, hay que incluirlo en el archivo /etc/exports. En este
archivo también se incluyen los equipos que van a poder acceder al sistema de archivos NFS,
el punto de montaje del sistema de archivos remoto y las opciones de montaje. Las opciones
de montaje pueden ser las siguientes:
all_squash.
Asigna los identificadores de usuario y de grupo a los usuarios anónimos. Esta opción es
útil para los directorios públicos NFS exportados, que se utilizan en FTP o en grupos de
noticias.
no_all_squash.
anonuid.
Establece el identificador de usuario para una cuenta anónima. Esta opción es útil para
clientes PC/NFS.
anongid.
Determina el identificador de grupo para una cuenta anónima. Esta opción es útil para
clientes PC/NFS.
insecure.
Permite el acceso al sistema de archivos desde el equipo que se está exportando, sin pedir
autentificación.
secure.
Se utiliza para pedir autentificación cuando se desea acceder al sistema de archivos desde
el equipo que lo está exportando.
link_relative.
Los enlaces simbólicos absolutos se convierten en relativos. De esta forma, para acceder
al sistema de archivos remoto, hay que escribir la ruta empezando por el carácter ‘/’, pues
78
el sistema añade, de forma automática, los carateres ‘../’ necesarios para acceder al
directorio raíz de la estación exportadora del sistema de archivos remoto.
link_absolute.
map_daemon.
Utiliza el demonio lname/uid map para asignar nombres locales y remotos e identificadores
numéricos en la estación que ha solicitado un acceso a un sistema de archivos remoto.
noaccess.
ro.
rw.
El sistema de archivos se monta para lectura y escritura. Para que los usuarios que montan
el sistema de archivos remoto puedan realizar operaciones de escritura, deben tener
asignado permiso de escritura, al grupo resto de usuarios, sobre el sistema de archivos
remoto (ver el punto 15.1 Cambio de permisos).
root_squash.
no_root_squash.
Las peticiones de root para acceder al sistema de archivos no se reasignan a otro equipo.
Es la opción por defecto. De esta forma, el usuario root podrá ejecutar todos los comandos
de red y accederá con los permisos establecidos al sistema de archivos remoto.
squash_uids.
squash_gids.
Define una lista de identificadores de grupo que van a utilizar asignaciones anónimas. Un
ejemplo podría ser el siguiente: squash_gids=3-8,22,340-55.
sync.
Indica que hasta que las operaciones de escritura no hayan finalizado, no se responde4rán
a nuevas peticiones para modificar el sistema de archivos remoto.
Un ejemplo para incluir un sistema de archivos a exportar en el archivo /etc/exports, podría ser
el siguiente:
79
/remoto Serv101(rw,sync,no_root_squash)
En este ejemplo, se exporta el sistema de archivos /remoto de lectura y escritura para el equipo
Serv101, de forma síncrona y asignando privilegios al usuario root del sistema cliente para que
pueda realizar las operaciones de escritura sobre el sistema de archivos remoto.
Si se utiliza sólo la opción rw, omitiendo la opción no_root_squash, hay que asignar permiso de
escritura al grupo del resto de usuarios sobre la carpeta /remoto y sobre cada uno de sus
elementos para que se puedan realizar operaciones de escritura.
Cuando se realiza una modificación en el archivo /etc/exports, hay que reiniciar el servicio nfs-
kernel-server para que tenga efecto.
Para que un sistema de archivos remoto sea accesible desde otros equipos, hay que iniciar los
demonios portmap, nfs-kernel-server y nfs-common. Estos servicios se inician de forma manual
con la orden /etc/init.d/portmap start, /etc/init.d/nfs-kernel-server start o /etc/init.d/nfs-common
start, respectivamente, o de forma automática cada vez que el ordenador arranque,
activándolos para el nivel de inicio del equipo (ver el punto 7. Proceso de inicialización del
sistema.) .
Además, hay que configurar los equipos para que puedan comunicarse entre sí. Para ello, hay
que incluir en el archivo /etc/hosts de la estación exportadora del sistema de archivos de red, la
dirección I.P. y el host de cada una de las estaciones que van a acceder al sistema de archivos
remoto. En cada una de las estaciones desde la que se va a acceder al sistema de archivos de
red, hay que incluir la dirección I.P., el host y el dominio de la estación exportadora del sistema
de archivos remoto. En el archivo /etc/hosts se incluye una línea por cada uno de los equipos
que se quieran añadir. Un ejemplo de una línea en el archivo /etc/hosts podría ser el siguiente:
192.168.0.100 EstTrab00
Para que un equipo pueda acceder a un sistema de archivos remoto, debe montarlo en su
estructura de directorios local. Para ello, hay que incluir una entrada en el archivo /etc/fstab si la
operación de montaje se quiere hacer de forma automática o hay que ejecutar el comando
mount para montar el sistema de archivos remoto desde la línea de comandos. Las opciones
de montaje que más se utilizan son las siguientes:
hard.
soft.
intr.
80
rsize=bytes.
Define el tamaño del búffer utilizado en las operaciones de lectura. El valor por defecto son
1.024 bytes.
wsize=bytes.
Especifica el tamaño del búffer utilizado en las operaciones de escritura. El valor por
defecto son 1.024 bytes.
timeo=tiempo.
Determina el tiempo, expresado en décimas de segundo, que una estación esperará a que
responda el servidor donde está ubicado el sistema de archivos remoto. El valor por
defecto es 7 (0,7 segundos).
Un ejemplo de montaje de un sistema de archivos remoto en una estación local desde la línea
de comandos sería el siguiente:
81
6.2. ADMINISTRACIÓN DE SAMBA.
6.2.1 Introducción.
Samba es un paquete que permite a los sistemas Unix/Linux integrarse en redes Windows. De
esta forma, se pueden compartir recursos entre equipos que tengan instalados distintos
sistemas operativos. Los sistemas Unix/Linux pueden ser accedidos desde el Entorno de red
de Windows.
Samba incluye dos servicios, smbd y nmbd, que utilizan el protocolo NETBIOS de Windows
para acceder a la red. El demonio smbd se encarga de ofrecer el servicio de acceso remoto a
ficheros e impresoras y de autentificar a los usuarios y el servicio nmbd permite que los
sistemas Unix/Linux se puedan incluir en las redes Windows y puedan utilizar los procesos de
gestión de redes de este sistema operativo (inclusión en el grupo de trabajo, inclusión en las
listas de ordenadores y recursos disponibles en la red, etc.).
Si no tenemos instalado Samba, en las redes Windows sólo se ven los equipos con este
sistema instalado. Las ventanas de las Figuras 6.2.1.1 y 6.2.1.2 muestran la red de Windows
desde el Entorno de red de Windows y de Linux, respectivamente.
Figura 6.2.1.1
Figura 6.2.1.2
Para instalar Samba, hay que ejecutar la orden apt-get install samba (es conveniente ejecutar
previamente apt-get update).
Después de realizar esta instalación, el servidor Samba instalado se incluye en la red Windows
y se puede visualizar en el Entorno de red de los dos sistemas operativos. Las ventanas de las
Figuras 6.2.2.1 (Windows) y 6.2.2.2 (Linux) muestran el grupo de trabajo mshome, que es el
grupo en el que se incluye el servidor Samba recién instalado.
Figura 6.2.2.1
Figura 6.2.2.2
Para poder acceder al servidor Samba y a sus recursos compartidos, hay que configurar el
archivo /etc/samba/smb.conf. Este archivo tiene varias secciones para configurar distintos
aspectos del servidor.
La sección [global] define aspectos que afectan al funcionamiento general del servidor (grupo
de trabajo al que pertenece el servidor, tipo de autenticación de los usuarios, etc.).
La sección [recurso compartido] define un recurso al que se puede acceder a través de la red.
Con la configuración por defecto que se realiza con la instalación, el servidor Samba está
visible pero no accesible. Para que se pueda acceder a él, hay que configurar el tipo de
autenticación de usuarios. Si utilizamos la autenticación SHARE, cualquier usuario podrá
82
acceder al servidor. Para ello, hay que incluir la línea security = SHARE en el archivo de
configuración de Samba.
Para compartir un recurso en el servidor Samba, hay que crear la carpeta a compartir e incluirla
en el archivo de configuración /etc/samba/smb.conf. En el siguiente ejemplo, se crea un recurso
compartido en /home/public, llamado public, y un archivo dentro de esta carpeta, llamado
prueba.
#
# Carpeta compartida
#
[public]
comment = carpeta de prueba
path = /home/public
public = yes
writable = yes
La orden public = yes hace este recurso visible a través de la red y la orden writable = yes
permite modificar el contenido del recurso.
Las siguientes líneas muestran la creación de la carpeta /home/public y del archivo prueba.
Una vez modificado el archivo /etc/samba/smb.conf, hay que reiniciar el servicio samba. Las
siguientes líneas muestran esta acción.
Con esta configuración, el servidor y la carpeta compartida son accesibles a través de la red,
según se muestra en las ventanas de las Figuras 6.2.2.3, 6.2.2.4 y 6.2.2.5, ejecutadas desde
Windows.
Figura 6.2.2.3
Figura 6.2.2.4
Figura 6.2.2.5
Si abrimos el archivo prueba y modificamos su contenido, el sistema nos avisa de que esta
operación no se puede realizar, ya que el archivo prueba no tiene los permisos necesarios para
realizar esta acción. En las siguientes líneas se visualizan los permisos asignados al archivo
prueba y la asignación del permiso de escritura para que se pueda modificar.
root@plantilla:~# ls -l /home/public
total 4
-rw-r--r-- 1 root root 16 2008-02-23 23:30 prueba
root@plantilla:~# chmod o+w /home/public/prueba
root@plantilla:~# ls -l /home/public
-rw-r--rw- 1 root root 16 2008-02-23 23:30 /home/public
83
Con estas acciones, el archivo se podrá modificar a través de la red.
Para ver los servidores que controla el protocolo Samba, hay que ejecutar la orden findsmb. La
salida de esta orden es la siguiente:
root@plantilla:~# findsmb
*=DMB
+=LMB
IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION
---------------------------------------------------------------------
192.168.1.35 PLANTILLA +[MSHOME] [Unix] [Samba 3.0.24]
192.168.1.36 W2000PROFE +[GRUPO_TRABAJO] [Windows 5.0] [Windows 2000 LAN Manager]
84
6.2.3 Autenticación de usuarios.
Con la configuración realizada anteriormente para autentificar a los usuarios (línea security =
SHARE), cualquier usuario que se conecte al servidor Samba tendrá acceso al recurso
compartido. Si queremos que sólo los usuarios con cuenta puedan acceder al servidor,
debemos crear una cuenta de usuario en el servidor Unix/Linux, utilizando la orden adduser
usuario, y esta misma cuenta en el servidor Samba, utilizando la orden smbpasswd -a usuario.
Asimismo, el servidor Windows debe tener creada una cuenta de usuario con este mismo
nombre. En todos los casos, las contraseñas también deben coincidir.
Para definir el acceso y las operaciones a realizar sobre el recurso compartido, hay que utilizar
las siguientes órdenes:
● valid users.
En este parámetro se incluyen los únicos usuarios o grupos de usuarios que podrán
acceder al recurso. Los usuarios se incluyen escribiendo el nombre de cuenta de
usuario y los grupos con el nombre de grupo precedido por el carácter @.
● read only.
En este parámetro se indica si el recurso será de sólo lectura (valor Yes) o de lectura y
escritura (valor No).Se puede definir qué usuarios podrán leer y escribir y qué
usuarios podrán sólo leer. Estas definiciones se realizan en los parámetros read list y
write list descritos a continuación.
● read list.
En este parámetro se incluyen los usuarios o grupos de usuarios que sólo podrán
realizar operaciones de lectura en el recurso compartido. Los usuarios se incluyen
escribiendo el nombre de cuenta de usuario y los grupos con el nombre de grupo
precedido por el carácter @.
● write list.
En este parámetro se incluyen los usuarios o grupos de usuarios que podrán leer y
escribir en el recurso compartido. Los usuarios se incluyen escribiendo el nombre de
cuenta de usuario y los grupos con el nombre de grupo precedido por el carácter @.
La configuración del recurso compartido public creado anteriormente, quedaría como sigue:
#
# Carpeta compartida
#
[public]
comment = carpeta de prueba
path = /home/public
public = yes
writable = yes
valid users = ususamba
read only = no
write list = ususamba
Con esta configuración, sólo el usuario ususamba podrá acceder y escribir en el recurso
compartido public.
85
6.2.4 Agrupación de servidores.
Con la configuración creada en los puntos anteriores, los servidores Windows y Samba están
ubicados en grupos distintos, según se muestra en la ventana de la Figura 6.2.4.1.
Figura 6.2.4.1
Para que los servidores formen parte de la misma estructura, deben estar incluidos en el mismo
grupo. Para ello, el servidor Windows debe pasar a formar parte del grupo Mshome o el
servidor Samba debe ser incluido en el grupo Grupo_trabajo, modificando la línea workgroup =
MSHOME por la línea workgroup = Grupo_trabajo en el archivo /etc/samba/smb.conf, debiendo
reiniciar el servicio /etc/init.d/samba después de realizar esta acción.
Figura 6.2.4.2
La ventana de la Figura 6.2.4.3, muestra los dos servidores incluidos en el grupo de trabajo
MSHOME.
Figura 6.2.4.3
Si ejecutamos la orden findsmb, se muestra la siguiente información, con los dos servidores
incluidos en el grupo MSHOME:
root@casa01:~# findsmb
*=DMB
+=LMB
---------------------------------------------------------------------
86
192.168.1.35 PLANTILLA +[MSHOME] [Unix] [Samba 3.0.24]
etiqueta:estado:acción:proceso #comentarios.
El estado corresponde a los niveles de ejecución en los que está permitido que se ejecuten
determinados procesos. Hay seis niveles de ejecución de procesos:
0.
1.
2.
3.
87
5.
6.
Una vez que el sistema se ha iniciado en uno de los niveles anteriores, es posible reiniciarlo en
un modo distinto. Para ello, hay que ejecutar el comando init nivel, donde nivel es uno de los
modos de inicialización comprendidos entre 0 y 6.
La línea del archivo /etc/inittab en la que se indica el nivel de inicio del sistema es la siguiente:
id:5:initdefault:
Si queremos iniciar el sistema en el nivel 3, habría que modificar la línea anterior de la siguiente
forma:
id:3:initdefault:
La acción define la forma en la que se ejecutará el proceso. Puede tener los siguientes valores:
off.
once.
wait.
El proceso permanece en espera hasta que finalice la ejecución del proceso asociado.
respawn.
boot.
bootwait.
initdefault.
Indica el estado en el que el sistema arrancará. Existen dos procesos que se inician con
esta acción:
rc.
88
Llama a un nivel de ejecución nuevo y los procesos que se ejecutan dependen del
estado del sistema.
getty.
sysinit.
Para cambiar el nivel de inicio por defecto hay que modificar el nombre del archivo
/etc/rc2.d/S30gdm, cambiando la letra S (primera letra del nombre del archivo) por la letra K.
Esta acción no se puede realizar desde la línea de comandos porque el servicio gdm está en
ejecución. Para realizar esta operación, Debian ha creado el paquete sysv-rc-conf. Después de
instalarlo lo ejecutamos desde la línea de comandos (escribiendo el nombre del paquete sysv-
rc-conf), mostrándose la ventana de la Figura 7.1.
Figura 7.1
En esta ventana hay que situarse sobre la X de gdm en la columna del nivel 2 y pulsar la barra
espaciadora para desactivar el elemento. Seguidamente, hay que pulsar la tecla q para salir.
De esta forma, la próxima vez que se inicie el sistema, arrancará en el modo texto. Para
acceder a otro nivel de ejecución, hay que escribir la orden init N, donde N es el nivel de
ejecución que se quiere iniciar. Para regresar al nivel 2 hay que escribir la orden init 2.
El directorio /etc/rcS.d contiene los servicios que se ejecutan nada más encender el ordenador,
necesarios para continuar con el inicio del sistema.
89
8. Administración de servicios.
Los servicios que se inician en cada uno de los modos se encuentran en el directorio /etc/rc.d.
En este directorio existen, entre otros, unos directorios llamados rc0.d, rc1.d, rc2.d, rc3.d, rc4.d,
rc5.d y rc6.d, que se corresponden con cada uno de los 6 niveles de inicialización del sistema.
En estos directorios se encuentran los servicios o demonios que se van a iniciar o parar cuando
se arranque el sistema en cada uno de los niveles. Si el archivo empieza por la letra ‘K’, indica
que el servicio se va a parar o no se va a iniciar. Si el archivo empieza por la letra ‘S’, indica
que el servicio se va a iniciar. Por ejemplo, en el directorio rc0.d, que se corresponde con el
cierre del sistema, todos los archivos empiezan por la letra ‘K’, excepto el archivo S00halt, que
es el servicio responsable del cierre del sistema; el resto de servicios, al empezar por la letra
‘K’, serán detenidos cuando el sistema se cierre. Estos programas inician o detienen el
demonio especificado, que se encuentra en el directorio /etc/init.d.
Para administrar los servicios desde la línea de comandos se utiliza la siguiente sintaxis:
servicio {start,stop,restart,reload,status}
donde servicio es el nombre del demonio que se desea administrar. Por ejemplo, para iniciar el
servicio atd, se utiliza la orden /etc/init.d/atd start, para detener el servicio atd, se utiliza la
orden /etc/rc.d/init.d/atd stop, para reiniciar el demonio lpd, se utiliza la orden /etc/rc.d/init.d/lpd
restart, para ver el estado del servicio lpd, se utiliza la orden /etc/rc.d/init.d/lpd status, etc.
También se puede utilizar la orden service para administrar los servicios. En los ejemplos
anterior, se utilizarían las órdenes service atd start, service atd stop, service lpd restart, service
lpd status, etc. En Ubuntu, esta orden no está instalada.
90
9. El shell.
El shell es el encargado de recibir las órdenes de los usuarios y convertirlas a lenguaje
máquina para que se puedan procesar. El shell compila las instrucciones de los usuarios y, si
no tienen errores, las envía al kernel para realizar la operación solicitada. Si existen errores al
teclear las órdenes, se produce un aviso para que el usuario vuelva a teclear la instrucción de
forma correcta. Hay órdenes que envían estos avisos de error al correo electrónico.
El shell sirve, por tanto, para comunicarse con el sistema operativo y realizar todas las
funciones que el sistema permita.
orden1;orden2;orden3;... .
(orden1[;orden2;...]) &.
Las órdenes se ejecutan en el orden escrito y en segundo plano, liberando el terminal para
realizar otras tareas. Si sólo se escribe una orden no es necesario utilizar los paréntesis.
Los procesos que se ejecutan en segundo plano se denominan daemon.
orden1 || orden2.
Las órdenes se escriben en la misma línea y se separan por el carácter ‘|’. Cada orden
escrita toma como entrada la salida de la orden anterior.
Ejemplo.
ls /etc | less
La salida de la orden ls /etc sobrepasa las 24 líneas de la pantalla. Para que el listado
se realice de forma paginada, la salida de la orden ls /etc se recibe como entrada de la
orden less, que toma el control del proceso y realiza la salida del listado del directorio
/etc de forma paginada.
91
9.2. REDIRECCIONAMIENTO.
Normalmente, las órdenes utilizan como salida de sus resultados la salida estándar, que es el
monitor. Esta salida se puede cambiar utilizando el redireccionamiento de salida a un archivo.
Para ello, se utilizan los caracteres ‘>’ y ‘>>’. El símbolo ‘>’ sobreescribe el contenido del
archivo si existe y crea el archivo si no existe. Con los caracteres ‘>>’ se crea el archivo si no
existe y si existe se añade la nueva información a los datos que contiene el archivo.
Los mensajes de error que generan los comandos se pueden redireccionar a un archivo
utilizando la sintaxis orden 2>archivo. Por ejemplo, si ejecutamos la orden cd prueba 2>errores
y el directorio prueba no existe, el mensaje de error que genera la orden se envía al archivo
errores. También se puede utilizar el redireccionamiento >>. Si se redirecciona al dispositivo
/dev/null, el mensaje no se muestra y no se guarda en ningún archivo.
Por defecto, la mayoría de las órdenes toman su entrada desde el teclado. Esta entrada se
puede modificar para que las órdenes tomen sus datos de entrada desde un archivo. Para ello,
se utiliza el carácter ‘<’. Por ejemplo, la orden mail root <carta envía el contenido del archivo
carta, por correo electrónico, al usuario root.
Si deseamos que una orden forme parte de otra orden, hay que pasarla como parámetro
encerrada entre acentos graves o comilla inversa. Por ejemplo, la orden echo La fecha y hora
del sistema es `date`, visualiza el mensaje La fecha y hora del sistema y, a continuación,
ejecuta la orden date.
92
9.3. HISTORIA DE ÓRDENES.
El shell mantiene una historia de todas las órdenes que se han ejecutado. El comando history
muestra una lista numerada de todas las órdenes que se han ejecutado. Para acceder a las
órdenes anteriores o posteriores de la historia de órdenes se utilizan las flechas ↑↓. Una vez
situados en una línea, se pueden utilizar las flechas →← para desplazarse por la línea y
modificarla.
Si queremos desplazarnos al principio de la historia, hay que introducir Esc <; para desplazarse
al final de la historia, hay que introducir Esc >.
Se puede introducir !número o !caracteres para ejecutar la orden que tiene el número indicado
en la historia de órdenes o que comienza por los caracteres tecleados. También se puede
incluir un patrón para que el shell ejecute la orden, incluida en la historia, que contenga el
patrón especificado. Para ello, hay que utilizar el formato !?patrón?.
Si se introducen unos caracteres y se pulsan las teclas Esc Tab, el shell muestra la orden,
incluida en la historia, que comience con los caracteres tecleados. Si hay más de una orden
coincidente, se emite un pitido y, si se vuelve a teclear Esc Tab, se muestra una lista de
órdenes, incluidas en la historia, que comienzan por los caracteres tecleados.
Se pueden editar varias líneas de la historia utilizando el comando fc rango, donde rango puede
ser un intervalo de números de sucesos ( fc 2 10, editará los sucesos comprendidos entre el 2 y
el 10) o un intervalo marcado por los caracteres especificados (fc cd vi editará las líneas
comprendidas entre la primera que empiece por cd y la primera que empiece por vi). Todas las
líneas editadas con la orden fc se ejecutan cuando salimos del editor.
Por defecto, se almacena una historia de 1000 órdenes, aunque este valor se puede cambiar
con la variable HISTSIZE. Las variables HISTFILE e HISTSIZE se definen en el archivo
.bash_profile.
Cuando se está escribiendo una orden, se puede pulsar la tecla Tab para escribir de forma
automática el nombre completo de la orden. Por ejemplo, queremos escribir rmdir utilizando
este método. Para ello, hay que escribir rmd y pulsar la tecla Tab. Como existen varias órdenes
que empiezan por rmd, el sistema emite un pitido. Si pulsamos nuevamente la tecla Tab se
muestra una lista de todas las órdenes que comienzan por rmd, que son rmdfile, rmdir y
rmdtopvf. A continuación, escribimos el carácter i y pulsamos la tecla Tab. Se escribirá,
automáticamente, rmdir.
El shell incorpora una función para visualizar nombres de archivos cuando se está escribiendo
un comando. Para ello, hay que introducir los primeros caracteres de un archivo y,
seguidamente, pulsar la tecla Esc seguida del carácter ‘?’. El shell mostrará, a continuación,
todos los archivos que comiencen por los caracteres escritos y la línea del comando escrita
antes de pulsar Esc ?, para que se complete el nombre del archivo.
Se puede utilizar el ratón para copiar y pegar texto. Para ello, hay que seleccionar el texto con
el botón izquierdo del ratón y, posteriormente, posicionar el cursor en el lugar donde se quiere
insertar el texto seleccionado y pulsar el botón derecho del ratón.
93
9.4. TIPOS DE SHELL.
Existen distintos tipos de shell, como pueden ser el shell de Bourne (sh), el shell de Korn (ksh),
el shell C (csh), el shell visual (vsh), etc. Se puede cambiar de un shell a otro introduciendo la
abreviatura de cada uno de ellos (sh, ksh, csh o vsh). Para volver al shell anterior hay que
introducir la orden exit. El shell que utiliza Linux Ubuntu es el bash (shell Bourne Again), que es
una versión avanzada del shell Bourne. Estos shell se encuentran en el directorio /bin.
El shell que se está utilizando se encuentra en la variable $SHELL. Se puede visualizar el shell
que se está utilizando escribiendo la orden echo $SHELL.
El shell que utiliza cada usuario se encuentra en la línea que cada usuario tiene en el archivo
/etc/passwd. Se puede cambiar el shell que utilizará un usuario modificando su línea en este
archivo. También se puede indicar el shell que utilizará cada usuario cuando se crean con los
comandos adduser o useradd.
94
9.5. ARCHIVOS DE CONFIGURACIÓN DEL SHELL.
La configuración del shell se realiza mediante una serie de variables a las que se asigna un
determinado valor. Para mostrar estas variables y sus valores se utiliza la orden set. Estas
variables toman su valor desde los archivos de configuración e inicialización de los usuarios
(/etc/profile, /etc/bashrc, etc.), cuando estos inician una sesión. Estos archivos son comunes
para todos los usuarios. En el directorio home de los usuarios se encuentra el archivo
.bash_profile, que es un archivo oculto. Desde este archivo se pueden configurar nuevas
variables del shell o modificar los valores que toman estas variables desde los archivos
comunes de configuración.
El shell gestiona una serie de variables de entorno, cuyo valor se puede modificar desde el
archivo .bash_profile . Estas variables se muestran con la orden env. Para acceder al contenido
de la variable, hay que escribir el carácter ‘$’ delante del nombre de la variable.
Variable $.
Variable !.
Variable CDPATH.
Variable EXINIT.
Se utiliza para establecer opciones de configuración para el Editor vi. Por ejemplo,
EXINIT=’set nu ai’, establece numeración de líneas y tabulación automáticas.
Variable HOME.
Variable IFS.
Contiene el carácter utilizado como separador interno de los campos. Normalmente será el
espacio, el tabulador o el carácter de nueva línea. Este carácter también será utilizado para
separar los distintos argumentos que se pasan a un comando o guión shell desde la línea
de comandos.
Variable LOGNAME.
Variable PATH.
Se utiliza para indicar al sistema los directorios donde tiene que buscar los archivos
ejecutables. Estos directorios deben estar separados con dos puntos (:). La variable PATH
toma valor en el archivo .bash_profile.
95
Ejemplo.
PATH=/bin:/usr/bin:/usr/sbin:.
Busca los archivos ejecutables en los directorios /bin, /usr/bin, /usr/sbin y directorio
actual (.).
PATH=$PATH:$HOME/bin
Variable PS1.
Se utiliza para especificar el prompt o indicador que mostrará el shell para que se
introduzcan las órdenes. El sistema utiliza una serie de códigos que se pueden utilizar para
definir el prompt de usuario.
Estos códigos son los siguientes (deben ser escritos entre comillas dobles o simples):
\d.
\t.
\u.
\W.
\!.
Variable PS2.
Establece el prompt que se utilizará cuando una orden necesite ser escrita en varias líneas.
El prompt secundario por defecto es ‘>’.
Variable SHELL.
Variable TERM.
Contiene el tipo de terminal que se utiliza. Algunos programas, como el editor vi, necesitan
esta información para su correcto funcionamiento. Un terminal que está muy extendido
96
entre los fabricantes es el vt100, que es utilizado para compatibilizar los terminales desde
el software.
Si desde el shell que estamos trabajando abrimos un subshell (por ejemplo, al ejecutar un
programa shell o al ejecutar el comando su usuario), el contenido de las variables de entorno
no se mantienen en el nuevo subshell. Para que los valores pasen de un shell a otro, hay que
utilizar la instrucción export variable, siendo variable el nombre de la variable de entorno que se
quiere mantener para el shell y el subshell. La exportación de variables de entorno entre
distintos shell, sólo se realiza del shell al subshell, pero no del subshell al shell. La orden export
se puede incluir en el archivo .bash_profile.
Se pueden utilizar nombres alias para definir las órdenes que nos interesen. Para ejecutar la
orden se escribirá el nombe alias creado. Por ejemplo, la orden alias perm=’ls –l’, asigna el
nombre perm al comando ls –l. Cada vez que se escriba perm se ejecutará la orden ls –l. Para
mostrar los nombres alias que se están utilizando, hay que introducir la orden alias. Para
eliminar un nombre alias, se utiliza la orden unalias nombre, donde nombre es un nombre alias
definido previamente. Los nombres alias se pierden cuando el usuario cierra la sesión en la que
han sido creados. Si se quieren mantener, hay que incluirlos en el archivo .bash_profile o
.bashrc.
El archivo /etc/environment se utiliza para configurar variables de entorno que van a utilizar las
aplicaciones (variable JAVA_HOME, utilizar el símbolo del euro, etc.).
El funcionamiento del shell se puede configurar mediante una serie de opciones que se pueden
activar y desactivar, utilizando la orden set {-o,+o} opción. Para activar la opción se utiliza –o y
para desactivarla +o. La activación o desactivación de estas opciones se pueden incluir en el
archivo .bash_profile. Las opciones son las siguientes:
noclobber.
ignoreeof.
Cuando está activada no se puede utilizar Ctrl+d para cerrar una sesión de usuario. En
este caso, si se pulsa Ctrl+d para abandonar la sesión, el shell muestra el mensaje Use
“logout” to leave the shell.
Existe también un archivo que se ejecuta cuando el usuario cierra su sesión. Este archivo está
oculto en el directorio home de cada usuario y se llama .bash_logout.
Cuando los archivos .bash_profile, .bashrc y .bash_logout se modifican, los cambios no surten
efecto hasta que se inicia una nueva sesión. Si se desea que los cambios surtan efecto en la
sesión actual, hay que ejecutar el archivo correspondiente. Para ello, hay que escribir . archivo
(observar que hay un espacio en blanco entre el punto y el nombre del archivo). De esta forma,
para ejecutar el archivo .bash_profile, hay que escribir . .bash_profile, para ejecutar el archivo
.bashrc, hay que escribir . .bashrc y para ejecutar el archivo .bash_logout, hay que escribir .
.bash_logout.
97
9.6. TERMINALES VIRTUALES.
Cuando un usuario inicia una sesión, el shell se inicia en el terminal tty1. Sin salir de este shell,
el usuario puede iniciar un terminal virtual pulsando las teclas Alt y alguna de las teclas F2, F3,
F4, F5 o F6. A continuación, se pedirá el nombre de un usuario y su contraseña. En ese
momento, en dicho terminal se estarán ejecutando dos shell. Para cambiar de un shell a otro,
hay que pulsar las teclas Alt-Fnúmero.
Ejemplo.
Al inciar una sesión, el shell se encuentra en el terminal tty1, que se corresponde con las
teclas Alt-F1.
Para cambiar al shell de tty1 hay que pulsar Alt-F1. Para cambiar al shell de tty3 hay que
pulsar Alt-F3.
98
10.Comandos de Unix/Linux.
10.1. ARCHIVOS ESPECIALES.
Son los que identifican los dispositivos físicos del ordenador, como son discos duros, cintas
magnéticas, terminales, líneas de comunicaciones, etc. Todos los dispositivos son tratados
como archivos y todos éstos archivos residen en el directorio /dev.
La forma de pasar los nombres de los archivos y dispositivos a los programas es la misma.
Los archivos especiales están sujetos al mismo tipo de protección de acceso que los
archivos y directorios ordinarios.
99
10.2. NOMBRES DE ARCHIVOS.
Las características de los nombres de archivos son las siguientes:
Para nombrar los archivos de forma abreviada y acceder a múltiples archivos y directorios en
un solo comando, se utilizan los siguientes metacaracteres:
?.
*.
[rango].
Ejemplos.
Supongamos que tenemos los siguientes archivos: texto1, texto2, texto3, texto11, texto12,
texto13, texto113, texto112 y texto113.
1. Para buscar los archivos texto1, texto2 y texto3, hay que utilizar texto?.
2. Para buscar los archivos texto11, texto12 y texto13, hay que utilizar texto??.
3. Para buscar los archivos texto111, texto112 y texto113, hay que utilizar texto???.
4. Para buscar todos los archivos texto, hay que utilizar texto*.
6. Si utilizamos texto[1-2], buscaría texto1 y texto2. Los caracteres entre corchetes indican
que busque los archivos cuyo rango de valores en dicho carácter sea el especificado.
7. Si utilizamos texto?[!1], buscaría texto12 y texto13. Los caracteres entre corchetes indican
que no busque los archivos que contengan el carácter 1 en dicha posición.
100
10.3. COMANDOS PARA LA GESTIÓN DE DIRECTORIOS Y ARCHIVOS.
10.3.1 Comando cat.
Se utiliza para crear archivos desde el teclado y para visualizar el contenido de un archivo.
La sintaxis es:
Cuando se ejecuta el comando, todos los caracteres que se introduzcan por teclado formarán
parte del archivo, hasta que se teclee la combinación de teclas Ctrl-d (fin de fichero).
Ver el apartado Comandos para operar sobre ficheros de texto para otras aplicaciones del
comando cat.
La sintaxis es:
cd [ruta]
En los nombres de rutas, los niveles de la estructura arborescente deben ir separados por el
carácter “/”.
Cuando queramos ascender de nivel, se pueden utilizar los caracteres “..”. De ésta forma, si
queremos subir a dos niveles superiores del directorio donde nos encontramos, hay que
escribir cd ../.. .
La sintaxis es:
-r.
Se utiliza cuando archivo1 y archivo2 son dos directorios y se quieren copiar todos los
subdirectorios con su contenido. Si el directorio especificado en archivo2 no existe, se crea.
101
Muestra el espacio libre en disco, el espacio ocupado y el tamaño de la partición donde
estamos ubicados.
La sintaxis es:
df [opciones]
-h.
-H.
-i.
-T.
La sintaxis es:
du [opciones] [archivo]
-a.
-b.
-h.
La sintaxis es:
file archivo
102
10.3.7 Comando find.
Si se ejecuta el comando find sin argumentos, se visualizan todos los ficheros, incluidos los
ficheros ocultos, del directorio actual.
-user usuario.
-name fichero.
Se utiliza para indicar el nombre del fichero o directorio que se quiere buscar.
Ejemplo.
Busca todos los archivos cuyo nombre termine con la cadena ‘.o’.
-print.
Muestra la ruta completa del fichero especificado. Es la opción por defecto, por lo que, si se
omite, también visualiza la ruta completa del archivo buscado.
-size n.
Ejemplos.
-atime n.
Busca archivos a los que se ha accedido hace un número de días o que se han creado
antes que el número de días especificado.
Ejemplos.
103
1. find / -atime –1
Busca todos los archivos que se han creado hace más de diez días.
-type x.
Busca los archivos del tipo especificado en x. x debe ser uno de los siguientes tipos: b
(archivo especial de tipo bloque), c (archivo especial de tipo carácter), d (directorios), p
(FIFO, archivos especiales) y f (archivos ordinarios).
Ejemplos.
Ejemplo.
Ejemplo.
Ejemplo.
104
10.3.8 Comando less.
Visualiza el contenido de uno o varios archivos de forma paginada (30 líneas por página).
La sintaxis es:
-número.
+número.
+/cadena.
Cuando el archivo se está visualizando y la orden less está en espera, se pueden introducir
órdenes para desplazarse por el archivo. Estas órdenes son las siguientes:
Órdenes de desplazamiento.
Teclas de flechas.
Barra espaciadora.
Se visualiza la página siguiente. Esta acción también se realiza con los comandos f y z
o pulsando la tecla AvPág.
[número] Enter.
Avanzas las líneas especificadas en número. Si se omite número, avanza una línea.
Esta acción también se realiza con los comandos [número] e, número f, número d y
número z.
b.
Retrocede una página. Esta acción también se realiza con la orden w o pulsando la
tecla RePág.
número b.
Retrocede las líneas especificadas en número. Esta acción también se realiza con los
comandos [número] y, número w y número u.
d.
105
[número] g.
[número] G.
h.
Visualiza la ayuda.
Q/q.
u.
Órdenes de búsqueda.
/cadena.
?cadena.
Busca los caracteres especificados en cadena. La búsqueda se realiza hacia atrás. Las
cadenas encontradas son marcadas.
n.
N.
Esc u.
m.
‘.
106
Cuando se ejecuta la orden ‘ se muestra el mensaje goto mark: y, a continuación, se
introduce la letra de la marca que se quiere visualizar. Si la letra que se introduzca no
existe como marca, se muestra el mensaje Mark not set. Si cuando se muestra el
mensaje goto mark: se introduce ‘, se muestra la siguiente marca. Esto se utiliza para
movernos por las marcas realizadas en el fichero.
:e.
:n.
:p.
v.
Ejecuta el editor vi, editando la pantalla que está visualizando el comando less.
:x.
=.
Visualiza el nombre del fichero que se está visualizando e información sobre el mismo.
![comando].
Crea una copia de un fichero, dejando los dos ficheros enlazados. Mediante este enlace,
cuando se cambia el contenido de un fichero, el contenido del fichero enlazado se cambia
automáticamente. Si dos ficheros están enlazados, cuando se utiliza la opción –i en el comando
ls, el número de inodo de los dos ficheros debe ser el mismo.
La sintaxis es:
ln fichero1 fichero2
La sintaxis es:
ls [opciones] [ruta]
Si se ejecuta el comando ls sin opciones y sin ruta, visualiza el contenido del directorio actual
ordenado alfabéticamente.
107
En el parámetro ruta se puede especificar el nombre de una trayectoria hasta un directorio o
archivo.
-a.
Visualiza el contenido del directorio con los archivos ocultos, que empiezan por el carácter
“.”.
-F.
Añade el carácter “/” después del nombre de los directorios, el carácter “*” después de cada
archivo ejecutable o el carácter “@” después de los enlaces simbólicos.
-i.
-l.
El primer carácter indica el tipo de archivo. Puede contener uno de los siguientes
caracteres: d (directorio), b (archivo especial de tipo bloque), c (archivo especial de tipo
carácter), p (archivo especial FIFO), l (enlace simbólico) y – (archivo ordinario).
Los siguientes tres caracteres indican los permisos de los usuarios pertenecientes al
grupo del propietario. Si un usuario pertenece a varios grupos, el grupo del propietario
es el que está activo en el momento de crear el directorio o archivo.
Los siguientes tres caracteres indican los permisos del resto de usuarios.
-ld.
Muestra información sobre el directorio (la misma información que muestra con la opción l),
pero no visualiza el contenido del directorio.
-p.
108
-r.
-R.
-s.
--color=opciones.
Se utiliza para visualizar los archivos y directorios en distintos colores. Las opciones
pueden ser: never, auto y always.
Esta orden se utiliza para visualizar un listado de todo el hardware del equipo. La salida de la
orden se realiza en el terminal, en modo texto. Si queremos visualizar el listado en modo
gráfico hay que instalar el paquete lshw-gtk, con la orden apt-get install lshw-gtk, y ejecutar el
comando lshw -X. En la ventana que se muestra hay que hacer doble clic sobre los elementos
visualizados y se irán mostrando, en los paneles siguientes, los componentes hardware y sus
características.
La sintaxis es:
Visualiza el contenido de uno o varios archivos de forma paginada (29 líneas por página).
La sintaxis es:
-número.
+número.
-d.
109
+/cadena.
Cuando el archivo se está visualizando y la orden more está en espera, se pueden introducir
órdenes para desplazarse por el archivo.
Barra espaciadora.
Carácter ‘.’.
/cadena.
!comando.
:f.
:n.
:p.
=.
[número]b.
Retrocede tantas páginas como se indique en número. Si se omite número retrocede una
página.
d.
[número]f.
110
Avanza tantas páginas como se indique en número. Si se omite número avanza una
página.
h.
Visualiza las órdenes que se pueden ejecutar cuando el comando more está en espera.
Q/q.
v.
Ejecuta el editor vi, editando la pantalla que está visualizando el comando more.
La sintaxis es:
La sintaxis es:
La sintaxis es:
Se pueden incluir los nombres de varios ficheros. En este caso, se visualizan los ficheros de
forma consecutiva, sin visualizar el principio y final de cada fichero.
-a.
-c.
-d.
111
Visualiza los datos del fichero en formato decimal. Si se utiliza –ad, se visualiza una fila con
los caracteres en ASCII y otra fila con su correspondiente código decimal.
-o.
Visualiza los datos del fichero en formato octal. Si se utiliza –ao, se visualiza una fila con
los caracteres en ASCII y otra fila con su correspondiente código octal.
-x.
Visualiza los datos del fichero en formato hexadecimal. Si se utiliza –ax, se visualiza una
fila con los caracteres en ASCII y otra fila con su correspondiente código hexadecimal.
Nulo. \O.
Tabulador. \t.
El usuario root puede visualizar el contenido de las particiones. Para ello, se puede introducir el
comando od –ac /dev/hda1. Si se quiere ver el contenido de una partición desde un
determinado byte se puede introducir la orden od –ac +10678. Si se quiere ver el contenido de
una partición desde un determinado bloque se puede introducir la orden od –ac +10b.
La sintaxis es:
pwd
Se utiliza para borrar archivos (recordar que los directorios son archivos).
La sintaxis es:
-r.
Realiza el borrado sin pedir confirmación. Por defecto, pide confirmación antes de borrar.
112
10.3.19 Comando rmdir.
La sintaxis es:
-p.
Ejemplo.
rmdir prueba/prueba1 –p
El comando rmdir borra el directorio prueba1 y, si el directorio prueba (directorio padre de
prueba1) se queda vacío, también lo borra. Si el directorio prueba no se queda vacío, no lo
borra.
113
10.4. COMANDOS PARA OPERAR CON FICHEROS DE TEXTO.
10.4.1 Comando cat.
La sintaxis es:
Ver el apartado Comandos para la gestión de directorios y ficheros para otras aplicaciones del
comando cat.
Se utiliza para seleccionar una parte de un fichero. Se pueden seleccionar bytes, caracteres o
campos.
La sintaxis es:
-b número.
-c número.
-f número.
Indica el campo que se va a seleccionar. Los campos deben estar separados por un
carácter tabulador.
-d carácter.
Indica el carácter que se utiliza como separador de los campos del fichero.
Se utiliza para buscar una cadena de caracteres en los archivos especificados. Cuando grep
encuentra la cadena especificada, se visualiza la línea que contiene dicha cadena.
La sintaxis es:
Si se utiliza grep cadena, sin opciones ni argumentos, la cadena se busca en los caracteres
introducidos desde el teclado.
Si la cadena buscada contiene espacios en blanco o caracteres de control, hay que introducirla
entre comillas.
114
Si se especifican varios archivos, cuando encuentra la cadena se lista el nombre del archivo
delante de la línea que contiene la cadena.
-c.
-i.
-l.
-n.
-v.
La sintaxis es:
La opción –d se utiliza para indicar el carácter separador de campos. Por defecto, se usa el
carácter tabulador como separador de campos.
Se utiliza para preparar un fichero de texto para ser impreso. Este comando introduce un
encabezamiento en el listado del fichero, permite imprimir la información en columnas, numerar
las líneas, reemplazar los espacios por tabuladores y viceversa, etc.
La sintaxis es:
pr [opciones] [archivo]
+número.
115
El listado se realiza a partir de la página especificada en número.
-número.
-d.
-h nombre.
Sustituye el nombre del fichero que se visualiza en la cabecera del listado por el nombre
especificado. Si el nombre especificado tiene más de dos palabras, debe ir entre comillas.
-l líneas.
Indica el número de líneas por página. Por defecto, se escriben 66 líneas en cada página.
Si se introduce un número de líneas menor que 10, no se visualizan las líneas de la
cabecera (5 líneas) y del final (5 líneas).
-n.
Númera las líneas del listado. Si el listado se realiza por columnas, se numeran todas las
filas de todas las columnas.
-t.
-w número.
Indica el número de caracteres por línea que se visualizarán. Por defecto, se visualizan 72
caracteres por línea.
La sintaxis es:
Si se ejecuta sort sin parámetros, el sistema espera que se introduzcan caracteres desde el
teclado, separando las líneas con Enter, hasta que se pulsa CtrlD, realizando entonces la
ordenación, tomando el monitor como salida.
-b.
-d.
116
-f.
-n.
Los números no se toman como cadenas, sino por su valor aritmético, teniendo en cuenta
los caracteres de puntuación y los signos + y -.
-o fichero.
-r.
-t carácter.
Indica el carácter que se utiliza como separador de los campos del fichero.
La orden sort ordena los archivos línea a línea. Si un archivo contiene varios campos en una
línea, es posible que queramos ordenar según un determinado campo. Los campos estarán
separados por un espacio en blanco o por un tabulador. Para ordenar por el primer campo se
utiliza +0, para ordenar por el segundo +1, y así sucesivamente.
Se utiliza para visualizar el final de uno o varios archivos. Por defecto, se muestran las diez
últimas líneas de cada archivo.
La sintaxis es:
Si se introduce tail sin parámetros, se realiza la entrada de datos por teclado. Cuando finaliza la
entrada de datos, tail muestra las diez últimas líneas introducidas.
b.
c.
l.
+número.
-número.
117
Se visualiza desde el bloque, carácter o línea especificada en número, contando desde el
final del fichero. Si se omiten las opciones, por defecto se cuentan líneas.
Se utiliza en combinación con otros comandos. Visualiza la salida del comando en pantalla y la
almacena en el/los fichero/s especificado/s. Los comandos se separan por el carácter “|”.
La sintaxis es:
Si se utiliza la orden tee sin argumentos, sólo se utiliza la salida estándar (el monitor) como
salida del comando.
-a.
Se utiliza para crear archivos y modificar las fechas del último acceso y última modificación de
los archivos.
La sintaxis es:
Si se omiten las opciones, se crea el archivo o archivos especificados. Los archivos se crean
vacíos.
-a.
Cambia la fecha y hora del último acceso por la fecha del sistema.
-c.
-m.
Se utiliza para contar líneas, palabras y/o caracteres en los archivos especificados.
La sintaxis es:
Si se utiliza wc sin opciones, se muestra, por este orden, el número de líneas, el número de
palabras, el número de caracteres y el nombre del archivo. Si se introduce el nombre de varios
archivos, la última línea muestra el total de líneas, palabras y caracteres de todos los archivos.
118
Las opciones –l –w –c muestra el número de líneas, palabras o caracteres, respectivamente. Si
se combinan varias opciones, el carácter “-“ sólo se escribe una vez.
La sintaxis es:
clear
Se utiliza para visualizar o modificar la fecha y hora del sistema. Sólo el usuario administrador
puede modificar la fecha y hora del sistema.
Para modificar la fecha y hora del sistema, hay que utilizar la siguiente sintaxis:
date MMDDhhmmYY
El argumento formato se utiliza para controlar la salida. Puede tomar los siguientes valores:
119
%S Visualiza los segundos.
Ejemplos.
date
date ‘+%A’
date ‘+%x’
4. Visualizar la hora del sistema con el formato hh:mm:ss, utilizando el reloj de 24 horas.
date ‘+%X’
date ‘+%A%d%B%y%X’
Observar que la fecha y la hora del sistema se visualizan sin espacios en blanco.
120
diasemana, dd de mes de aaaa hh:mm:ss
La sintaxis es la siguiente:
La opción más utilizada es –l, que muestra información adicional sobre los usuarios indicados.
La sintaxis es:
id [opciones] [usuario]
-g.
-G.
-u.
-n.
Se utiliza en combinación con las opciones –g, -G y –u. Visualiza el nombre del usuario o
de los grupos al que pertenece, dependiendo de la opción con la que se utilice.
121
Ejemplos.
id –g
id root
3. Visualizar los números de todos los grupos a los que pertenece el usuario root.
4. Visualizar los nombres de todos los grupos a los que pertenece el usuario root.
id –n –G root
Muestra el nombre de usuario con el que se ha accedido al sistema. El nombre del usuario se
almacena en la variable $LOGNAME.
La sintaxis es:
logname
Ejemplo.
logname
La sintaxis es la siguiente:
sleep número[s,m,h,d]
El tiempo se puede expresar en segundos, minutos, horas y días. Por defecto, se toman
segundos.
Una vez ejecutado el comando, hay que introducir los comandos que se ejecutarán en el
tiempo indicado.
La sintaxis es la siguiente:
122
Si se utiliza stty sin opciones, se muestra información sobre el terminal.
La opción –a muestra los campos utilizados para el control del terminal y sus valores.
Si se quiere modificar el valor de un campo, hay que escribir el campo que se desea cambiar y
su nuevo valor.
Ejemplo.
El campo intr contiene las teclas que hay que utilizar para abortar un proceso que se está
ejecutando en primer plano. Estas teclas son Ctrl-C. Si se desea cambiar estas teclas por
la tecla k (kill), hay que introducir la orden siguiente:
stty intr k
La sintaxis es:
tty
La sintaxis es:
uname [opciones]
-m.
-n.
-r.
-a.
Ejemplos.
uname
123
uname –m
uname –n
uname –r
uname –a
Visualiza el nombre del host del equipo desde el que se ejecuta la orden. El host de un equipo
se muestra con la sintaxis equipo.dominio.
hostname [opciones]
Si se ejecuta el comando hostname sin opciones, se muestra el nombre del host del equipo.
Para ver las opciones, consultar la página de la orden man para este comando.
Para cambiar el nombre del host hay que acceder al archivo /etc/sysconfig/network y asignar a
la variable de entorno HOSTNAME el nuevo nombre del host. Además, hay que modificar el
contenido del archivo /etc/hosts, escribiendo el nombre del host asignado a la variable
HOSTNAME. En el archivo /etc/hosts también se puede asignar una nueva dirección IP al host.
124
11.El editor de textos vi.
11.1. INTRODUCCIÓN.
El Editor vi es un editor de textos a pantalla completa. La pantalla del editor vi consta de 23
líneas para texto y una línea de estado. Esta última se utiliza para mostrar mensajes de error y
otra serie de informaciones e introducir determinadas órdenes.
Modo de orden.
Es el modo por defecto en el que se inicia vi. En este modo, las teclas que se pulsen no
formarán parte del texto, sino que realizarán diferentes acciones (borrar líneas, buscar
palabras, mover el cursor por la pantalla, etc.). Algunas órdenes comienzan con los
caracteres ‘:’, ‘/’ y ‘?’. Estas órdenes se escriben en la línea de estado. Para cambiar al
modo de entrada de texto hay que ejecutar una orden para introducir texto.
Es el modo destinado a escribir el contenido del fichero que se está editando. Para cambiar
al modo de orden hay que pulsar la tecla Esc.
125
11.2. ENTRADA AL EDITOR VI.
Para ejecutar el editor vi hay que utilizar la siguiente sintaxis:
vi [opciones] [archivo]
Si no se especifica el nombre del archivo a editar, vi presenta la pantalla de inicio. Esta pantalla
consta de 23 líneas que comienzan con el carácter ‘~’, información sobre vi en el centro de la
pantalla y la información Empty Buffer en la línea de estado. Cuando se sale de vi hay que
especificar un nombre de archivo.
Si se especifica un nombre de archivo puede ocurrir que el archivo no exista, en cuyo caso se
muestra la pantalla de inicio, o que el archivo exista, en cuyo caso se muestran las primeras 23
líneas del archivo y, en la línea de estado, el nombre, número de líneas y número de caracteres
del archivo.
+número.
-c orden.
Se utiliza para ejecutar una orden del editor vi cuando se abre un archivo con dicho editor.
Ejemplo.
vi –c /caracteres carta
-r.
Si, cuando estamos editando un archivo, el sistema sale del editor vi de forma incorrecta
por cualquier circunstancia, los cambios realizados en el archivo no se graban. En este
caso, podemos intentar recuperar los cambios que no se han podido almacenar
introduciendo la orden vi –r archivo.
-R.
El archivo se abre en modo sólo lectura. Si se ejecuta alguna orden para insertar texto, se
muestra el mensaje Warning: Changing a readonly file, permitiendo escribir el nuevo texto.
Si se ejecuta una orden para grabar el contenido del archivo, se muestra el mensaje
‘readonly’ option is set (use ! to overide), permitiendo grabar el contenido del archivo si se
ejecutan las órdenes :wq! o :w!.
126
11.3. SALIDA DEL EDITOR VI.
Para salir del editor, vi debe estar en el modo de orden. Si estamos en el modo de texto, para
volver al modo de orden hay que pulsar la tecla Esc. A continuación, hay que escribir :wq para
guardar y salir. Si queremos permanecer en el editor y guardar los cambios, hay que ejecutar la
orden :w.
Si hemos entrado al editor sin escribir un nombre de archivo, hay que escribir :wq archivo si
queremos grabar y salir o :w archivo si queremos grabar sin salir.
Podemos guardar los cambios realizados en otro archivo. Para ello, hay que ejecutar la orden
:wq archivo1 o :w archivo1. Si archivo1 no existe, se crea. Si archivo1 existe, el editor vi
muestra el mensaje File exists (use ! to override). En este caso, si queremos sobrescribir
archivo1, hay que ejecutar las órdenes :wq! Archivo1 o :w! archivo1.
También se puede almacenar una parte del archivo que se está editando en otro archivo. Para
ello, hay que ejecutar la orden :líneainicial,líneafinal wq archivo1 o :líneainicial,líneafinal w
archivo1. Si archivo1 existe, hay que utilizar la misma sintaxis con el carácter ‘!’ después de las
órdenes wq o w.
Después de todas las órdenes anteriores hay que pulsar la tecla Enter.
Otra forma de salir de vi guardando las modificaciones es escribiendo ZZ. En este caso no hay
que pulsar la tecla Enter. También se sale del editor vi, almacenando los cambios, ejecutando
la orden :x.
127
11.4. ÓRDENES DE DESPLAZAMIENTO DEL CURSOR.
Tecla AvPág.
Avanza una página. Esta tecla se puede pulsar en el modo de orden y en el modo de
entrada de texto.
Tecla RePág.
Retrocede una página. Esta tecla se puede pulsar en el modo de orden y en el modo de
entrada de texto.
Ctrl-d.
Ctrl-g.
Muestra un mensaje con el nombre del archivo, si el archivo ha sido modificado, la línea
donde se encuentra el cursor, el total de líneas, el porcentaje del archivo con respecto a la
línea donde está posicionado el cursor y la columna donde se encuentra el cursor.
Ctrl-u.
Tecla Enter.
‘’.
Mueve el cursor a su posición anterior. De esta forma, pulsando repetidas veces esta
orden, se pueden visualizar dos partes de un archivo, pues el cursor, cada vez que se
teclee ‘’, se moverá a la posición donde se encontraba anteriormente.
+.
-.
(.
).
{.
}.
128
Mueve el cursor al principio del párrafo siguiente.
$.
Mueve el cursor al final de la línea. Esta acción se puede realizar con la tecla Fin, que se
puede pulsar en el modo de orden y en el modo de entrada de texto.
0 (cero).
Mueve el cursor al principio de la línea. Esta acción se puede realizar con la tecla Inicio,
que se puede pulsar en el modo de orden y en el modo de entrada de texto.
:número.
b.
e.
Mueve el cursor al final de la palabra. Si el cursor está situado al final de una palabra y se
ejecuta la orden e, el cursor se desplaza al final de la palabra siguiente.
gg.
[número]G.
[número]h.
H.
[número]j.
Mueve el cursor una línea hacia abajo. Si se especifica número, el cursor se desplaza las
líneas indicadas. Esta acción también se puede realizar pulsando [número]↓, que se puede
teclear en el modo de orden y en el modo de entrada de texto.
k.
Mueve el cursor una línea hacia arriba. Si se especifica número, el cursor se desplaza las
líneas indicadas. Esta acción también se puede realizar pulsando [número]↑, que se puede
teclear en el modo de orden y en el modo de entrada de texto.
l.
129
Mueve el cursor al carácter situado a la derecha. Si se especifica número, el cursor se
desplaza los caracteres indicados. Esta acción también se puede realizar pulsando
[número]→, que se puede teclear en el modo de orden y en el modo de entrada de texto.
L.
mletra.
Se utiliza para realizar marcas. Las marcas se nombran con una letra de la a a la z, por lo
que se pueden establecer 26 marcas. Para desplazarse a una marca hay que escribir ‘letra,
donde letra es una marca que se ha realizado previamente.
M.
z. .
La orden z seguida de un punto (.) mueve la línea donde está posicionado el cursor a la
mitad de la pantalla.
z- .
La orden z seguida de un guión (-) mueve la línea donde se encuentra el cursor al final de
la pantalla.
130
11.5. ÓRDENES PARA MODIFICAR TEXTO.
.(punto).
a.
A.
línea1[,línea2]colínea3.
La orden co se utiliza para copiar líneas. En esta sintaxis, línea1 y línea2 indican el rango
de líneas que se quieren copiar (si se omite línea2 sólo se copiará una línea) y línea3
indica la línea a partir de la cual se va a copiar el texto. Si el texto se va a copiar al principio
del archivo, asignaremos el valor 0 a línea3.
[número] dd.
i.
I.
J.
línea1[,línea2]mlínea3.
La orden m utilizada con esta sintaxis se utiliza para mover líneas. En esta sintaxis, línea1
y línea2 indican el rango de líneas que se quieren mover (si se omite línea2 sólo se moverá
una línea) y línea3 indica la línea hasta la que se va a insertar el texto. Si el texto se va a
insertar al principio del archivo, asignaremos el valor 0 a línea3.
o.
O.
p.
131
Copia líneas o caracteres borrados con las órdenes [número]dd o [número]x o líneas
copiadas con la orden yy. La copia la realiza en la línea anterior donde se encuentra el
cursor si copia líneas o a continuación del carácter donde está posicionado el cursor si
copia caracteres.
P.
Copia líneas o caracteres borrados con las órdenes dd o [número] x o líneas copiadas con
la orden yy. La copia la realiza en la línea posterior donde se encuentra el cursor si copia
líneas o antes del carácter donde está posicionado el cursor si copia caracteres.
r.
Cambia el carácter donde está situado el cursor por el que se escriba después de ejecutar
la orden r. Una vez que el carácter se ha cambiado, se vuelve al modo de orden. Por lo
tanto, esta orden se utiliza para cambiar o sobreescribir un solo carácter. Esta acción se
puede realizar con la tecla Insert, que se puede pulsar en el modo de orden y en el modo
de entrada de texto.
R.
Igual que la orden r, pero esta orden cambia varios caracteres, pues después de ejecutarla,
el editor vi cambia al modo de entrada de texto y se cambian o sobreescriben todos los
caracteres tecleados.
s.
Borra el carácter donde se encuentra el cursor y los siguientes caracteres que se tecleen
se insertan a continuación.
u.
U.
Restaura los cambios efectuados en el texto sobre una línea. Esta orden siempre actúa
sobre la última línea que se ha modificado.
[número]x.
xp.
Cambia el orden de los caracteres donde está situado el cursor y el siguiente. Por ejemplo,
si hemos escrito Liunx, posicionamos el cursor en el carácter u y ejecutamos la orden xp,
cambiándose el orden de los caractes un, quedando escrita la palabra Linux.
[número]yy.
132
Copia la línea donde se encuentra el cursor en un buffer temporal (portapapeles). Si se
especifica número, se copian las líneas indicadas. Estas líneas se pueden copiar en otra
parte del archivo utilizando las órdenes p o P.
11.6. ÓRDENES DE EDICIÓN AVANZADA.
La edición avanzada nos va a permitir combinar las órdenes para modificar texto y cambiar el
ámbito de actuación de algunas de estas órdenes, combinándolas con las órdenes de
desplazamiento del cursor.
d$.
d).
d(.
d}.
d{.
d/cadena/.
Borra todas las líneas comprendidas entre la línea donde se encuentra el cursor y la línea
que contiene la cadena especificada.
d’marca.
Borra todas las líneas comprendidas entre la marca especificada y la línea donde se
encuentra el cursor.
d0.
:línea1,línea2d.
[número]db.
Borra la palabra anterior a la posición del cursor. Si se especifica número, se borran las
palabras indicadas. Si en la línea donde se encuentra el cursor no hay número palabras,
continúa borrando en la línea anterior.
[número]de.
133
a continuación. Se borran número-1 palabras porque la palabra donde se encuentra el
cursor está incluida en número. Si en la línea donde se encuentra el cursor no hay número
palabras, continúa borrando en la línea siguiente.
dG.
Borra todas las líneas comprendidas entre la línea donde se encuentra el cursor y el final
del archivo.
[número]dw.
134
11.6.2 Órdenes de copia.
y$.
Copia el texto, en el buffer temporal, desde la posición del cursor hasta el final de la línea.
y).
y(.
y}.
y{.
y/cadena/.
Copia todas las líneas comprendidas entre la línea donde se encuentra el cursor y la línea
que contiene la cadena especificada.
y’marca.
Copia todas las líneas comprendidas entre la marca especificada y la línea donde se
encuentra el cursor.
y0.
Copia el texto, en el buffer temporal, desde la posición del cursor hasta el principio de la
línea.
:línea1,línea2y.
[número]yb.
[número]ye.
yG.
135
Copia todas las líneas comprendidas entre la línea donde se encuentra el cursor y el final
del archivo.
[número]yw.
136
11.6.3 Órdenes de cambio de caracteres.
Todas las órdenes siguientes cambian del modo de orden al modo de entrada de texto. Para
volver al modo de orden hay que pulsar la tecla Esc.
c$.
Borra el texto desde la posición del cursor hasta el final de la línea. Los caracteres que se
tecleen sustituyen al texto borrado.
c).
Borra la frase siguiente. Los caracteres que se tecleen sustituyen al texto borrado.
c(.
Borra la frase anterior. Los caracteres que se tecleen sustituyen al texto borrado.
c}.
Borra el párrafo siguiente. Los caracteres que se tecleen sustituyen al texto borrado.
c{.
Borra el párrafo anterior. Los caracteres que se tecleen sustituyen al texto borrado.
c/cadena/.
Borra todas las líneas comprendidas entre la línea donde se encuentra el cursor y la línea
que contiene la cadena especificada. Los caracteres que se tecleen sustituyen al texto
borrado.
c’marca.
Borra todas las líneas comprendidas entre la marca especificada y la línea donde se
encuentra el cursor. Los caracteres que se tecleen sustituyen al texto borrado.
c0.
Borra el texto desde la posición del cursor hasta el principio de la línea. Los caracteres que
se tecleen sustituyen al texto borrado.
:línea1,línea2c.
Borra las líneas comprendidas entre línea1 y línea2. A continuación se escriben las nuevas
líneas y, para detener el estado de inserción, se pulsa la tecla Esc. En este momento se
realiza la sustitución.
[número]cb.
Borra la palabra anterior a la posición del cursor. Si se especifica número, se borran las
palabras indicadas. Si en la línea donde se encuentra el cursor no hay número palabras,
continúa borrando en la línea anterior. Los caracteres que se tecleen sustituyen al texto
borrado.
[número]cc.
137
Borra la línea donde se encuentra el cursor. Si se especifica número, se borran las líneas
indicadas. Los caracteres que se tecleen sustituyen a la/s línea/s borrada/s.
[número]ce.
cG.
Borra todas las líneas comprendidas entre la línea donde se encuentra el cursor y el final
del archivo. Los caracteres que se tecleen sustituyen al texto borrado.
[número]cw.
Estas órdenes de borrado y copiado se utilizan en combinación con las órdenes p y P, para
pegar el texto copiado en el buffer temporal en una determinada posición del fichero. De esta
forma, las órdenes p y P actúan de la siguiente manera:
[número]p.
Inserta el texto copiado en el buffer temporal a continuación del carácter donde se encuentra el
cursor. Si se especifica número, el texto se inserta repetido el número de veces indicado.
[número]P.
Inserta el texto copiado en el buffer temporal antes del carácter donde se encuentra el cursor.
Si se especifica número, el texto se inserta repetido el número de veces indicado.
138
11.7. ÓRDENES PARA BUSCAR Y SUSTITUIR CARACTERES.
/ caracteres.
Busca, desde la posición del cursor hacia delante, la cadena de caracteres especificada. Si
los caracteres a buscar no se encuentran, se muestra el mensaje Pattern not found:
caracteres.
? caracteres.
Busca, desde la posición del cursor hacia atrás, la cadena de caracteres especificada. Si
los caracteres a buscar no se encuentran, se muestra el mensaje Pattern not found:
caracteres.
n.
N.
^.
El carácter ^ indica que el texto se busque al principio de la línea. Para introducir el acento
circunflejo (^) hay que pulsar la tecla ^ y, después, la barra espaciadora.
$.
%.
Se utiliza para buscar paréntesis, corchetes y llaves. Para realizar la búsqueda el cursor
tiene que estar situado sobre un paréntesis, corchete o llave. Por ejemplo, si el cursor está
situado sobre el paréntesis abierto ‘(‘ busca, hacia delante, el siguiente paréntesis cerrado
‘)’; si está situado sobre el paréntesis cerrado ‘)‘ busca, hacia atrás, el anterior paréntesis
abierto ‘(’. De la misma forma funciona para buscar corchetes y las llaves.
\<.
Los caracteres \< indican que el texto se busca al principio de las palabras.
*.
139
repetidas veces, la búsqueda se sigue realizando hacia delante. Cuando se pulsa * por
primera vez, en la línea de estado se muestra /\<palabra\>, donde palabra es la cadena
que se está buscando.
Otras órdenes para buscar caracteres son las siguientes:
fcarácter.
Fcarácter.
El editor vi permite buscar una cadena de caracteres y sustituirlos por otra cadena. Para ello,
hay que utilizar la siguiente sintaxis:
:línea1,línea2 s/cadena1/cadena2
línea1 y línea2 son las líneas entre las que se va a realizar la búsqueda y la sustitución.
cadena1 indica los caracteres que se van a buscar y cadena2 indica los caracteres que van
a sustituir a los caracteres buscados.
Ejemplos.
:4,20 s/Unix/Linux
:1,$ s/Unix/Linux
140
11.8. EDICIÓN DE MÚLTIPLES ARCHIVOS.
El editor vi permite editar varios archivos de forma simultánea. Para ello, hay que ejecutar una
de las siguientes órdenes:
El editor vi muestra la primera página del primer archivo escrito en la orden. Si introducimos
una orden para salirnos de un archivo sin haber editado los otros, se muestra un mensaje
avisando de los archivos que quedan por editar. Si, aún así, deseamos salirnos, hay que
ejecutar nuevamente la orden de salida del editor.
:e archivo.
Edita el archivo especificado sin salir del editor vi. Si el archivo actual se ha modificado y no
se ha grabado, se muestra el mensaje No write since last change (use ! to override),
debiendo grabar el contenido del fichero para editar el siguiente archivo. Si no se quieren
grabar las modificaciones, hay que ejecutar la orden :e! archivo.
Para gestionar la edición de múltiples archivos se pueden ejecutar las siguientes órdenes:
:ar.
Muestra una lista de los archivos que se están editando. El archivo actual se visualiza entre
corchetes.
:e#.
:n.
Ejemplo.
Existe una orden para mezclar el contenido de los archivos. Esta orden es la siguiente:
:r archivo.
141
11.9. BUFFERS DEL EDITOR VI.
El editor vi utiliza buffers temporales para guardar los caracteres y las líneas que se borran o
copian. El contenido de estos buffers se puede insertar en la posición del archivo que se desee.
Para ello, hay que acceder al buffer que contiene la información requerida.
Existen dos tipos de buffers:
Los buffers numéricos que utiliza el editor vi son nueve y están numerados del 1 al 9. Cuando
se borran o se copian líneas, vi utiliza estos buffers para almacenar la información borrada o
copiada.
Cuando se borran líneas, los buffers numéricos funcionan de la siguiente forma: la primera
información borrada se almacena en el buffer 1. La siguiente información que se borre también
se almacena en el buffer 1, pasando el contenido del buffer 1 al buffer 2. La siguiente
información que se borre también se almacena en el buffer 1, pasando el contenido del buffer 1
al buffer 2 y el del buffer 2 al buffer 3. Este es el funcionamiento de los buffers. Cuando todos
los buffers están llenos y se borra nueva información, la información contenida en el buffer 9 se
pierde.
En las operaciones de copiado de líneas, hay que indicar el buffer en el que se van a
almacenar las líneas copiadas. Si el buffer especificado contenía información, se cambia por
las líneas copiadas. Esta operación se realiza con la siguiente sintaxis:
“buffer[número]yy, donde buffer es el número de buffer donde se van a almacenar las líneas
copiadas y número indica el número de líneas que se van a copiar. Si se omite número, se
copia la línea donde se encuentra el cursor.
Para recuperar la información de los buffers hay que utilizar la siguiente sintaxis:
“númerop
“númeroP
donde número indica el buffer cuya información se quiere recuperar y p P son las órdenes para
recuperar e insertar la información del buffer especificado.
Estas órdenes no se visualizan en la pantalla y no hay que pulsar la tecla Enter para su
ejecución.
El contenido de los buffers numéricos se mantiene cuando se edita un nuevo fichero sin salir
del editor vi. De esta forma se puede copiar texto de un fichero a otro. Cuando se sale del
editor vi, el contenido de los buffers numéricos se borra.
142
11.9.2 Buffers alfabéticos.
Los buffers alfabéticos se utilizan para almacenar la información borrada o copiada. El editor vi
utiliza 26 buffers alfabéticos, nombrados desde la letra a (minúscula) hasta la letra z
(minúscula). Cuando se utilizan los buffers alfabéticos, hay que especificar el buffer donde se
va a guardar la información borrada o copiada. La información contenida en cada buffer se
mantiene hasta que dicho buffer no se vuelva a utilizar. Cuando se almacena información en un
buffer alfabético en una operación de borrado, también se guarda en el buffer numérico 1.
“letraorden
Para recuperar la información de los buffers alfabéticos, hay que utilizar la siguiente sintaxis:
“letrap
“letraP
donde letra indica el buffer cuya información se quiere recuperar y p P son las órdenes para
recuperar e insertar la información del buffer especificado.
El contenido de los buffers alfabéticos se mantiene cuando se edita un nuevo fichero sin salir
del editor vi. De esta forma se puede copiar texto de un fichero a otro. Cuando se sale del
editor vi, el contenido de los buffers alfabéticos se borra.
143
11.10.EJECUCIÓN DE ÓRDENES DEL SHELL.
Durante la edición de archivos con el editor vi se pueden ejecutar órdenes del Shell. Para ello,
hay que utilizar la sintaxis :! orden. El sistema ejecuta la orden indicada y visualiza el mensaje
Press RETURN or enter command to continue.
También se pueden ejecutar comandos del shell desde un subshell. Esto significa que
aparentemente se ha salido del editor vi para ejecutar comandos, pero, después de ejecutar los
comandos necesarios, se puede regresar el editor vi y seguir la sesión que se había iniciado
antes de salir al subshell. Esta acción se realiza ejecutando la orden :sh. A continuación, se
muestra el prompt del shell y se pueden ejecutar comandos del shell. Para regresar al editor vi
hay que introducir la orden exit desde el shell.
144
11.11.CONFIGURACIÓN DEL EDITOR VI.
El editor vi tiene una gran cantidad de opciones de configuración. Estas opciones se pueden
ver utilizando la orden :set all.
Todas las opciones de configuración tienen un valor por defecto. Para personalizar el entorno
de trabajo de vi, hay que modificar las opciones deseadas. Estas opciones se modifican con la
orden set.
Booleanas.
Tienen el valor verdadero o falso, activada o desactivada, etc. Para activar una opción
booleana se utiliza la sintaxis :set Opción. Para desactivar una opción booleana se utiliza la
sintaxis set noOpción.
Numéricas.
Contienen valores numéricos. Cada opción tiene un rango de valores admitidos. Para
asignar un valor a una opción numérica se utiliza la sintaxis :set Opción=número, donde
número ha de estar comprendido en el rango de valores permitido para la opción.
Cadena.
Contienen valores de tipo cadena. Para asignar un valor a una opción de tipo cadena se
utiliza la sintaxis :set Opción=cadena.
La orden set se puede utilizar, además, para mostrar las opciones que se han cambiado. En
este caso se utiliza la sintaxis :set. También se puede visualizar el valor de una opción,
utilizando la sintaxis :set Opción?.
autoindent (ai).
autowrite(aw).
Es una opción de tipo booleana. Para activarla hay que ejecutar :set aw y para desactivarla
:set noaw. Por defecto, está activada. Cuando está activada, los cambios realizados en un
archivo se guardan automáticamente al ejecutar un comando del shell o al ejecutar la orden
:n para visualizar un nuevo archivo en una edición de múltiples archivos.
ignorecase (ic).
Es una opción de tipo booleana. Se utiliza para que vi no distinga mayúsculas y minúsculas
en las operaciones de búsqueda. Para que no distinga mayúsculas y minúsculas se escribe
:set ic. Para que sí distinga mayúsculas y minúsculas se utiliza :set noic, que es la opción
por defecto.
145
list.
Muestra los tabuladores como ^I y los retornos de fin de línea con el carácter $. Para
activar esta opción se utiliza :set list y para desactivarla :set nolist. El valor por defecto es
desactivado.
magic.
Es una opción de tipo booleana. Se utiliza para indicar que algunos caracteres, como los
corchetes, sean caracteres especiales. Para que estos caracteres sean tomados como
especiales se escribe :set magic. Para que estos caracteres no sean tomados como
especiales se escribe :set nomagic, que es la opción por defecto.
number (nu).
Es una opción de tipo booleana. Por defecto, vi no escribe los números de línea porque
esta opción tiene el valor :set nonu. Para que se visualicen los números de línea, hay que
ejecutar :set nu.
report.
Es una opción de tipo numérica. Se utiliza para que el editor vi muestre mensajes de las
operaciones que se están realizando, cuando estas operaciones afecten a más líneas que
las especificadas en esta opción. Por defecto, su valor es 5, lo cual quiere decir que si, por
ejemplo, se copian seis líneas con la orden 6yy, el editor vi muestra el mensaje 6 lines
yanqed. Para asignar un nuevo valor a esta opción se utiliza la sintaxis :set report=número.
scroll.
Es una opción de tipo numérica. Define el número de líneas que avanza o retrocede la
pantalla cuando se pulsa Ctrl-d o Ctrl-u, respectivamente. El valor por defecto es 15. Para
asignar un nuevo valor se utiliza la sintaxis :set scroll=número.
shiftwidth (sw).
Es una opción de tipo numérica. Indica el número de espacios o columnas que retrocede
Ctrl-d cuando está activa la opción autoindent. El valor por defecto es 8.
showmatch(sm).
Es una opción booleana. Muestra la posición del paréntesis abierto “(“ cuando se escribe el
paréntesis cerrado “)”. Por defecto, está desactivada.
showmode (smd).
Es una propiedad booleana. Se utiliza para mostrar mensajes de la operación que se está
realizando. Por ejemplo, cuando se va a insertar texto, se visualiza el mensaje – INSERT –
en la línea de estado. Para visualizar estos mensajes, hay que ejecutar :set showmode,
que es la opción por defecto. Si no se quieren mostrar los mensajes, se utiliza :set
noshowmode.
tabstop (ts).
Es una opción de tipo numérica. Se utiliza para fijar el número de espacios que se
escribirán cuando se incluyan tabuladores en el archivo. El valor por defecto es 8.
warn.
146
Es una opción booleana. Muestra un mensaje de aviso cuando intentamos salir del editor vi
sin guardar las modificaciones realizadas. Por defecto, está activada.
wrapmargin (wm).
Es una opción de tipo numérica. El número de caracteres que se pueden escribir en una
línea es de 80. Cuando se escriben más de 80 caracteres en una línea sin pulsar la tecla
Enter, el editor vi continúa escribiendo dicha línea en la línea siguiente, aunque las dos
líneas serán la misma, lo cual puede ocasionar que la línea no se lea de forma correcta si
el archivo se ha imprimido, sobre todo si el archivo contiene un programa. Para que esto no
ocurra, se puede limitar el tamaño de la línea con la opción wrapmargin, que es una opción
de tipo numérica. Esta opción indica el número de caracteres en el margen derecho de la
línea. Por ejemplo, si se ejecuta :set wm=5, la línea tendrá un máximo de 75 caracteres.
Cuando se está escribiendo la línea y se alcanza el tamaño indicado en esta opción, el
editor vi inserta de forma automática un retorno (tecla Enter) y continúa escribiendo el resto
de caracteres en la línea siguiente, formándose dos líneas diferentes. Si, al partir la línea,
se está escribiendo una palabra, la palabra completa se escribe en la línea siguiente. El
valor por defecto de esta opción es :set wm=0, que indica que las líneas no se partirán.
wrapscan.
Es una opción de tipo booleana. Se utiliza para activar o desactivar las búsquedas
circulares en un archivo. Cuando la búsqueda circular está activada y la operación de
búsqueda llega al principio o al final del fichero, según la dirección en la que se esté
buscando, el editor vi continúa por el final o el principio del fichero, respectivamente. Para
activar la búsqueda circular se utiliza :set wrapscan y para desactivarla :set nowrapscan.
Por defecto, la operación de búsqueda circular está activada.
147
11.12.ABREVIATURAS.
Las abreviaturas se utilizan para facilitar la escritura de texto que se repite con cierta
frecuencia.
Para definir una abreviatura se utiliza la sintaxis :ab abreviatura cadena, donde abreviatura es
el nombre que se utilizará cada vez que se quierea escribir la cadena especificada. Cuando se
quiera escribir la cadena que se ha asignado a la abreviatura, se escribirá la abreviatura
definida y el editor vi la cambiará por la cadena. Si la abreviatura forma parte de una palabra, la
sustitución no se realiza. Para que la sustitución se produzca, la abreviatura debe ir precedida y
seguida de un espacio en blanco.
Ejemplo.
Se ha definido la abreviatura op para la cadena opción de tipo. Cada vez que se escriba op
(precedido y seguido de un espacio en blanco) se sustituye por opción de tipo. Si, por
ejemplo, se escribe tope, la sustitución no se produce.
148
11.13.MACROS.
Las macros se utilizan para asignar una combinación de teclas a una única tecla, lo cual facilita
la ejecución de las órdenes. Para ejecutar una macro hay que estar en modo orden y escribir
los dos puntos seguido del nombre de la macro.
Para crear una macro se utiliza la sintaxis :map macro orden, donde macro es el nombre de la
macro a la que se asigna la orden especificada. El editor vi deja sin utilizar muy pocas letras,
por lo que las macros deberán tener más de una letra. También se pueden asignar las teclas
de función para crear macros. Para ello, hay que utilizar la sintaxis :map #número orden, donde
número es la tecla de función que se va a asignar a la orden. Se pueden asignar desde la tecla
de función F1 hasta la F9.
Ejemplos.
:map #1 yy
149
11.14.ARCHIVO DE CONFIGURACIÓN DEL EDITOR VI.
Todas las opciones modificadas para personalizar la configuración del editor vi, incluidas las
abreviaturas y las macros, permanecen durante la sesión en la que se definen. Cuando esta
sesión finaliza, las opciones modificadas, macros y abreviaturas se pierden y, si se quieren
utilizar en una nueva sesión, hay que volver a definirlas. Para evitar este problema, se utiliza el
archivo de configuración del editor vi.
Todos los usuarios pueden tener un archivo de configuración distinto del resto, siempre que el
archivo .exrc esté almacenado en el directorio home de cada uno de los usuarios. De lo
contrario, cada usuario ejecutará el editor vi con las opciones de configuración por defecto y no
dispondrá de abreviaturas ni de macros.
También se puede incluir la variable EXINIT en el archivo .bash_profile para definir las
opciones de configuración del Editor vi. Por ejemplo, EXINIT=’set nu ai’ establece numeración
de líneas y tabulación automáticas.
150
12.Administración de cuentas de usuario.
12.1. CREACIÓN DE CUENTAS DE USUARIO.
Para que los usuarios puedan acceder al sistema, deben disponer de una cuenta de usuario y
de una contraseña.
Cuando se crea un usuario nuevo, se añade una entrada en el archivo /etc/passwd. Cada
entrada de este archivo se compone de los siguientes elementos: nombre del usuario,
contraseña codificada o encriptada, número del usuario, número del grupo primario al que
pertenece el usuario, información adicional del usuario, directorio home del usuario y shell
utilizado por el usuario. Además, en el directorio home del usuario se copian los programas
existentes en el directorio /etc/skel, necesarios para el funcionamiento del usuario que se acaba
de crear.
Para crear una cuenta de usuario, se utiliza el comando adduser usuario. Con esta orden, el
sistema comprueba la existencia del nuevo usuario. Si existe, se genera un mensaje de error, y
si no existe, se crea con las opciones por defecto. Las opciones por defecto se encuentran en
el archivo /etc/default/useradd.
adduser [-u uid [-o]] [-g grupo1] [-G grupo2 [,grupo3,...]] [-d directorio] [-s shell] [-c comentario] [-
m [-k directorio]] [-f número] [-e fecha] usuario
-u uid.
Número de identificación del usuario. Por defecto, se asigna el siguiente número al último
especificado. Al primer usuario que se crea, si no se indica nada, se le asigna el número
500.
-o.
-g grupo1.
-G grupo2 [,grupo3,...].
-d directorio.
Indica el directorio home del usuario. Hay que especificar la ruta completa. Por defecto, el
directorio home será /home/usuario.
-s shell.
Asigna el shell que utilizará el usuario. Los shell que se pueden utilizar se encuentran en el
directorio /bin. Por defecto, utiliza el shell /bin/bash.
151
-c comentario.
-m.
Crea el directorio home del usuario. Esta opción está activa, es decir, por defecto, el
directorio home del usuario se crea al ejecutar el comando adduser.
-k directorio.
El contenido del directorio especificado se copia en el directorio home del usuario. Por
defecto, se copia la información del directorio /etc/skel.
-f número.
Indica el número de días que la cuenta puede estar inactiva antes de ser desactivada. Por
defecto, esta opción tiene el valor -1. Si se ha asignado algún valor a esta opción y se
quiere anular, hay que introducir el valor –1.
-e fecha.
Establece la fecha a partir de la cual la cuenta de usuario no se podrá utilizar. Por defecto,
esta opción no tiene ningún valor. Cuando se introduce “” se anula el valor establecido con
anterioridad.
Cuando se utiliza la orden adduser usuario sin opciones, se crea la cuenta de usuario con las
opciones por defecto. Estas opciones se pueden visualizar y modificar con la siguiente sintaxis:
-D.
Muestra las opciones por defecto que se asignan a las cuentas de usuario cuando se utiliza
la sintaxis adduser usuario. Estas opciones son las incluidas en el archivo
/etc/default/useradd.
-g group.
Establece el grupo por defecto que se asigna a las cuentas de usuario. Este grupo debe
existir.
-s shell.
-f número.
Determina el número de días por defecto que las cuentas de usuario deben permanecer
inactivas antes de ser desactivadas.
-e fecha.
152
Establece la fecha de expiración de las cuentas de usuario.
Se puede utilizar el comando useradd para crear cuentas de usuario. La sintaxis de este
comando es la misma que la del comando adduser.
Cuando se crea una cuenta de usuario, además de añadir una entrada para ese usuario en el
archivo /etc/passwd, se añade una entrada en los archivos /etc/shadow (archivo de
contraseñas) y /etc/group (archivo de grupos).
Se puede añadir una cuenta de usuario a un grupo existente utilizando la siguiente sintaxis:
153
12.2. ELIMINACIÓN DE CUENTAS DE USUARIO.
Para eliminar una cuenta de usuario, hay que utilizar la siguiente sintaxis:
Las cuentas de usuario se pueden eliminar manualmente, utilizando cualquiera de los métodos
siguientes:
Editando el archivo /etc/passwd y borrando la entrada del usuario que se quiere eliminar.
De esta forma, el usuario no podrá entrar en el sistema, pero su directorio home seguirá
existiendo, por lo que el borrado del usuario será de forma temporal, pues, si se vuelve a
crear dicho usuario, la información que poseía antes de ser eliminado todavía permanece.
Borrar la línea del archivo /etc/passwd para el usuario de la forma descrita en el punto
anterior y eliminar el directorio home del usuario. Esta es la forma de eliminar al usuario de
forma definitiva.
154
12.3. MODIFICACIÓN DE CUENTAS DE USUARIO.
Para modificar la configuración de las cuentas de usuario, se utiliza el comando usermod. La
sintaxis es la siguiente:
usermod [-u uid [-o]] [-g grupo1] [-G grupo2 [,grupo3,...]] [-d directorio [-m]] [-s shell] [-c
comentario] [-l nombre] [-f número] [-e fecha] usuario
Todas las opciones tienen el mismo significado que en el comando adduser. La opción –l
nombre, se utiliza para cambiar el nombre de la cuenta de usuario. Si se cambia el nombre de
la cuenta de usuario, las entradas del usuario antiguo en los archivos /etc/paswd y /etc/shadow
se cambian por el nuevo usuario. Si se omiten el resto de opciones, el nuevo usuario tendrá la
misma configuración que el usuario antiguo, incluido su directorio home y su contraseña.
Para modificar la configuración de los usuarios sin utilizar el comando usermod, hay que
acceder al archivo /etc/passwd y cambiar la línea del usuario deseado, pudiendo modificar el
identificador de usuario, el grupo al que pertenece, el directorio home y el shell que va a utilizar.
155
12.4. OTRAS CONSIDERACIONES SOBRE LAS CUENTAS DE USUARIO.
Cuando un usuario pertenece a varios grupos, puede cambiar de grupo activo utilizando el
comando newgrp grupo. El grupo activo de un usuario es importante porque es el grupo del
propietario al que se asignan permisos sobre un nuevo archivo o directorio. Para volver al
grupo principal del usuario, que es el grupo activo cuando un usuario inicia una sesión, basta
con ejecutar newgrp.
Cuando un usuario ha iniciado una sesión, puede iniciar una subsesión o subshell con otro
usuario distinto. Para ello, hay que ejecutar el comando su usuario. El sistema pide la
contraseña del nuevo usuario para iniciar el subshell. Para volver al shell o sesión inicial, hay
que ejecutar el comando exit. Los permisos que el usuario tenía sobre los archivos de la
sesión inicial se pierden y solo tendrá permisos sobre los archivos y directorios del nuevo
subshell. También se puede iniciar un nuevo subshell ejecutando el comando su - usuario. En
este caso, para volver a la sesión inicial, hay que ejecutar exit o logout.
156
13.Administración de contraseñas de usuario.
El archivo /etc/shadow contiene las contraseñas de todos los usuarios existentes. Cada una de
las líneas de este archivo incluye la siguiente información:
Si contiene el carácter ‘*’ indica que todavía no se ha asignado una contraseña al usuario y,
por lo tanto, no se podrá utilizar la cuenta hasta que no se le asigne una contraseña.
Número de días.
Indica el número de días, desde el último cambio, que han de transcurrir para que el
usuario pueda cambiar la contraseña.
Información adicional.
El comando passwd se utiliza para administrar las contraseñas de los usuarios. Los usuarios
normales tienen limitadas las operaciones de administración de las contraseñas; sólo el usuario
root puede realizar todas las tareas de administración de las contraseñas del resto de usuarios.
passwd [-k [usuario]] [-l usuario] [-u usuario] [-d usuario] [-S usuario] [usuario]
Si se utiliza passwd sin opciones, el usuario que ha ejecutado el comando deberá cambiar su
contraseña.
-k [usuario].
Permite cambiar la contraseña. La nueva contraseña se verificará para que no coincida con
las contraseñas de otros usuarios o con palabras reservadas de Unix, que no contenga dos
caracteres iguales, que no contenga ningún carácter de la contraseña antigua, etc. Si esta
opción la ejecuta el usuario root, puede introducir un nombre de usuario.
-l usuario.
Esta opción sólo la puede utilizar el usuario root. Se utiliza para bloquear la cuenta de
usuario indicada.
157
-u usuario.
Esta opción sólo la puede utilizar el usuario root. Se utiliza para desbloquear la cuenta de
usuario especificada.
-S usuario.
Esta opción sólo la puede utilizar el usuario root. Visualiza información sobre la cuenta de
usuario indicada.
usuario.
Esta opción sólo la puede utilizar el usuario root. Permite cambiar la contraseña del usuario
especificado.
158
14.Administración de cuentas de grupos de usuarios.
Todos los usuarios van a pertenecer, como mínimo, a un grupo. Cuando se crea un usuario con
el comando adduser, se crea automáticamente un grupo con el mismo nombre y el mismo
identificador que el usuario.
Los grupos existentes se encuentran en el archivo /etc/group. Este archivo contiene una línea
por cada uno de los grupos, con la siguiente información: nombre del grupo, identificador y
miembros del grupo, separados por comas.
La opción –g gid se utiliza para especificar el número de identificación del nuevo grupo. Si se
omite, el sistema asigna el siguiente número al último existente.
159
14.2. ELIMINACIÓN DE CUENTAS DE GRUPO.
Para eliminar un grupo existente, hay que borrar la entrada de dicho grupo en el archivo
/etc/group o utilizar el comando groupdel. La sintaxis de este comando es la siguiente:
groupdel grupo
160
14.3. MODIFICACIÓN DE CUENTAS DE GRUPO.
Para modificar la configuración de los grupos existentes, hay que modificar su entrada en el
archivo /etc/group o utilizar el comando groupmod. La sintaxis de este comando es la siguiente:
161
15.Administración de permisos.
Para restringir el acceso del resto de usuarios a los archivos y directorios, hay que establecer
un sistema de permisos. El sistema de permisos sólo se puede establecer por el usuario
propietario. El propietario de un archivo o de un directorio es el usuario que lo crea.
El comando ls –l, visualiza el contenido del directorio en formato largo. La información que
muestra es la siguiente:
El primer carácter indica el tipo de archivo. Puede contener uno de los siguientes
caracteres: d (directorio), b (archivo especial de tipo bloque), c (archivo especial de tipo
carácter), p (archivo especial FIFO), l (enlace simbólico) y – (archivo ordinario).
Los siguientes tres caracteres indican los permisos de los usuarios pertenecientes al grupo
del propietario. Si un usuario pertenece a varios grupos, el grupo del propietario es el que
está activo en el momento de crear el directorio o archivo.
Los siguientes tres caracteres indican los permisos del resto de usuarios.
Los siguientes caracteres muestran los enlaces, el propietario, el grupo al que pertenece el
propietario, el tamaño en bytes, la fecha de creación o de la última modificación y el
nombre. Si se combina con la opción –n, se muestran los identificadores de usuario y grupo
del propietario, en lugar de sus nombres.
Los permisos que se muestran pueden ser: r (lectura), w (escritura), x (ejecución). Siempre
aparecen en este orden: rwx. Si en lugar del correspondiente permiso se muestra el carácter -,
indica que dicho permiso está denegado. Por ejemplo, rw- indica que tiene los permisos de
lectura y de escritura, pero no tiene el permiso de ejecución.
Cuando un usuario crea un archivo, se asignan, por defecto, los siguientes permisos: rw- para
el usuario propietario, r-- para el grupo del propietario y r-- para el resto de usuarios. Cuando un
usuario crea un directorio, se asignan, por defecto, los siguientes permisos: rwx para el usuario
propietario, r-x para el grupo del propietario y r-x para el resto de usuarios. Estos valores se
obtienen de los valores por defecto del sistema (rw-rw-rw- para los archivos y rwxrwxrwx para
los directorios) y de los valores por defecto del comando umask (ver este comando más
adelante).
162
15.1. CAMBIO DE PERMISOS.
El usuario que crea un directorio o un fichero es el propietario del mismo. Sólo el usuario
propietario del directorio o del fichero puede cambiar los permisos existentes.
Para cambiar los permisos sobre un directorio o sobre un fichero desde la línea de comandos,
se utiliza el comando chmod. Su sintaxis es la siguiente:
En el parámetro usuario, se utilizan códigos para indicar el usuario sobre el que se van a
cambiar los permisos. Estos códigos son los siguientes:
u.
g.
o.
a.
Con este código se incluyen todos los usuarios (propietario, grupo del propietario y resto de
usuarios). Esta es la opción por defecto, es decir, si se omite el parámetro usuario, los
permisos se establecen a todos los usuarios (propietario, grupo del propietario y resto de
usuarios).
+.
-.
=.
El parámetro permiso se utiliza para especificar el permiso de acceso. Puede contener uno de
los valores r (lectura), w (escritura), x (ejecución).
Se puede introducir más de un permiso. Por ejemplo, la orden chmod o+wx prueba añade los
permisos de escritura y ejecución para el resto de usuarios sobre el archivo prueba.
También se pueden modificar los permisos de un archivo para distintos grupos de usuarios,
utilizando una sóla vez el comando chmod. Por ejemplo, para añadir al archivo prueba el
permiso de ejecución para el usuario propietario y los usuarios del grupo del propietario y
asignar el permiso de ejecución al resto de usuarios, se introduce la orden chmod ug+x,o=x
prueba.
163
El comando chmod admite otra sintaxis para cambiar los permisos a los archivos y directorios.
Esta sintaxis es la siguiente:
número1 se refiere a los permisos del propietario, número2 a los del grupo del propietario y
número3 a los del resto de usuarios.
Los valores de estos números se representan en octal. Cada permiso tiene una representación
octal: el permiso de lectura se representa por el número 4 octal, el permiso de escritura se
representa por el número 2 octal y el permiso de ejecución se representa por el número 1 octal.
Si se quieren eliminar los permisos, hay que escribir el número 0 octal.
Si estos valores en octal los pasamos a binario, obtenemos los siguientes números:
Realmente, Unix trabaja con la conversión del número octal en binario. El número en binario
consta de tres dígitos, cada uno de los cuales se corresponde con un permiso dependiendo de
su posición. De esta forma, el dígito de la izquierda se corresponde con el permiso de lectura,
el dígito del medio se corresponde con el permiso de escritura y el dígito de la derecha se
corresponde con el permiso de ejecución. El sistema asigna el permiso si tiene el valor 1 y lo
elimina si tiene el valor 0. Por eso el número 4 en octal se refiere al permiso de lectura (100 →
r--), 2 en octal se refiere al permiso de escritura (010 → -w-), 1 en octal se refiere al permiso de
ejecución (001 → --x) y 0 en octal elimina todos los permisos (000 → ---).
Si queremos asignar varios permisos, hay que sumar las cifras en octal y el resultado será un
número, que indicará la combinación de permisos asignada. La siguiente tabla muestra las
combinaciones de permisos utilizando este método.
Ejemplo.
164
Los permisos 754 en octal se convertirían de la siguiente forma:
165
15.2. CAMBIO DE PROPIETARIO.
Para cambiar el propietario de un archivo o de un directorio desde la línea de comandos, hay
que ejecutar el comando chown (este comando sólo lo puede ejecutar el usuario root). La
sintaxis de este comando es la siguiente:
El nombre de usuario especificado tiene que existir y, después de ejecutar el comando, pasará
a ser el propietario de los archivos indicados.
166
15.3. MÁSCARA DE PERMISOS. ORDEN UMASK.
Cuando se crean los archivos o directorios, se asignan unos permisos por defecto. Estos
permisos se pueden modificar con el comando umask, que utiliza el sistema octal, explicado
anteriormente, para asignar los nuevos permisos por defecto.
umask [número1número2número3]
Los permisos por defecto que el sistema asigna cuando se crea un fichero son rw-rw-rw- pero,
como el valor de umask es 022, cuando se crea un fichero se asignan los permisos rw-r--r--.
Los permisos por defecto que el sistema asigna cuando se crea un directorio son rwxrwxrwx
pero, como el valor de umask es 022, cuando se crea un directorio se asignan los permisos
rwxr-xr-x.
167
15.4. OTRAS CONSIDERACIONES.
Cuando un usuario pertenece a varios grupos, puede cambiar de grupo activo utilizando el
comando newgrp grupo, donde grupo indica el nombre de un grupo existente (no se puede
introducir el identificador del grupo). El grupo activo de un usuario es importante porque es el
grupo del propietario al que se asignan permisos sobre un nuevo archivo o directorio. Para
volver al grupo principal del usuario, que es el grupo activo cuando un usuario inicia una sesión,
basta con ejecutar newgrp.
168
16.Administración de impresoras.
La administración de las impresoras en Ubuntu, se realiza ejecutando la opción Sistema –
Adminitración – Impresoras. En los siguiente puntos veremos algunas las impresoras que se
pueden instalar en Linux.
Cuando se envía un trabajo a la impresora, el sistema gestiona un spool, donde almacena los
archivos a imprimir en forma de cola. Esta cola se encuentra en el directorio /var/spool/cups.
Cuando el archivo se está imprimiendo se crea un archivo temporal, que, una vez que el trabajo
ha sido impreso, se elimina. Las siguientes líneas muestran el contenido del directorio
/var/spool/cups con el trabajo número 96 imprimiéndose en ese momento (el archivo d00096-
001 es el archivo temporal de este trabajo).
root@alsico-laptop:~# ls /var/spool/cups
Cuando el trabajo número 96 ha sido impreso, el archivo temporal se destruye. Las siguientes
líneas muestran el contenido del directorio /var/spool/cups después de realizarse la impresión
de este trabajo.
root@alsico-laptop:~# ls /var/spool/cups
c00041 c00047 c00053 c00059 c00065 c00071 c00077 c00083 c00089 tmp
La gestión y administración de las impresoras locales las realiza el paquete CUPS (Common
UNIX Printing System). Para más detalles sobre este paquete, ver el punto 16.4 Impresora
remota utilizando CUPS.
169
16.2. IMPRESORA TCP/IP.
Una impresora TCP/IP es la que está conectada directamente a la red, a través de su propia
tarjeta de red. Para conectarse a este tipo de impresoras, hay que ejecutar la opción Sistema –
Administración – Impresoras y, en la ventana que se muestra, pulsar el botón Nuevo,
accediendo a una nueva ventana en la que hay que seleccionar la opción AppSocket/HP
JetDirect y pulsar el botón Adelante.
Seguidamente, hay que introducir la dirección IP de la impresora de red, dejar el puerto 9100 y
pulsar el botón Adelante, siguiendo las indicaciones del asistente de instalación para finalizar la
instalación de la impresora de TCP/IP.
170
16.3. IMPRESORA SAMBA.
Para configurar una impresora que se pueda utilizar con Samba, hay que instalar este paquete
(ver el punto 6.2 Administración de Samba). Una vez instalado el paquete, todas las impresoras
instaladas en local y compartidas en los servidores de Windows de la red son accesibles desde
Linux. De igual forma, todas las impresoras instaladas en local en los servidores Samba de
Linux son accesibles desde cualquier equipo de la red, independientemente del sistema
operativo que esté utilizando.
La conexión desde Windows con una impresora instalada en un servidor Linux con Samba
instalado, se realiza desde el Mis sitios de red del servidor Windows. Accedemos al servidor
Linux y abrimos el icono de la impresora que tiene instalada y que se visualiza como un recurso
compartido por este servidor, debiendo seguir las indicaciones del asistente de instalación para
finalizar la conexión a la impresora.
Para realizar esta acción, hay que instalar una impresora local en el servidor Windows y
compartirla. Desde el servidor Linux, hay que ejecutar la opción Sistema – Administración –
Impresoras y, en la ventana que se muestra, pulsar el botón Nuevo, accediendo a una nueva
ventana en la que hay que seleccionar la opción Windows Printer via SAMBA y pulsar el botón
Adelante.
Seguidamente, hay que pulsar el botón Examinar y navegar hasta seleccionar la impresora del
servidor de Windows y pulsar el botón Adelante, debiendo seguir las indicaciones del asistente
de instalación para finalizar la conexión a la impresora.
Para realizar esta acción, hay que instalar una impresora local en el servidor SAMBA. Desde el
equipo que se va a conectar a la impresora, hay que ejecutar la opción Sistema –
Administración – Impresoras y, en la ventana que se muestra, pulsar el botón Nuevo,
accediendo a una nueva ventana en la que hay que seleccionar la opción Windows Printer via
SAMBA y pulsar el botón Adelante.
Seguidamente, hay que pulsar el botón Examinar y navegar hasta seleccionar la impresora del
servidor SAMBA y pulsar el botón Adelante, debiendo seguir las indicaciones del asistente de
instalación para finalizar la conexión a la impresora.
171
16.4. IMPRESORA REMOTA UTILIZANDO CUPS.
CUPS (Common UNIX Printing System) es un paquete desarrollado para administrar las
impresoras instaladas en el sistema desde un navegador web. Con la configuración que se
instala por defecto en Ubuntu, CUPS es el que gestiona la administración de las impresoras
locales. En el punto 16.1 Impresora local, hemos visto que la cola de trabajos enviados a una
impresora local está ubicada en el directorio /var/spool/cups, que se crea cuando se instala el
paquete CUPS.
Para acceder de forma remota a la web de administración de CUPS, hay que escribir la
dirección IP del servidor y modificar el archivo /etc/cups/cupsd.conf, añadiendo la línea Listen
IP:631, donde IP es la dirección IP del servidor al que se quiere acceder. Por ejemplo, si este
servidor tiene la dirección IP 192.168.1.33, hay que añadir la línea Listen 192.168.1.33:631 en
el archivo /etc/cups/cupsd.conf y, para acceder al servidor desde otro equipo, escribir la
dirección http://192.168.1.33:631 en el navegador.
Con la configuración anterior sólo se puede acceder de forma remota a la web de CUPS pero
no se pueden realizar tareas administrativas. Para poder administrar CUPS hay que modificar
el apartado <Location /Admin> del archivo /etc/cups/cupsd.conf, añadiendo la directiva Allow y
la dirección IP o conjunto de direcciones IP desde las que se puede realizar la administración
de CUPS. Por ejemplo, si incluimos la línea Allow 192.168.1.34, se podrán realizar tareas
administrativas desde el equipo con la dirección IP 192.168.1.34; si incluimos la línea Allow
192.168.1.* se podrán realizar tareas administrativas desde los equipos cuyas direcciones IP
comiencen por 192.168.1.
Si queremos acceder a la impresora CUPS desde un sistema Windows, hay que instalar una
impresora de red y escribir la dirección http://192.168.1.33:631/printers/NombreDeImpresora.
Si queremos acceder a la impresora CUPS desde un sistema Linux, hay que ejecutar la opción
Sistema – Administración – Impresoras y, en la ventana que se muestra, pulsar el botón Nuevo,
accediendo a una nueva ventana en la que hay que seleccionar la opción Internet Printing
Protocol (ipp) y pulsar el botón Adelante.
Seguidamente, hay que escribir la dirección IP y el puerto del servidor CUPS. En el apartado
Cola hay que escribir printers/NombreDeImpresora o pulsar el botón Buscar cola y seleccionar
la impresora deseada.
A continuación, hay que pulsar el botón Adelante y seguir las indicaciones del asistente de
instalación para finalizar la conexión a la impresora.
172
16.5. INSTALACIÓN DE UNA IMPRESORA PDF.
Una impresora PDF es una configuración que consiste en instalar una impresora virtual que se
utilizará para enviar los trabajos a imprimir en formato PDF. Estos trabajos no se imprimirán,
sino que se guardarán en un directorio desde el que se pueden visualizar, con un visor de
ficheros PDF, y, desde aquí, si nos interesa, enviarlos a la impresora real instalada en el
sistema.
Para instalar una impresora PDF, hay que instalar el paquete cups-pdf.
Para instalar la impresora PDF hay que ejecutar la opción Sistema – Administración –
Impresoras y, en la ventana que se muestra, pulsar el botón Nuevo, accediendo a una nueva
ventana en la que hay que seleccionar la impresora PDF, pulsar el botón Adelante y seguir las
indicaciones del asistente para finalizar la instalación.
173
16.6. COMANDOS PARA REALIZAR LAS TAREAS DE IMPRESIÓN.
El sistema operativo Unix/Linux nos proporciona una serie de comandos para gestionar las
colas de impresión. Estos comandos son los que vamos a detallar a continuación (algunas
opciones de estos comandos sólo funcionan para impresoras instaladas con el servicio LPD,
que en estos apuntes no lo vamos a tratar).
Si se introduce lpr sin parámetros, se envían al spool los caracteres que se escriben desde el
teclado (entrada estándar).
Las opciones más utilizadas son las siguientes (estas opciones varían dependiendo de las
versiones de Unix/Linux instaladas):
-#número.
-[1234]font.
-C cabecera.
-h.
-i [número]
La salida se realiza de forma tabulada. Si se incluye número, indica los espacios en blanco
que utilizará como tabulador.
-J número.
-Pimpresora.
-T título.
-U usuario.
174
-w número.
175
16.6.2 Comando lpq.
Se utiliza para visualizar el contenido del directorio spool de la impresora. La información que
visualiza es la siguiente: el estado del trabajo (active) o, si el trabajo está en espera, la posición
que ocupa en la cola, el usuario que ha enviado el trabajo, el número de trabajo, los nombres
de los ficheros que contiene el trabajo y el tamaño del trabajo en bytes.
La sintaxis es la siguiente:
-l.
-Pimpresora.
176
16.6.3 Comando lprm.
Si se introduce lprm sin parámetros, se borra el trabajo que se está imprimiendo en ese
momento.
-.
-Pimpresora.
177
16.6.4 Comando lpc.
Se utiliza para administrar las impresoras, es decir, activar o desactivar las impresoras, activar
o desactivar las colas de impresión y cambiar el número de los trabajos a imprimir.
La sintaxis es la siguiente:
Si se ejecuta el comando lpc sin introducir ningún nombre de comando, se muestra el prompt
lpc>, permitiendo introducir comandos lpc de forma interactiva.
Los comandos que se pueden ejecutar con lpc son los siguientes:
abort {all,impresora}.
clean {all,impresora}.
Borra, de la impresora indicada, los ficheros temporales creados para imprimir los trabajos
y los archivos que no se puedan imprimir.
disable {all,impresora}.
down {all,impresora}mensaje.
enable {all,impresora}.
exit.
help [comando].
Muestra información sobre los comandos que se pueden utilizar con lpc o sobre el
comando especificado. También se puede utilizar la orden ? [comando].
restart {all,impresora}.
Reinicia una impresora que se ha detenido por un mal funcionemiento. También reinicia el
demonio lpd.
178
start {all,impresora}.
status {all,impresora}.
stop {all,impresora}.
Detiene la impresora especificada, aunque los trabajos enviados a dicha cola siguen
entrando. El trabajo actual termina de imprimirse.
up {all,impresora}.
179
17.Administración de procesos.
17.1. MULTIUSUARIO Y MULTITAREA.
El sistema operativo Unix/Linux es multiusuario, pues permite trabajar a varios usuarios de
forma simultánea. Estos usuarios, o incluso un sólo usuario, pueden ejecutar varios trabajos al
mismo tiempo y el sistema debe ser capaz de compartir sus recursos (procesador, memoria,
etc.) para que todos los trabajos se procesen de forma, aparentemente, simultánea.
Para procesar todas las tareas, el sistema gestiona una lista o cola de tareas, asignando un
tiempo de proceso a cada una de las tareas que se encuentran en la cola. El sistema ejecuta
una tarea durante un tiempo determinado y, a continuación, ejecuta la siguiente tarea de la cola
para, seguidamente, procesar la siguiente y así sucesivamente. Cuando una tarea termina su
ejecución, la elimina de la cola. En este proceso, los recursos del sistema son utilizados por las
tareas que lo soliciten, repartiendo el tiempo de ejecución (time-sharing) entre dichas tareas.
En este reparto del tiempo de ejecución de los recursos del sistema, se ejecutan todas las
tareas varias veces en un segundo y, cada vez que se ejecuta una tarea, se pueden procesar
cientos o miles de instrucciones.
Las tareas que se ejecutan en el sistema no tienen todas la misma prioridad. Las tareas con
mayor prioridad tendrán derecho a un mayor tiempo de ejecución de los recursos del sistema.
Interactivo.
Es un proceso que puede ser iniciado desde un shell y se puede ejecutar en primer o
segundo plano.
Por lotes.
Daemon.
Son procesos que se activan al iniciar el sistema para ejecutar funciones del sistema
operativo, como SAMBA o NFS.
Los procesos que se ejecutan en segundo plano, permiten al usuario introducir órdenes o
iniciar nuevas tareas mientras se están ejecutando. Para iniciar un proceso en segundo plano,
hay que escribir su nombre y, a continuación, el carácter ‘&’. El sistema nos devuelve el número
de identificación del proceso (PID). Si se ejecuta el comando jobs se muestran todos los
procesos ejecutándose en segundo plano.
Los procesos que se están ejecutando en segundo plano, pueden modificarse para que sigan
ejecutándose en primer plano (foreground). Para ello, hay que ejecutar el comando fg PID.
Los procesos que se están ejecutando en primer plano, pueden modificarse para que sigan
ejecutándose en segundo plano (background). Para ello, hay que ejecutar el comando bg PID.
180
primer plano se ejecuta una orden wait, que hace que el proceso padre permanezca en espera
hasta la terminación del proceso hijo.
Para ejecutar un programa, el shell (proceso padre) realiza una llamada fork y lanza un shell
hijo, que ejecuta el programa con una petición exec, mientras el proceso padre, a consecuencia
de la ejecución de una orden wait, se queda en espera hasta que el proceso hijo termina y
muere. Por último, el shell del proceso padre muestra el prompt en el terminal para que se
introduzca una nueva orden.
Si un proceso generado por un usuario (programa en C, shell script, etc.) se ejecuta utilizando
la sintaxis . proceso, no se genera un proceso hijo. En este caso, si el shell script ejecuta una
instrucción exit, se abandonará la sesión del usuario, de igual forma que si se hubiera
ejecutado la orden logout. Si el proceso se ejecuta con la orden sh, se genera un proceso hijo
y, al ejecutar una instrucción exit, el sistema permanece en la sesión de usuario, pues el
proceso que termina su ejecución es el proceso hijo, permaneciendo en ejecución el proceso
padre, que es el shell.
Unix/Linux nos proporciona una serie de órdenes para administrar todos los procesos que se
están ejecutando en el sistema.
181
17.2. PLANIFICACIÓN DE LOS PROCESOS A EJECUTAR.
Unix/Linux nos permite la posibilidad de ejecutar los procesos en un determinado momento. De
esta forma, podemos ejecutar determinadas tareas a ciertas horas en que el sistema esté más
liberado o dejar al sistema la elección de ejecutar determinados procesos cuando encuentre
tiempo para su ejecución. También es posible planificar la ejecución de determinados procesos
sin necesidad de que el usuario que planificó dichos procesos esté conectado en el momento
de ejecutarse.
A continuación, se pasa a detallar los comandos y demonios que nos permiten realizar estas
tareas.
182
17.2.2 Comando at.
Se utiliza para indicar la fecha y hora en la que se ejecutarán los procesos indicados. Estos
procesos se ejecutan en segundo plano. También se puede ver la lista de procesos pendientes
de ejecución y eliminar procesos para que no se ejecuten.
Para que este servicio esté disponible al iniciarse el sistema, hay que indicarlo en el directorio
correspondiente al nivel de inicio del equipo, de la forma descrita en el punto 7.Proceso de
inicialización del sistema.
Cuando se ejecuta el comando, se muestran, en la siguiente línea, los caracteres at>. En esta
línea se escribe la orden que se desea ejecutar en el tiempo indicado y se pulsa la tecla Enter.
Se vuelve a mostrar una nueva línea con los caracteres at> para escribir una nueva orden.
Cuando finalice la introducción de las órdenes que se desean ejecutar en el tiempo indicado,
hay que pulsar Ctrl+d. Se muestra el número de identificación del proceso (PID) asignado.
hora.
Las horas se pueden indicar según un reloj de 24 horas, con el formato hh:mm. A
continuación de la hora indicada se pueden incluir las siguientes opciones:
pm.
Se utiliza según un reloj de 12 horas para indicar la hora después del mediodía.
am.
Se utiliza según un reloj de 12 horas para indicar la hora antes del mediodía.
next.
now.
noon.
midnight.
El mes se indica con sus tres primeras letras (en inglés). Los doce meses del año, en
inglés, son los siguientes: January, February, March, April, May, June, July, August,
183
September, October, November y December. El año, si se incluye, se escribe con
cuatro dígitos.
Dia de la semana.
Se escribe en inglés. Los días de la semana en inglés son los siguientes: Monday,
Tuesday, Wednesday, Thursday, Friday, Saturday y Sunday.
Otro día.
Incremento.
El incremento indica el tiempo que debe transcurrir desde la fecha indicada para que el
proceso se ejecute. Para determinar el incremento, hay que escribir el signo ‘+’, un número
y una de las siguientes opciones: minutes (minutos), hours (horas), days (días), weeks
(semanas), months (meses) o years (años).
Para visualizar la lista de procesos que están pendientes de ejecución se utiliza la sintaxis at –l
o la orden atq. También se puede mostrar un determinado proceso. Para ello, hay que utilizar
las órdenes atq PID o at – l PID. Estos procesos se encuentran en el directorio
/var/spool/cron/atjobs.
Cuando el proceso se ejecuta, la salida de las órdenes del proceso se envían al correo
electrónico. Si se desea que la salida de las órdenes se produzca en el monitor, hay que añadir
al final de cada orden la redirección al dispositivo deseado. Si se está ejecutando un entorno no
gráfico, el monitor es el dispositivo /dev/tty1. Si se está trabajando en el entorno X-Windows, el
monitor es el dispositivo /dev/pts/0.
Ejemplo.
Deseamos ejecutar el archivo programa1 dentro de una hora, utilizando el monitor como
salida del archivo.
at now +1 hour
El administrador del sistema decidirá los usuarios que podrán ejecutar el comando at. Para ello
dispone de los ficheros /etc/at.allow y /etc/at.deny. Los usuarios incluidos en el fichero
/etc/at.allow podrán utilizar este comando. Los usuarios incluidos en el fichero /etc/at.deny no
podrán ejecutarlo. Si el fichero /etc/at.allow no existe todos los usuarios podrán ejecutar el
comando at, excepto los incluidos en el archivo /etc/at.deny. Si estos archivos no existen, sólo
el usuario root podrá ejecutar at.
184
17.2.3 Comando batch.
Se utiliza para ejecutar procesos cuando el sistema se encuentre más liberado de trabajo.
Estos procesos se ejecutan en segundo plano y se encuentran en el directorio
/var/spool/cron/atjobs.
Cuando se ejecuta el comando batch se muestran, en la línea siguiente, los caracteres ‘at>’,
debiendo introducir las órdenes de la forma descrita para la orden at. La salida de la orden
batch se envía al monitor.
Si se utiliza la sintaxis batch –f fichero se ejecuta el contenido del fichero especificado. También
se puede ejecutar el contenido de un archivo redirigiendo la entrada de dicho archivo al
comando batch.
185
17.2.4 Comando crontab.
Este comando se utiliza para indicar al sistema la realización de uno o varios procesos en
determinados momentos y de forma regular, como puede ser realizar copias de seguridad
todos los días a las 10 de la noche.
Los procesos que se quieren ejecutar de esta forma se deben incluir en un archivo. En realidad,
el comando crontab instala este archivo para que los procesos se ejecuten en el tiempo
establecido.
El archivo donde se incluyen los procesos a ejecutar debe contener una línea por cada
proceso. Cada línea constará de los siguientes datos, que se escriben separados por espacios
o tabuladores:
Minuto.
Hora.
Determina el día del mes en que el proceso será ejecutado. Su valor oscilará entre 1 y 31.
El carácter ‘*’ indica que el proceso se ejecutará todos los días.
Establece el mes del año en que se ejecutará el proceso. Su valor está comprendido entre
1 y 12. El carácter ‘*’ indica que el proceso se ejecutará todos los meses.
Día de la semana.
Indica el día de la semana en que el proceso será ejecutado. Su valor oscilará entre 0 y 6,
correspondiendo el 0 al Domingo. El carácter ‘*’ indica que el proceso se ejecutará todos
los días de la semana.
Proceso.
Una vez creado el archivo que contiene los procesos que se van a ejecutar, hay que instalarlo.
Para ello, se utiliza la orden crontab archivo. Después de ejecutar esta orden, se crea un
archivo con el nombre del usuario en el directorio /var/spool/cron/crontabs. Si el archivo existe,
se sobreescribe. Este archivo es el que ejecuta el daemon cron para lanzar los procesos
indicados en él y se puede modificar con cualquier editor de textos.
Ejemplo.
La línea 10 20 * * * echo Prueba del comando crontab >/dev/tty1, visualiza en el monitor los
caracteres Prueba del comando crontab a las 20:10 horas de todos los días, meses y años.
186
Ejemplo.
La línea * 20,21,22 10 01,02 01,02,03 echo Prueba del comando crontab >/dev/tty1,
visualiza en el monitor los caracteres Prueba del comando crontab a las 20 horas, 21 horas
y 22 horas (20,21,22) de los lunes, martes y miércoles (01,02,03) y, además, los días 10 de
los meses enero y febrero (10 01,02). En este ejemplo, el carácter ‘*’ en el campo
reservado a los minutos no se refiere a todos los minutos de las horas indicadas.
-e.
Edita el archivo crontab del usuario actual. Utiliza el editor incluido en la variable EDITOR
del shell. Por defecto, utiliza el Editor nano.
-l.
-r.
También se puede utilizar la sintaxis crontab –u usuario fichero para generar un archivo
crontab para el usuario especificado, que contendrá los procesos incluidos en el fichero
indicado. El nombre del archivo crontab del directorio /var/spool/cron/crontabs será el mismo
que el usuario introducido. Este fichero se puede editar, listar o borrar utilizando la sintaxis
crontab –u usuario {-e,-l,-r}.
187
17.2.5 Comando nohup.
La sintaxis es la siguiente:
Si se utilizan las conducciones, hay que escribir una orden nohup por cada orden incluida en la
tubería.
Cuando el comando que se va a ejecutar genera datos para ser visualizados, se envían al
archivo nohup.out, a no ser que se redireccione a otro archivo. El archivo nohup.out se crea en
el directorio de cada usuario. Si, durante la ejecución del comando, se producen errores,
también se graban en este archivo.
188
17.3. SUPERVISIÓN DE USUARIOS CONECTADOS.
Cuando se trabaja en entorno multiusuario, como es el caso de Unix/Linux, es conveniente
saber los usuarios que están conectados al sistema y el tiempo que están conectados. Para
ello, se utiliza el comando who.
El comando who visualiza los usuarios conectados, la estación desde la que están conectados,
la fecha y hora de conexión y la dirección IP de todas las estaciones, excepto desde la que está
conectado el usuario root.
La sintaxis es la siguiente:
who [opciones]
Si utilizamos el comando sin opciones, nos muestra todos los usuarios conectados.
Las opciones pueden ser (tanto las opciones como la información que ofrecen pueden variar
entre distintos sistemas):
-H.
Muestra una cabecera por cada columna. Dependiendo de las opciones utilizadas, las
cabeceras que se muestran son las siguientes (estas cabeceras pueden variar entre
distintos sistemas):
NAME.
LINE.
LOGIN-TIME.
IDLE.
Lista las horas y minutos que han transcurrido desde que el usuario realizó la última
actividad. Si se muestra el carácter ‘.’, indica que la última actividad se ha realizado en
el último minuto. Si se muestra la palabra old, indica que han transcurrido más de
veinticuatro horas desde que el usuario realizó la última acción.
PID.
-i.
Muestra el tiempo, con el formato hh:mm, que llevan los usuarios sin realizar ninguna
operación. Cuando visualiza el carácter “.”, indica que el usuario ha realizado alguna
operación en el último minuto. Esta información se muestra, asimismo, con la opción –u.
-m.
El nombre del usuario está precedido del servidor y el dominio al que está conectado.
189
-q.
-T.
Visualiza el estado de los terminales. Si muestra el carácter “-“, indica que el terminal no
puede recibir mensajes. El carácter “+” indica que el terminal puede recibir mensajes. Esta
información también se muestra con la opción –w.
am i.
190
17.4. SUPERVISIÓN DEL ESTADO DE LOS PROCESOS.
En los sistemas multitarea, como es el caso de Unix/Linux, es conveniente conocer el estado
de los procesos. Esta acción la realiza el comando ps, que nos permite visualizar los procesos
que se están ejecutando, comprobar la terminación correcta o posibles problemas de los
procesos, el tiempo que los procesos tardan en ejecutarse, los recursos que utilizan los
procesos, la prioridad relativa de los procesos y el número de identificación de los procesos.
ps [opciones]
Si se ejecuta ps sin opciones, se muestran los procesos en ejecución asociados al shell del
usuario.
Dependiendo de las opciones utilizadas al ejecutar el comando ps, en el listado que aparece en
pantalla se visualizarán diferentes cabeceras. Algunas de las cabeceras que se muestran son
las siguientes:
ADDR.
C.
CMD.
F.
Contiene un indicador del proceso. Puede tener uno de los siguientes valores:
00.
01.
02.
04.
10.
191
20.
Estos valores pueden variar de un sistema a otro. También se pueden representar como la
suma en octal de varios valores.
NI.
Contiene un valor numérico que se utilizará para calcular la prioridad del proceso cuando
se modifica su prioridad con los comandos nice o renice.
PID.
PPID.
PRI.
Muestra la prioridad del proceso. El valor que se muestra en esta columna es una
combinación de las prioridades de tiempo compartido y tiempo real. Si se han utilizado los
comandos nice y renice para modificar la prioridad de un proceso, el valor de esta columna
es una combinación de las prioridades de tiempo compartido y tiempo real y del valor
asignado al proceso en los comandos nice y renice.
S o STAT.
Muestra el estado en que se encuentra el proceso. Puede tener uno de los siguientes
valores:
I.
Proceso intermedio.
O.
Proceso inexistente.
R.
Proceso en ejecución.
S.
Proceso durmiendo.
T.
Proceso parado.
W.
Proceso esperando.
192
Z.
Proceso terminado.
STIME.
SZ.
TIME.
TTY.
WCHAN.
-a.
-c.
-e.
-f.
En este ejemplo vemos, entre otra información, que el proceso login – root tiene como
proceso padre el inicio del sistema (PPID 1), que el proceso –bash tiene como proceso
padre al proceso login – root (PPID 423) y que el proceso ps –f tiene como proceso padre
al proceso –bash (PPID 431).
-l.
193
-p procesos.
-r.
-tnúmero.
-u [usuario].
Se muestra, entre otra información, el usuario asociado a cada proceso. También se puede
incluir el nombre de un usuario para mostrar los procesos que está ejecutando dicho
usuario.
-x.
Muestra todos los procesos, incluidos los que no están asociados a ningún terminal.
Ejemplos.
Si se quiere obtener un listado de todos los procesos en ejecución, hay que introducir el
comando ps –uax.
Si se quieren listar los procesos de los terminales 1 (tty1) y 2 (tty2), hay que introducir
la orden ps –t “1 2”.
En ocasiones, se muestran procesos marcados como defunct, que quiere decir que el proceso
ha finalizado su ejecución pero su proceso padre todavía no se ha enterado. Este proceso se
denomina proceso zombi. Si se muestran muchos procesos zombi, es posible que exista algún
error en el sistema. Los procesos zombi desaparecen cuando el ordenador se apaga.
También es posible ejecutar un proceso y mostrar, después de haber sido ejecutado, el tiempo
que ha empleado en su ejecución y el tiempo de uso de la CPU, entre otras informaciones.
Para ello, se utiliza el comando time seguido del proceso que se quiere ejecutar.
194
17.5. FINALIZACIÓN DE LOS PROCESOS.
Cuando un proceso está causando problemas en el sistema, se puede suspender su ejecución
utilizando las teclas Ctrl-c. Si el proceso se está ejecutando en segundo plano, no se puede
suspender utilizando estas teclas. Para suspender procesos en segundo plano, hay que utilizar
el comando kill.
Se pueden suspender varios procesos, incluyendo sus números de identificación separados por
espacios. Cuando se desea detener un proceso que ha lanzado nuevos procesos, hay que
detenerlos todos, porque si se suspende sólo el proceso superior, los procesos que haya
lanzado seguirán ejecutándose, pudiendo ocasionar problemas.
La orden kill envía una señal a los procesos que van a ser detenidos, que indica la forma en la
que se detendrán. Las señales que se pueden enviar se pueden visualizar escribiendo la orden
kill –l. Las señales que se envían a los procesos se pueden incluir en la orden kill, utilizando el
número de señal. Si se omite la señal, el comando kill envía la señal 15 al proceso indicado. Si
el proceso se sigue ejecutando, significa que se ha definido para ignorar la señal 15 enviada
por el comando kill. La señal 9 indica que el proceso especificado se detendrá de forma
incondicional, aunque haya sido definido para ignorar ciertas señales. El número de señal debe
ir precedido de un guión. Si se quieren detener todos los procesos que se están ejecutando en
segundo plano, hay que ejecutar la orden kill 0.
Algunas de las señales que generan los procesos o que pueden ser enviadas por el comando
kill a los procesos son las siguientes:
1.
2.
3.
Se genera cuando el usuario introduce las teclas de abandonar un proceso. Estas teclas
son Ctrl+\. En este caso se crea un archivo core.
4.
9.
14.
195
15.
Los usuarios sólo pueden eliminar sus propios procesos, a excepción del usuario root, que
puede eliminar cualquier proceso.
196
17.5.1 Captura de señales.
Las señales generadas por los procesos o enviadas a estos por el comando kill, pueden ser
capturadas para que el proceso controle la acción que ha de realizar cuando reciban estas
señales. Para ello, se utiliza la orden trap. Esta orden debe formar parte de la ejecución del
proceso. Por ejemplo, si el proceso es un guión shell, la orden trap debe ser incluida en el
propio guión shell.
En el parámetro señal hay que incluir la señal o señales que se desean capturar.
Una orden o programa, que se ejecutará cuando se genere la señal o señales indicadas.
Posteriormente, el proceso continuará su ejecución en la orden siguiente a la que se
estaba ejecutando cuando recibió la señal. La orden o programa debe ir encerrado entre
comillas.
Ejemplo.
En un guión shell se incluye la orden trap ‘echo Enviada señal 15’ 15.
Si se ejecuta la orden kill guiónshell (por defecto se envía la señal 15) se muestra el
mensaje Enviada señal 15 y, posteriormente, el guión shell continúa su ejecución.
La cadena vacía (‘’). Indica que las señales incluidas son ignoradas, no realizándose
ninguna acción y continuando la ejecución del proceso en la orden siguiente a la que se
estaba ejecutando cuando recibió la señal.
Ejemplo.
Si se ejecuta la orden kill guiónshell (por defecto se envía la señal 15) el guión shell
continúa su ejecución, ignorando la señal de terminación enviada desde el comando
kill.
No inclusión del parámetro. Cuando este parámetro se omite, las señales incluidas dejan
de ser interceptadas. Esta acción es útil cuando en un mismo proceso es necesario que
algunas señales se capturen en un determinado momento y no se capturen en otra parte
del proceso.
Ejemplo.
En un guión shell se incluye la orden trap 15. La señal 15 deja de ser capturada. De
esta forma, si se ejecuta la orden kill guiónshell, el guión shell termina su ejecución.
197
17.6. PRIORIDAD DE LOS PROCESOS.
Cuando un proceso se ejecuta, el sistema le asigna una prioridad de ejecución. Esta prioridad
se tendrá en cuenta a la hora de utilizar los recursos del sistema. Los procesos con mayor
prioridad utilizan los recursos con mayor frecuencia que los procesos con menor prioridad. Los
procesos hijo heredan la prioridad de los procesos padre.
La prioridad de los procesos se establece mediante valores numéricos. Cuanto menor sea el
valor numérico de la prioridad de los procesos, mayor será su prioridad.
La sintaxis es la siguiente:
La opción –número determina la prioridad del proceso, cuyo rango de valores oscila entre –20
(máxima prioridad) y 19 (mínima prioridad). Para ejecutar un proceso con la prioridad más alta,
hay que introducir nice --20 orden (observar que se escriben dos guiones delante del número
20).
La sintaxis es la siguiente:
Los usuarios normales sólo podrán modificar la prioridad de sus procesos, no pudiendo
asignarles una prioridad mayor.
198
18.Guiones shell.
18.1. INTRODUCCIÓN.
Un guión shell o shell script es un programa elaborado por el usuario que permite ejecutar
cualquier orden de Unix. Además de los comandos Unix, se pueden ejecutar instrucciones
propias de los lenguajes de programación, como son bucles, sentencias de control,
instrucciones de E/S de datos, definición de variables, definición de funciones, etc. Podemos
consultar un manual del lenguaje de programación en la dirección
http://tldp.org/LDP/abs/html/index.html.
Para ejecutar un guión shell, hay que escribir . guiónshell o sh guiónshell. Si el usuario tiene
permiso de ejecución sobre el guión shell, hay que introducir el nombre del guión para
ejecutarlo, omitiendo la orden sh.
Para introducir comentarios en los guiones shell, deben estar precedidos del carácter ‘#’.
Es conveniente que cada usuario se cree un directorio, dentro de su directorio home, para
guardar todos sus guiones shell. Este directorio se podría llamar bin y habría que incluirlo en la
variable PATH para tener acceso directo a dicho directorio.
199
18.2. VARIABLES.
Los guiones shell utilizan dos tipos de variables:
Variables locales.
Son las que se definen en cada guión y sólo pueden ser utilizadas por el guión en el que
han sido creadas. Si se quieren utilizar en otros programas, hay que exportarlas con la
orden export. La lista de variables locales se muestra con la orden set.
Variables globales.
Son aquellas que se pueden utilizar en todos los guiones. Estas variables, para que estén
disponibles en todos los programas, deben ser exportadas con la orden export. Si una
variable local se redefine con la orden export, pasará a ser global. La lista de variables
globales o de entorno se visualiza con la orden env. Un proceso hijo puede modificar una
variable exportada por su proceso padre, pero cuando el proceso hijo finalice su ejecución,
la variable exportada tendrá el mismo valor que antes de ser exportada al proceso hijo y
modificada por éste.
200
18.2.1 Definición de variables.
Para definir una variable, hay que asignarle un valor. La forma de asignar un valor a una
variable es escribiendo el nombre de la variable, el signo ‘=’ y el valor que se desea asignar.
Por ejemplo, para asignar el valor 4 a la variable Numero, hay que escribir Numero=4 (observar
que, a ambos lados del signo ‘=’, no se introducen espacios), para asignar la fecha del sistema
a la variable Fecha, hay que escribir Fecha=`date`.
Se pueden definir variables de solo lectura. Para ello, se utiliza la sintaxis readonly variable. Si
se ejecuta la instrucción readonly sin argumentos, se muestran todas la variables que se han
definido de solo lectura.
Las variables se crean en memoria y permenecen accesibles durante la ejecución del shell
script. Para borrar una variable de memoria se utiliza la sintaxis unset variable.
Para hacer referencia al nombre de la variable, hay que escribir el carácter ‘$’ delante del
nombre de la variable. Por ejemplo, para visualizar el contenido de la variable Numero, hay que
escribir echo $Numero.
201
18.2.2 Asignación de valores.
Cuando una variable está vacía, se puede asignar un valor de forma temporal a dicha variable
para realizar una accción determinada. La variable puede mantener o no el valor que se le ha
asignado de forma temporal. Para ello, se utiliza la sintaxis ${variable:opción cadena}. Las
opciones pueden ser:
-.
Ejemplo.
ejemplo=
echo $ejemplo
echo ${ejemplo:-Hola}
echo $ ejemplo
Este ejemplo visualiza una línea en blanco con la instrucción echo $ejemplo, pues la
variable ejemplo contiene la cadena vacía, visualiza la cadena Hola, que es el
contenido de la variable ejemplo, asignado en la instrucción echo ${ejemplo:-Hola}
porque la variable ejemplo está vacía, y, por último, visualiza, nuevamente, una línea
en blanco con la instrucción echo $ejemplo, pues la variable ejemplo sigue conteniendo
la cadena vacía.
=.
Ejemplo.
ejemplo=
echo $ejemplo
echo ${ejemplo:=Hola}
echo $ ejemplo
Este ejemplo visualiza una línea en blanco con la instrucción echo $ejemplo, pues la
variable ejemplo contiene la cadena vacía, visualiza la cadena Hola, que es el
contenido de la variable ejemplo, asignado en la instrucción echo ${ejemplo:=Hola}
porque la variable ejemplo está vacía, y, por último, visualiza, nuevamente, la cadena
Hola con la instrucción echo $ejemplo, pues la variable ejemplo, al contener la cadena
vacía, cambia su contenido por la cadena Hola.
+.
Ejemplo.
ejemplo=Adios
echo $ejemplo
echo ${ejemplo:+Hola}
echo $ ejemplo
Este ejemplo visualiza la cadena Adios con la instrucción echo $ejemplo, visualiza la
cadena Hola, que es el contenido de la variable ejemplo, asignado en la instrucción
echo ${ejemplo:+Hola} porque la variable ejemplo no está vacía, y, por último,
202
visualiza, nuevamente, la palabra Adios con la instrucción echo $ejemplo, pues la
variable ejemplo, al no contener la cadena vacía, no cambia su contenido por la cadena
Hola.
?.
Ejemplo.
ejemplo=
echo $ejemplo
echo ${ejemplo:?Error}
Este ejemplo visualiza una línea en blanco con la instrucción echo $ejemplo, pues la
variable ejemplo contiene la cadena vacía, y visualiza la cadena Error, que es el
contenido de la variable ejemplo, asignado en la instrucción echo ${ejemplo:=Hola}
porque la variable ejemplo está vacía, finalizando la ejecución del guión script.
Las variables pueden tomar valor de los datos tecleados por el usuario. Para ello, se utiliza la
orden read, seguida del nombre de la variable o variables donde se va a almacenar el dato
introducido por el usuario. Si el usuario introduce caracteres especiales que utiliza el shell y no
se quieren tener en cuenta, por ejemplo, al imprimir el contenido de la variable, hay que
encerrar el nombre de la variable entre comillas.
Un guión shell puede tomar valores que se generan dentro del propio guión. Para ello, se utiliza
el operador <<. La sintaxis es la siguiente: orden << fin, siendo fin una cadena de caracteres
que se utilizará como final de los datos que se tomarán del propio guión shell.
Ejemplo.
203
18.2.3 Gestión de parámetros.
Al ejecutar un guión shell, se pueden pasar parámetros que podrán ser ejecutados desde el
propio guión. Estos parámetros se escribirán a continuación del nombre del guión. Para
acceder a estos parámetros desde el guión shell, se utilizan las variables $1 a $9. Por ejemplo,
si se quieren pasar los nombres de los archivos carta1, carta2 y carta3 a un guión que se llama
copiar, hay que escribir, en la línea de comandos, copiar carta1 carta2 carta3. Las variables $1,
$2 y $3 contendrán los valores carta1, carta2 y carta3, respectivamente. Además de las
variables $1 a $9, el shell genera las siguientes variables:
$0.
$-.
Contiene los argumentos o indicadores que se utilizan, por ejemplo con la orden set, al
ejecutar el guión shell.
$*.
En algunas versiones de Unix/Linux se utilizan las varables $. o $@. Contiene todos los
parámetros introducidos en la línea de comandos.
$#.
$?.
Contiene el código de retorno, que puede ser un código de error, de la orden ejecutada. Si
la orden se ha ejecutado en segundo plano, esta variable no toma valor.
$$.
Contiene el PID.
$!.
Contiene el PPID.
Para acceder a los distintos parámetros introducidos desde la línea de comandos al ejecutar el
guión shell, hay que utilizar la orden shift. Esta orden desplaza el valor de los parámetros una
posición a la izquierda. Al ejecutar la orden shift, la variable $1 toma el valor de la variable $2,
la variable $2 toma el valor de la variable $3, la variable $3 toma el valor de la variable $4, y así
sucesivamente. La variable $0 siempre contendrá el mismo valor.
Puede haber más de 9 parámetros. Para referenciar los parámetros superiores a 9, hay que
encerrarlos entre llaves. Por ejemplo, para acceder al contenido del parámetro 15, hay que
escribir ${15}.
204
18.2.4 Visualización del contenido de las variables.
Para visualizar el contenido de las variables se utiliza la orden echo, también utilizada para
visualizar constantes. La orden echo admite las siguientes opciones:
-n.
-e.
Se utiliza para incluir uno de los siguiente caracteres (estos caracteres se incluyen entre
comillas dobles o simples):
\a.
Emite un pitido.
\c.
\f.
\n.
\r.
\t.
\nnn.
Ejemplo.
205
18.3. EXPRESIONES.
En un guión shell se pueden realizar las operaciones de sumar (+), restar (-), multiplicar (*),
dividir (/) y calcular el resto de una división (%). El símbolo de la multiplicación debe ir
precedido por el carácter ‘\’.
Para realizar estas operaciones se utiliza la instrucción expr. Por ejemplo, para sumar los
números 2 y 3, hay que escribir expr 2 + 3 (observar que se introduce un espacio antes y
después del signo +).
El resultado de la operación se puede almacenar en una variable. Para ello, hay que introducir
la expresión entre acentos graves ‘`’. Por ejemplo, si queremos almacenar el resultado de la
suma de los números 2 y 3 en la variable Suma, hay que escribir Suma=`expr 2 + 3`.
También se puede utilizar una variable como operando de la expresión. Por ejemplo, para
almacenar en la variable Producto el producto de la variable Suma por 4, hay que escribir
Producto =`$Suma \* 4`.
Una expresión puede contener varias expresiones. Por ejemplo, si queremos dividir la suma de
las variables Var1 y Var2 entre el producto de las variables Var3 y Var4, hay que escribir expr
`expr Var1 + Var2` / `expr Var3 \* Var4`. Si el resultado de la expresión anterior se quiere
guardar en una variable, hay que utilizar los paréntesis para agrupar las expresiones.
Ejemplo.
Var1=50
Var2=20
Var3=5
Var4=2
Resultado=`expr \( $Var1 + $Var2 \) / \( $Var3 \* $Var4 \)`
echo $Resultado # Imprime el valor 7
206
18.4. EVALUACIÓN DE CONDICIONES.
Cuando en un programa se necesitan tomar decisiones, es necesario realizar una evaluación
de las condiciones que producirán la toma de decisiones. Para ello, se utiliza la orden test. Esta
orden permite evaluar números, cadenas y archivos. Los números, cadenas y los nombres de
los archivos que van a ser evaluados pueden estar almacenados en variables.
Dependiendo del tipo de dato que se vaya a evaluar, hay que utilizar distintas opciones para
realizar la evaluación:
Las opciones que se utilizan para realizar las evaluaciones son las siguientes:
-eq.
Igual.
-gt.
Mayor que.
-ge.
-le.
-lt.
Menor que.
-ne.
Distinto.
207
18.4.2 Cadenas.
Las opciones que se utilizan para realizar las evaluaciones son las siguientes:
=.
Igual.
!=.
Distinto.
-n.
str.
-z.
208
18.4.3 Archivos.
Las opciones que se utilizan para realizar las evaluaciones son las siguientes:
-a.
Archivo existente. En algunos sistemas esta opción no funciona, debiendo utilizar -e.
-b.
-c.
-d.
Archivo de directorio.
-e.
Archivo existente.
-f.
Archivo normal.
-h.
-r.
-s.
-w.
-x.
209
18.4.4 Operadores.
210
18.4.5 Otras consideraciones.
La ejecución de los comandos también se puede evaluar mediante los códigos de salida que
generan. Si el comando se ha ejecutado con éxito, genera el código de salida 0, en cuyo caso
la evaluación de la ejecución del comando es verdadera. Si el comando no se ha ejecutado con
éxito, genera un código de salida distinto de 0, en cuyo caso la evaluación de la ejecución del
comando es falsa.
211
18.5. RUPTURAS DE CONTROL.
Cuando no queremos que las instrucciones de un programa se ejecuten en secuencia, es
necesario realizar rupturas de control para que se ejecuten unas instrucciones cuando se
cumpla una condición y otras cuando se cumpla otra determinada condición. Para ello, se
utilizan las estructuras de control if y case.
if [ condición ]
then
<instrucciones>
else
<instrucciones>
fi
<instrucciones>
Se pueden anidar varias instrucciones if. En este caso, por cada instrucción if anidada, existirá
una instrucción fi.
Si después de la instrucción else se quiere ejecutar una nueva instrucción if, se puede utilizar la
instrucción elif. En este caso, sólo es necesario una única instrucción fi. La sintaxis de esta
estructura es la siguiente:
if [ condición ]
then
<instrucciones>
elif [ condición ]
then
<instrucciones>
elif [ condición ]
then
<instrucciones>
fi
<instrucciones>
212
18.5.2 Instrucción case.
Se utiliza para ejecutar unas determinadas instrucciones dependiendo del valor contenido en
una expresión.
La sintaxis es la siguiente:
case expresión in
valor 1) <instrucciones>
<última instrucción;;>
valor 2) <instrucciones>
<última instrucción;;>
valor n) <instrucciones>
<última instrucción;;>
*) <instrucciones>
<última instrucción;;>
esac
En los valores se pueden utilizar los metacaracteres *, ? y [ ] y varios valores separados por el
carácter ‘|’, que equivale al operador Or.
Ejemplo.
clear
echo –e ‘\t\t’ 1. Altas
echo –e ‘\t\t’ 2. Bajas
echo –e ‘\t\t’ 3. Modificaciones
echo –e ‘\t\t’ 4. Consultas
echo –e ‘\t\t’ 5 Listado total
echo –e ‘\t\t’ 6. Listado parcial
echo –e ‘\t\t’ 7. Fin
echo –n –e ‘\t\t\t\t’ ‘Elija una opción: ‘
read opcion
case $opcion in
1) echo Ha elegido la opción de Altas;;
2) echo Ha elegido la opción de Bajas;;
3) echo Ha elegido la opción de Modificaciones;;
4) echo Ha elegido la opción de Consultas;;
5|6) echo Ha elegido la opción de Listados;;
7) echo Ha elegido la opción de Fin;;
*) echo –e \a Error al teclear una opción;;
esac
213
18.6. BUCLES.
Los bucles se utilizan para ejecutar una serie de instrucciones de forma repetitiva. Para ello, se
utiliza la estructura do <instrucciones> done.
Para indicar el número de veces que se repetirán las instrucciones incluidas dentro del bucle,
se utilizan las sentencias while, until y for.
214
18.6.1 while.
La sintaxis es la siguiente:
while condición
do
<instrucciones>
done
Ejemplo1.
Opcion=0
while test $Opcion –ne 7
do
clear
echo –e ‘\t\t’ 1. Altas
echo –e ‘\t\t’ 2. Bajas
echo –e ‘\t\t’ 3. Modificaciones
echo –e ‘\t\t’ 4. Consultas
echo –e ‘\t\t’ 5 Listado total
echo –e ‘\t\t’ 6. Listado parcial
echo –e ‘\t\t’ 7. Fin
echo –n –e ‘\t\t\t\t’ ‘Elija una opción: ‘
read Opcion
case $Opcion in
1) echo –n Ha elegido la opción de Altas;;
2) echo –n Ha elegido la opción de Bajas;;
3) echo –n Ha elegido la opción de Modificaciones;;
4) echo –n Ha elegido la opción de Consultas;;
5|6) echo –n Ha elegido la opción de Listados;;
7) echo –n Ha elegido la opción de Fin;;
*) echo –n –e ‘\a’ Error al teclear una opción;;
esac
echo –n . Pulse Enter; read Tecla
done
Ejemplo2.
Respuesta=’’
while [ “$Respuesta” != “s” –a “$Respuesta” != “n” ]
do
read Respuesta
done
Respuesta=’’
while [ “$Respuesta” != “s” ] && [ “$Respuesta” != “n” ]
do
read Respuesta
done
215
18.6.2 until.
Las instrucciones contenidas en el bucle se ejecutan hasta que se cumpla la condición indicada
en la instrucción until.
La sintaxis es la siguiente:
until condición
do
<instrucciones>
done
Ejemplo1.
Opcion=0
until [ $Opcion –eq 7 ]
do
clear
echo –e ‘\t\t’ 1. Altas
echo –e ‘\t\t’ 2. Bajas
echo –e ‘\t\t’ 3. Modificaciones
echo –e ‘\t\t’ 4. Consultas
echo –e ‘\t\t’ 5 Listado total
echo –e ‘\t\t’ 6. Listado parcial
echo –e ‘\t\t’ 7. Fin
echo –n –e ‘\t\t\t\t’ ‘Elija una opción: ‘
read Opcion
case $Opcion in
5) echo –n Ha elegido la opción de Altas;;
6) echo –n Ha elegido la opción de Bajas;;
7) echo –n Ha elegido la opción de Modificaciones;;
8) echo –n Ha elegido la opción de Consultas;;
5|6) echo –n Ha elegido la opción de Listados;;
7) echo –n Ha elegido la opción de Fin;;
*) echo –n –e ‘\a’ Error al teclear una opción;;
esac
echo –n . Pulse Enter; read Tecla
done
Ejemplo2.
Respuesta=’’
until [ “$Respuesta” = “s” –o “$Respuesta” = “n” ]
do
read Respuesta
done
Respuesta=’’
until [ “$Respuesta” = “s” ] || [ “$Respuesta” = “n” ]
do
read Respuesta
done
216
18.6.3 for.
Las instrucciones comprendidas dentro del bucle se ejecutan para todos los valores que pueda
tomar la variable especificada.
La sintaxis es la siguiente:
217
18.7. FUNCIONES.
Las funciones se utilizan para incluir en ellas una serie de órdenes que se van a ejecutar varias
veces en distintos lugares de un mismo guión shell o que se ejecutarán desde distintos guiones
shell.
NombreFunción ()
{
<órdenes>
}
Las variables que se utilicen dentro de una función, no pueden llamarse de igual forma a las
utilizadas en el guión shell desde el que se realiza la llamada a la función.
NombreFunción
Se pueden pasar parámetros a una función. La gestión de los parámetros dentro de una
función se realiza de la misma forma que la descrita, anteriormente, en la gestión de
parámetros, es decir, el primer parámetro se encuentra en la variable $1, el segundo en la
variable $2, y así sucesivamente.
Las funciones se definen al principio del shell script. Si se definen en cualquier otro lugar, hay
que ejecutar el guión shell con la sintaxis . GuiónShell; de lo contrario, cuando se llame a la
función se producirá el error Command not found.
Es posible que la función devuelva valores, que serán tratados en el guión shell que ha llamado
a la función. Para ello, se utiliza la siguiente sintaxis:
return valor
Para consultar los valores que se retornan de una función, se utiliza la variable $?.
Si no se retorna ningún valor, la función devuelve el código de salida del último comando
ejecutado en la función.
218
18.8. EJECUCIÓN DE LOS GUIONES SHELL.
Para ejecutar un guión shell, hay que escribir su nombre seguido de la lista de parámetros, si el
guión shell gestiona parámetros.
Todas las opciones set deben ir precedidas de uno de los caracters ‘-‘ o ‘+’, que indican que la
opción será activada, carácter ‘-‘, o desactivada, carácter ‘+’.
Las opciones que se pueden incluir en la orden set son las siguientes:
e.
Detiene la ejecución del shell script si al ejecutar alguno de sus comandos genera un
código de salida distinto de cero.
n.
u.
v.
x.
Las opciones de la orden set, se pueden ejecutar al llamar al shell script o pueden ser incluidas
dentro del mismo.
Cuando un guión shell se va a ejecutar desde un shell distinto al shell desde el que se creó,
hay que incluir, como primera orden del guión shell, la orden “#/usr/bin/shell” (en algunos
sistemas se utiliza la sintaxis “#!/usr/bin/shell”), siendo shell el nombre del shell desde el que se
va a ejecutar (sh, csh, etc.).
Se puede generar un código de salida cuando un guión shell termine su ejecución. Para ello, se
utiliza la orden exit número, donde número es el código de salida que el guión shell devuelve.
Si no se utiliza la orden exit, el shell script devuelve el código de salida de la última orden que
se ha ejecutado.
Los mensajes de error que generan los comandos, se pueden redireccionar a un archivo
utilizando la sintaxis orden 2>archivo. Por ejemplo, si ejecutamos la orden cd prueba 2>errores
y el directorio prueba no existe, el mensaje de error que genera la orden se envía al archivo
errores. También se puede utilizar el redireccionamiento >>. Si se redirecciona al dispositivo
/dev/null, el mensaje no se muestra y no se guarda en ningún archivo. Posteriormente, se
puede preguntar por el valor de la variable $? para saber si se ha producido o no un error.
219
220