Cómo buscar en la terminal de Linux y encontrar cualquier cosa rápidamente

La terminal es buena para ejecutar tareas, y una de las tareas que creo que es más rápido de realizar en la terminal en lugar de en la interfaz gráfica de usuario es la búsqueda basada en terminal. Al utilizar varios comandos de Linux, puede encontrar cualquier cosa fácil y rápidamente sin tener que buscar en archivos y carpetas en un administrador de archivos GUI. Exploremos cómo puede buscar en la terminal de Linux y encontrar lo que esté buscando.

Tabla de contenido

Buscar texto en archivos con grep

Si solo aprende un comando de búsqueda, hágalo grep. El nombre significa Global Regular Expression Print y su trabajo es simple: buscar dentro de archivos patrones de texto específicos. Está instalado de forma predeterminada en la mayoría de los sistemas Linux (y macOS).

La sintaxis es simple, solo necesita usar grep junto con el patrón de búsqueda deseado. Por ejemplo, digamos que estás intentando encontrar cada línea que menciona un error en un archivo. Puedes hacerlo con:

grep "error" fileserver.log

Imprime cada línea que contiene la palabra error. Si desea que ignore mayúsculas y minúsculas (para que coincida con Error, ERROR, etc.), simplemente agregue el-ibandera así:

grep -i "error" fileserver.log

Si no está seguro de dónde está el archivo y desea buscar en un directorio completo, utilice el-ropción (recursiva):

grep -r "TODO"

Esto revisa todos los archivos de la carpeta actual y todas las subcarpetas, buscando la palabra "TODO".

A veces quieres ver todo excepto el término de búsqueda. El-vflag invierte la búsqueda y muestra solo las líneas que no coinciden. Esto es fantástico para filtrar el ruido de los archivos de registro.

grep -v "DEBUG" app.log

Esto me muestra todo lo que no es un mensaje de depuración.

Combinando grep con otros comandos

También puedes combinar grep con otros comandos. Por ejemplo, puede canalizar (usando el|símbolo) la salida de un comando directamente a otro. Esto le permite encadenar comandos. Digamos que desea ver todos los procesos SSH ejecutándose en su sistema. Puedes enumerar todos los procesos y luego canalizar esa lista gigante a grep usando esto:

ps aux | grep "ssh"

Elps auxEl comando puede enumerar 300 procesos, perogreplo filtra hasta uno o dos que realmente le interesan. Puedes usar esto para cualquier cosa.

grep también admite expresiones regulares, para patrones más avanzados. Puedes buscar cosas como cualquier línea que comience con un número, o direcciones de correo electrónico o números de teléfono en un formato específico. Por ejemplo, para buscar líneas que comiencen con un número, use esto:

grep "^[0-9]" file.txt

La curva de aprendizaje se vuelve más pronunciada aquí, pero la recompensa es enorme.

grep vs ripgrep: cuál es la diferencia y cuál usar

Ya sabes lo útil que es grep para buscar texto dentro de archivos, pero existe una alternativa más rápida y moderna llamada ripgrep (rg). Funciona casi de la misma manera que grep pero proporciona un rendimiento mucho mejor y configuraciones predeterminadas más convenientes.

La principal diferencia es la velocidad. Mientras que grep procesa archivos de forma secuencial, ripgrep incluye optimizaciones (incluidos subprocesos múltiples y omisión de archivos irrelevantes) que a menudo lo hacen mucho más rápido. En proyectos grandes, una búsqueda que puede tardar 30 segundos en grep puede finalizar en menos de uno con ripgrep. Está escrito en Rust y optimizado para manejar directorios grandes de manera eficiente.

A diferencia de grep, ripgrep no está instalado de forma predeterminada. Debe instalarlo en su sistema usando su administrador de paquetes. Por ejemplo, en Ubuntu/Debian, use esto:

sudo apt install ripgrep

Una vez instalado, lo usarás casi exactamente como grep:

rg "TODO"

Este comando busca todos los archivos en la carpeta actual y sus subcarpetas. ripgrep omite automáticamente archivos ocultos, directorios .git y archivos binarios, para que solo vea resultados relevantes. También muestra números de línea y resaltados de colores de forma predeterminada.

En resumen, ambas herramientas hacen el mismo trabajo, pero ripgrep es más rápido y conveniente para el uso diario, especialmente cuando se buscan proyectos grandes. Sin embargo, grep sigue siendo útil cuando estás en sistemas donde no puedes instalar software nuevo o cuando necesitas una herramienta que esté disponible en todas partes de forma predeterminada.

Encontrar archivos y directorios con buscar

