Cómo usar las funciones Buscar y Localizar para buscar archivos en Linux

0 acciones
0
0
0
0

Introducción

Uno de los problemas que enfrentan los usuarios al aprender a trabajar con Linux es encontrar los archivos que buscan. Esta guía les mostrará cómo usar el comando encontrar Explica el nombre propio. Ayuda a buscar archivos en el sistema mediante diversos filtros y parámetros. También describe brevemente el comando. localizar que se puede utilizar para buscar archivos de una manera diferente.

Requisitos previos
  • Para seguir esta guía, necesitará acceder a un ordenador con un sistema operativo Linux. Puede ser un servidor privado virtual al que se conecte mediante SSH o su equipo local. Tenga en cuenta que este tutorial se verificó con un servidor Linux con Ubuntu 20.04, pero los ejemplos proporcionados deberían funcionar en cualquier ordenador con cualquier versión de Linux.

Buscar por nombre

La forma más obvia de buscar archivos es por su nombre. Para encontrar un archivo por nombre con el comando encontrar, debes utilizar el siguiente comando:

find -name "query"

Esto distinguirá entre mayúsculas y minúsculas, lo que significa que buscar la consulta será lo mismo que buscar Consulta Es diferente. Para buscar un archivo por nombre, pero sin distinguir entre mayúsculas y minúsculas, use la opción -iname:

find -iname "query"

Si desea encontrar todos los archivos que no se adhieren a un patrón específico, puede limitar la búsqueda con -no Contrarrestar:

find -not -name "query_to_avoid"

Alternativamente, puedes invertir la búsqueda usando un signo de exclamación (!), de la siguiente manera:

find \! -name "query_to_avoid"

Tenga en cuenta que si usa !, debe escapar el carácter con una barra invertida (\) antes de poder usarlo. encontrar puede interpretarlo, el shell no intenta interpretarlo.

Buscar por tipo

Con parámetro -tipo Puedes especificar los tipos de archivos que quieres buscar. Así funciona:

find -type type_descriptor query

A continuación se muestran algunos descriptores que puede utilizar para determinar el tipo de archivo:

  • f: Archivo regular
  • d: directorio
  • l: enlace simbólico
  • c: Dispositivos de caracteres
  • b: Bloquea dispositivos

Por ejemplo, si desea encontrar todos los dispositivos de caracteres en su sistema, puede emitir este comando:

find /dev -type c

Este comando solo busca específicamente dispositivos en la carpeta /dev, el directorio donde normalmente se instalan los archivos de dispositivos en los sistemas Linux:

Output
/dev/vcsa5
/dev/vcsu5
/dev/vcs5
/dev/vcsa4
/dev/vcsu4
/dev/vcs4
/dev/vcsa3
/dev/vcsu3
/dev/vcs3
/dev/vcsa2
/dev/vcsu2
/dev/vcs2
. . .

Puedes ver todos los archivos que .conf Busque archivos que terminen en . Este ejemplo encontrará los archivos coincidentes en la carpeta. /usr Búsquedas por:

find /usr -type f -name "*.conf"
Output
/usr/src/linux-headers-5.4.0-88-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-88-generic/include/config/tristate.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/tristate.conf
/usr/share/adduser/adduser.conf
/usr/share/ufw/ufw.conf
/usr/share/popularity-contest/default.conf
/usr/share/byobu/keybindings/tmux-screen-keys.conf
/usr/share/libc-bin/nsswitch.conf
/usr/share/rsyslog/50-default.conf
. . .

Filtrar por tiempo y tamaño

encontrar Le proporciona diferentes formas de filtrar resultados por tamaño y tiempo.

Tamaño

Usando el parámetro -tamaño Puedes filtrar archivos según su tamaño. Para ello, añade un sufijo especial al final de un valor numérico para indicar si el tamaño se mide en bytes, megabytes, gigabytes u otra unidad. Estos son algunos sufijos de tamaño comunes:

  • c: bytes
  • k: kilobyte
  • m: megabyte
  • g: gigabyte
  • b: bloques de 512 bytes

Para ilustrarlo, el siguiente comando encontrará cualquier archivo en el directorio /usr que tenga exactamente 50 bytes de longitud:

find /usr -size 50c

Para buscar archivos que tengan menos de 50 bytes, puede utilizar esta sintaxis:

find /usr -size -50c

Para buscar archivos en la carpeta /usr que sean mayores a 700 MB, puede usar este comando:

find /usr -size +700M
Tiempo

