Cómo utilizar todos los comandos de búsqueda de Linux

Concepto de un terminal Linux lleno de texto en un portátil.
Fatmawati Achmad Zaenuri / Shutterstock.com

Linux ofrece seis formas diferentes de buscar, y cada una tiene sus ventajas. Vamos a demostrar cómo utilizar find, locate, which, whereis, whatis, y apropos. Cada uno sobresale en diferentes tareas; A continuación, le indicamos cómo elegir la herramienta adecuada para el trabajo.

Tiene muchas opciones cuando se trata de comandos para buscar y encontrar en Linux. ¿Porqué tantos? Bueno, cada uno tiene sus especialidades y se desempeñan mejor que los demás en determinadas circunstancias. Podrías pensar en ellos como una especie de navaja suiza para buscar. Vamos a mirar cada hoja por turno y descubrir sus puntos fuertes particulares.

El comando de búsqueda

El comportamiento del  findcomando es difícil de determinar mediante prueba y error. Una vez que comprende la sintaxis , comienza a apreciar su flexibilidad y poder.

La forma más sencilla de usar findes simplemente escribir findy presionar enter.

encontrar

buscar comando en una ventana de terminal

Usado de esta manera se findcomporta como ls, pero enumera todos los archivos del directorio actual y los de los subdirectorios.

salida del comando de búsqueda en una ventana de terminal

Algunas implementaciones de findrequieren que coloques el .para el directorio actual. Si este es el caso con su versión de Linux, use el siguiente comando:

encontrar .

encontrar .  comando en una ventana de terminal

Para tener una findbúsqueda desde la carpeta raíz, usaría este comando:

encontrar /

fin d / command en una ventana de terminal

Para iniciar la búsqueda desde su carpeta de inicio, use este comando:

encontrar ~

encontrar ~ en una ventana de terminal

Uso de buscar con patrones de archivo

Para findque sea algo más que una versión de recuperación automática ls, debemos proporcionarle algo para buscar. Podemos proporcionar nombres de archivo o patrones de archivo. Los patrones hacen uso de comodines donde *significa cualquier cadena de caracteres y ?significa cualquier carácter individual.

Los patrones deben citarse para que funcionen correctamente. Es fácil olvidarse de hacer esto, pero si no cita el patrón de comodín findno podrá ejecutar correctamente el comando que le dio.

Con este comando, buscaremos en la carpeta actual los archivos que coincidan con el patrón “*. * S”. Esto significa cualquier nombre de archivo que tenga una extensión de archivo que termine en «s». Usamos la -nameopción para decirle findque estamos pasando un nombre de archivo o un patrón de nombre de archivo.

encontrar . -nombre "*. * s"

encontrar .  -nombre "*. * s" en una ventana de terminal

find devuelve estos archivos coincidentes.

Tenga en cuenta que dos de las extensiones de archivo tienen dos caracteres y una tiene tres caracteres. Esto se debe a que usamos el patrón «*. * S». Si solo hubiéramos querido las extensiones de archivo de dos caracteres, habríamos usado «*.? S».

salida del comando de archivo en una ventana de terminal

Si hubiéramos sabido de antemano que estábamos buscando archivos JavaScript «.js», podríamos haber sido más específicos en nuestro patrón de archivo. Además, tenga en cuenta que puede usar comillas simples para envolver el patrón si lo prefiere.

encontrar . -nombre '* .js'

encontrar .  -nombre "* .js" en una ventana de terminal

Esta vez findsolo informa sobre los archivos JavaScript.

Archivos JavaScript encontrados por buscar en una ventana de terminal

Ignorando el caso con encontrar

Si conoce el nombre del archivo que desea findubicar, puede pasarlo en findlugar de un patrón. No es necesario que entre comillas el nombre del archivo si no hay comodines, pero es una buena práctica hacerlo todo el tiempo. Hacerlo significa que no se olvidará de usarlos cuando los necesite.

encontrar . -nombre 'Yelp.js'

encontrar .  -nombre 'Yelp.js' en una ventana de terminal

