使用 Sourcegraph 搜索 34000 多個(gè) Fedora 倉(cāng)庫(kù)
在 2021 年 10 月,一個(gè) Fedora Linux 用戶 問(wèn)了一個(gè)關(guān)于許可的問(wèn)題。Fedora 項(xiàng)目負(fù)責(zé)人 Matthew Miller 回復(fù)道:“我不能快速地檢查(這個(gè)問(wèn)題),因?yàn)槲覀儧](méi)有一個(gè)完整的、龐大的、可搜索的存儲(chǔ)庫(kù)來(lái)檢索 Fedora 中所有軟件包。”
接著他說(shuō):“……或許我們可以付錢給 Sourcegraph,讓他們幫我們做這個(gè)。他們看起來(lái)樂(lè)于助人。” 他說(shuō)的沒(méi)錯(cuò),我們(Sourcegraph)的確是樂(lè)于助人,而且我們還不想要你的錢,相反,我們想與 Fedora 社區(qū)合作。
Fedora 社區(qū)現(xiàn)在可以在他們的開(kāi)源代碼世界中盡情搜索 —— 目前有超過(guò) 34,000 個(gè)存儲(chǔ)庫(kù),而且還在不斷增加。
代碼搜索簡(jiǎn)介
如果你還不熟悉 代碼搜索 的概念,我現(xiàn)在就來(lái)告訴你。代碼搜索可以讓團(tuán)隊(duì)更快地掌握一個(gè)新的代碼庫(kù),在里面找到答案,幫助團(tuán)隊(duì)識(shí)別安全風(fēng)險(xiǎn),以及許多其他用例。Sourcegraph 已經(jīng)在 GitHub 和 GitLab 等多個(gè)代碼托管服務(wù)上,索引了 200 多萬(wàn)個(gè)存儲(chǔ)庫(kù)。本文只關(guān)注 src.fedoraproject.org 的代碼搜索。Sourcegraph 同時(shí)提供了一個(gè) Web 應(yīng)用 和 命令行客戶端。
使用 Web 應(yīng)用
在使用 Sourcegraph Web 應(yīng)用 時(shí),你需要先輸入初始字符串 repo:^src.fedoraprojects.org,然后再開(kāi)始查詢。這個(gè) Web 應(yīng)用 鏈接中包括了上面的初始字符串,點(diǎn)擊這個(gè)鏈接后,搜索界面如下圖所示:
Sourcegraph Web 應(yīng)用界面
下面我將提供幾個(gè)使用 Web 應(yīng)用程序進(jìn)行搜索的例子,大家可能會(huì)對(duì)它們感興趣。
查找使用流行的經(jīng) OSI 批準(zhǔn)的許可證的存儲(chǔ)庫(kù)
下面的查詢語(yǔ)句將掃描所有兼容 “開(kāi)源定義Open Source Definition”(OSD) 的軟件存儲(chǔ)庫(kù)。
repo:^src.fedoraproject.org/ lang:"RPM Spec" License:
^.*apache|bsd|gpl|lgpl|mit|mpl|cddl|epl.*$
許可證搜索
查找?guī)в?TODO 的文件
下面的查詢語(yǔ)句將在 34,000 多個(gè)倉(cāng)庫(kù)中找到 TODO 文件。對(duì)于那些希望為需要幫助的項(xiàng)目做出貢獻(xiàn)的人來(lái)說(shuō),是一個(gè)非常棒的功能。
repo:^src.fedoraproject.org/ "TODO"
搜索 TODO
查找 FTP 服務(wù)器上的文件
我的一個(gè)前同事告訴我 “FTP 是一個(gè)死協(xié)議”。真的是這樣嗎?你也可以在這個(gè)查詢中加入任何其他協(xié)議,如 irc、https 等。
repo:^src.fedoraproject.org/ (?:ftp)://[A-Za-z0-9-]{0,63}(.[A-Za-z0-9-]{0,63})+(:d{1,4})?/*(/*[A-Za-z0-9-._]+/*)*(?.*)?(#.*)?
搜索協(xié)議
查找使用有漏洞的 Log4j 版本的文件
這個(gè)查詢語(yǔ)句將找到任何可能存在 CVE-2021-44228(也就是 Log4j)漏洞的文件(可能會(huì)有誤報(bào))。你也可以搜索其他漏洞,然后報(bào)告給項(xiàng)目維護(hù)者。
repo:^src.fedoraproject.org/ org.apache.logging.log4j
2.((0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15)(.[0-9]+)) count:all
搜索 log4j
使用命令行
Sourcegraph 還有一個(gè)叫做 src 的命令行客戶端,它可以讓你完成我剛才提到的所有事情。此外,它還有其他一些有用的命令。比如說(shuō),它可以把結(jié)果用 JSON 格式輸出,方便你在編程中使用。
src search -json 'repo:^src.fedoraproject.org/ lang:"RPM Spec" License: ^.*apache|bsd|gpl|lgpl|mit|mpl|cddl|epl.*$'
輸出 JSON
輸出 JSON
試一下!
搜索語(yǔ)法
就入門而言,上面的例子是很好的起點(diǎn),但 Sourcegraph 還支持更多的查詢語(yǔ)句。你可以 查看所有的搜索查詢語(yǔ)法,并根據(jù)需要?jiǎng)?chuàng)建你自己的查詢語(yǔ)句。
總結(jié)
正如你所看到的,有了 Sourcegraph,F(xiàn)edora Linux 社區(qū)現(xiàn)在可以快速搜索托管在 src.fedoraproject.org 上的所有代碼,無(wú)論是使用普通查詢還是復(fù)雜的正則查詢。