Diversas formas de realizar el ‘kill’ con Linux

El comando Kill la mayor parte de las veces se usa sin argumentos o con el argumento -9 para acabar con un proceso. El comando kill puede usarse para enviar otras señales a un proceso. Algunas de ellas son variaciones en la finalización del proceso , y pueden ser usadas para obtener mas o menos información sobre los procesos.

* kill -0 pid: Esto efectivamente no mata el proceso, simplemente retorna 0 (ok) si el proceso finaliza y 1 (fail) en otro caso. El comando en si mismo no retorna ningún tipo de salida — debemos echar un vistazo al código de salida, usando echo $? para obtener la información. De esta forma escrito en una sola linea:

kill -0 1685; echo $?

retornará 0 if el proceso 1685 existe, y 1 en otro caso. Este tipo de comandos puede sernos util en fichero de script de shell por ejemplo en el caso de que tengamos un numero de proceso almacenado y quisieramos verificar si todavia esta corriendo el proceso.

* kill -9 pid: Muy posiblemente ya conozcas que se puede finalizar un proceso SI o SI. kill -KILL hace exactamente lo mismo pero tiene la ventaja de ser un pelin menos despiadado. El inconveniente de este comando es que tienes que teclear un par de caracteres mas.
* kill -HUP pid: Reinicia el proceso.
* kill -INT pid: Otra forma alternativa de matar un proceso, esta vez interrumpiendolo. Esta es una opción intermedia entre kill y kill -9.
* kill -ABRT pid: Para tu programa y le fuerza a realizar un volcado del nucleo si es posible/apropiado. (kill -6 un sinonimo.) Esto puede ser util si el proceso no esta comportandose como debiera, y queremos obtener informacion para depurar.

Saludos a todos.

Recuperar ficheros borrados en Linux usando lsof

Una de las cosas mas bonitas que se pueden hacer con la versátil herramienta lsof es usarla para recuperar un fichero que acabas de borrar de forma accidental.

Un fichero en Linux esta apuntado por un inodo, que contiene la información del fichero (permisos, propietario y la localización de su contenido en el disco). La operación de borrado del fichero elimina el enlace, pero no el inodo en si mismo – if otro proceso tiene abierto el fichero, el inodo no se libera hasta que el otro proceso finaliza con él.

Para poder hacer la prueba podemos crearnos un fichero de texto(test.txt), lo salvamos y en el terminal ejecutamos algún comando que deje el fichero abierto, por ejemplo less test.txt. Ahora abrimos otro terminal y borramos test.txt con la orden rm test.txt. Una vez borrado si probamos con la orden ls test.txt obtendremos el siguiente mensaje de error:

eloy@ubuntuEEEBox:~$ ls test.txt
ls: no se puede acceder a test.txt: No existe el fichero ó directorio
eloy@ubuntuEEEBox:~$

El asunto es que el comando less todavía tiene referenciado el fichero test.txt. Esto podemos verificarlo mediante los siguientes comandos:

> lsof | grep test.txt
less 4607 eloy 4r REG 254,4 21 8880214 /home/juliet/test.txt (deleted)

Las columnas importantes son la segunda, que nos indica el PID del proceso que tiene el fichero abierto (4607), y la cuarta columna, que nos indica el descriptor del fichero (4). En esta situación, si echamos un vistazo en el directorio /proc, podremos encontrar todavía una referencia al inodo, desde la cual podemos restaurar el fichero original:

> ls -l /proc/4607/fd/4

lr-x—— 1 eloy  eloy 64 Apr 7 03:19
/proc/4607/fd/4 -> /home/eloy/test.txt (deleted)
> cp /proc/4607/fd/4 test.txt.bk

Nota: no se debe usar el flag -a con el comando cp, esto es debido a que con ese modificador se copiara el enlace simbólico roto, en vez de el fichero que nos interesa.

Ahora ya podemos verificar que la copia se ha realizado correctamente y que volvemos a tener el fichero en su estado actual.

Saludos a todos y hasta la próxima.

Cómo hacer un fichero gz a partir de una partición de un disco duro II

Continuando con este asunto, en el articulo inicial comentaba que no sabia muy bien que tenia que hacer con el fichero generado por el comando dd.

Bien, hoy he conseguido montar el fichero en un directorio, y parece que no tiene ningún misterio.

Así que podríamos resumir en lo siguiente. Una vez creado el fichero con la imagen del sistema que nos interesaba podemos hacer varias cosas con ella, a saber:

  • Podemos volver a escribir en una partición de disco la imagen realizada, restaurando de esta forma el sistema de ficheros en su totalidad
  • Podemos convertir ese fichero en una imagen iso y montarla y hacer con ella lo que nos de la gana, punto este interesante y el que voy a tratar en este pequeño artículo

Bien, después de dar un par de vueltas por internet, he logrado montar el fichero en /mnt/test. La verdad es que en mi caso, la imagen se corresponde con una partición oculta que contiene el sistema de recuperación de una máquina, y por lo tanto lo que me interesaba era su recuperación, montaje y posterior quemado en un dvd, ya que la imagen es de 8Gb.

Los pasos que he seguido para montar la imagen en la ubicación comentada han sido:

  • Descompresión del fichero part1.gz con el comando gunzip part1.gz, comando que genera un fichero denominado part1.gz
  • Renombrado del fichero part1 a part1.iso con el comando mv.
  • Montaje de fichero part1.iso con el comando mount:

    sudo mount -t auto -o loop ./part1.iso /mnt/test

Pues nada espero que estas notas sirvan a alguno para algo.

