一个比ack速度快n倍的代码搜索工具: ag

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 一个比ack速度快n倍的代码搜索工具:  ag 银搜索者(The Silver Searcher) 一个类似于代码搜索工具ack,着重于速度。  Github:   https://github.com/ggreer/the_silver_searcher Ag有什么好处? 它比一个数量级快ack。

一个比ack速度快n倍的代码搜索工具:  ag

银搜索者(The Silver Searcher)

一个类似于代码搜索工具ack,着重于速度。

 Github:   https://github.com/ggreer/the_silver_searcher

Ag有什么好处?

  • 它比一个数量级快ack
  • 它忽略了你.gitignore你的文件模式.hgignore
  • 如果您的源代码中有文件您不想搜索,只需将其模式添加到.ignore文件中即可。(*咳嗽* *.min.js*咳嗽*)
  • 命令名称比起第33行短ack,所有的键都在主排上!

Ag现在相当稳定 大多数更改是新功能,小错误修复或性能改进。比我的基准要快得多:

ack test_blah ~/code/  104.66s user 4.82s system 99% cpu 1:50.03 total

ag test_blah ~/code/  4.67s user 4.58s system 286% cpu 3.227 total

Ack和Ag发现了相同的结果,但是Ag的速度是34倍(3.2秒vs 110秒)。我的~/code目录是大约8GB。感谢git / hg / ignore,Ag只搜索了700MB。

还有各版本的性能图表

怎么这么快?

  • Ag使用Pthreads并行利用多个CPU内核和搜索文件。
  • 文件被mmap()编辑而不是读入缓冲区。
  • 文字字符串搜索使用Boyer-Moore strstr
  • 正则表达式搜索使用PCRE的JIT编译器(如果Ag使用PCRE> = 8.21构建)。
  • pcre_study()在每个文件执行相同的正则表达式之前,Ag调用它。
  • 而不是调用fnmatch()忽略文件中的每个模式,非正则表达式模式将加载到数组中并进行二进制搜索。

我写了几篇博客文章,显示了我如何改进性能。这些包括我如何添加pthreads写我自己的scandir()基准测试每个版本以找到性能回归,并用gprofValgrind进行分析

安装

MACOS

brew install the_silver_searcher

要么

port install the_silver_searcher

Linux的

  • Ubuntu> = 13.10(Saucy)或Debian> = 8(Jessie)

      apt-get install silversearcher-ag
    
  • Fedora 21及以下

      yum install the_silver_searcher
    
  • Fedora 22+

      dnf install the_silver_searcher
    
  • RHEL7 +

      yum install epel-release.noarch the_silver_searcher
    
  • Gentoo的

      emerge the_silver_searcher
    
  •   pacman -S the_silver_searcher
    
  • Slackware的

      sbopkg -i the_silver_searcher
    
  • openSUSE的:

      zypper install the_silver_searcher
    
  • CentOS的:

      yum install the_silver_searcher
    
  • SUSE Linux Enterprise:按照这些简单说明进行操作

BSD

  • FreeBSD的

      pkg install the_silver_searcher
    
  • OpenBSD系统/ NetBSD的

      pkg_add the_silver_searcher
    

Cygwin的

运行相关的setup-*.exe,并在“Utils”类别中选择“the_silver_searcher”。

从源头建造

建筑大师

  1. 安装依赖关系(Automake,pkg-config,PCRE,LZMA):

    • MacOS的:

        brew install automake pkg-config pcre xz
      

      要么

        port install automake pkgconfig pcre xz
      
    • Ubuntu的/ Debian的:

        apt-get install -y automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev
      
    • Fedora的:

        yum -y install pkgconfig automake gcc zlib-devel pcre-devel xz-devel
      
    • CentOS的:

        yum -y groupinstall "Development Tools"
        yum -y install pcre-devel xz-devel
      
    • openSUSE的:

        zypper source-install --build-deps-only the_silver_searcher
      
    • Windows:这很复杂 看到这个维基页面

  2. 运行构建脚本(它运行aclocal,automake等):

     ./build.sh
    

在Windows上(在msys / MinGW shell内):

    make -f Makefile.w32
  1. 安装:

     sudo make install
    

建立释放tarball

GPG签名的版本可在这里

构建版本tarball需要相同的依赖关系,除了automake和pkg-config。安装依赖项后,只需运行:

./configure
make
make install

您可能需要以sudoroot身份使用或运行make install。

编辑器集成

VIM

您可以使用Ag与[ack.vim] []添加以下行到您的.vimrc

let g:ackprg = 'ag --nogroup --nocolor --column'

要么:

let g:ackprg = 'ag --vimgrep'

哪个有同样的效果,但会报告每一场比赛。

Emacs的

您可以使用ag.el作为Ag的Emacs前端。参见:helm-ag

TextMate的

TextMate用户可以使用Ag与流行的AckMate插件的分支,这可以让您同时使用Ack和Ag进行搜索。如果您已经有AckMate,您只需要用Ag替换Ack,移动或删除"~/Library/Application Support/TextMate/PlugIns/AckMate.tmplugin/Contents/Resources/ackmate_ack"并运行ln -s /usr/local/bin/ag "~/Library/Application Support/TextMate/PlugIns/AckMate.tmplugin/Contents/Resources/ackmate_ack"

你可能会喜欢的其他东西

  • Ack - 比grep好。没有Ack,Ag不会存在。
  • ack.vim
  • 丰富的Ctags - 比Ag快,但它预先构建了一个索引。对于真正的大代码库很好
  • Git-grep - 与Ag一样快,但只适用于git repos。
  • ripgrep
  • Sack - 包裹Ack和Ag的实用程序。它从搜索和打开匹配文件中删除了很多重复。
谋胆并重
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
194 10
|
5月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
78 4
|
5月前
|
Kubernetes Shell Linux
K8S 实用工具之一 - 如何合并多个 kubeconfig?
K8S 实用工具之一 - 如何合并多个 kubeconfig?
|
5月前
|
Kubernetes 调度 C++
Kubernetes vs Docker Swarm:容器编排工具的比较与选择
在当今云计算时代,容器技术的应用越来越广泛。而在众多容器编排工具中,Kubernetes和Docker Swarm是两个备受关注的竞争者。本文将深入比较这两个工具的特点、优势和劣势,帮助读者更好地选择适合自己的容器编排解决方案。
|
1月前
|
Ubuntu Linux pouch
Docker容器管理工具
文章介绍了Docker容器管理工具,以及早期使用的LXC容器管理工具,包括它们的安装、使用和相关技术特点。
50 10
Docker容器管理工具
|
1月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
66 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
5月前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
180 1
|
2月前
|
存储 Kubernetes Cloud Native
容器管理工具Containerd
容器管理工具Containerd
|
2月前
|
Prometheus Kubernetes 监控
揭秘Kubernetes的秘密武器库:十大工具让你的容器编排如虎添翼!探索这些神秘而强大的工具,它们将如何彻底改变你的Kubernetes体验?
【8月更文挑战第19天】在容器世界里,Kubernetes是部署与管理容器化应用的首选平台。为了增强其功能,本文精选了十大必备工具:Helm简化复杂应用部署;Prometheus监控系统与应用指标;Grafana提供数据可视化;Fluentd统一日志管理;Envoy实现服务间通信与控制;Calico确保网络连接安全;CoreDNS提升DNS服务性能;Velero保障数据安全与迁移;Argo Workflows执行复杂工作流;Istio强化服务网格功能。这些工具覆盖部署、监控、日志等多个方面,助力提升Kubernetes的效率与稳定性。
34 3
|
2月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
下一篇
无影云桌面