Mientras que grep te ayuda a buscar dentro de los archivos, el comando de búsqueda te ayuda a localizar los archivos y carpetas. Es la herramienta que debes usar cuando sabes el nombre o tipo de lo que estás buscando, pero no dónde está almacenado. Puede buscar por nombre, tamaño, hora de modificación, permisos, tipo de archivo y prácticamente cualquier atributo que se le ocurra.

La sintaxis básica se ve así:

find /path -name "filename"

Este comando le indica a Find que comience a buscar desde la ruta indicada y busque archivos que coincidan con el nombre especificado. Por ejemplo, si está intentando localizar un archivo de configuración faltante, ejecute:

find /etc -name "config.json"

Por defecto,-namedistingue entre mayúsculas y minúsculas. Si no está seguro acerca de las mayúsculas, cambie a-inamepara una búsqueda que no distinga entre mayúsculas y minúsculas:

find . -iname "readme.md"

El punto (.) significa comenzar en el directorio actual.findpuede hacer mucho más que solo búsquedas basadas en nombres. Puede filtrar los resultados según cuándo se modificaron los archivos por última vez, lo cual resulta útil al limpiar registros o copias de seguridad. Por ejemplo, este comando enumera todos los archivos de registro modificados en los últimos tres días:

find /var/log -name "*.log" -mtime -3

El asterisco actúa como comodín y coincide con cualquier carácter. También puedes usarlo para rastrear archivos grandes que podrían estar ocupando tu espacio en disco.

Búsqueda interactiva con fzf

fzf significa buscador difuso, y es básicamente una herramienta de búsqueda interactiva para tu terminal. Es un filtro difuso al que puedes canalizar cosas. Le brinda una barra de búsqueda de salida ultrarrápida a medida que escribe para cualquier lista. Tampoco es necesario que sea preciso; si busca "react_component.js", simplemente escribarctjsy fzf entenderá lo que quieres decir.

Para usarlo, debe instalarlo en su sistema usando su administrador de paquetes. En Ubuntu/Debian, ejecuta esto:

sudo apt install fzf

Una vez instalado, la forma más sencilla de utilizar fzf es simplemente escribiendo:

fzf

Obtendrá instantáneamente una lista de archivos con capacidad de búsqueda en su carpeta actual. A medida que escribe, filtra los resultados en tiempo real. Puede navegar con las teclas de flecha y presionar Enter para seleccionar una.

También puedes combinarlo con buscar. Por ejemplo:

find . -type f | fzf

Eso le permitirá elegir un archivo de forma interactiva de la lista que genera la búsqueda.

Incluso puedes usarlo para buscar en tu historial de comandos:

history | fzf

Esto le permite buscar interactivamente su historial de comandos. Puede encontrar fácilmente el comando que ejecutó hace tres días pero que no recuerda del todo. Escriba algunas letras, búsquelo, presione Enter y estará listo para ejecutarse.

Ver también:7 cosas útiles que no sabías que puedes hacer en tu terminal Linux

Filtrado inteligente de archivos con confirmación

ack es similar a grep, pero está diseñado específicamente para buscar código. Omite automáticamente archivos irrelevantes (como archivos binarios, registros o carpetas de control de versiones), lo que lo hace perfecto para los desarrolladores. No está disponible de forma predeterminada, debe instalarlo en su sistema. Por ejemplo, si estás usando Ubuntu, ejecuta esto:

sudo apt install ack

Una vez instalado, puedes usarlo para buscar cualquier cosa. Por ejemplo, para buscar una definición de función en archivos Python, use:

ack --python "def my_function"

¿Quieres encontrar todos los comentarios TODO en tu proyecto? Correr:

ack "TODO"

También puede usarlo con indicadores comunes, por ejemplo, si necesita una búsqueda que no distinga entre mayúsculas y minúsculas con números de línea, ejecute:

ack -i -n "config"

Además, ack ya conoce los tipos de archivos comunes. Puede buscar solo en archivos JavaScript, archivos Python o archivos Markdown usando indicadores como--jso--python.

En el pasado, antes de que apareciera ripgrep, ack era la herramienta a la que recurrían los desarrolladores. Ahora, ripgrep es más rápido, pero ack todavía tiene su encanto para obtener resultados legibles y filtrado fácil de usar para los desarrolladores.

Pensamientos finales

La terminal de Linux puede resultar intimidante al principio, pero una vez que empiezas a utilizar estas herramientas de búsqueda, se convierte en parte de tu flujo de trabajo diario. Una vez que se sienta cómodo con ellos, también puede crear alias en su shell para no tener que recordar comandos largos.

Related Posts