Saludos a todos y hasta la próxima.

Crear cd de repositorio para Ubuntu sin APToncd

El siguiente post trata de una solución bastante buena para todas las personas que no poseen conexión a internet, en otros casos que si poseen pero que es de muy bajo ancho de banda.

Los repositorios es un gran contenedor con software que puede ser facilmente instalado por medio de herramientas como APT,Synaptic o Aptitud, en este caso cuando poseemos conexión a Internet estos programas van a los servidores verifican que este disponible el paquete, lo descarga los instala y lo configura.

Vamos a crear un CD con paquetes, es decir que APT,Synaptic y Aptitude irán a buscar todos los paquetes que le solicitemos instalar a nuestro CD y no a Internet, como es muy claro eso servirá para reducir el tiempo necesario para la instalación de paquetes.

Primero que nada se hace necesario que tengas que instalado el mkisofs para poder hacer la imagen ISO.
Si no lo tienes instalado escribe

sudo apt-get install mkisofs

Cuando instalas una aplicación vía APT los paquetes que conforman la aplicación se guardan en el directorio:

/var/cache/apt/archives

Lo que hacemos será identificarnos como root, copiar esta carpeta a tu home y cambiarle el nombre a la carpeta:

cp -r /var/cache/apt/archives /home/usuario/
mv /home/usuario/archives /home/usuario/ubuntu_repositorios

Ahora bien, hay que darle un nombre a nuestro repositorio, para lo cual crearemos una carpeta (.disk) en donde se guardara esta información:

mkdir $/home/usuario/ubuntu_repositorios/.disk
echo “Mis Repositorios“`cat /etc/debian_version`” > /home/usuario/ubuntu_repositorios/.disk/info

Una vez terminado hay que crear el índice de los paquetes para que al momento de utilizar APT pueda encontrar los paquetes:

cd /home/usuario/ubuntu_repositorio
dpkg-scanpackages . /dev/null | gzip > Packages.gz

Si esto no funciona, es porque necesitas instalar sudo apt-get install dpkg-dev

Ahora que tenemos listo nuestro repositorio solo nos hace falta crear una imagen ISO para poder quemarla en un CD:

mkisofs -f -J -R -o /home/ubuntu_repositorio.iso .

Es importante que al momento de crear la imagen ISO te encuentres dentro de la carpeta donde se encuentran los repositorios (ubuntu_repositorios).

Ahora para asegurarnos que todo salio bien montamos la ISO y la agregamos a nuestros repositorios:

mount -o loop /home/usuario/ubuntu_repositorio.iso /cdrom
apt-cdrom –no-mount add

Perfecto ya tenemos el cd, bien puede ser un CD O DVD, dependerá del tamaño que tenga tu ISO.

aptitude install programa

En synaptic en el menú configuración busquen la opción repositorios y luego buscar la opción de agregar CD.

Bueno espero que haya sido de ayuda.

Cómo hacer un fichero gz a partir de una partición de un disco duro

Hola a todos,

Supongo que muchos de nosotros hemos pasado alguna vez por tener esta necesidad. Hoy me la he encontrado yo mismo.

Los detalles son, un familiar me pasa un PC que no usa para que haga lo que quiera con el, por supuesto el portátil en cuestión esta hecho una lastima.

Antes de hacer lo que quiera (poco se puede hacer, pero bueno) me pide que le saque cierta información del disco duro. Bien, un compañero de la oficina me ha dejado hoy un cable externo, para convertir un disco interno, en uno externo USB de una forma rápida. El cable tiene por un lado, la alimentación y por otro el bus sata/ide. Bien, el disco lo he conectado a mi Ubuntu y efectivamente el sistema ha detectado la conexión del mismo.

Ahora el asunto, antes de ponerme a enredar con el disco, era crear una imagen de lo que el disco contiene. En el directorio del sistema /dev/disk/by-id/ se puede apreciar la estructura del disco en cuestion:

lrwxrwxrwx 1 root root   9 2009-06-09 23:02 usb-ST916082_1AS_222257A27844-0:0 -> ../../sdg
lrwxrwxrwx 1 root root  10 2009-06-09 23:02 usb-ST916082_1AS_222257A27844-0:0-part1 -> ../../sdg1
lrwxrwxrwx 1 root root  10 2009-06-09 23:02 usb-ST916082_1AS_222257A27844-0:0-part2 -> ../../sdg2

Como podemos apreciar el disco tiene 2 particiones. En vez de hacer un fichero para el disco completo he decidido crear dos ficheros distintos, uno llamado part1.gz y otro llamado part2.gz.

Con el disco DESMONTADO y las particiones DESMONTADAS podemos proceder con la creación de los ficheros de “imagen”. Los comandos usados han sido

  • Para la primera partición : dd if=/dev/sdg1 |gzip –best>./part1.gz
  • Para la segunda partición : dd if=/dev/sdg2 |gzip –best>./part2.gz

El dividir el disco en 2 ficheros ha sido simple comodidad pues tambien podría haber hecho un gz del disco completo con el comando dd if=/dev/sdg |gzip –best>./hdfull.gz

Para otro dia dejo el como restaurar este fichero, pues no tengo muy claro que es lo que se puede hacer con él. Supongo que tendremos que pasar el fichero por el unzip y luego con la orden dd el fichero de entrada sera el fichero sin compresión y el fichero de salida la partición vacía sobre la que queramos volcar la información:

  • dd if=./part1 of=/dev/sdxx

O en una sola linea, seria algo similar a:

  • gunzip -c /mnt/imagen.gz | dd of=/dev/sdxx

Saludos a todos.