Para cada archivo del sistema, Linux almacena marcas de tiempo para la hora de acceso, la hora de modificación y la hora de modificación.

  • Hora de acceso: la última vez que se leyó o escribió un archivo.
  • Hora de modificación: La última vez que se modificó el contenido del archivo.
  • Hora de modificación: la última vez que se cambiaron los metadatos del inodo del archivo.

Usando las opciones atime- ,mtime- y -ctimePuedes basar tus búsquedas en estos parámetros. Para cada una de estas opciones, debes pasar un valor que indique cuántos días del pasado deseas buscar. Al igual que con las opciones de tamaño descritas anteriormente, puedes anteponer estas opciones con signos más o menos para especificar si son mayores o menores que.

Por ejemplo, para buscar archivos en la carpeta /usr que se modificaron el día anterior, ejecute el siguiente comando:

find /usr -mtime 1

Si desea archivos a los que accedió hace menos de un día, puede ejecutar este comando:

find /usr -atime -1

Para encontrar archivos cuyos metadatos se modificaron por última vez hace más de 3 días, puede ejecutar lo siguiente:

find /usr -ctime +3

Estas opciones también tienen parámetros adjuntos que puedes usar para especificar minutos en lugar de días:

find /usr -mmin -1

Esto mostrará los archivos que se modificaron la última vez.

encontrar También puede compararse con un archivo de referencia y devolver elementos más nuevos:

find / -newer reference_file

Esta sintaxis devuelve cualquier archivo del sistema que se haya creado o modificado recientemente en relación con el archivo de referencia.

Buscar por propietario y permisos

También puede buscar archivos por usuario o grupo propietario mediante los parámetros -user y -group. Para encontrar cualquier archivo en el directorio /var propiedad del usuario syslog, ejecute este comando:

find /var -user syslog

De manera similar, puede enumerar los archivos en el directorio /etc que pertenecen al grupo shadow escribiendo:

find /etc -group shadow

También puede buscar archivos con permisos específicos.

Si desea que coincida con un conjunto exacto de permisos, puede utilizar esta sintaxis, que especifica los permisos mediante notación octal:

find / -perm 644

Esto hace coincidir exactamente los archivos con los permisos especificados.

Si desea especificar algo con al menos estos permisos, puede preceder el símbolo de permisos con un signo menos:

find / -perm -644

Esto coincide con cualquier archivo con permisos adicionales. En este ejemplo, un archivo con permisos de 744 coincide.

Filtrado por profundidad

En esta sección, creará una estructura de directorios de ejemplo que usará para examinar el filtrado de archivos según su profundidad en la estructura. Si sigue los ejemplos de este tutorial, es recomendable crear estos archivos y directorios en la carpeta /tmp/. /tmp/ es un directorio temporal, lo que significa que todos los archivos y directorios que contenga se eliminarán la próxima vez que se inicie el servidor. Esto será útil para esta guía, ya que puede crear tantos directorios, archivos y enlaces como desee sin preocuparse de que bloqueen el sistema posteriormente. Después de ejecutar los comandos de esta sección, su directorio /tmp/ contendrá tres niveles de directorios, con diez directorios en el primer nivel. Cada directorio (incluido el directorio temporal) contendrá diez archivos y diez subdirectorios.

Cree una estructura de directorio de muestra en la carpeta /tmp/ con el siguiente comando:

mkdir -p /tmp/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}

Después de eso, rellene estos directorios con algunos archivos de muestra usando el comando touch:

touch /tmp/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}

Con estos archivos y directorios en su lugar, continúe y cambie al directorio test/ que acaba de crear:

cd /tmp/test

Para obtener una comprensión básica de cómo recuperar archivos de esta estructura, comience por buscar el nombre regular que coincida con cualquier archivo llamado file1:

find -name file1
Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
./level1dir7/level2dir8/level3dir6/file1
./level1dir7/level2dir8/level3dir5/file1
./level1dir7/level2dir8/file1
. . .

Esto producirá muchos resultados. Si canalizas la salida a un contador, verás que hay un total de 1111 resultados:

find -name file1 | wc -l
Output
1111

Probablemente sean demasiados resultados para serle útiles en la mayoría de las situaciones. Para limitarlos, puede especificar una profundidad de búsqueda máxima en la lista de búsqueda de nivel superior:

find -maxdepth num -name query

Para buscar el archivo1 solo en directorios de nivel 1 y superiores, puede especificar una profundidad máxima de 2 (1 para el directorio de nivel superior y 1 para los directorios de nivel 1):

find -maxdepth 2 -name file1
Output
./level1dir7/file1
./level1dir1/file1
./level1dir3/file1
./level1dir8/file1
./level1dir6/file1
./file1
./level1dir2/file1
./level1dir9/file1
./level1dir4/file1
./level1dir5/file1
./level1dir10/file1

