Este tutorial se centra en cómo encontrar archivos en Linux utilizando los comandos de búsqueda y localización.
Como administrador del sistema, es una tarea muy común buscar un archivo específico en su sistema de archivos .
Sin embargo, a veces puede ser difícil encontrar archivos en un sistema Linux. sistema de archivos, especialmente si tiene docenas de usuarios diferentes.
Hay dos comandos que pueden ayudarlo a lograr su objetivo:buscar y localizar.
En este tutorial, veremos cómo usar esos comandos de manera efectiva y cómo se pueden ajustar para lograr lo que estamos buscando.
Buscar archivos usando el comando Buscar
La primera forma de buscar y ubicar archivos en un host Linux es usar el comando de búsqueda.
De forma predeterminada, el comando de búsqueda está disponible en todas las distribuciones y tiene la siguiente sintaxis
$ find <options> <path> <expression>
Consejo rápido :¿tiene algún problema para recordar si el camino o la expresión van primero?
Recuerda que para el grEP es E expresión x P ath, y encontrar es lo contrario, entonces P ath E expresión!
Buscar es un comando bastante poderoso ya que tiene muchas más opciones que el comando de localización.
Aquí están todas las posibilidades de la función de búsqueda en Linux.
Buscar archivos con buscar por nombre de archivo
El uso más común de la función de búsqueda es localizar archivos dados sus nombres de archivo .
$ find <path> -name <pattern>
La principal diferencia entre buscar y localizar cuando se trata de buscar archivos es que buscará nombres de archivo mientras que localizar buscará rutas al archivo.
Por ejemplo, si volvemos al ejemplo de nivel de ejecución que usamos antes, aquí se explica cómo buscar archivos de nivel de ejecución usando el comando de búsqueda.
$ find / -name runlevel*
¿Qué es la parte "2> /dev/null"?
Redirigí la salida de error a /dev/null usando la redirección de salida para evitar mensajes de error en la consola.
Encuentre archivos utilizando buscar por tipo de archivo
Como discutimos anteriormente en nuestro artículo sobre enlaces duros y suaves, a los archivos se les asignan tipos de archivo y se usa como una forma de diferenciarlos.
Aquí hay un resumen de todos los tipos de archivos usados en Linux.
- f :un archivo estándar
- d :una carpeta o directorio
- l :un enlace simbólico o enlace suave
- b :bloquear dispositivos (como un disco duro, por ejemplo)
- c :dispositivos de caracteres (puertos serie, tarjetas de sonido)
- p :tubería con nombre
- s :enchufe
Al conocer todos esos tipos de archivos, ahora puede buscar archivos por tipo de archivo con el comando de búsqueda.
$ find <path> -type <filetype>
Por ejemplo, si buscamos todos los enlaces simbólicos en el host, emitiríamos el siguiente comando.
$ find / -type l
Los parámetros se pueden combinar, por ejemplo, si busco todos los enlaces simbólicos cuyos nombres de archivo terminan en ".service" (para aislar todos los servicios systemd, por ejemplo), ejecutaría el siguiente comando.
$ find / -type l -name *.service
Buscar archivos usando un patrón (para extensiones)
De manera similar al comando de localización, puede encontrar archivos en Linux usando un patrón.
Como recordatorio, un patrón es una cadena que incluye caracteres globales (como *, ? o rangos).
Esta opción es especialmente útil cuando intenta encontrar archivos con una extensión, por ejemplo, archivos Javascript.
Para encontrar archivos en Linux usando un patrón, ejecute el siguiente comando
$ find <path> -name ".<extension>"
$ find / -name "*.js"
Archivos archivos en Linux por propietario
A veces, desea aislar archivos creados por un determinado usuario .
Al eliminar un usuario en su host, es posible que desee eliminar todos los archivos asociados con este usuario, por ejemplo.
A veces, los usuarios crean archivos fuera de su directorio de inicio y eliminar un directorio de inicio de usuario no es suficiente por sí solo.
Como consecuencia, para encontrar archivos creados por un determinado usuario en Linux, ejecute el siguiente comando
$ find <path> -user <user>
Por ejemplo, para encontrar todos los archivos propiedad de "john" en mi host, ejecutaría el siguiente comando.
$ find / -user john
Ahora, ¿qué pasa si quiero eliminar todos los archivos propiedad de john con un simple comando?
Se puede lograr fácilmente usando la bandera de eliminación.
$ find / -user john -delete
Buscar archivos en Linux por permisos
Con el comando de búsqueda, también puede encontrar y ubicar archivos que tienen ciertos permisos en su host.
$ find <path> -perm <permissions>
Como recordatorio, así es como funcionan los permisos de archivo en Linux.
Para encontrar todos los archivos que tienen permisos completos (un 777 dada la notación binaria), puede ejecutar el siguiente comando.
$ find / -perm 777
Puede ser bastante útil si, por razones de seguridad, desea inspeccionar si no hay archivos configurados con permisos completos en su sistema.
Buscar archivos con buscar por tamaño
Otra forma muy útil de encontrar y ubicar archivos en Linux es encontrar el comando de búsqueda con la opción de tamaño.
La opción de tamaño le permite buscar archivos que tengan exactamente el tamaño que está especificando, mayor que un tamaño específico o menor que un tamaño específico.
Para buscar archivos por tamaño, use el siguiente comando
$ find <path> -size <size>
El tamaño está definido por los siguientes prefijos:
- c :bytes
- b :bloques de 512 bytes
- k :kilobytes
- M :Megabytes
- G :Gigabytes
Puede especificar un "+" si está buscando archivos con un tamaño superior al especificado.
Por ejemplo, para encontrar archivos de más de 1 GB en su sistema, ejecute el siguiente comando
$ find / -size +1G
Para encontrar archivos de menos de 10 MB en su sistema , ejecuta el siguiente comando
$ find / -size -10M
Finalmente, para buscar archivos que sean exactamente el tamaño especificado en la consulta, no debe agregar ningún prefijo más o menos al comando.
$ find / -size 1024k
El comando recién definido encontrará todos los archivos que tengan exactamente 1024 Kb de tamaño en su host.
Buscar archivos en Linux por fecha de modificación
Con la búsqueda, también puede encontrar archivos con una fecha de modificación, reciente o no.
Este comando es muy útil y los administradores de sistemas lo utilizan con bastante frecuencia para buscar archivos o directorios que se hayan modificado recientemente.
Para buscar archivos usando buscar por fecha de modificación, ejecute el siguiente comando
$ find <path> -mtime <time>
Donde time representa los archivos modificados hace 24* .
Como consecuencia, el tiempo se expresa en días.
De manera similar a la opción de tamaño, puede agregar un "más ” o un “menos ” al operador tiempo para buscar archivos modificados hace más de
Por ejemplo, para buscar archivos modificados hace exactamente 3 horas , ejecutaría el siguiente comando.
$ find / -mtime 3
Para buscar archivos modificados hace más de una semana , ejecutaría el siguiente comando
$ find / -mtime +7
Para buscar archivos modificados hace menos de dos días , ejecutará el siguiente comando
$ find / -mtime -2
Buscar archivos con profundidad dinámica
Como probablemente haya notado, desde el comienzo de este tutorial, estamos dando ejemplos de búsquedas de archivos que comienzan desde el directorio raíz.
Como consecuencia, todas las carpetas se exploran recursivamente.
Sin embargo, podemos restringir la cantidad de directorios recorridos recursivamente desde un directorio, esto se denomina profundidad.
Para limitar las búsquedas de archivos a una profundidad determinada , ejecuta la siguiente consulta
$ find <path> -maxdepth <depth>
Como ejemplo, así es como puede restringir las búsquedas de archivos al directorio actual, sin que se exploren directorios secundarios.
$ find / -maxdepth 1
Obviamente, puede combinar este comando con el indicador de nombre para buscar archivos con un nombre determinado en el directorio actual.
$ find . -maxdepth 1 -name *.tar
Encadenamiento de búsqueda con -exec
En algunos casos, puede resultarle útil encadenar el comando de búsqueda con el de exec.
La opción exec se puede utilizar para encadenar varios comandos:tomando el resultado del primero como entrada del segundo.
Digamos, por ejemplo, que desea buscar todos los archivos modificados hace menos de un minuto
$ find /home/user -mmin -1
./file1
Ahora supongamos que desea eliminar todos los archivos que se modificaron hace menos de un minuto.
Puede encadenar el comando de búsqueda con la opción -exec usando esta sintaxis.
$ find /home/user -mmin -1 -exec echo rm -f '{}' \;
Obviamente, primero hacemos eco de los resultados, ya que queremos asegurarnos de que estamos eliminando los archivos correctos.
Cuando esté listo para eliminar esos archivos, simplemente elimine el comando echo.
$ find /home/user -mmin -1 -exec rm -f '{}' \;
Buscar archivos en Linux usando el comando Localizar
Otra excelente manera de buscar y ubicar archivos en Linux es usar el localizar comando.
Requisitos
Si el comando de localización no está disponible en su sistema, asegúrese de leer la siguiente sección para que la localización se ejecute en su sistema.
a:instalación de Locate en distribuciones basadas en APT y RPM
Para instalar ubicar , necesitará privilegios sudo en su host Linux.
Para comprobar si la localización está instalada en su host, ejecute el comando de localización en la línea de comandos.
$ locate
Si la localización está instalada en su computadora, esperará que se proporcione una expresión
Si la localización no está instalada en su host, se mostrará un mensaje de error
Para instalar la ubicación en Ubuntu 18.04 y Debian 10, ejecute el siguiente comando.
$ sudo apt-get install mlocate
Del mismo modo, si tiene una distribución basada en CentOS o Fedora, ejecute el siguiente comando para instalar la ubicación.
$ sudo yum install mlocate
b – Actualización de su base de datos mlocate
El localizar funciona con una base de datos local almacenada en su sistema de archivos que almacena cada nombre de archivo de su host.
Al realizar un comando de localización, la localización buscará en la base de datos preparada por updatedb para el archivo que está buscando.
Periódicamente, un trabajo cron actualiza el mlocate.db para que busque las entradas más recientes.
La base de datos se encuentra en /var/lib/mlocate/mlocate.db de forma predeterminada y el archivo de configuración de updatedb se almacena en /etc/updatedb.conf .
Por ahora, puede dejar las opciones predeterminadas y ejecutar un simple comando updatedb para que su base de datos se actualice.
$ sudo updatedb
Localizar archivos con un patrón de nombre
La forma más básica de encontrar archivos en Linux es proporcionar un patrón al comando de localización .
Por defecto, la sintaxis del comando de localización es la siguiente
$ locate [OPTION]... [PATTERN]...
Si está buscando un archivo de configuración determinado en su sistema, una manera fácil de encontrarlo es proporcionar su nombre de archivo completo al comando de localización.
$ locate updatedb.conf
Como puede ver, el comando de localización devuelve las rutas completas al archivo que estoy buscando.
Localizar archivos en directorios restringidos
A veces, es posible que no tenga acceso a algunos directorios de su sistema.
Como consecuencia, no podrá localizar los archivos que se encuentran en él.
Tomemos el ejemplo de una carpeta prohibida que contiene un archivo llamado "archivo restringido “.
Para localizar archivos ubicados en directorios restringidos, debe ejecutar el comando de localización con privilegios sudo.
$ sudo locate restricted-file
Ubicar archivos usando un patrón
Con el comando de localización, puede proporcionar "patrones" en forma de caracteres globales .
Personajes globulosos , también llamados comodines, son caracteres que se utilizan para hacer coincidir una o varias entradas con una expresión simplificada.
El más popular es el “* ” que coincidirá con cualquier carácter, incluido ninguno.
Aquí hay una tabla de recapitulación para los personajes globbing y sus funciones.
Comodín | Descripción | Ejemplo | Partidos | No coincide |
---|---|---|---|---|
* | coincide con cualquier número de caracteres incluyendo ninguno | devco* | devconnected, devcoco, devco.com | devdevco, |
[abc] | coincide con un carácter dado en el paréntesis | [ab]ab | aab, bab | cab |
[a-z] | coincide con un carácter del rango (dependiente de la configuración regional) dado entre paréntesis | runlevel[0-9] | runlevel1, runlevel2, runlevel6 | niveles de ejecución, nivel de ejecución |