Concepto de un terminal Linux lleno de texto en un portátil.

Linux ofrece seis formas diferentes de buscar, y cada una tiene sus ventajas. Vamos a demostrar cómo utilizar findlocatewhichwhereiswhatis, y aproposCada 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

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

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 .

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

encontrar /

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

encontrar ~

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 utilizan comodines donde *significa cualquier cadena de caracteres y ?significa cualquier carácter individual.

Los patrones se deben citar para que funcionen correctamente. Es fácil olvidarse de hacer esto, pero si no cita el patrón de comodín find, no 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"

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 quisiéramos las extensiones de archivo de dos caracteres, habríamos usado "*.? S".

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'

Esta vez findsolo informa sobre los archivos JavaScript.

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 contiene comodines, pero es una buena práctica hacerlo todo el tiempo. Si lo hace, no olvidará usarlos cuando los necesite.

encontrar . -nombre 'Yelp.js'

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

encontrar. -nombre 'Yelp.js'

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 cualquier archivo que comience con "mapa".

encontrar . -nombre "mapa *. *"

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

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'

El directorio se encuentra, simplemente se llama "about" y está anidado dentro de otro directorio dentro del directorio actual.

Existe una -ipathopción (ignorar la ruta de mayúsculas y minúsculas) que le permite buscar rutas e ignorar 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

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

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

encontrar . -ejecutable

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 -type

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

Esta vez, los subdirectorios no aparecen en la lista. El archivo de secuencia de comandos ejecutable es el único elemento de los resultados.

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

Solo los directorios y subdirectorios se enumeran en los resultados.

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 '{}' \;

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á chmodEsto tiene que ser 'escapado' precediéndolo con una barra invertida '\'.

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

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 con ellas. 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 instalarse en Manjaro, con este comando:

sudo pacman -Syu mlocate

En Ubuntu, puede usar ubicar y de manera mlocateintercambiable. En Fedora y Manjaro debe escribir locate, pero el comando lo ejecuta mlocate.

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

localizar --version

Debido a que locate funciona en todas las distribuciones de Linux que se probaron, 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.dailyEsto 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*

Si no encuentra una entrada allí, puede configurar una tarea automatizada para que lo haga 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

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 parte del nombre del archivo, por lo que no es necesario utilizar comodines.

localizar getlatlong

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

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

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

Contar archivos coincidentes

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

localizar -c .html

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

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

Ignorando el caso con localizar

El -i(ignorar locatemayúsculas y minúsculas ) hace precisamente eso, ignora las diferencias entre 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

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

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

El que comando

El whichcomando busca en los directorios de 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 geolocSabemos que está instalado en la computadora, pero no sabemos dónde se encuentra. Debe estar en algún lugar de la ruta porque cuando escribimos su nombre, se ejecuta. Podemos utilizar whichpara localizarlo con este comando:

que geoloc

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

Esto nos muestra que tenemos el geolocprograma en dos lugares.

Por supuesto, el /usr/local/binshell Bash buscará primero la copia en 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 en el 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 fuenteEn 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?

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

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 solo informa sobre la ubicación del archivo ejecutable.

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

Las ubicaciones se enumeran para usted.

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

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

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 simple. 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

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.

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

hombre 1 hombre

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

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

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

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

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

Usar whatis con comodines

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

qué es -w char *

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

El comando apropiado

El aproposcomando es similar a whatis, pero tiene algunas campanas y silbidos másBusca en los títulos de las páginas de manual y en las descripciones de una línea en busca del término de búsqueda. Enumera las descripciones de la página 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

apropos enumera los resultados en la ventana de la terminal.

Uso de 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

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

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

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

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

a propósito -e grep

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

Coincidencia de todos los términos de búsqueda

Como vimos anteriormente, si proporciona más de un término de búsqueda, se aproposbuscarán 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 tengan 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

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

Ahora usaremos la -aopción.

apropos -a crontab cron

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 con 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.