El Comando rm en Linux, ¿cómo usarlo?
En este artículo vamos a tratar el comando rm en Linux, un comando con el que hemos de tener cuidado pues rm viene de remove, es decir, remover o eliminar.
Cuando decidimos pasar a un servidor virtual VPS o a un Dedicado, nos encontramos con un dilema si no sabemos administrarlo, nos enfrentamos a si decidimos o no contratar a un administrador de sistemas, si no disponemos de fondos para ello, deberemos administrarlo nosotros mismos, lo que supone consecuencias de las que sólo el usuario se hará responsable.
Todos sabemos que para administrar un Servidor, es vital saber utilizar los comandos, pues serán estos los que nos faciliten las cosas a la hora de movernos por el servidor, si bien es cierto que podemos usar paneles de control como cPanel, no todo se puede hacer desde ahí. Hay cosas que nos guste o no, tendremos que hacerlas con líneas de comandos.
Entre muchos y muchos comandos, hoy vamos a tratar el comando rm, un comando para eliminar vamos a decir “cosas”.
* Sobre todo, mucho cuidado al utilizar este comando.
Opciones del comando rm
Antes de entrar en el uso de este comando, vamos a definir algunas de las opciones que podemos utilizar con este comando, las más comunes, y plantearemos un ejemplo para que se entienda a la perfección.
-r, Procesa subdirectorios de forma recursiva.
-i, Pide confirmación para cada borrado.
-f, Forzado, ignora archivos no existentes y elimina cualquier aviso de confirmación.
-v, Muestra el nombre de cada fichero antes de borrarlo
Bien, una vez hemos mencionado las opciones vamos a poner un ejemplo práctico.
CASO1: Imaginemos que en /home tenemos una carptea que se llama contenido, y vamos a imaginarla con una subcarpeta y un arvhivo dentro de ella.
/home/contenido/subc1/hola.txt
Si quisieramos eliminar sólo el archivo hola.txt tendríamos dos opciones. La primera sería acceder al Nivel dónde se encuentra dicho archivo y luego ejecutar rm + el nombre del archivo
cd /home/contenido/subc1
rm hola.txt
Y la segunda sería hacero directamente desde cualquier punto en el que nos encontremos (más rápido si sabemos la ruta exacta)
rm /home/contenido/subc1/hola.txt
CASO2: Imaginemos ahora en lugar de querer eliminar hola.txt, queremos eliminar la carpeta contenido y todo lo que haya dentro de ésta.
rm -r /home/contenido así eliminaríamos la carpeta pero nos preguntaría siempre si queremos borrar lo que contiene uno a uno
Si estamos seguros desde el principio de que queremos eliminar lo que contiene y no queremos que nos pregunte le añadiremos la opción -f de esat forma
rm -rf /home/contenido
Como podéis ver, es un comando con varias posibilidades, pero no siempre podremos hacerlo servir, hay casos en los que podemos tener un directorio con muchos archivos, y hablo de muuuuchos y que al lanzar el comando rm nos devuelva un error como este (en inglés y en español)
/bin/rm: Argument list too long
/bin/rm: La lista de argumentos es demasiado larga
Esto se debe a que hay demasiados archivos siendo repetitivo, y la solución a nuestros problemas está en el comando find, si con rm había que tener cuidado, con este comando hay que estar muy atentos, con todos los sentidos puestos en lo que hacemos, pues si lo ejecutamos en el directorio equivocado, la podemos liar parda :).
Bien, vamos a imaginar este escenario con un cliente o usuario o cómo queráis llamarlo:
Tenemos un cliente que recibe SPAM y más SPAM, pero no 3 o 4 mails al día, sino miles, tantos que tiene poco más de medio millón de archivos en su carpeta de correo. El primer intento para vaciar esa carpeta ha sido con el comando rm con su variación “*”, pero la consola nos ha devuelto el error “/bin/rm: La lista de argumentos es demasiado larga”.
Para entenderlo imaginemos que en su carpeta /cur existen esos 500.000 archvos y no queremos eliminar la carpeta, sino vaciar su contenido. Lo primero, sería entrar en ella con cd /cur y una vez en ella teclearíamos rm *, en el caso de que no hubiera muchos archivos esto funcionaría y se borraría el contenido y no habría más problema, pero… ¿qué pasa si recibimos el error?, que no cunda el pánico, esto lo solventamos con el comando siguiente:
find . -type f -delete
Pero eso no es todo, si antes de eliminar queremos saber el tamaño de lo que contiene la carpeta, desde un nivel anterior al directorio /cur , es decir, desde por ejemplo /mail introducimos
du -h /cur y sabremos el tamaño.
Si queremos saber suántos archivos vamos a eliminar y cuánto tiempo llevará hacerlo, podemos introducir dentro del directorio a eliminar
ls -1 | wc -l && time find . -type f -delete
También se puede mosrar los nombres de los archivos a medida que se van eliminando
find . -type d -print -delete
Ejecutando este comando, MUY IMPORTANTE, dentro de la carpeta que queremos vaciar, forzaremos el vaciado de los archivos que haya en ella, puede que tarde un poco, más bien, seguro que tarda un poco, pero es efectivo !
Pues con esto, damos por terminada la explicación del comando rm, sobre todo, por favor, tened mucho cuidado con su uso, y sobre todo, con este último comando, pues es el Terminator de archivos :).