jueves, 21 de febrero de 2019

¿Cómo buscar archivos a traves de la consola en GNU/Linux?


     Lo primero que debemos saber es ¿Qué es find o comando find?

Find es un comando común en sistemas Unix que se utiliza para encontrar archivos en un determinado directorio a partir de diversas reglas de búsqueda, tales como nombre exacto de archivo, fecha de creación, tamaño, permisos, etc. llegando a ser muy flexible y una de las herramientas más útiles en la administración de sistemas cuando se sabe utilizar. En los sistemas GNU/Linux forma parte del paquete findutils.
Fuente: wikipedia

     Con el siguiente comando podremos buscar en todo nuestro sistema operativo algún archivo que no encontremos fácilmente a continuación el comando:

find / -name arch.txt

     Donde find es el comando el / es el directorio donde se buscara el archivo y donde -name le decimos a find que busque por nombre y arch.txt es el nombre del archivo a buscar.

     Búsquedas en múltiples directorios:

     Find es una herramienta que no se limita a la búsqueda en un solo directorio el mismo puede hacer búsquedas en múltiples directorios a continuación un ejemplo:

find /home/usuario/documentos /home/usuario/descargas -name arch.txt

     Búsquedas de acuerdo al tiempo de creación o modificación de los archivos.

     Se disponen aun de funciones más avanzadas para la realización de búsquedas a continuación una búsqueda de los archivos modificados los últimos 30 minutos:

find / -mmin -30 -type f

     Los modificados exactamente hace 30 minutos:

find / -mmin 30 -type f

     Si quieres buscar en un rango específico de minutos, con el siguiente ejemplo buscarías todos los directorios que hayan cambiado hace más de 10 minutos (+10) y menos de 30 (-30):


find / -mmin +10 -mmin -30 -type d

     Find ofrece varias opciones de búsqueda por tiempo, pero las principales son: -amin, -atime, -cmin, ctime, -mmin y -mtime. "min" es para periodos de minutos y "time" para periodos de 24 horas. Los que empiezan con "a" (access) indica el tiempo en que fue accedido (leido) por última vez un archivo. Los que empiezan con "c" (change) indica el tiempo que cambió por última vez el status de un archivo, por ejemplo sus permisos. Los que empiezan con "m" (modify) indica el tiempo en que fue modificado (escrito) por última vez un archivo. Una consideración a tener con las búsquedas -atime, -ctime y -mtime es que el tiempo se mide en periodos de 24 horas y estos son siempre truncados, con ejemplos es más claro:

find . -mtime 0  (busca archivos modificados entre ahora y hace un dia)
find . -mtime -1 (busca archivos modificados hace menos de un dia)
find . -atime 1  (busca archivos accedidos entre hace 24 y 48 horas)
find . -ctime +1 (busca archivos cuyo status haya cambiado hace más de 48 horas)

     Búsquedas de acuerdo al uso de almacenamiento en disco de los archivo.

Con find es muy fácil realizar búsquedas por tamaño, se indica con la opción -size, se aplican las mismas reglas para argumentos numéricos (+n -n n).

find /var/log -size +15000k -name "*.jpg" (busca archivos mayores a 15 megas del tipo jpg)

