Академический Документы
Профессиональный Документы
Культура Документы
LABORATORIOS GNU/Linux
GUIA PRACTICA DE CERTIFICATION
GNU CERTIFIED - ADMINISTRACION
Capitulo 1
1. Defina el rol del administrador del sistemas GNU/Linux y ¿qué importancia refleja en la empresa?
2. ¿Cuándo deben las tareas administrativas ser delegada? ¿En quién deben ser delegadas?
3. Indique algunos comandos útiles para monitorear y administración (usuarios conectados, ultimo usuario
ingresados, registro de accesos y salidas de usuarios, logs del sistema).
4. Como administrador de sistemas, indique el correcto particionamiento a la hora de instalar el sistema
GNU/Linux y ¿por qué?. Esto, tomando como contingencia la conservación de las aplicaciones, datos, etc en
caso que el sistema tenga problemas.
¿Por qué en GNU/Linux todo es considerado un archivo y que ventajas tiene?
5. Explique la jerarquía /usr y mencione algunos ejemplos. ¿Puede un usuario normal escribir en estos
directorios?. ¿Por qué?
6. Explique la jerarquía /proc, su función principal. ¿Qué refleja la información contenida bajo este directorio y
por que es tan variable?
7. Explique la salida del comando uname a.
Linux crislaptop 2.6.1710generic #2 SMP Tue Dec 5 22:28:26 UTC 2006 i686 GNU/Linux
8. Uso del comando su, ej. su root y su – root, ¿cuál es la diferencia entre ambos.
9. Explicar las diferentes carpetas encontradas en el sistema de archivos, como son dev, etc, bin, sbin, opt,
home, etcétera.
10. Uso del comando man y mostrar destrezas como cambiar de idioma, manejar las 9 secciones y que contienen
cada una de ellas, etc.
11. Además del man, ¿qué otras ayudas están disponibles?
12. Practica con el comando wall y write para poder comunicarse de un usuario a otro.
Práctica #1 “Compilar el Kernel”
La empresa Nuñez por razones de manejadores disponibles en una versión del kernel aún no disponible en paquetes
binarios, llámese RPM, se encuentran en la necesidad de compilar un kernel para su uso, demos los pasos necesarios
a seguir para exitosamente lograr esta tarea:
Mensajes y módulos del kernel en funcionamiento
Administradores deberían poder administrar un kernel y sus módulos cargables.
Archivos, términos y utilidades necesarias
● /lib/modules/kernelversion/modules.dep
● /etc/modules.conf
● /etc/modprobe.conf
● depmod
● insmod
● lsmod
● rmmod
● modinfo
● modprobe
● uname
El kernel
El kernel (núcleo) es el corazón del sistema operativo. El es solamente una parte comparativamente pequeña del
sistema GNU/Linux total.
Los kernels pueden ser monolíticos, teniendo todas las funcionalidades dentro del mismo, o como modular teniendo
mucho de la funcionalidad actuando separadamente como módulos. Aunque Linux soporta módulos del kernel, se
dice que es monolítico a causa de que no está compilado sobre un microkernel. Algunos ejemplos de núcleos listos
para usar en producción:
• Linux, desarrollado por Torvalds y colaboradores de todo el mundo.
• Mach, un microkernel usado por sistemas operativos de Apple.
Un kernel de desarrollo:
• El HURD, el kernel del proyecto GNU.
Práctica #2 “Módulos del kernel”
Un módulo del kernel es un programa se carga separadamente. Los módulos del kernel sirven para extender las
capacidades del kernel sin la necesidad de compilar funcionalidades directamente en la imagen del kernel. Un buen
ejemplo es el driver de un dispositivo.
Hay ciertas ventajas de usar módulos del kernel en contraposición a tener los drivers compilados en el kernel. Éstos
se pueden descargar (rmmod) y recargar (modprobe, insmod) en cualquier momento, permitiéndole pasar diferentes
parámetros en lugar de especificarlos una vez en el arranque como parámetros del kernel o actualizarlos sin reiniciar.
También, para actualizar un driver modularizado necesita recompilar el módulo, mientras que si el driver es parte del
kernel entonces se debe compilar un nuevo kernel. Para buses que se pueden conectar en caliente como los USB, los
módulos se pueden cargar según la necesidad en lugar de cargarse todos a la vez.
Comando “modinfo”
La información como el autor, licencia, versión, dependencias y parámetros se pueden encontrar usando el comando
modinfo.
# modinfo reiserfs
filename: /lib/modules/2.6.208generic/kernel/fs/reiserfs/reiserfs.ko
license: GPL
author: Hans Reiser <reiser@namesys.com>
description: ReiserFS journaled filesystem
srcversion: 204A083D94EECC3B0F2FB30
depends:
vermagic: 2.6.208generic SMP mod_unload 586
$ modinfo d snd
Advanced Linux Sound Architecture driver for soundcards.
/sbin/modinfo p loop
max_loop:Maximum number of loop devices (1256)
El archivo /etc/modules.conf
El archivo modules.conf contiene la configuración de los módulos del kernel que se cargan automáticamente. En
muchas distros este archivo ha sido ya modularizado y reemplazado por la carpeta modpobe.d y encontramos
archivos como options y alias que representan las entradas en este archivo general.
Un ejemplo clásico de un alias sería el siguiente:
alias sound sb
alias eth0 ne2kpci
Este asigna el seudónimo sound a un módulo de Sound Blaster y eth0 al módulo ne2kpci para la placa de red.
El archivo modprobe.conf y el directorio /etc/modprobe.d/*
Estos archivos son similar al anterior y se usan en las versiones 2.6 del kernel para especificar opciones a los
módulos y para crear alias a los módulos.
ls /etc/modprobe.d/
aliases archaliases blacklistmodem blacklistwatchdog
ipw3945 nvidiakernelnkc alsabase blacklist blacklistoss bluez isapnp options
arch/ blacklistframebuffer blacklistscanner ibm_acpi.modprobe lrmvideo
Obtener información con el comando uname
El comando uname muestra información valiosa del sistema
Nombre del kernel
$ uname s
Linux
Nombre del host
$ uname n
localhost
Versión del kernel
$ uname r
2.6.175mdv
Tipo fecha y hora del kernel
$ uname v
#1 SMP Wed Sep 13 14:32:31 EDT 2006
Procesador
$ uname p
Intel(R) Pentium(R) 4 CPU 3.00GHz
Tipo de plataforma de hardware
$ uname i
unknown
Sistema operativo
$ uname o
GNU/Linux
Toda la información (salvo el procesador y la plataforma de hardware en caso de no haberse podido
determinar
bash3.1$ uname a
Linux localhost 2.6.175mdv #1 SMP Wed Sep 13 14:32:31 EDT 2006 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GNU/Linux
lsmod
lsmod es una herramienta que muestra un listado de los módulos cargados actualmente.
root@antoniolaptop:/home/antonio# lsmod
Module Size Used by
ipv6 261920 12
hci_usb 18204 2
binfmt_misc 12808 1
rfcomm 40856 0
l2cap 25728 5 rfcomm
bluetooth 55268 7 hci_usb,rfcomm,l2cap
Práctica #3 “Reconfiguración, construcción e instalación del kernel y
sus módulos”
Archivos, términos y utilidades:
Dirs: /usr/src/linux/* /usr/src/linux/.config /lib/modules/kernelversion/* /boot/*
make targets: all, config, menuconfig, xconfig, gconfig oldconfig, modules, install, modules_install, depmod, rpmpkg, binrpmpkg, deb
pkg
Obtener las fuentes del kernel
Para compilar un kernel, se necesitan las fuentes del mismo. Se puede obtener de http://kernel.org. La distribución
puede también ya venir con las fuentes del kernel, en algún lugar de los cds.
2. Verificar el enlace simbólico (ej. /usr/src/linux>/src/linux/linux2.4.18)
$ ls alc
3. Verificar otra vez con este comando (ejemplo de salida) linux: symbolic to linux2.4.1814
$ file linux
4. Borrar el enlace simbólico
$ rm linux
5. Desempaquetar el tarball (kernel nuevo)
$ tar zxvf linuxx.x.x.tar.gz
$ tar jxvf linuxx.x.x.tar.bz2
NOTA****
Como aplicar parches al kernel
Este paso viene después de desempaquetar las fuentes del kernel. Cuando se descarga el parche, hay que ponerlo en
la carpeta donde se desempaquetaron las nuevas fuentes del kernel. Luego hay que tipear:
patch E p1 < patch_descargado
6. Hacer un nuevo enlace al nuevo kernel
$ ln s /usr/src/linuxx.x.x /usr/src/linux
7. Tipear esto para cambiar al directorio
$ cd linux
Instalar el conjunto de herramientas y los archivos de encabezados necesarios para
compilar
No todas las distribuciones vienen con todos los componentes para compilar un kernel. Se necesitará el compilador
de C, GCC, make, y archivos de encabezados del sistema instalados antes de que se pueda comenzar a construir un
núcleo.
Compilación
Primero, hay que eliminar cosas que no se necesitan, como el actual .config y otros archivos.
Haga esto si quieres usar su vieja configuración a partir del kernel actual, digamos el 2.4.x con el kernel 2.6 nuevo:
$ cp /usr/src/linux2.4.x/.config /usr/src/linux
Para interfaz con ncurses en la terminal
$ make menuconfig
Nota:
La mayoría de las opciones tienen que ver con especificar si se quiere una característica compilada dentro de la imagen del kernel [*],
[M] compilada como un módulo, o [ ] no compilada de ninguna manera. No se debería compilar las propiedades del disco rígido y del
tipo de sistema de archivos como un módulo estos deben estar compilados en el kernel [*], e.g. " [*] ReiserFS".
El programa de configuración sirve para especificar un enorme número de prestaciones. Es aconsejable examinar todas las secciones
para obtener una idea de las diferentes cosas que se pueden hacer. La configuración del kernel es un programa de GNU/Linux que ofrece
un montón de ayuda se puede seleccionar < Help > en cada prestación. Puede ser valioso también leer los archivo de ayuda que están
en /usr/src/linux/Documentation/.
Cuando se haya finalizado con la configuración, se tiene que hacer clic en exit y guardar la configuración actual. El archivo se conoce
ahora como .config
>OMITIR LO SIGUIENTE SI SE COMPILA UN KERNEL 2.6.x<
$ make dep # Asegura que las dependencias estén en su lugar
$ make clean # Para limpiar las fuentes para que se compilen correctamente
>COMENZAR AQUÍ SE COMPILA UN KERNEL 2.6.x<
$ make && make modules_install
Los comandos de arriba crean la imagen del kernel (compila y crea una imagen compilada del kernel), compila los
módulos, y luego instala los módulos flamantes a /lib/modules/linux.x.x.x
¡Ahora es tiempo de instalar el nuevo Kernel!
Borrar los siguientes enlaces:
$ rm rf /boot/System.map
$ rm rf /boot/vmlinuz
Luego copia el kernel creado recientemente y System.map a /boot
$ cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuzx.x.x
$ cp /usr/src/linux/System.map /boot/System.mapx.x.x
Hacer los nuevos enlaces:
$ ln s /boot/vmlinuzx.x.x /boot/vmlinuz
$ ln s /boot/System.mapx.x.x /boot/System.map
A continuación, si está presente, borrar el archivo initrd.img existente:
$ rm rf /boot/initrd.x.x.x.img
(Nota: )
El último grupo de x.x.x es el equivalente a la versión del nuevo kernel
Se debe usar alguno de estos pasos
• si se usa grub entonces editar /boot/grub/menu.lst
• si se usa lilo entonces editar /etc/lilo.conf
Es importante dejar la línea para el kernel viejo por si acaso, modificar lo que está en archivo de configuración originalmente para que
apunte al nuevo viejo y hacer una nueva entrada para la imagen nueva que recién se hizo...
Ajuste de GRUB
title Nuevo Kernel :D
kernel /vmlinuzx.x.x ro root=LABEL initrd /initrdx.x.x.img
Nota:
Mirar en los parámetros anteriores en el archivo menu.lst para definir "root="
Guardar y salir
Ajuste de Lilo (/etc/lilo.conf)
image = /boot/vmlinuzx.x.x
label = nuevokernel
root = /dev/hdx
readonly
Guardar, salir y luego ejecutar:
$ /sbin/lilo
$ reboot
Práctica #4 “Gestor de Arranque e Imágenes”
El administrador de la empresa Nuñez tienen que agregar una imagen del kernel a su archivo de configuración de su
gestor de arranque GRUB, demos los pasos necesarios a seguir para exitosamente lograr esta tarea:
Ajuste de GRUB
title Nuevo Kernel :D
kernel /vmlinuzx.x.x ro root=LABEL initrd /initrdx.x.x.img
Ajuste de Lilo (/etc/lilo.conf)
image = /boot/vmlinuzx.x.x
label = nuevokernel
root = /dev/hdx
readonly
Guardar, salir y luego ejecutar:
$ /sbin/lilo
$ reboot
Práctica #5 “Utilitarios de Módulos”
El administrador de la empresa Nuñez tiene que manipular drivers y módulos del kernel para lograr configurar en
vivo o tiempo real su kernel actual, que herramientas le ofrece el sistema para exitosamente lograr esta tarea. De
ejemplos de cada uno de estos:
lsmod : Despliega la información referente a los módulos que están habilitados por el "kernel".
depmod: Genera un archivo que contiene las dependencias de los módulos que son cargados para el "Kernel",esto
es, es capaz de reconocer cuales módulos deben de ser cargados para que un tercero sea utilizado en el sistema.
insmod: Habilita ("loads") el modulo que se especifica en la linea, para que el "kernel" sea capaz de
utilizarlo.(ejemplo: insmod ip_alias.o )
rmmod: Quitar un modulo
modprobe: igual que insmod pero mas seguro ya que primero se asesora si todo estará bien después de insertado el
módulo.
Práctica #6 “Modificar parámetros del kernel tiempo real... /proc”
Una de las funcionalidades avanzadas de /proc/ es, como decíamos, la posibilidad de modificar algunos de los
parámetros internos del núcleo sin tener que recompilarlo y reiniciar el sistema. Esta sección presenta un pequeño
resumen de cómo realizarlo.
Como cualquier programa en ejecución, el núcleo de Linux posee internamente un conjunto de variables globales (o
parámetros) que reflejan y/o condicionan su funcionamiento. Algunos de estas variables, como por ejemplo los
procesos que se están ejecutando, la ocupación de la memoria o los sistemas de archivos montados, pueden ser
consultados por el usuario mediante la lectura de los archivos correspondientes del directorio /proc/, tal como
veíamos en la sección anterior. Pero /proc/ permite también la modificación en línea de algunas de esas variables, sin
necesidad de reiniciar el sistema, de forma que podemos ajustar el comportamiento del núcleo dinámicamente. Para
ello se dispone del directorio /proc/sys/.
/proc/sys/dev/: Este directorio proporciona los parámetros de configuración de algunos dispositivos físicos conectados al sistema, como
por ejemplo unidades de cdrom. Por ejemplo:
# ls l /proc/sys/dev/cdrom/
total 0
rwrr 1 root root 0 20070722 20:18 autoclose
rwrr 1 root root 0 20070722 20:18 autoeject
rwrr 1 root root 0 20070722 20:18 check_media
rwrr 1 root root 0 20070722 20:18 debug
rrr 1 root root 0 20070722 20:18 info
rwrr 1 root root 0 20070722 20:18 lock
$ cat /proc/sys/dev/cdrom/info
CDROM information, Id: cdrom.c 3.20 2003/12/17
drive name: hdc
drive speed: 24
drive # of slots: 1
Can close tray: 1
Can open tray: 1
Mediante la modificación de archivos como autoclose o autoeject (que pueden contener 0 o 1) podemos controlar la
activación o desactivación de esas características de la unidad de cd.
/proc/sys/fs/: Este directorio contiene numerosos parámetros concernientes a los sistemas de archivos montados en
el sistema, incluyendo cuotas, manejadores de archivo, inodos, etc:
Por ejemplo, si quisiéramos incrementar la cantidad de manejadores de fichero (es decir, el número máximo de
ficheros que pueden ser abiertos simultáneamente), deberíamos incrementar la cantidad que aparece en filemax.
• /proc/sys/kernel/. El contenido de este directorio incluye aspectos de configuración y parámetros que afectan
directamente el funcionamiento del núcleo, como por ejemplo el comportamiento de [Ctl][Alt][Supr] para
reiniciar el sistema, el nombre del ordenador (ver ejemplo arriba), el número máximo de hilos de ejecución
que el núcleo puede ejecutar, etc.
• /proc/sys/net/. Este directorio permite ver y controlar el funcionamiento de muchos aspectos del núcleo
relacionados con la red, incluyendo los diferentes protocolos queimplementa Linux (ethernet, ipx, ipv4, ipv6,
etc). Por ejemplo, para permitir la retransmisión de paquetes entre dos tarjetas de red conectadas al
ordenador, haríamos lo siguiente:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Otros ejemplos podrian ser:
# cat /proc/sys/net/ipv4/tcp_syncookies
0
# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
/proc/sys/vm/: Este subdirectorio permite la configuración del subsistema de memoria virtual del núcleo, como por
ejemplo el funcionamiento del servicio (o "demonio") de intercambio (kswapd), la cantidad de memoria que se
dedicará a buffers del núcleo, el número máximo de áreas de memoria que pueden tener los procesos, etc.
Práctica #7 “El mandato sysctl”
Como alternativa a escribir directamente el valor (o los valores) en los archivos de /proc/sys/, Linux dispone de un
mandato denominado sysctl, que puede ser utilizado para leer y modificar todos los parámetros del kernel que se
ubican en ese directorio. Por ejemplo, para modificar el nombre de la máquina, como veíamos arriba, podríamos
ejecutar lo siguiente:
# cat /proc/sys/kernel/hostname
nombrehost
Ya que para cambiar un valor se emplea:
/sbin/sysctl w kernel.hostname=comp
El comando sysctl nos permite parametrizar parámetros del núcleo. No hace falta decir que son aquellos con los que
fue compilado el núcleo. Toda la configuración se hace a través del fichero /etc/sysctl.conf:
Práctica #8 “La Orden stty”
El nombre stty probablemente signifique “set tty,” pero la orden stty también puede ser empleada para mostrar la
configuración de un terminal. Quizás aún más que setserial, la orden stty proporciona un desconcertante número de
características configurables. Cubriremos las más importantes en breve. Puede usted encontrar descrito el resto en la
página de manual de stty.
La orden stty se utiliza principalmente para configurar parámetros del terminal, tales como qué caracteres serán
mostrados, o qué tecla deberá generar una señal de parada. Explicamos anteriormente que los dispositivos serie son
dispositivos tty, y por tanto la orden stty es igualmente aplicable a ellos.
La orden stty puede ser usada para mostrar los parámetros de configuración de un dispositivo tty. Para mostrar todos
los parámetros activos de un dispositivo tty se hace:
$ssty a F /dev/tty1 ... desde el terminal uno..
Práctica #8 “El Comando stty”
El comando stty espara establecer y reportar las opciones de entrada y salida I/O del terminal. Usado sin parámetros
nos reporta la terminal actual:
$ stty
speed 9600 baud; parity hupcl
rows = 25; columns = 80; ypixels = 281; xpixels = 486;
erase = ^h; swtch = <undef>; rprnt = <undef>; flush = <undef>; werase = <undef>; lnext = <undef>;
inpck istrip icrnl ixany onlcr tab3
echo echoe echok
Usado con la opción a, el stty lista todos los valores del terminal/teclado.
$ stty a
speed 9600 baud;
rows = 25; columns = 80; ypixels = 281; xpixels = 486;
intr = DEL; quit = ^|; erase = ^h; kill = @;
eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>;
...............
stty eof ^d
Establece el caracter de fin de archivo a ^d.
stty intr ^c
Establece el caracter de interrupción a ^c. Le permite detener los procesos ejecutandose en el primer plano de su terminal.
stty susp ^z
Establece el caracter de suspender a ^z. Le permite suspender los procesos ejecutándose en el primer plano de su terminal.
Práctica #9 “Programas de medición y Benchmarks”
El administrador de la empresa Nuñez tiene que efectuar cierta mediciones en su sistema en tiempo real, que
herramientas le ofrece el sistema para exitosamente lograr esta tarea:
hdparm
El comando hdparm permite visualizar y modificar los parametros del disco duro para los discos IDE en Linux, de
forma que es posible mejorar el rendimiento obtenido con los mismos. Aunque hay que tener una cierta precaución
y cuidado, puesto que al ser tan potente implica también ciertos riesgos, aunque si sabemos en cada momento lo que
estamos haciendo no hay ningún problema:
Para Obtener información/identificación sobre un determinado disco duro:
# hdparm i /dev/hdc
/dev/hdc:
Model=ST36531A, FwRev=3.05, SerialNo=GS264860
Para Información general sobre el estado del disco duro:
# hdparm /dev/hdc
/dev/hdc:
multcount = 32 (on)
Desactivar el soporte UDMA del disco duro, precisamente tengo problemas con mi disco duro /dev/hdc y
desactivando el soporte udma estos desaparecen y el disco funciona perfectamente.
#hdparm d0 /dev/hdc
/dev/hdc:
setting using_dma to 0 (off)
Comprobar la velocidad de transferencia:
# hdparm Tt /dev/hdb
/dev/hdb:
Timing buffercache reads: 128 MB in 1.67 seconds = 76.65 MB/sec
Timing buffered disk reads: 64 MB in 3.76 seconds = 17.02 MB/sec
Más información: man hdparm y hdparm help
Para obtener hdparm: http://www.ibiblio.org/pub/Linux/system/hardware/
Existe una Interfaz gráfica (Gui) para hdparm: http://ghdparm.sourceforge.net
Comando Benchmark “hddtemp”
Utilitario para verificar la temperatura de los discos
# hddtemp /dev/hda
Comando Benchmark “time”
Da los tiempos de ejecución. Este comando nos da tres valores cuya interpretación es:
real Tiempo real gastado (Duración real)
user Tiempo CPU de usuario.
sys. Tiempo CPU consumido como proceso de kernel.
(Es decir dentro de las llamadas al kernel)
La mayoría de los comandos están gran parte del tiempo sin consumir CPU porque necesitan
esperar para hacer entrada salida sobre dispositivos lentos que además pueden estar en uso
compartidos por otros procesos. Existe un comando capaz de esperar tiempo sin gastar tiempo de
CPU. Se trata del comando 'sleep'. Para usarlo le pasaremos un argumento que indique el número
de segundos de dicha espera.
Por ejemplo vamos a comprobar cuanta CPU consume una espera de 6 segundos usando sleep
$ time sleep 6
real 0m6.011s
user 0m0.000s
sys 0m0.000s
El resultado obtenido puede variar ligeramente en cada sistema pero básicamente obtendrá un
tiempo 'real' de unos 6 segundos y un tiempo de CPU ( 'user' + 'sys' ) muy pequeño.
En este comando verá que el consumo total de CPU es superior al del comando sleep. En
cualquier caso el tiempo real tardado en la ejecución del comando es siempre muy superior al
consumo de CPU. Vamos a probar un comando que apenas realice otra cosa que entrada salida.
Vamos a enviar 10Mbytes al dispositivo /dev/null. Existe un comando 'yes' que provoca la salida
continua de un caracter 'y' seguido de un caracter retorno de carro. Esta pensado para sustituir la
entrada de un comando interactivo en el cual queremos contestar afirmativamente a todo lo que
pregunte. Nosotros filtraremos la salida de 'yes' con el comando 'head' para obtener solo los
10Mbytes primeros producidos por 'yes' y los enviaremos al dispositivo nulo '/dev/null' que viene
a ser un pozo sin fondo en el cual podemos introducir cualquier cosa sin que se llene, pero no
podremos sacar absolutamente nada. En una palabra vamos a provocar proceso de entrada salida
perfectamente inútil.
$ time yes | head bytes=10000000 > /dev/null
real 0m0.264s
user 0m0.252s
sys 0m0.040s
Podemos hacer un consumo fuerte de CPU si forzamos a cálculos masivos que no tengan apenas
entrada salida. Por ejemplo podemos poner a calcular el número PI con 300 cifras decimales. 'bc'
es un comando que consiste en una calculadora. Admite uso interactivo pero también acepta que
le pasemos las operaciones desde otro proceso combinando entrada salida.
$ time ( echo "scale=300; 4*a(1)" | bc l )
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
454326648213393607260249141272
real 0m0.069s
user 0m0.048s
sys 0m0.004s
RPM facilita las actualizaciones de sistema para el usuario final. Es posible instalar, desinstalar y actualizar paquetes RPM por medio de
comandos breves. RPM mantiene una base de datos de los paquetes instalados y de sus ficheros, y usted puede hacer consultas y
verificaciones poderosas en su sistema. Si prefiere una interfaz gráfica, puede utilizar GnomeRPM para ejecutar muchos comandos
RPM.
RPM permite al desarrollador tomar el código fuente del software y empaquetarlo en paquetes binarios y de fuente para los usuarios
finales. Este proceso es bastante sencillo y se controla desde un único fichero y parches opcionales creados por usted mismo. Esta clara
delineación de fuentes originarias y sus parches y las instrucciones de construcción facilitan el mantenimiento del paquete al ir
apareciendo nuevas versiones del software.
Nota
Ya que RPM efectúa cambios a su sistema, debe ser root para poder instalar, quitar, o actualizar un paquete RPM.
El comando rpm tiene varias opciones:
rpm q <nombre_paquete> Me dice si este paquete ya esta instalado o no.
rpm qa Me dice todos los paquetes que están instalados.
rpm i <nombre_paquete> Instala el paquete.
rpm e <nombre_paquete> Desinstala un paquete.
Los paquetes RPM normalmente tienen nombres de fichero como paquetex.x.x.rpm. El nombre de fichero incluye el nombre de paquete
(paquete), versión (x), lanzamiento (x) y arquitectura (x). La instalación de un paquete es tan simple como teclear el siguiente comando
en el intérprete de comandos de shell:
# rpm paquetex.x.x.rpm
paquete ####################################
#
Tal vez usted haya borrado algunos ficheros accidentalmente, pero no está seguro de lo que ha eliminado. Si desea verificar su sistema
entero y ver lo que podría hacer falta, podría intentarlo con el siguiente comando:
rpm Va
Tal vez alguna vez verá un fichero que no reconoce. Para saber a qué paquete pertenece, teclearía:
rpm qf /usr/X11R6/bin/ghostview
¿Desea encontrar más información sobre un determinado programa? Puede intentar el siguiente comando para localizar la
documentación que acompañaba el paquete al cual pertenece ese programa:
rpm qdf /usr/bin/md5sum
La salida debería ser parecida a la siguiente:
/usr/share/doc/textutils2.0a/NEWS
/usr/share/doc/textutils2.0a/README
/usr/info/textutils.info.gz
/usr/man/man1/cat.1.gz
/usr/man/man1/cksum.1.gz
• Podría encontrar un RPM nuevo y no saber para qué sirve. Para encontrar información sobre él, use el siguiente comando:
rpm qip paquetex.xx.x.rpm
Práctica #2 “Los DEBs”
DPKG
Esta es la herramienta en línea de órdenes para instalar y manipular los paquetes Debian. Tiene varias opciones que le permitirán instalar,
configurar, actualizar, borrar y realizar otras operaciones con los paquetes Debian. Incluso puede construir sus propios paquetes. dpkg
también permite listar los paquetes disponibles, los ficheros pertenecientes a cada paquete, a qué paquete pertenece un fichero y demás.
Debian posee una serie de herramientas que es necesario llamar para construir un paquete:
● dpkgsource empaqueta y desempaqueta los archivos fuentes de un paquete Debian.
● dpkggencontrol lee la información de un árbol fuente Debian desempaquetado y genera un paquete binario de control,
generando una entrada para éste en el fichero debian/files.
● dpkgshlibdeps calcula las dependencias de ejecutables respecto a librerías.
● dpkggenchanges lee la información de un árbol fuente Debian desempaquetado y ya construido, generando un fichero de
control de los últimos cambios (un .changes).
● dpkgbuildpackage es un script de control que se puede utilizar para automatizar la construcción del paquete.
● dpkgdistaddfile añade una entrada de un fichero a debian/files.
● dpkgparsechangelog lee el fichero de cambios changelog) de un árbol fuente Debian desempaquetado y genera una salida con
la información de estos cambios, convenientemente preparada.
El comando dpkg es el que funciona "por debajo" de aptget. Puede que tengas algún problema al instalar algún paquete .deb si te has
bajado este de alguna Web y no a través de las fuentes especificadas en sources.list.
En caso de que esto te ocurra puedes usar directamente el comando dpkg para instalar el paquete de la siguiente forma
dpkg i /ruta/nombre_paquete.deb
dpkg S prog
Otra forma útil del dpkg es:
dpkg L <paquete>
que muestra todo el contenido de un paquete que ya esté instalado.
Para saber la versión de los programas que tienes instalados usa
dpkg l <paquete>
Los paquetes de software con extensión .deb son los paquetes nativos de Debian y sus distribuciones derivadas como es el caso de
Ubuntu. Contienen un instalador y los archivos necesarios para realizar automáticamente todas las operaciones de instalación.
Para instalar y desinstalar estos paquetes, el proyecto Debian desarrolló la aplicación dpkg y más tarde, para facilitar su manejo, creó su
propio sistema de gestión de paquetes, APT, que es la base para que otras aplicaciones como aptget y aptitude puedan descargar el
paquete indicado y manejarlo para configurar, resolver dependencias e instalar la aplicación.
Sobre la base de estos últimos programas se crearon varias aplicaciones para entorno gráfico como 'Añadir y Quitar aplicaciones',
'Synaptic' ó 'Adept' , que facilitan mucho la tarea de instalación de software.
dpkgreconfigure <nombre_del_paquete>
La interfaz de configuración:
dpkgreconfigure debconf
Por ejemplo en caso de que el servidor X no este funcionando correctamente;
dpkgreconfigure xserverxorg
El teclado:
dpkgreconfigure consolecommon
Ver los ficheros que contiene un paquete:
dpkg c <paquete.deb>
Buscar en que paquete de los instalados está contenido un fichero
dpkg S fichero
Práctica #3 “ALIEN”
¿Cómo se convierten paquetes entre RPM, DEB y TGZ con alien?
Alien es un programa que permite convertir un paquete binario entre los formatos rpm (Redhat, Suse), deb (Debian)
y tgz (Slackware):
Conversion a .DEB:
Práctica #4 “Los tar.gz”
Instalación compilado las fuentes (tar.gz)
También podemos bajar las fuentes de los programas que queramos instalar y compilarlas nosotros mismos, éste
procedimiento está bastante estandarizado y la mayoría de las veces uno no tiene más que recordar 3 o 4 comandos
para instalar cualquier programa que se baje a partir de las fuentes, claro que siempre pueden ocurrir problemas
(programas que no compilan por estar todavía en desarrollo, dependencias a librerias que no tenemos instaladas...)
por lo que siempre es recomendable instalar los programas a partir de los paquetes diseñados para las distribuciones,
aun así hay programas que no se encuentran "empaquetados" para las distribuciones por lo que no nos quedará más
remedio que abordar el tar.gz.
Éste es el caso del GtkAda, así que lo primero que haremos, como antes, será descomprimir el archivo con el
comando tar:
# ls
GtkAda1.2.11.tgz gnat3.13pi686pclinuxgnubin.tar.gz
gnat3.13pi686pclinuxgnubin
# tar zxvf GtkAda1.2.11.tgz
Una vez descomprimidos nos situamos sobre el directorio que se ha creado y ejecutamos configure que se encargará
de preparar el Makefile necesario para la posterior compilación
# cd GtkAda1.2.11
[11:33pm]Andromeda:/instalando/GtkAda1.2.11 # ls
ANNOUNCE INSTALL aclocal.m4 configure docs knownproblems
AUTHORS Makefile.in config.guess configure.in examples src
COPYING README config.sub contrib installsh testgtk
# ./configure
Llegado a este punto configure realizará una serie de comprobaciones para ver si se puede instalar el programa en
cuestión, aquí pueden surgir problemas por no tener instaladas en el sistema librerías necesarias para que GtkAda
funcione, a continuación se detalla un ejemplo de ejecución de configure en un sistema que no tiene la versión 1.2.2
de libgtkdev o superior instalada.
checking for gtkconfig... no
checking for GTK version >= 1.2.2... no
Para arreglar esto tendremos que instalar el paquete libgtkdev con aptget, dpkg, rpm ... con versión mayor o igual a
la 1.2.2 y volver a ejecutar el configure, si todo ha ido bien debería acabar con unas lineas como éstas:
[...]
creating src/gtkadaconfig
creating src/gate
creating testgtk/Makefile
creating src/gtkextra/Makefile
creating src/opengl/Makefile
creating src/pixbuf/Makefile
creating src/glade/Makefile
creating src/gnome/Makefile
creating docs/gtkada_ug/Makefile
creating docs/gtkada_rm/Makefile
Ahora tendremos que compilar, para ello el configure habrá creado un Makefile de acuerdo a las características de
nuestra máquina, por lo que simplemente tendremos que ejecutar `make` para que comience la compilación del
gtkada
# make
Una vez que se ha compilado (siempre que no haya habido errores), procedemos a copiar el programa en los
directorios que le corresponda, para ello ejecutaremos `make install` y con ello finalizara la instalación.
# make install
[...]
A partir de ahora ya podremos usarlo, tal y como dice el archivo INSTALL
gnatmake <your\_application> <your\_switches> `gtkadaconfig`
Práctica #5 “APT”
APT (Advanced Packaging Tool) es una interfaz avanzada del sistema de paquetes de Debian que consiste en
diversos programas cuyos nombres generalmente comienzan con "apt". aptget, aptcache y aptcdrom son
herramientas de la línea de comandos para el manejo de paquetes. Estos también funcionan como frontales de
usuario para otras herramientas tales como dselect y aptitude.
Para más información, instale el paquete apt y lea aptget(8), aptcache(8), aptcdrom(8), apt.conf(5), sources.list(5),
apt_preferences(5) (Woody) y /usr/share/doc/apt/guide.html/index.html.
Preguntas:
1. Describa las ventajas y desventajas de las librerías compartidas.
2. Verifique todos los paquetes instalados utilizando la opción verify.
3. Verifique la ubicación de la base de datos RPM del paquete perl utilizando el comando rpm y la
combinación verify.
4. Qué es una dependencia y que pasa si usted continua al instalar un paquete con una que no esta resuelta?
Comandos para el control de procesos
ps . Muestra los procesos en el sistema.
Parámetros:
A Muestra todos los procesos
e Igual que el anterior
x Muestra procesos no conectados a un terminal
r Muestra procesos activos
C comando Muestra los procesos correspondientes al comando
U usuario Muestra los procesos de un usuario
p PID Muestra el proceso con el correspondiente PID
u usuario Muestra los procesos con de un usuario efectivo
f Muestra toda la información de cada proceso
l Muestra información más completa de cada proceso
H Muestra la jerarquía de procesos
Mas Comandos
pstree o ptree Muestra la jerarquía de procesos del sistema
top Muestra en tiempo real el uso de CPU de los procesos
pmap PID Muestra la utilización de memoria de un proceso
fuser fichero Muestra todos los procesos que acceden a un fichero. Tras el PID de cada proceso muestra una letra
indicando como accede al fichero:
c Directorio actual
e Ejecución
f Fichero abierto
r Directorio raiz
m Biblioteca compartida
fuser fichero Parámetros:
k Finaliza todos los procesos
Algunos ejemplos:
lsof: para listar archivos abiertos por los procesos
Sin pasar ninguna opción el comando lsof listara todos los archivos abiertos de todos los procesos actuales.
Para listar los archivos abiertos por el usuario “estudiante”', o el usuario de ID numero ID 1000 use la opción u.
Para listar los archivos usados por el proceso numero 456, el proceso 123, o el proceso 789, usted deberá usar el
banderín p. Poniendo todo esto en practica un comando se ve de esta manera:
lsof p 456,123,789 u 1000,estudiante
Para listar todos los archivos abiertos en el dispositivo /dev/hd4, quedaría así:
lsof /dev/hd4
Para listar los procesos que utilizan el archivo /ruta/de/archivo, use:
lsof /etc/passwd
fuser:
Desplega los PIDs de los procesos utilizando un archivo o sistema de archivos en particular. En su manera por
defecto, cada nombre de archivo es seguido por una letra denotando el tipo de acceso:
# fuser /
Ptools esun conjunto de herramientas de administración de procesos que permiten el seguimiento y la depuración de
los procesos con facilidad. A partir de esta revisión, este conjunto de herramientas consta de los siguientes
comandos:
• pmap
El comando pmap imprime la información del espacio de direcciones de un proceso.
• pgrep
El comando pgrep busca los procesos que tienen atributos que se ajustan a los criterios de selección
especificados por los argumentos.
El comando pkill selecciona procesos similares a pgrep, pero, en lugar de imprimir los números de
identificación de proceso, señala los procesos coincidentes.
El usuario puede especificar la señal que se va a enviar al proceso coincidente como el primer argumento en
pkill. Por defecto, se da por sentado el uso de SIGTERM.
• ptree
El comando ptree imprime el árbol de proceso de todos los procesos que coinciden con los argumentos
especificados. Mientras se imprime el árbol, se hace un sangrado hacia la derecha de los procesos
secundarios en relación con los respectivos procesos primarios.
Preguntas:
1. ¿Cuál es la diferencia entre un proceso y un daemon?
2. ¿Por qué los procesos se vuelven zombies?
3. ¿Qué señal le dice al proceso que vuelva a leer su archivo de configuración?
4. ¿Por qué se crean los archivos core y que editor me permite leerlos?
5. ¿En cuales carpetas se alojan los runlevels?
Ejercicios
1. Comprueba cual es el nombre del proceso antecesor de todos los demás.
2. Averigua el PID de tu proceso shell
3. Utiliza pmap para comprobar cuanta memoria ocupa
4. Crea un fichero de texto y abrelo con diferente editores simultáneamente. Posteriormente averigua el PID de
todos los procesos que acceden al fichero
5. Averigua todos los usuarios que están ejecutando el mismo shell que tu.
6. Ejecuta un editor en un terminal con una unidad menos de prioridad
7. Disminuye en 2 unidades la prioridad del editor del ejercicio anterior mientras se ejecuta
8. Envía una señal de terminación al editor del ejercicio anterior
9. Ejecuta varias veces el mismo editor y finalízalos todos utilizando el comando killall
Ejercicios MTOOLS
1 Formatear un disquete con la utilidad mformat.
2 Copiar información desde el disco duro a la disquetera con mcopy
3 Listar los archivos de la disquetera con mdir
4 Borrar archivos del de la disquetera con la utilidad mdel
5 Crear y borrar directorios con las utilidades mmd y mrd respectivamente.
Práctica #2 “Establecer cuotas de disco”
Si queremos que los usuarios de nuestro sistema no consuman más recursos de los disponibles resulta indispensable
habilitar un límite de ocupación de espacio en el disco duro. Esto es lo que se conoce como cuotas de disco y en
unas pocas líneas os voy a explicar cómo es posible configurar un límite de utilización del disco en Ubuntu
GNU/Linux
Los pasos son los siguientes:
● Instalar la característica de control de cuotas
# aptget install quota
● Indicar las particiones en las que aplicaremos las quotas editando/etc/fstab y añadiendo las opciones
usrquota,grpquota
no hay que preocuparse.
Ahora el comando
# quotaon /home # activará por fin la quota
Editar la quota de los usuarios
Antes de nada deberíais saber que existen dos tipos de cuota:
1. Cuotas rígidas: no será posible superar el límite y será negado el acceso.
2. Cuotas flexibles: se pueden superar y el usuario sólo recibirá un aviso de límite excedido. Tras un período de
gracia por defecto 7 días, configurable por partición la cuota se volverá rígida.
Manos a la obra, en teoría sólo root puede hacer esto y el comando es el siguiente:
# edquota u usuario
entonces se nos mostrará una serie de registros con los siguientes campos:
1. Filesystem (el sistema de archivos en el que se aplica la cuota)
2. blocks (el número de bloques máximo a ocupar. 0 = ilimitados
3. soft (el número de KB máximo a ocupar para cuota flexible. 0 = ilimitado)
4. hard (el número de KB máximo a ocupar para quota rígida. 0 = ilimitado)
5. inodes (el número de archivos máximo. 0 = ilimitado)
● Podemos copiar la configuración de un usuario con las cuotas establecidas a otros con el comando:
# edquota p usuariomodelo usuario
La empresa contrata personal para las siguientes áreas:
Tecnología: Andres Perez y Jose Paredes,Publicidad: Anny Peralta, Gerencia: Vladimir Mejia, Contabilidad: Patricia Tavarez, Elvyn
Bolges y Roman Vasquez
Ejercicios
1. Crear los grupos señalados anteriormente.
2. Crear los usuarios y asignarlos a sus respectivos grupos. Crearles a cada uno fecha de expiración al 31 de diciembre.
3. Los usuarios de tecnología deben tener acceso a todos los directorios. Editar el archivo correspondiente para este fin.
4. Todos los UID de los usuarios creados deben empezar a partir de 1000. Por ejemplo, el UID de Andres sea 1001. Edite el
archivo correspondiente para este cambio.
5. Crear los directorios y asignarles los permisos y grupos correspondientes. Por defecto los permisos deben ser: usuarios: Lectura,
escritura y ejecución, Grupos: Lectura,escritura y ejecución, otros: ninguno.
6. La empresa prescindió de los servicios de Jose Paredes y transfirió a Elvyn Bolges a tecnología :
a) Saque una copia de seguridad de los datos de jose paredes y elimine su usuario y archivos.
b) Agregue a Elvyn Bolges al departamento de tecnología.
7. Edite el mensaje de inicio en el servidor para que cada usuario que ingrese le presente: “Bienvenido a nuestra area tecnológica,
por favor lea la documentación en su directorio home para que se acoja a nuestras políticas”
Preguntas
1. La empresa necesita que cada empleado nuevo tenga en su directorio home archivos informativos y de bienvenida de la empresa
así como uso y políticas de la parte tecnológica. En que directorio se colocarían estos archivos para que cuando cada usuario sea
creado se copien automáticamente ?.
2. Explique la importancia de las variables de entorno y como crearlas, exportarlas y ver los valores de estas
El principal fichero de configuración del servicio cron es /etc/crontab, en el que las órdenes se especifican mediante
líneas con el siguiente formato:
minuto hora día mes día_semana comando
No se tienen en cuenta las líneas en blanco y las líneas que comiencen por # se consideran comentarios, y se
ignorarán. El significado de los anteriores campos es el siguiente:
minuto: minuto dentro de una hora (059)
hora: hora dentro de un día (023)
día: día dentro del mes (131)
mes: mes dentro del año (112)
día_semana: día de la semana (06, siendo el domingo el 0)
comando: comando a ejecutar.
Un asterisco * en alguno de los campos se entenderá como todos los valores posibles. Por lo tanto, un * en el campo
mes se entenderá como que el comando se ejecuta todos los meses en el momento indicado en el resto de campos.
Así, por ejemplo:
0 * * * * sync
ejecutará el comando sync el primer minuto de cada hora. Y
0 23 10 * * sync
ejecutará el comando sync todos los días 10 de cada mes a las 11:00 de la noche. Un guión () entre los números
enteros indica un intervalo de números enteros.
Por ejemplo, 14 significa los números enteros 1, 2, 3 y 4. Una lista de valores separados por comas (,) especifica
una lista. Por ejemplo, 3, 4, 6, 8 indica esos cuatro números enteros. El valor de un número entero se puede omitir
dentro de un intervalo si se indica a continuación del intervalo lo siguiente /<número entero>. Por ejemplo, 059/3
puede usarse para definir cualquier minuto excepto el tercero del campo minuto. Los valores que se omiten también
pueden utilizarse junto con un asterisco. Por ejemplo, el valor */3 puede usarse en el campo de mes para omitir el
tercer mes.
Los usuarios diferentes del superusuario pueden configurar las tareas cron con la utilidad crontab. La sintaxis de
dicho comando es la siguiente:
crontab [u usuario] fichero
Los ficheros /etc/cron.allow y /etc/cron.deny se usan para restringir el acceso al servicio cron. El formato de los dos
ficheros de acceso es un nombre de usuario en cada línea. No está permitido espacio en blanco en ninguno de los
ficheros. Si existe el fichero cron.allow, tan sólo se permitirá a los usuarios presentes en la lista utilizar cron y el
fichero cron.deny se ignorará. Si cron.allow no existe, los usuarios listados en cron.deny no pueden usar cron. El
usuario root puede utilizar siempre cron.
Práctica #2 “El comando CRONTAB”
El comando crontab se emplea para facilitar la información al demonio cron de los programas que hay programados
para ser ejecutados. Por medio de crontab podemos planificar la ejecucuón de comandos con cierta periodicidad.
Este comando utiliza el demonio cron que debe estar en ejecución si queremos que funcione correctamente el
comando crontab. Existe un fichero crontab para cada usuario, donde se especifican los comandos que esos usuarios
quieren que se ejecuten.
En el archivo crontab se encuentran las órdenes a ejecutar de forma periódica. Las órdenes se disponen en líneas con
el formato:
minuto hora día mes día_semana comando
No se tienen en cuenta las líneas en blanco y las líneas que comiencen por # se consideran comentarios, y se
ignorarán. El significado de los campos es el siguiente:
• minuto: especifica el minuto dentro de una hora (059)
• hora: especifica la hora dentro de un día (023)
• día: especifica el día dentro del mes (131)
• mes: especifica el mes dentro del año (112)
• día_semana: especifica el día de la semana (06, siendo el domingo el 0)
• comando: especifica el comando a ejecutar
Ejemplos de líneas del archivo crontab:
0 * * * * sync
Esto ejecutará el comando sync cada hora un el primer minuto.
0 23 10 * * sync
Esto ejecutará el comando sync todos los días 10 de cada mes a las 11:00 de la noche.
Nota: Para obtener una lista de las entradas actuales del comando crontab, utilice la opción l.
$ crontab l
Práctica #3 “El Demonio At”
Mientras que cron se usa para programar tareas, el comando at se emplea para programar una única tarea en un
tiempo específico. Para poder utilizar el comando at debe estar el paquete RPM at instalado y el demonio atd en
funcionamiento. La sintaxis del comando at es la siguiente:
at [f fichero] [opciones] fecha
El argumento fecha puede ajustarse a cualquiera de los siguientes formatos:
HH:MM Por ejemplo, 04:00 especifica 4:00 AM.
nombremes, día y año Por ejemplo, May 15 2004. El año es opcional.
MMDDYY, MM/DD/YY, o MM.DD.YY Por ejemplo, 011504 para el día 15 de Enero del año 2004.
Si se escribe el comando at con el argumento del tiempo pero se omite el fichero, se visualiza el “prompt” at>. A
continuación se escribe el comando a ejecutar, se pulsa <intro> y CtrlD. Se puede especificar más de un comando
escribiendo cada comando seguido de la tecla <intro>. Después de haber escrito todos los comandos, se pulsa
<intro> para obtener una línea en blanco y luego CtrlD.
Alternativamente, se puede introducir un “script” en el intérprete de comandos y escribir CtrlD en una línea en
blanco para salir. Entre las opciones adicionales de la línea de comandos de la orden at se incluyen:
f: Lee los comandos o “script” del shell desde un fichero en vez de ser en el intérprete de comandos.
m: Envía un correo al usuario cuando se ha completado la tarea.
v: Muestra la hora en la que la tarea será ejecutada.
El comando atrm elimina de la lista de tareas las que se especifican tras dicho comando (separadas entre ellas por un
blanco).
A continuación se muestran algunos ejemplos del uso del servicio at:
$ at 15:50 Feb 14
> mail castano –s REUNION < /dev/null
> CTRLD
job 6 at 20040214 15:50
$ atq
job 6 at 20040214 15:50
$ atrm 6
Los ficheros /etc/at.allow y /etc/at.deny pueden ser usados para restringir el acceso al comando at. El formato,
utilidad y política de funcionamiento de dichos ficheros es análoga que la de los ficheros /etc/cron.allow y
/etc/cron.deny, respectivamente, del servicio cron.
Programa el sistema para que el superusuario ejecute el siguiente comando durante 5 minutos seguidos de cada hora
de cada día de cada mes:
date >> /tmp/f.cron.out
Comprueba el correcto funcionamiento de la tarea programada observando el contenido incremental del fichero
/tmp/f.cron.out. Programa el sistema para que el superusuario borre los ficheros que aparezcan por
debajo de la jerarquía del directorio /tmp y que no hayan sido accedidos en los últimos 3 días, esto es,
find /tmp –atime +3 exec rm {} \;
La operación tendrá lugar de lunes a viernes a las 0:45 horas. Edita el fichero de tareas programadas por el
superusuario y elimina la primera tarea, esto es, la que ejecuta el comando date.
¿Cómo programaría el sistema un usuario distinto del superusuario para realizar a las 12 de la noche una copia de
seguridad del contenido de su directorio “home” mediante el comando
tar (tar zxvf /home/usuario/f.tgz /home/usuario)?
Deniega el permiso a ese usuario para que utilice el comando at y repite de nuevo la operación. ¿Qué ocurre?
Práctica #4 “El comando AT”
El comando at es para ejecutar un comando a una fecha y hora especificada. Si, por ejemplo, vas a dejar el ordenador encendido,
realizando una tarea, y quieres que luego realice una copia de seguridad, y después se apague, pero no vas a estar delante del ordenador:
se podría aplicar una serie de comandos at para que el sistema lo haga cuando ya no estés delante.
El comando at tiene la siguiente sintaxis:
at [hora] [fecha]
El comando at entonces se queda esperando a que el usuario introduzca la serie de comandos que se quiere ejecutar ese día y hora. Para
terminar de introducir comandos, hay que pulsar la combinación de teclas <CTRL+D>.
El comando at acepta horas con formato HH:MM para ejecutar un trabajo a una determinada hora del día. (Si esa hora ya ha pasado, se
asume que es del día siguiente.) Y fechas con el formato MMDDAA o MM/DD/AA o DD.MM.AA.
Aquí tenemos un ejemplo de un comando at:
[root@localhost root]# at 1700 7.7
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> echo "Acuérdate del cumpleaños de tu hermano!" > ~/recordatorio.txt
at> <CTRL+D>
job 1 at 20020707 17:00
# _
Lo que hará este ejemplo es crear un fichero en el directorio inicial del usuario que contenga el texto "la web es
www.codigolibre.org" . Esto pasará el siete de julio a las cinco de la tarde, como se ha especificado en el comando
at.
Práctica #5 “Realizar copias de seguridad con rsync”
Hay diferentes maneras de utilizar rsync en función de lo que necesitemos. Permite realizar copias locales, copias
desde y hasta un servidor que corra un demonio de rsync, copias desde y hasta un servidor utilizando un shell
remoto como transporte, y por último nos permite listar archivos de un servidor remoto. Todas estas características
nos permiten realizar multitud de posibilidades como copias locales, copias de servidores remotos, sistemas de
mirroring, mantenimiento sincronizado de sistemas de preproducción y producción, etc…
Qué es lo que queremos hacer
El ejemplo que vamos a desarrollar está basado en la utilización de un servidor remoto que corre un demonio de
rsync, que exporta diferentes árboles de directorios, llámados módulos. Vamos a utilizar un planteamiento típico
utilizando un servidor remoto rsync, pero sin utilizar ssh como transporte, ya que no se considera que la información
a transmitir requiera ese nivel de seguridad. Utilizaremos también un equipo local en el que queremos obtener una
réplica de lo que hay en los módulos exportados por el servidor de rsync.
Los backups que se realizan de esta forma son realmente una réplica de lo que hay en el servidor, por lo que si
tenemos algún problema bastará con subir los archivos o carpetas directamente.
Estas son las carpetas del servidor de las que queremos hacer copias:
Configuración del servidor
Vamos a ejecutar el demonio de rsync a partir del superdemonio xinetd, para lo cual debemos asegurarnos de que
está asociado al puerto 873/tcp dentro del archivo /etc/services. Para ello hay que comprobar que el archivo contiene
un línea como la siguiente:
rsync 873/tcp
Una vez hecho esto debemos activar el servicio dentro de xidentd. Si existe el archivo /etc/xinetd.d/rsync bastará con
activarlo poniendo la entrada disable a no, en caso de que el archivo no exista se puede crear con el siguiente
contenido
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = daemon
log_on_failure += USERID
}
Con esto ya tendríamos preparado el servidor de rsync para escuchar las peticiones entrantes, únicamente nos queda
configurar el servicio y relanzar xinetd para que comience a trabajar.
Para preparar la configuración del servidor debemos crear dos archivos, /etc/rsyncd.conf y /etc/rsyncd.secrets. El
primero de ellos contiene la configuración de los módulos exportados, mientras que el segundo contiene la
información de los usuarios que tienen permisos para realizar conexiones. Estos son los contenidos de cada archivo:
/etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
max connections = 1
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[www]
path = /www
comment = datos de www
use chroot = true
/etc/rsyncd.secrets
remote_user:thepass
El archivo rsyncd.conf se puede observar que se compone de una primera parte en la que se configuran parámetros
genéricos del servidor, y una segunda parte donde se muestra la configuración exacta de cada módulo exportado. En
la configuración se ha puesto por defecto que se use como usuario local nobody, y que se haga bajo un entorno
chroot por seguridad. Esto hace que por defecto cuando nos conectemos a un módulo lo hagamos con ese usuario, y
no podamos salir de él a otras zonas del servidor. Dentro de cada módulo se indica la carpeta a la que apunta, se dice
que únicamente se pueden leer archivos, mediante read only = true, pero no modificarlos ni crear nuevos. Se dice
también que si se socilita un listado de módulos al servidor estos estén ocultos, que se utilice como datos de
conexión un usuario de nombre remote_user cuyo password está en el archivo /etc/rsyncd.secrets, y que únicamente
se permitan conexiones desde la ip 111.111.111.111
En la configuración del segundo módulo se puede ver como se ha cambiado el usuario por defecto de nobody a
mysql, con el fin de poder realizar las copias de las bases de datos, ya que normalmente el usuario nobody no tendrá
permiso para leerlas.
Estos deberían ser lor permisos para ambos archivos:
rwrr 1 root root 472 Dec 31 14:01 /etc/rsyncd.conf
rwx 1 root root 21 Dec 31 14:00 /etc/rsyncd.secrets
Ahora ya podemos comenzar a configurar el equipo cliente.
Configuración del Cliente
Dentro de la carpeta /usr/local/backups creamos el archivo password.rsync, en el que escribimos el password con el
que queremos conectarnos al servidor rsync: thepass
Debemos darle permisos de sólo lectura para el usuario que vaya a ejecutar la copia.
bash# chmod 600 password.rsync
Ahora ya podemos probar la conexión al servidor, para ello lo más sencillo es pedirle que nos dé un listado de lo
exportable en uno de de los módulos, por ejemplo:
bash# rsync passwordfile=/usr/local/backups/password.rsync rsync://remote_user@servidor.web.com/www
Con esta orden el servidor nos contestará con el conjunto de archivos y carpetas disponibles en el módulo www. Si
quisiéramos que lo hiciera de manera recursiva, recorriendo las subcarpetas, deberíamos haberle pasado el
parámetro r. Hay que prestar atención a como acaba la información que pedimos al servidor. En este caso le estamos
pidiendo www, que es diferente que ponerle una barra al final em>www/. Si realizamos una copia a local a partir de
la primera opción se nos crearía una carpeta www y dentro el contenido de la misma, sin embargo con la segunda
opción se copiaría directamente el contenido de la carpeta.
Si el servicio no funciona disponemos de la opción de mirar el log del servidor /var/log/rsyncd.log para investigar
las posibles causas del problema. Conviene asegurarse de que el servicio está disponible en xinetd reiniciando éste si
es necesario, y que los datos de usuario son correctos.
Una vez probado que funciona el servicio podemos preparar un pequeño script que ejecute la petición al servidor
para cada módulo disponible. Este script podríamos luego incorporarlo a un cron, o modificarlo lo que hiciera falta
para montar copias totales semanales e incrementales diarias, hay información al respecto en las referencias al final
del artículo.
Creamos el archivo replica.sh (son tres líneas!!!!)
#/bin/sh
rsync arzvl passwordfile=/usr/local/backups/password.rsync rsync://remote_user@servidor.web.com/www
/usr/local/backups/replica_hosting
rsync arzvl passwordfile=/usr/local/backups/password.rsync rsync://remote_user@servidor.web.com/mysql
/usr/local/backups/replica_hosting
Escenarios
2 La empresa Nuñez cuenta con datos almacenados en las carpetas compartidas en el servidor los cuales, deben hacerse copias de
seguridad constantemente. Las carpetas son:
a. Directorio Tecnología: /data/tecnologia
b. Directorio publicidad: /data/publicidad
c. Directorio gerencia: /data/gerencia
d. Directorio contabilidad: /data/contabilidad
Se necesita crear copias de seguridad para cada uno de estos directorios. A diferencia de las otras carpetas, el directorio de contabilidad
constantemente se modifica por lo que se hace necesario hacerles copia cada hora.
Ejercicios
1. Crear una tarea diaria a las 11pm para comprimir el directorio de tecnología y colocarlo en /data/backup/
2. Crear una tarea diaria a las 11pm para comprimir el directorio de publicidad y colocarlo en /data/backup/
3. Crear una tarea diaria a las 11pm para comprimir el directorio de gerencia y colocarlo en /data/backup/
4. Crear una tarea cada hora para comprimir el directorio de contabilidad y colocarlo en /data/backup/
5. Crear una tarea semanal a las 0300am para todas las carpetas anteriores y colocarlo en /data/backup/semanal.
6. Verificar que estas tareas se han programado correctamente.
Debido a un proceso de auditoría en el área contable el día 22 de enero, los datos incrementaron mas de lo normal por lo que se hace
necesario hacer copia de seguridad.
Ejercicios
1. Emplee at para programar la copia a las 10:25am del dia 22 de enero y copiarlo en /data/backup/original.
2. verifique que se programo a la hora deseada. De no ser asi, eliminar el job y crearlo nuevamente.
Se adquirio un sistema de unidad externo de cintas para las copias de seguridad. Este dispositivo fue detectado en /dev/ftape.
Ejercicios
1. Hacer copia de seguridad con cpio o afio a las carpetas /etc /var/ /home /usr y enviarlas a la unidad de backup externa.
2. Programar esta tarea para ser realizada todos los dias a las 0500am.
3. Al inicio del dia recuerde cambiar la cinta de backup. Necesitara:
1. Rebobinar la cinta y expulsarla. Indique el comando para hacerlo.
2. Imprima el status de la cinta.
1. Que significa la entrada 22 10 * * 7 en crontab ?
2. Que significa at now +1 hour?
3. Explique “at noon”
4. Explique “at midnight”
5. Explique tar xvzf jose.tar.gz C /home/jose
6. Explique find /etc/* |afio ovb > /dev/ftape
Práctica #6 “El syslog”
El syslog es un utilitario para revisar y supervisar todos los mensajes del sistema escritos a bitacoras llamados log de
información que van desde simple mensajes a de importancia critica. Cada mensaje del sistema enviado al servidor
de logs es asociado con una etica para que sea mas facil de manejar.
• La primera etica contienen la funcion o aplicación que lo genero.
• La segunda describe el nivel del 07 de urgencia del mensaje.
El archivo /etc/syslog.conf
Los archivos a los cuales syslog escribe cada tipo de mensaje se estable en el archivo de configuración
/etc/syslog.conf. Este archivo contiene dos columnas. La primera lista las aplicaciones y la severidad del mensaje y
la segunda lista donde debemos escribir o loggear el mensaje. Por defecto las distros populares de GNU/Linux
vienen para escribir las mayorias de los mensajes el el archivo /var/log/messages. aquí un ejemplo:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
En este caso, todos los mensajes de mivel "info" y mas seran almacenados, pero ninguno de los sistemas de mail,
cron o autenticacion. Podemos hacer esto aun mas sensitivo si reemplazamos esta linea con una para que capture
todos los mensajes desde debug para arriba en el archivo /var/log/messages. Este escenario es mas adecuado para
cuando estamos depurando aplicaciones y servicios.
*.debug /var/log/messages
En este ejemplo, todos los mensajes de severidad debug; excepto auth, authpriv, news y mail; se almacenaran en el
archivo /var/log/debug en modo cache. Note como usted puede distribuir la configuracion en mas de una linea
utilizando el simbolo de (\) al final de cada linea.
*.=debug;\
auth,authpriv.none;\
news.none;mail.none /var/log/debug
Podemos inclusive enviar algunos tipos de mensajes para la pantallas en las cuales los usuarios se encuentran
ingresados. En este ejemplo los mensajes de emergency y mas disparan este tipo de notificacion. La definicion del
archivo es simplemente reemplazado por un asterisco para hacer que esto suceda.
*.emerg *
Es cierto que algunosas aplicaciones escribiran sus logs a archivos y directorios independiente del archivo
syslog.conf. aquí algunos ejemplos:
Files:
/var/log/maillog : Mail
/var/log/httpd/access_log : Apache web server page access logs
Directories:
/var/log
/var/log/samba : Samba messages
/var/log/mrtg : MRTG messages
/var/log/httpd : Apache webserver messages
Activar cambios en archivo de configuración syslog
Los cambios a /etc/syslog.conf tomaran efecto la proxima vez que reiniciemos a syslog. Ejecute este comando para
efectuar esta accion:
# /etc/init.d/syslog restart
Como supervisar cambios interactivamente
Si deseamos que las nuevas entradas al log se nos presenten en pantalla en el momento que ocurren solo debemos
ejecutar el siguiente comando:
# tail f /var/log/messages
Comandos similar a este pueden ser aplicados a todos los archivos log. Esta es una de las mejores herramientas
disponibles en GNU/Linux. Otro comando importante ademas de tail es grep, este comando le buscara en los logs
por la ocurrencia de la cadena de texto en cuestion; usted puede filtrar la salida por tuberia al comando more para
ver la informacion una pantalla a la vez; asi:
Usted puede además simplemente usar more o less para simplemente desplegar una pantalla a la vez de su archivo
log por completo, así:
# more /var/log/messages
Enviar Mensajes de syslog a Servidor Remoto
Es muy buena practica enviar los mensajes del sistema a un servidor remoto por razones de seguridad. Con todos los
mensajes de los logs en un solo ordenador se facilita correlacionar problemas en toda la estructura de la empresa.
Configurar el Servidor de Syslog en GNU/Linux
Por defecto el syslog no recibe mensajes desde clientes remotos. Como ya hemos visto, el syslog revisa el archivo de
configuracion /etc/syslog.conf para determinar sus parametros. Para que Syslog escuche por mensajes remotos
debemos activar la opcion r en SYSLOGD_OPTIONS.
# Options to syslogd
# m 0 disables 'MARK' messages.
# r enables logging from remote machines
# x disables DNS lookups on messages received with r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="m 0 r"
# Options to klogd
# 2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="2"
Note: In Debian / Ubuntu systems you have to edit the syslog startup script /etc/init.d/sysklogd directly and make the
SYSLOGD variable definition become "r".
# Options for start/restart the daemons
# For remote UDP logging use SYSLOGD="r"
#
#SYSLOGD="u syslog"
SYSLOGD="r"
Luego de este cambio debera reiniciar el el servidor. El servidor abrira el puerto UDP 514, lo que podemos verificar
de varias maneras con el comando netstat.
Configurar el cliente de GNU/Linux
Ya con el servidor esperando recibir mensajes, necesitamos poder configurar el cliente remoto para que envie sus
mensajes al servidor. Esto se logra editando el archivo /etc/hosts en el cliente de GNU/Linux. Estos son los pasos:
1) Determine la direccion IP y el FQDN del su host remoto que desea enviar los mensajes.
2) Agregue una entrada en el archivo /etc/hosts en el siguiente formato:
IPaddress fullyqualifieddomainname hostname "loghost"
Ejemplo:
192.168.1.100 fcld.codigolibre.org fcld loghost
Ahora su archivo /etc/hosts tiene un sobre nombre de "loghost" para el servidor fcld.
3) El próximo paso seria editar su archivo /etc/syslog.conf para que los mensajes de syslog se envíen a su nuevo
nombre de host, llámese en este caso loghost.
*.debug @loghost
*.debug /var/log/messages
Con este paso usted acaba de configurar que todos sus mensajes de jerarquía superior a debug sean enviados al
servidor fcld ("loghost") y al archivo local /var/log/messages. Recuerde reiniciar el syslog para que se inicie la
acción.
Ahora como prueba puede efectuar lo siguiente para comprobar que el servidor esta recibiendo los mensajes con esta
simple prueba de reiniciar su servidor de impresoras lpd y verificar que el server esta recibiendo los mensajes.
En el cliente GNU/Linux
# /etc/init.d/lpd restart
Stopping lpd: [ OK ]
Starting lpd: [ OK ]
En el Servidor GNU/Linux
# tail /var/log/messages
...
...
Apr 11 22:09:35 cliente lpd: lpd shutdown succeeded
Apr 11 22:09:39 cliente lpd: lpd startup succeeded
...
...
#
El archivo /etc/logrotate.conf
Este es el archivo de configuración general, en el cual se puede indicar la frequencia de rotacion y reuso.
• Podemos especificar parámetros de rotación semanales o diarios.
• El parámetro de rotation especifica el numero de copias que se almacenaran.
• El parámetro create creara un nuevo archivo log luego de cada rotación.
Tomado esto en cuenta, un archivo de configuración tomando como parámetro de crear archivos diarios de todos los
archivos logs y almacenarlo por siete días. Nombrando los archivos con el nombre archivo_log y la versión actual,
seria así:
archivo_log
archivo_log.0
archivo_log.1
archivo_log.2
archivo_log.3
archivo_log.4
archivo_log.5
archivo_log.6
Contenido del ejemplo de /etc/logrotate.conf
# rotatacion semanal de los archivos log
#weekly
# rotación diaria de los archivos log
daily
# Mantener 4 semanas de archivos logs anteriores.
#rotate 4
# Mantener 7 días de archivos logs anteriores
rotate 7
# crear un nuevo y vacío archivo log después de rotar los viejos
create
El directorio /etc/logrotate.d
La mayoría de aplicaciones que corren sobre GNULinux que utilizan el syslog colocaran archivos de configuración
adicionales en esta carpeta. Es buena practica siempre revisar esta carpeta para que las aplicaciones que usted desea
que usen el syslog tengan sus archivos de configuración en esta carpeta. aquí ejemplos de archivos que definen
archivos en específicos para ser rotados para cada aplicación.
Nota: En sistemas basados en Debian, como es Ubuntu el script /etc/cron.daily/sysklogd lee el archivo
/etc/syslog.conf y rota cualquier archivo que encuentra en este ya configurado. Esto elimina la necesidad de crear un
archivo de configuración de rotación para los archivos comunes del sistema de log en el directorio /etc/logrotate.d.
Como el script reside en el directorio /etc/cron.daily este automáticamente se ejecuta cada 24 horas. En sistema
basados en RedHat, como en el caso de Fedora / CentOS este script daily es reemplazado por
/etc/cron.daily/logrotate el cual no utiliza el contenido del archivo de configuración del syslog, este depende en su
mayoría del contenido del directorio /etc/logrotate.d.
Activar el logrotate
Lo que se estableció en la sección del anterior del logrotate hasta que no ejecute el siguiente comando:
# logrotate f
Si desea que logrotate solo recargue un archivo de configuración en especifico, y no todos, entonces ejecute ael
comando logrotate con el archivo que desea cargar como argumento así:
# logrotate f /etc/logrotate.d/syslog
Comprimir sus archivos Log
En servidor muy ocupados como son los de sitios Web el tamaño de sus archivos log puede incrementarse fuera de
control. Comprimirlos es logrado activando una opción el el archivo de configuración logrotate.conf y agregándole
una opción de compresión.
#
# File: /etc/logrotate.conf
# Activate log compression / Activvar compresion de los logs
compress
Los archivos logs entonces serán comprimidos en formato gzip utilizando este utilitario que debe estar previamente
instalado, cada archivo tendrá la extensión .gz.
# ls /var/log/messages*
/var/log/messages /var/log/messages.1.gz /var/log/messages.2.gz
Para poder ver sus contenidos tendremos que usar el utilitario zcat desde la linea de comandos y desplegar sus
contenidos en pantalla. Ejemplo.
# zcat /var/log/messages.1.gz
...
...
Práctica #8 “Intercambiando consolas con screen”
El programa screen permite ejecutar múltiples terminales virtuales, cada una con su intérprete de comandos
interactivo, en una única terminal física o ventana que emule un terminal. Incluso si utiliza consolas virtuales Linux
o múltiples ventanas xterm, merece la pena experimentar con screen por sus amplias funcionalidades que incluye:
• navegación por el histórico de comandos,
• copiar y pegar,
• registro de accesos al sistema,
• entrada de caracteres especiales y
• la capacidad de separar una sesión entera de screen del terminal para recuperarla posteriormente.
1 Acceso remoto
Si frecuentemente se conecta a una máquina Linux desde un terminal remoto o usando el terminal VT100, screen le
facilitará muchísimo las cosas.
• Supongamos que estamos conectado a la red mediante una conexión telefónica ejecutando una sesión
compleja de screen con editores y otros programas abiertos en diversas ventanas.
• De repente necesita abandonar su terminal, pero no deseamos perder nuestro trabajo al colgar la línea.
• Simplemente teclee ^A d para separar las sesión y desconéctese (o aún más rápido, teclee ^A DD para que
screen se separe y se desconecte por sí misma)
• Cuando se conecte nuevamente, escriba el comando screen r y screen mágicamente automáticamente
recuperará todas las ventanas que había abierto.
Éste es sólo una pequeña muestra de los comandos y características de screen. Si hay algo que desea que screen
haga, ¡existe una gran posibilidad que pueda hacerlo!. screen(1) para más detalles.
3 Tecla de retroceso y/o CtrlH en un sesión de screen
Si comprueba que la tecla de retroceso y/o CtrlH no funciona correctamente cuando ejecuta screen, edite el archivo
/etc/screenrc, localice la línea
bindkey k kb stuff "\177"
y coméntela (es decir, agréguele el carácter "#" al principio).
4 Programa para X equivalente a screen
Consulte xmove. Véase xmove(1).