Eso no devolvió nada. Pero es extraño, sabemos que ese archivo debe estar ahí. Intentemos de nuevo y digamos findque ignoremos el caso. Lo hacemos usando la -inameopción (ignorar el nombre del caso)

encontrar. -nombre 'Yelp.js'

encontrar.  -iname 'Yelp.js' en una ventana de terminal

Ese era el problema, el nombre del archivo comienza con una «y» minúscula y buscábamos con una «Y» mayúscula.

Subdirectorios recurrentes con encontrar

Una gran cosa findes la forma en que busca de forma recursiva a través de subdirectorios. Busquemos archivos que comiencen con «mapa».

encontrar . -nombre "mapa *. *"

encontrar .  -nombre "mapa *. *" en una ventana de terminal

Se enumeran los archivos coincidentes. Tenga en cuenta que todos están en un subdirectorio.

Resultados de un subdirectorio en una ventana de terminal

Búsqueda de directorios con find

La -pathopción hace findbuscar directorios. Busquemos un directorio del que no podamos recordar el nombre, pero sabemos que termina con las letras «sobre».

encontrar . -ruta '* acerca de'

encontrar .  -ruta '* about' en una ventana de terminal

Se encuentra el directorio, simplemente se llama «acerca de» y está anidado dentro de otro directorio dentro del directorio actual.

Directorio encontrado en una ventana de terminal

Existe una -ipathopción (ignorar la ruta de mayúsculas y minúsculas) que le permite buscar rutas e ignorar las mayúsculas y minúsculas, similar a la inameopción discutida anteriormente.

Usar atributos de archivo con buscar

find puede buscar archivos que tengan atributos que coincidan con la pista de búsqueda. Por ejemplo, puede buscar archivos que estén vacíos usando la -emptyopción, independientemente de cómo se llamen.

encontrar . -vacío

encontrar .  -vacío en una ventana de terminal

Cualquier archivo de longitud de cero bytes aparecerá en los resultados de la búsqueda.

Relacionado:  Cómo usar el comando tail en Linux

La -executableopción encontrará cualquier archivo que se pueda ejecutar, como un programa o un script.

encontrar . -ejecutable

encontrar .  -ejecutable en una ventana de terminal

Los resultados muestran un archivo llamado “fix_aptget.sh”.

También contienen tres directorios, incluido ‘.’, El directorio actual. Los directorios se incluyen en los resultados porque el bit de ejecución se establece en sus permisos de archivo. Sin esto, no podría cambiar (“ejecutar”) esos directorios.

resultados de búsqueda de archivos ejecutables en una ventana de terminal

La opción de tipo

La -typeopción le permite buscar el tipo de objeto que está buscando. Vamos a proporcionar el indicador de tipo «f» como parámetro de la -typeopción porque queremos findbuscar archivos únicamente.

encontrar . ejecutable -tipo f

encontrar .  ejecutable -type f en una ventana de terminal

Esta vez, los subdirectorios no se enumeran. El archivo de secuencia de comandos ejecutable es el único elemento de los resultados.

resultados de búsqueda sin directorios en una ventana de terminal

También podemos solicitar findque solo se incluyan directorios en los resultados. Para listar todos los directorios, podemos usar la -typeopción con el indicador de tipo “d”.

encontrar . tipo -d

encontrar .  escriba -d en una ventana de terminal

En los resultados solo se enumeran los directorios y subdirectorios.

directorios listados en una ventana de terminal

Uso de otros comandos con find

Puede realizar alguna acción adicional en los archivos que se encuentran. Puede hacer que los archivos pasen, a su vez, a algún otro comando.

Si necesitamos asegurarnos de que no haya archivos ejecutables en el directorio y subdirectorios actuales, podríamos usar el siguiente comando:

encontrar . -nombre "fix_aptget.sh" -exec chmod -x '{}' \;

encontrar .  -nombre "fix_aptget.sh" -exec chmod -x '{}' \;  en una ventana de terminal