find $HOME -800c (busca en tu home todos los archivos menores a 800 bytes (799 realmente)

(archivos de tamaño comprendidos entre 1mb y 10mb)

find . -size +1000k -and -size -10000k

     Se admiten cuatro parámetros después del número en -size:

c = bytes
w = 2 byte words
k = kilobytes
b = 512-byte bloques

     Para buscar archivos vacíos puedes entonces hacer lo siguiente:

find . -size 0c

     (Aunque la opción -empty hace lo mismo más eficientemente)

find . -empty

     Cualquiera de los ejemplos anteriores dará un aburrido listado de los archivos y sus rutas. Si lo que quieres es realizar una acción (ejecutar un comando) sobre estos usa entonces la opción entonces -exec.

     Comparaciones -and, -or y -not.

     Find también incluye operadores booleanos que la hace una herramienta aun más últil:

find /home -name 'ventas*' -and -mmin 120

find /home -name 'reporte[_-]*' -not -user sergio

find /home -iname '*enero*' -or -group gerentes

     El primer ejemplo busca todos los archivos que comiencen con 'ventas' Y que hayan sido modificados o cambiados en las últimas dos horas (120 minutos).

     El segundo ejemplo busca todos los archivos que comiencen con 'reporte' y después siga un _ o un - y que NO pertenezcan al usuario sergio.

     El tercer ejemplo busca todos los archivos que contengan la palabra enero, Enero, ENERO, etc. (sin importar si lleva mayúsculas o minúsculas) O cualquier otro archivo que encuentre que pertenezca al grupo 'gerentes'.

     Estas opciones de booleanos tienen su correspondiente abreviatura: -and se puede indicar también como -a -or se puede indicar también como -o -not se puede indicar también como !

     Opción -exec para la ejecución de otros comandos.

     -exec permite ejecutar acciones sobre el resultado de cada línea o archivo devuelto por find, o en otras palabras permite incorporar comandos externos para ejecutar sobre cada resultado devuelto. Muy interesante.
     Asi por ejemplo, si queremos buscar todos los archivos mayores a 3 megas en /var y además mostrar su salida en formato ls, podemos hacer lo siguiente:

find /var -size +3000k -exec ls -lh {} \;

Después de ls -lh que nos devuelve una salida formateada de ls se indica la cadena '{}' que se sustituye por cada salida de find. No hay límite para lo que se puede lograr, asi por ejemplo, borrar todo lo mayor a un mega en /tmp.

find /tmp -size +1024k -exec rm -f {} \;

Por cierto si usas la versión GNU de find (y creo que todos los que usamos Linux la tenemos, compruébalo con find --version)), lo anterior también funciona directamente con la opción -delete:

find /tmp -size +3000k -delete (lo mismo que usar -exec con rm)


     Si te gustó esta entrada no dudes en realizar un donativo.


¿Cómo verificar y reparar sectores de disco dañados en linux? badblocks


Hay momentos en el cual ya despues de un largo tiempo de trabajo nuestro disco duro comienza a fallar o a generarse sectores dañados y necesitamos una aplicación que no ayude a encontrar esos sectores de disco dañados para alargar un poco la vida de nuestro disco en nuestro caso disponemos de una aplicación en linux muy util se llama badblocks.

Pero... ¿Qué es badblocks?.
Badblocks es una utilidad disponible para Linux que permite localizar y aislar los sectores defectuosos de una unidad de disco. Este programa genera una lista de los sectores dañados en el disco que puede ser leída por otros programas, como mkfs, a fin de evitar su uso y prevenir así problemas de corrupción y pérdida de datos. Es parte del proyecto e2fsprogs,​ y está disponible una versión portada a sistemas BSD.
Fuente: wikipedia
¿Cómo usarlo?.

Lo primero es la nomenclatura que usa linux para identificar nuestro disco duro la cual ejecutamos como administrador o root:

fdisk -l

     Luego sabiendo la nomenclatura o identificación de nuestro disco en este caso es /dev/sda, ejecutamos:

Forma no destructiva y recupera los sectores dañados en el que la información en el disco no será dañada:

badblocks -svnf /dev/sda

Donde le estamos indicando lo siguiente:
-s. Nos muestra el proceso de escaneo del disco, mostrándonos los sectores ya chequeados.
-v. Nos indica el modo de escritura utilizado.
-n. Nos pone en modo no destructivo, esto quiere decir que se recuperarán los sectores dañados y la información en el disco duro no será dañada o eliminada.
-f. Reparará los sectores dañados.

La opción f es para forzar la lectura y escritura en caso de que el disco este montado, el proceso es bastante lento y puedes durar inclusive varias horas dependiendo de la capacidad del disco duro.

Forma destructiva recupera los sectores dañados pero la información en el disco se pierde o es destruida:

badblocks -wvs /dev/sdb

– w: Modo escritura (destructivo).
-s. Nos muestra el proceso de escaneo del disco, mostrándonos los sectores ya chequeados.
-v. Nos indica el modo de escritura utilizado.

Es bueno verificar regularmente cada mes nuestro disco ejecutando.

badblock -s /dev/sda

Si te gusto esta entrada no dudes en realizar un donativo esto me permitirá dedicarle más tiempo al blog.