Si necesitamos que un proceso se ejecute en segundo plano en nuestra shell activa o para evitar que se interrumpa si salimos de la shell (por ejemplo cuando estamos conectado con Putty al servidor y se desconecta el terminal)
# nohup proceso &
nohup : mantiene activo el proceso o el script que hemos iniciado aunque cierres la sesión de shell
& : hace que el proceso se ejecute en segundo plano hasta que termine
Para retornar al programa o proceso utilizamos: ‘fg’ o ‘exit’
La salida del programa que lanzamos con ‘nohup’, que normalmente se muestra en la terminal, se guarda en un fichero ‘nohup.out’ que se guarda en la ruta desde donde hemos lanzado nohup.
A veces necesitamos una solución para poder limitar el uso de CPU que hace una aplicación o proceso en nuestro sistema Linux. Hay aplicaciones devoradoras de tiempo de proceso. Aunque tenemos la posibilidad de configurar /etc/security/limits.conf para indicar ‘tiempo’ de uso de CPU, si queremos indicar valores en porcentajes, tenemos la utilidad ‘cpulimits’. Para instalarlo en sistemas Debian, Ubuntu:
Tenemos el programa en http://cpulimit.sourceforge.net
# tar zxf cpulimit-xxx.tar.gz
# cd cpulimit-xxx
# make
Con esto tenemos la aplicación cpulimit, que podemos copiar a /usr/bin
Algunos ejemplo de uso; por ejemplo para limitar por aplicación y que no utilice más del 60% de CPU:
# cpulimit -e firefox -l 60
Si queremos indicar el proceso :
# cpulimit -p 1420 -l 30
Podemos buscar el PID de la aplicación :
# ps aux | grep firefox
A veces necesitamos desactivar una cuenta de usuario en un servidor Linux, para que no se apueda acceder con ese usuario temporalmente. Hablamos de desactivar la cuenta, no de borrar usando el comando ‘userdel‘, que en ese caso elimina la cuenta del sistema, borrando del archivo :’/etc/passwd’ la configuración del usuario, y la contraseña cifrada en el archivo ‘/etc/shadow’. Además de eliminar los datos del usuario en : ‘/home/usuario’
Para desactivar de manera temporal un usuario en un sistema GNU/Linux, podemos usar el comando :
# passwd -l usuario
Que lo que hace es bloquear la cuenta que indicamos, por medio de poner el signo (!) delante de la contraseña cifrada, e impedir acceso con esa cuenta al sistema. Podemos también hacer lo mismo para bloquear un usuario, editando manualmente el archivo : ‘/etc/shadow’ , donde localizamos el nombre de usuario y en el segundo campo de datos, que es la contraseña cifrada insertamos el signo ‘*’. Con esto el usuario no puede tener acceso en el sistema
Para activar la cuenta de usuario que hemos bloqueado con el comando anterior usamos:
# passwd -u usuario
O en sus caso, eliminar el signo ‘*’ del fichero ‘/etc/shadow’ si lo editamos manualmente para bloquear al usuario o cuenta.
Poder acceder a nuestros servidores utilizando el par de claves pública/privada no es solo útil pra no tener que estar introduciendo la contraseña cada vez que accedemos, sino por que a lo mejor necesitamos ejecutar un script de shell que tiene que mover datos o ficheros entre servidores. Vamos a ver como hacerlo.
Crear las claves pública y privada
Lo hacemos desde el directorio $HOME del usuario del servidor
# ssh-keygen -b 4096 -t rsa
Se genera entonces las dos claves con el sistema RSA en el directorio oculto .ssh : $HOME/.ssh/id_rsa , $HOME/.ssh/id_rsa.pub
Copiamos la clave pública al servidor o host
Y esa clave la almacenamos en el fichero ‘authorized_keys, dentro de .ssh (los permisos tienen que ser 600 , es decir #chmod 600 .ssh/authorized_keys) Comprobar “muy importante”, que el direcorio oculto .ssh del directorio $HOME del usuario tenga los permisos a 700 (# chmod 700 $HOME/usuario/.ssh )
# scp .ssh/id_rsa.pub ip_servidor:.ssh/clave_new
# ssh ip_servidor
# cd .ssh/
# cat clave_new >> authorized_keys
# rm clave_new
La primera vez que se accede a un servidor se guarda su host_key en el fichero $HOME/.ssh/know_hosts.
Entonces ya podemos utilizar ssh y scp con ese servidor sin tener que proporcionar la clave en cada conexión. Esto lo tenemos que hacer con cada servidor, y sirve a la par también de forma recíproca.
Si queremos hacer lo mismo con un cliente Windows y estamos usando Putty para acceder vía ssh, en la web de Putyy tenemos la aplicación Puttygen , para generar el par de claves pública/privada. Hacemos lo mismo que lo anterior, añadir la clave pública a ‘authorized_keys’ del servidor. Pero copiamos la que viene indicada como : ‘ Public Key for pasting into openSSH authorized_keys file ‘ , no la que hemos guardado con el botón. Ver imagen.

Si necesitamos que un script o un comando o tarea se ejecute regularmente, usamos el planificador estándar de Linux ‘cron’ . Si queremos que algo susceda todos los días, o los sábados de cada mes a una hora eterminada, una tarea cron lo puede hacer por nosotros
El ‘demonio cron’ comprueba cada minuto si hay que hacer algo o si ha cambiado alguna tarea cron. Para añadir tareas al cron o ver las que contiene, se edita el fichero /etc/crontab [ o con el comando 'crontab -l', nos da la lista de tareas cron. Para editar 'crontab -e' (ojo! editamos las tareas del usuario con el que estamos logeado) ]
Cada línea del archivo crontab contiene la especificación del día/hora y el comando o script a ejecutar:
minuto hora día-del-mes mes día-de-la-semana comando
- minutos : valor entre 0 y 59
- hora : valor entre 0 y 23
- día-del-mes : 1 y 31
- mes : entre 1 y 12
- día-de-la-semana: entre 0 y 7 (0 y 7 es domingo)
- un (*) significa cualquier valor
- Dos valores separados por guión indica un rango. Por ejemplo 1-3 en campo mes, indica de Enero Marzo)
- Para indicar más de un valor, separar por comas
- el modificador (/) indica con su valor las unidades que se incrementa entre valores. Un valor en mes */4 , indica cada cuatro meses.
Algunos ejemplos :
5 * * * * rm /tmp/*.gif # elimina cada 5 minutos los archivos GIF
0 7 1 * * /home/usuario/copiadeseguridad.sh # ejecutar todos los primeros de mes un script (copia de seguridad) a las 7:00 de la mañana :
¿Quieres saber como enviar correo vía telnet, desde la consola Linux o Windows, conectando con un servidor de SMTP en internet
?
Establecemos una conexión al servidor al puerto 25
$ telnet ip.servidor 25
Si el servidor acepta la petición de conexión, te aparecerá un mensaje parecido a este :
220 aaa.bbb.ccc ESMTP Sendmail 8.7.6/8.7.3; Tue, 3 Feb 1998 16:45:30+0100
Y ahora la forma de crear un mensaje para enviar :
Primero saludar :
HELO una.ip.cualquiera (o dominio)
El servidor puede contestar algo como esto:
250 una.ip.cualquiera Hello una.ip.cualquiera [xxx.xxx.xxx], pleased to meet you
Ahora los siguientes comando , pulsando ‘Enter’ al final de cada línea:
MAIL FROM:
RCPT TO:
DATA
Subject: El tema del correo
A continuación el texto del mensaje.Después del “subject”, hay que hacer dos veces ‘enter’. Los los mensajes deben terminar con un punto en una línea sola.
.
QUIT
Y ya salimos de la conexión del servidor. Y podemos comprobar si hemos recibido el correo, y ver la cabecera de dicho correo nos muestra si informa de la ip de nuestra máquina o no.
Esto es muy útil también para comprobar si un servidor está en OPEN RELAY, cosa no recomendable pues puede ser utilizada como máquina para enviar spam.
+ Información :
http://es.wikipedia.org/wiki/Open_Relay
Hay una solución interesante para hacer esto. Utilizar sendEmail, que es un pequeño cliente de correo por SMTP y por eso podemos configurar o indicarle que servidor queremos que se encargue de enviar o dirigir nuestros email.
La web del proyecto : http://caspian.dotconf.net/menu/Software/SendEmail/
Se encuentra disponible para Linux, BSD, OS X, Windows 98, Windows NT, Windows 2000, & Windows XP, y es muy útil para incluirlo en un script de bash, si necesitamos enviar correo desde nuestro servidor. Es un script en Perl y por eso no necesitamos una instalación compilando. Solo descomprime el archivo y a utilizar. Permite usar servidores SMTP con autentificación.
Si queremos ver la ayuda : $ ./sendEmail –help
Para enviar un mensaje sencillo desde consola :
$ sendEmail -f remite@gmail.com -t fulanito@midominio.net -s servidor_smtp -u “Asunto email” -m “Cuerpo mensaje , saludos! ” -v
Si queremos enviar fichero adjunto :
$ sendEmail -f remite@gmail.com -t fulanito@midominio.net -s servidor_smtp -u “Asunto email” -m “Cuerpo mensaje , saludos! ” -a fichero.zip -v
Es una solución sencilla para servidores Linux en los que no queremos instalar y configurar
un MTA de correo como Sendmail o Exim, etc.
A base de practicar y practicar nos acordamos de forma natural, pero por si tenemos dudas, una pequeña guía para recordar no viene mal.
Con la utilidad ‘tar’ solo empaquetamos los ficheros, no se comprimen, para eso usamos gzip o se puede hacer en un paso como se indica aquí.
* Ficheros tar
Empaquetar: tar -cvf fichero.tar /directorio/a/comprimir/
Desempaquetar: tar -xvf fichero.tar
Ver contenido tar -tf archivo.tar
* Ficheros tar.gz
Comprimir: tar -czfv fichero.tar.gz ficheros
Descomprimir: tar -xzvf fichero.tar.gz
Ver contenido: tar -tzf fichero.tar.gz
Si quieres añadir una contraseña al archivo que se genera con zip, lo hacemos de la siguiente forma :
zip -P contraseña fichero.zip ficheros
* Ficheros zip
Comprimir: zip archivo.zip ficheros
Descomprimir: unzip archivo.zip
Ver contenido: unzip -v archivo.zip
A veces necesitamos enviar a un email un fichero o datos desde nuestro servidor Linux. Aquí dos métodos para hacer esto. Es necesario tener instalado el cliente de correo modo texto ‘Mutt’. Si no está instalado el paquete podemos obtenerlo de los repositorios con Yum o Aptitude, dependiendo de la distribución que tengamos instalada
1 – mutt -s “Cuerpo mensaje” -a /fichero.html myemail@dominio.com < /mailmessage.txt
2 – echo “Cuerpo mensaje” | mutt -s “Asunto ..” -a /path/to/file.tar.gz email@example.com
Más información sobre Mutt : http://es.wikipedia.org/wiki/Mutt
A veces se puede dar el problema : no tenemos o hemos olvidado la contraseña de ‘root’ y no podemos hacer nada en el servidor. Vamos a ver un método para poder cambiar la contraseña y solventar el problema (lo siguiente está probado en sitemas Red Hat, Fedora o CentOS)

Foto por http://www.flickr.com/photos/dthprod/
1- si el arranque (grub) no está protegido, hay que arrancar el sistema en modo “single” : Cuando aparece la pantalla de arranque de GNU Grub, seleccionamos versión del kernel y tecleamos la letra “e“. Aparece una lista de elementos para modificar. Nos ponemos en la línea que empieza por kernel y tecleamos “e” para modificar la línea. Vamos al final y ponemos “single” . pulsar [intro] para salir del modo edición , y volviendo a la pantalla de GRUB tecleamos “b” . El sistema arranca en modo ‘monousuario’ :: Cuando tenemos la consola y el prompt solo tenemos que escribir : passwd root. Nos pedirá entonces que introduzcamos una nueva contraseña. Solo hay que hacer un ‘reboot’ y tenemos la nueva contraseña habilitada.
2-si el menú de Grub está protegido por contraseña, tenemos otro método para hacer lo anterior. Arrancar el sistema desde un CD/DVD/USB-Stick con un sistema Linux con kernel superior a 2.6.0 :: Arrancamos el servidor y podemos seguir los pasos anteriores para acceder a consola en modo single por ejemplo.
Montamos el filesystem del disco local ( mount /dev/sda /mnt/ -t ext3 -o rw ) podemos utilizar el comando [fdisk -l] para saber que discos tenemos instalados. Ahora podemos modificar el fichero de paswwords directamente o los ficheros /etc/sudoers para tener acceso root.
Podemos hacer un chroot a nuestro antiguo filesystem para ‘hacer creer’ al sistema que hemos arrancado desde disco local : chroot /dev/sda /bin/bash, y ejecutamos comando ‘passwd root’.
Cuando terminamos con los cambios hacemos un ’sync’ (para hacer volcado de la memoria de disco), salimos de chroot y reiniciamos , quitando el CD/DVD/USB utilizado para el arranque. Con esto ya tenemos la password nueva.