El comando significa:

  • Busque en el directorio actual un objeto con nombre llamado «fix_aptget.sh».
  • Si lo encuentra, ejecute el chmodcomando.
  • Los parámetros que se pasan chmodson -xpara eliminar los permisos ejecutables y '{}'que representa el nombre de archivo del archivo encontrado.
  • El punto y coma final marca el final de los parámetros a los que se pasará chmod. Esto tiene que ‘escaparse’ precediéndolo con una barra invertida ‘\’.

Una vez que se haya ejecutado este comando, podemos buscar archivos ejecutables como antes, y esta vez no habrá ningún archivo en la lista.

Resultados de búsqueda sin archivos ejecutables en una ventana de terminal

Para ampliar nuestra red, podríamos usar un patrón de archivo en lugar del nombre de archivo que usamos en nuestro ejemplo.

Esta flexibilidad le permite buscar tipos de archivo específicos, o con patrones de nombre de archivo, y realizar alguna acción en los archivos coincidentes.

Buscar tiene muchas otras opciones , incluida la búsqueda de archivos por su fecha de modificación, archivos propiedad de un usuario o grupo, archivos que son legibles o archivos que tienen un conjunto específico de permisos de archivo.

Los comandos de localización y localización

Muchas distribuciones de Linux solían tener una copia de locateincluido. Esto fue reemplazado por el mlocatecomando, que era una versión mejorada y actualizada de locate.

Cuando mlocateestá instalado en un sistema, modifica el locatecomando para que realmente lo use mlocateincluso si escribe locate.

Se verificaron las versiones actuales de Ubuntu, Fedora y Manjaro para ver si tenían versiones de estos comandos preinstaladas en ellos. Ubuntu y Fedora incluían mlocate. ambos.Tenía que ser instalado en Manjaro, con este comando:

sudo pacman -Syu mlocate
sudo pacman -Syu mlocate en una ventana de terminal

En Ubuntu, puede usar localizar e mlocateindistintamente. En Fedora y Manjaro debe escribir locate, pero el comando lo ejecuta mlocate.

Si usa la  --versionopción con locateverá que el comando que responde es en realidad mlocate.

localizar --version

localizar --version en una ventana de terminal

Debido a que locate funciona en todas las distribuciones de Linux que se probaron, lo usaremos locateen nuestras explicaciones a continuación. Y es una letra menos que escribir.

La base de datos de localización

La mayor ventaja que locate tiene es la velocidad.

Cuando usa el findcomando, se desvanece y realiza una búsqueda en su sistema de archivos. El locatecomando funciona de manera muy diferente. Realiza una búsqueda en la base de datos para determinar si lo que está buscando está en su computadora. Eso hace que la búsqueda sea mucho más rápida.

Por supuesto, plantea una pregunta obvia sobre la base de datos. ¿Qué garantiza que la base de datos esté actualizada? Cuando mlocate está instalado, (generalmente) coloca una entrada en cron.daily. Esto se ejecuta todos los días (muy temprano en la mañana) y actualiza la base de datos.

Para verificar si esta entrada existe, use este comando:

ls /etc/cron.daily/*loc*

ls /etc/cron.daily/*loc* en una ventana de terminal

Si no encuentra una entrada allí, puede configurar una tarea automatizada para hacer esto por usted en el momento que elija.

¿Qué sucede si su computadora no está encendida en el momento en que se supone que se debe actualizar la base de datos? Puede ejecutar manualmente el proceso de actualización de la base de datos con el siguiente comando:

sudo updatedb

sudo updatedb en una ventana de terminal

Usando localizar

Busquemos archivos que contengan la cadena «getlatlong». Con localizar, la búsqueda busca automáticamente cualquier coincidencia que contenga el término de búsqueda en cualquier lugar del nombre del archivo, por lo que no es necesario utilizar comodines.

localizar getlatlong
localizar getlatlong en una ventana de terminal

Es difícil transmitir velocidad en una captura de pantalla, pero casi de inmediato se enumeran los archivos coincidentes.

Relacionado:  ¿Cuál es la diferencia entre Linux y Unix?

localizar resultados con archivos que contienen getlatlong en una ventana de terminal

Decir localizar cuántos resultados desea

A veces, es posible que sepa que hay muchos archivos del tipo que busca. Solo necesitas ver los primeros. Quizás solo desee que le recuerden en qué directorio se encuentran, y no necesita ver todos los nombres de archivo.

Con la -nopción (número) puede limitar la cantidad de resultados que locatele devolverán. En este comando, hemos establecido un límite de 10 resultados.

localizar .html -n 10

ubicar .html -n 10 en una ventana de terminal

locate responde enumerando los primeros 10 nombres de archivo coincidentes que recupera de la base de datos.

resultados de búsqueda de ubicado limitado a 10 resultados en una ventana de terminal

Contar archivos coincidentes

Si solo desea saber la cantidad de archivos coincidentes y no necesita saber cómo se llaman o dónde están en su disco duro, use la opción -c (contar).

localizar -c .html

ubicar -c .html en una ventana de terminal

Entonces, ahora sabemos que hay 431 archivos con la extensión «.html» en esta computadora. Tal vez queramos echarles un vistazo, pero pensamos en echar un vistazo y ver cuántos había primero. Armados con ese conocimiento, sabemos que tendremos que canalizar la salida less.

localizar .html | Menos

localizar .html |  menos en una ventana de terminal

Y aquí están todos, o al menos, aquí está la parte superior de la larga lista de ellos.

lista de archivos html canalizada a través de less en una ventana de terminal

Ignorando el caso con localizar

El -i(ignorar locatemayúsculas y minúsculas ) hace precisamente eso, ignora las diferencias en mayúsculas y minúsculas entre el término de búsqueda y los nombres de archivo en la base de datos. Si intentamos contar los archivos HTML nuevamente, pero proporcionamos por error el término de búsqueda en mayúsculas, no obtendremos ningún resultado.

localizar -c .HTML

localizar -c .HTML en una ventana de terminal

Al incluir la -iopción, podemos  locate ignorar la diferencia entre mayúsculas y minúsculas y devolver nuestra respuesta esperada para esta máquina, que es 431.

localizar -c -i .HTML

localizar -c -i .HTML en una ventana de terminal

El estado de la base de datos de localización

Para ver el estado de la base de datos, use la -sopción (estado). Esto hace locateque se devuelvan algunas estadísticas sobre el tamaño y el contenido de la base de datos.

localizar -s

localizar -s en una ventana de terminal

El que comando

El whichcomando busca en los directorios en su ruta e intenta localizar el comando que está buscando. Le permite determinar qué versión de un programa o comando se ejecutará cuando escriba su nombre en la línea de comandos.

Imagina que tuviéramos un programa llamado geoloc. Sabemos que está instalado en la computadora, pero no sabemos dónde se encuentra. Debe estar en la ruta en algún lugar porque cuando escribimos su nombre, se ejecuta. Podemos utilizar whichpara localizarlo con este comando:

que geoloc

que geoloc en una ventana de terminal

whichinforma que el programa está ubicado en /usr/local/bin.

geoloc en / usr / local / bin

Podemos verificar si hay otras copias del programa en otras ubicaciones dentro de la ruta usando la -aopción (todas).

que -un geoloc

que -un geoloc en una ventana de terminal

Esto nos muestra que tenemos el geolocprograma en dos lugares.

que -un geoloc en una ventana de terminal

Por supuesto, la copia en la /usr/local/binencontrará primero el shell Bash cada vez, por lo que tener el programa en dos lugares no tiene sentido.

Eliminar la versión en /usr/bin/geolocle ahorrará un poco de capacidad del disco duro. Más importante aún, también evitará problemas creados por alguien que actualiza manualmente el programa y lo hace en el lugar equivocado. Luego se preguntan por qué no ven las nuevas actualizaciones cuando ejecutan el programa.

El comando whereis

El whereiscomando es similar al whichcomando, pero es más informativo.

Además de la ubicación del archivo de comando o programa, whereis también informa dónde se encuentran las páginas man (manual) y los archivos de código fuente . En la mayoría de los casos, los archivos del código fuente no estarán en su computadora, pero si lo están, whereislos reportarán.

El ejecutable binario, las páginas de manual y el código fuente a menudo se denominan «paquete» para ese comando. Si desea saber dónde se encuentran los diversos componentes del paquete para el  diff comando, use el siguiente comando:

dónde está la diferencia

whereis diff en una ventana de terminal

whereisresponde enumerando la ubicación de las diffpáginas de manual y el diffarchivo binario.

whereis resuelve para diff en una ventana de terminal

Para restringir los resultados para que solo muestren la ubicación del binario (en efecto, haga que whereisfuncione como which) use la -bopción (binario).

donde es -b diff

whereis -b diff en una ventana de terminal

whereis solo informa sobre la ubicación del archivo ejecutable.

donde la salida está restringida a la ubicación binaria solo en una ventana de terminal

Para restringir la búsqueda para informar solo en las páginas de -mmanual, use la opción (manual). Para restringir la búsqueda para informar solo sobre los archivos de código fuente, use la -sopción (fuente).

Para ver las ubicaciones en las que whereisbusca, use la -lopción (ubicaciones).

donde está -l

donde está -l en una ventana de terminal

Las ubicaciones se enumeran para usted.

dónde están las ubicaciones de búsqueda enumeradas en una ventana de terminal

Ahora que sabemos las ubicaciones en las que se whereisbuscarán, podemos, si así lo elegimos, restringir la búsqueda a una ubicación o grupo de ubicaciones en particular.

La -Bopción (lista binaria) restringe la búsqueda de archivos ejecutables a la lista de rutas proporcionadas en la línea de comando. Debe proporcionar al menos una ubicación para whereisrealizar la búsqueda. La -f opción (archivo) se utiliza para señalar el final de la ubicación y el inicio del nombre del archivo.

donde es -B / bin / -f chmod

donde es -B / bin / -f chmod en una ventana de terminal

whereisbusca en el único lugar en el que pedimos buscar. Allí es donde se encuentra el archivo.

Relacionado:  Explicación de las marcas de tiempo de los archivos de Linux: atime, mtime y ctime

donde es el resultado de usar la opción -B en una ventana de terminal

También puede utilizar la -Mopción (lista manual) para restringir las búsquedas de páginas de manual a las rutas que proporciona en la línea de comandos. La -S opción (lista de fuentes) le permite restringir la búsqueda de archivos de código fuente de la misma manera.

El comando whatis

El whatiscomando se utiliza para buscar rápidamente en las páginas man (manual). Proporciona descripciones resumidas de una línea del término que le solicitó que busque.

Comencemos con un ejemplo sencillo. Aunque parece el punto de partida de un debate filosófico profundo, solo estamos pidiendo whatisque nos digamos qué significa el término «hombre».

que es hombre

¿Qué es el hombre en una ventana de terminal?

whatisencuentra dos descripciones coincidentes. Imprime una breve descripción de cada partido. También enumera la sección numerada del manual que contiene cada descripción completa.

lo que resulta en una ventana de terminal

Para abrir el manual en la sección que describe el mancomando, use el siguiente comando:

hombre 1 hombre

hombre 1 hombre en una ventana de terminal

El manual se abre en la sección man (1), en la página de man.

página de manual abierta en la sección uno en una ventana de terminal

Para abrir el manual en la sección 7, en la página que analiza las macros que puede usar para generar páginas de manual, use este comando:

hombre 7 hombre

hombre 7 hombre en una ventana de terminal

Se muestra la página de manual de las macros man.

página de manual abierta en la sección siete en una ventana de terminal

Búsqueda en secciones específicas del manual

La -sopción (sección) se utiliza para limitar la búsqueda a las secciones del manual que le interesan. Para whatisrestringir la búsqueda a la sección 7 del manual, utilice el siguiente comando. Tenga en cuenta las comillas alrededor del número de sección:

Whatis -s "7" man

whatis -s "7" man en una ventana de terminal

Los resultados solo se refieren a la sección 7 del manual.

resultados restringidos a la sección siete en una ventana de terminal

Usar whatis con comodines

Puede utilizar comodines con whatis. Debe utilizar la -wopción (comodín) para hacerlo.

qué es -w char *

whatis -w char * en una ventana de terminal

Los resultados coincidentes se enumeran en la ventana de la terminal.

¿Qué coincide con el comodín en una ventana de terminal?

El comando apropiado

El aproposcomando es similar a whatis, pero tiene algunas campanas y silbidos más . Busca en los títulos de las páginas de manual y en las descripciones de una línea buscando el término de búsqueda. Enumera las descripciones de las páginas de manual correspondientes en la ventana de la terminal.

La palabra apropos significa «relacionado con» o «concerniente», y el comando apropostomó su nombre de esto. Para buscar cualquier cosa relacionada con el groupscomando, podemos usar este comando:

grupos a propósito

grupos apropos en una ventana de terminal

apropos enumera los resultados en la ventana de la terminal.

resultados apropiados para el grupo en una ventana de terminal

Usar más de un término de búsqueda

Puede utilizar más de un término de búsqueda en la línea de comandos. aproposbuscará páginas de manual que contengan  cualquiera de los términos de búsqueda.

apropos chown chmod

apropos chown chmod en una ventana de terminal

Los resultados se enumeran como antes. En este caso, hay una única entrada para cada uno de los términos de búsqueda.

Apropos resultados para chmod y chown en una ventana de terminal.

Usar coincidencias exactas

aproposdevolverá páginas de manual que contienen el término de búsqueda incluso si el término está en medio de otra palabra. Para aproposdevolver solo coincidencias exactas para el término de búsqueda, use la -eopción (exacta).

Para ilustrar esto, usaremos aproposcon grepcomo término de búsqueda.

apropos grep

apropos grep en una ventana de terminal

Hay muchos resultados devueltos para esto, incluidos muchos donde grepse incorpora en otra palabra, como bzfgrep.

resultados para apropos grep en una ventana de terminal

Intentémoslo de nuevo y usemos la -eopción (exacta).

apropos -e grep

apropos -e grep en una ventana de terminal

Esta vez tenemos un único resultado, para lo que realmente estábamos buscando.

resultados para apropos -e grep en una ventana de terminal

Coincidencia de todos los términos de búsqueda

Como vimos anteriormente, si proporciona más de un término de aproposbúsqueda, buscará páginas de manual que contengan  cualquiera de los términos de búsqueda. Podemos cambiar ese comportamiento usando la -aopción (y). Esto hace que apropossolo seleccione coincidencias que tienen todos los tiempos de búsqueda en ellos.

Probemos el comando sin la -aopción para que podamos ver qué resultados aproposda.

apropos crontab cron

Apropos crontab cron en una ventana de terminal

Los resultados incluyen páginas de manual que coinciden con uno u otro de los términos de búsqueda.

resultados apropos para crontab cron en una ventana de terminal

Ahora usaremos la -aopción.

apropos -a crontab cron

apropos -a crontab cron en una ventana de terminal

Esta vez, los resultados se reducen a aquellos que contienen ambos términos de búsqueda.

resultados para apropos -a crontab cron na ventana de terminal

Aún más opciones

Todos estos comandos tienen más opciones, algunos de ellos muchas más opciones, y le recomendamos que lea las páginas de manual de los comandos que hemos discutido en este artículo.

Aquí hay un resumen rápido de cada comando:

  • buscar : proporciona una capacidad de búsqueda granular y rica en funciones para buscar archivos y directorios.
  • localizar : proporciona una búsqueda rápida basada en la base de datos de programas y comandos.
  • que : busca en $ PATH en busca de archivos ejecutables
  • whereis : busca en $ PATH en busca de archivos ejecutables, páginas de manual y archivos de código fuente.
  • whatis : busca en las descripciones de una línea del hombre coincidencias con el término de búsqueda.
  • apropos : busca en la página de manual con más fidelidad que lo que es, para encontrar coincidencias con el término o términos de búsqueda.

¿Busca más información sobre terminales de Linux? Aquí hay 37 comandos que debe conocer .