Mostrando entradas con la etiqueta Utilidades. Mostrar todas las entradas
Mostrando entradas con la etiqueta Utilidades. Mostrar todas las entradas

sábado, 17 de enero de 2009

Inicio de múltiples procesos en Linux (Multitarea en Linux)

Se puede iniciar la ejecución de un programa simplemente escribiendo el nombre en la linea de comandos y luego pulsando enter. Ese programa deja una huella en el sistema mientras está en ejecución, linux le asigna un PID, para poder gestionarlo.

ps -A
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 migration/1


Un proceso es un programa en ejecución y es distinto a un programa. Un programa es un conjunto de instrucciones, mientras que un proceso es dinámico porque usa los recursos del sistema. También un programa puede ejecutar varios procesos.

Los siguientes comandos son de multiusuario y multitarea.

at --> Ejecuta un comando cuando lo necesites, es un tiempo determinado
bach --> Ejecuta el comando cuando puede el sistema
kill --> Mata procesos
nice --> Ajusta la prioridad de un proceso antes de que empiece
cron --> Ejecuta comandos de forma planificada
nohup --> Permite que un proceso que se esta ejecutando, siga cuando desconectes.
renice --> Ajusta la prioridad del proceso mientras se ejecuta
ps --> Informa sobre el proceso


Para ejecutar un programa en segundo plano basta con colocarle el signo '&' detrás del nombre o los argumentos si tuviera.

lp miarchvo.txt &
[1] 690

Así inmediatamente después de ejecutar el programa, linux informa del PID del proceso para mantenerse informado sobre él, poder finalizarlo, cambiarle la prioridad, etc.

Otra forma de iniciar múltiples procesos es usar conducciones, este comando ejecuta tres procesos independientes a la vez y se hace separando los comandos por la barra vertical '|'.

dd if=/dev/sda2 of=/dev/sdb2 | find -name *.txt | lp

Se puede planificar un comando usando el comando 'at', cuando llegue el momento se ejecutará.

at 1:45 (enter)
at> rm archivo.txt (enter)

at>
(ctrl-D)
job 1 at 2009-01-18 01:45

Las tareas con 'batch' hacen que la carga del sistema esté más repartida, el proceso se ejecuta cuando la carga del sistema no es demasiado alta, el sistema decide cuando. Ctrl-D representa el 'fin de archivo'.

batch (enter)
at> rm ProgramadePuntosDIC.pdf
(enter)
at>
(ctrl-D)
job 5 at 2009-01-18 01:55


Como es normal, cuando un proceso padre es terminado, los procesos hijos finalizan, pero 'nohup' permite ejecutar el proceso aunque salga de su sesión. El proceso durará lo que sea necesario hasta que se ejecute y para ir monitorizando como se comporta el proceso lo haremos con el log que genera 'nohup.out'

nohup sort archivo.txt &
[1] 9286
nohup: ignoring input and appending output to «nohup.out»


Para asignar una prioridad 'nice' o reasignar prioridad 'renice', la prioridad predeterminada es 10 hasta un máximo de 19 y un mínimo de -20. El siguiente comando aplicaría la máxima prioridad.

nice -n 19 sort texto.dat &


Estos comandos ejecutan programas en el momento en el que nosotros se lo decimos a través de la linea de comandos, pero si necesitamos que los procesos sean repetitivos utilizaremos 'cron' y 'crontab' no entraré en el uso de estos archivos de momento.

Por último debemos conocer 'kill', es útil para terminar un programa que usa demasiado tiempo de CPU, lleva demasiado tiempo y no produce una salida, bloquea un terminal, no es necesario, etc...

El programa 'ps -A' visualiza todos los procesos que se están ejecutando en ese momento, es útil para localizar ese proceso que ya no necesitamos, y después:

kill PID

viernes, 16 de enero de 2009

Crear una magen del disco duro en linux y enviarlo por SSH

El comando de Linux 'dd' no puede faltar en nuestra caja de herramientas, se puede usar para hacer copias de seguridad, crear imágenes del disco duro entero o parte, siempre que el disco destino tenga la misma geometría.

Hay que tener cuidado con el orden de 'if' y 'of', en los siguientes ejemplos se quiere copiar sda a sdb. Copia del disco duro.

dd if=/dev/sda of=/dev/sdb bs=4096 conv=notrunc,noerror
dd if=/dev/sda of=/path/de/imagen bs=4096 conv=notrunc,noerror
dd if=/dev/sda | gzip > /path/de/imagen.gz bs=4096 conv=notrunc,noerror


Restauración de los datos de la imagen.

dd if=/path/de/imagen of=/dev/sda bs=4096 conv=notrunc,noerror
gzip -dc /path/de/imagen.gz | dd of=/dev/sda


Para crear la imagen de un CD se usaría bs=2048 ya que los sectores de los cds tienen 2048 bytes, una vez terminada la copia se podría montar.