Esta es una lista muy manejable.

También puedes especificar un directorio mínimo si sabes que todos los archivos de un punto determinado existen debajo del directorio actual:

find -mindepth num -name query

Puede usar esto para buscar solo archivos al final de las ramas del directorio:

find -mindepth 4 -name file1
Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
. . .

Nuevamente, devuelve una gran cantidad de resultados (1000) debido a la estructura de rama y archivo.

Puede combinar los parámetros de profundidad mínima y máxima para centrarse en un rango estrecho:

find -mindepth 2 -maxdepth 3 -name file1
Output
./level1dir7/level2dir8/file1
./level1dir7/level2dir5/file1
./level1dir7/level2dir7/file1
./level1dir7/level2dir2/file1
./level1dir7/level2dir10/file1
./level1dir7/level2dir6/file1
./level1dir7/level2dir3/file1
./level1dir7/level2dir4/file1
./level1dir7/file1
. . .

Combinar estas opciones de esta manera reducirá significativamente los resultados, y solo se devolverán 110 líneas en lugar de las 1000 líneas anteriores.

Ejecutar comandos para encontrar resultados

Puedes utilizar el parámetro -ejecutar Ejecute un comando auxiliar personalizado en cualquier cosa que coincida usando el siguiente comando:

find find_parameters -exec command_and_options {} \;

{} se utiliza como marcador de posición para los archivos que coinciden. \; nos permite saber dónde termina el comando.

Por ejemplo, suponiendo que todavía está en el directorio /test/ que creó en el paso anterior en la carpeta /tmp/, puede encontrar los archivos de la sección anterior que tenían 644 permisos y cambiarlos para que tengan 664 permisos:

find . -type f -perm 644 -exec chmod 664 {} \;

También puedes cambiar los permisos del directorio de manera similar:

find . -type d -perm 755 -exec chmod 700 {} \;

Este ejemplo busca cualquier directorio con permisos establecidos en 755 y luego cambia los permisos a 700.

Cómo encontrar archivos usando Localizar

Alternativa al uso encontrar Orden localizar Este comando suele ser más rápido y puede buscar en todo el sistema de archivos fácilmente.

Puede instalar el comando en Debian o Ubuntu con apt actualizando su lista de paquetes y luego instalando el paquete molocate:

sudo apt update
sudo apt install mlocate

En Rocky Linux, CentOS y otras distribuciones derivadas de RedHat, puede usar el comando dnf para instalar mlocate:

sudo dnf install mlocate

La razón por la que locate es más rápido que find es que depende de una base de datos que lista todos los archivos del sistema de archivos. Esta base de datos suele actualizarse diariamente con un script cron, pero puede actualizarse manualmente con el comando updatedb. Ahora ejecute este comando con privilegios de sudo:

sudo updatedb

Recuerde que, si desea buscar archivos nuevos, la base de datos de ubicaciones debe estar siempre actualizada. Si agrega archivos nuevos antes de que se ejecute el script cron o el comando updatedb, no aparecerán en los resultados de la consulta.

La ubicación permite filtrar los resultados de diversas maneras. La forma más básica de buscar archivos es usar esta sintaxis:

locate query

Esto buscará cualquier archivo o directorio que contenga la consulta de cadena en cualquier punto de su ruta. Para devolver solo los archivos cuyos nombres contengan la consulta, en lugar de los archivos que la contengan en los directorios que la contienen, puede agregar el indicador -b para buscar solo los archivos cuyo "nombre base" coincida con la consulta:

locate -b query

Para que la función locate solo devuelva resultados que aún existen en el sistema de archivos (es decir, archivos que no se han eliminado entre la última llamada updatedb y la llamada locate actual), use -e:

locate -e query

Puede recuperar estadísticas sobre la información donde aparece la ubicación utilizando la opción -S:

locate -S
Output
Database /var/lib/mlocate/mlocate.db:
21015 directories
136787 files
7727763 bytes in file names
3264413 bytes used to store database

Esto puede ser útil para obtener una comprensión de alto nivel de la cantidad de archivos y directorios en su sistema.

Resultado

Tanto find como locate son herramientas útiles para encontrar archivos en el sistema. Ambos son comandos potentes que pueden mejorarse combinándolos con otras herramientas mediante pipelines, pero usted decide cuál es la herramienta más adecuada para su situación. A partir de aquí, le animamos a seguir experimentando con find y locate. Puede consultar sus respectivas páginas de manual para conocer otras opciones no incluidas en esta guía, y puede analizar y manipular los resultados de la búsqueda incorporándolos a otros comandos como wc, sort y grep.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

También te puede gustar