dd if=/dev/hdc of=/home/nexus7/micd.iso bs=2048 conv=notrunc
mount -o loop /mnt/micd


o añadirlo a fstab para que se monte al arrancar el sistema.

/home/nexus7/micd.iso /mnt/micd iso9660 rw,user,noauto 0 0
Copiar el contenido de la memoria a un archivo.
dd if=/dev/mem of=/home/nexus7/memoria.bin bs=1024


Comprimir la imagen con gzip y enviarla por ssh a otro equipo, es este ejemplo es una partición del disco.

dd if=/dev/sda2 bs=1k conv=sync,noerror | gzip -c | ssh -c blowfish nexus7@192.170.2.3 "dd of=/home/nexus7/Documentos/Copia_seguridad/particiones/imagen.gz bs=1k"

Para hacer la copia de seguridad en otro equipo sin usar compresión ni un canal seguro como es SSH, se puede usar 'netcat', un programa que viene por defecto en casi todas las distribuciones de linux. El tamaño de bs es igual a un cilindro en un disco LBA. En los siguientes ejemplos la copia se hará en origen la primera y en destino la segunda.

dd if=/dev/sda bs=16065b | netcat IP_Destino 1234
netcat -l -p 1234 | dd of=/dev/sda bs=16065b


domingo, 4 de enero de 2009

Configuración de VNC

Configuración VNC en Linux
VNC (Virtual Network Computing) es una herramienta cliente/servidor muy útil para control remoto de escritorios, VNC es libre con licencia GPL, existen versiones para casi todos los sistemas operativos.

En primer lugar hay que generar el password de acceso y almacenarlo:

vncserver -auth /home/nexus8/.Xauthority

[root@nexus7 nexus7]# vncserver -auth /home/nexus8/.Xauthority New 'nexus7:1 (nexus7)' desktop is nexus7:1 Creating default startup script /root/.vnc/xstartup Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/nexus7:1.log
[root@nexus7 nexus7]#


Desde una ventana de terminal ejecutar:

vncpasswd

Solicitará una clave que más tarde se usará para el acceso a través de vncviewer.

Editar el archivo de configuración "vi /etc/sysconfig/vncservers"
-nolisten tcp, evita conexiones via tcp
-nohttpd, evita conexiones web
-localhost, evita conexiones vnc a través de localhost excepto si es a través de un canal seguro


...
VNCSERVERS="2:nexus8"
VNCSERVERARGS[2]="-geometry 1024x768 -nolisten tcp -nohttpd"


En la primera linea, el 2 significa que del puerto configurado es el 5900+2, el 5902 es el puerto que hay que abrir en el firewall. Después de configurar este archivo, lanzar el servicio y configurar su autoarranque para la siguiente sesión:

chkconfig vncserver on
service vncserver start

editar el siguiente archivo "vi /root/.vnc/xstartup" y descomentar la segunda y tercera linea dejándolo como el ejemplo, sin más cambios:

#!/bin/sh

vncconfig -iconic &
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &


reiniciar el servidor

service vncserver restart

y finalmente para conectar desde un cliente, bastaría con esto:

vncviewer ipDestino:2

viernes, 2 de enero de 2009

Las bondades de fuser

A veces al desmontar un dispositivo, por ejemplo un usb aparece el desagradable mensaje "El dispositivo está ocupado", no hay problema, con el comando de linux "fuser" podemos saber que o quien ocupa nuestro dispositivo o puerto.

Ejecutando "fuser" desde un terminal, si el recurso esta siendo usado, nos informa de quien y que proceso lo mantiene ocupado.

-a display unused files too
-c mounted FS
-f silently ignored (for POSIX compatibility)
-i ask before killing (ignored without -k)
-k kill processes accessing the named file
-l list available signal names
-m show all processes using the named filesystems
-n SPACE search in this name space (file, udp, or tcp)
-s silent operation
-SIGNAL send this signal instead of SIGKILL
-u display user IDs
-v verbose output
-V display version information
-4 search IPv4 sockets only
-6 search IPv6 sockets only
- reset options

udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]


Al reproducir una pelicula en un disco duro externo se produce un bloqueo, ejecutando "fuser -v -m /media/Lacie".

-v salida detallada
-m todos los procesos de la ruta asignada

[nexus6@nexus6 ~]$ fuser -v -m /media/LaCie/
USER PID ACCESS COMMAND
/media/LaCie/: nexus6 24499 f.... dragon


tenemos el ID del proceso que podriamos matar con:

kill 24499

pero añadiendo -k matamos el proceso directamente:

fuser -v -k -m /media/Lacie

fuser también nos puede informar de que proceso ocupa un puerto, en este caso el puerto 22, "fuser -v-n tcp 21":

[nexus6@nexus6 ~]$ fuser -v-n tcp 21
USER PID ACCESS COMMAND
21/tcp: nexus6 4321
F. raíz ... vsftpd

Vsftpd esta utilizando el puerto 21, con la opcion -k se puede terminar con el proceso.