Polkadot Solidity开发-课程笔记7

rustc –version是什么意思
一、rustc --version 核心含义
rustc --version(也可简写为 rustc -V,大写V)是 在命令行/终端中执行的Rust编译器查询命令,其核心作用是:查看当前系统中已安装的Rust编译器(rustc)的版本信息,同时还会附带该编译器的构建元数据。
二、命令各部分拆解
rustc:是 Rust Compiler(Rust编译器)的可执行程序名称,也是Rust工具链的核心组件——Rust源代码最终需要通过它编译为可执行文件或库文件,它是Rust生态的基础工具。--version:是命令的“选项/标志”(flag),作用是向rustc程序传递“查询版本信息”的指令,而非执行代码编译等其他核心功能;其简写形式-V(大写)与--version功能完全一致,另外rustc -v(小写v)会输出更详细的版本及编译环境信息(如依赖库版本、系统架构等)。
三、典型输出示例
执行该命令后,终端会返回类似如下的信息(版本号会随安装的Rust版本不同而变化):
1 | |
输出信息解读:
1.79.0:这是 rustc的主版本号(语义化版本,格式为「主版本.次版本.补丁版本」),是用户最常关注的版本标识;129f3b996:对应的Git提交哈希值,用于定位该版本编译器的源代码提交记录;2024-06-10:该版本rustc的正式发布日期。
四、补充说明
该命令能正常执行的前提是:你的系统已经成功安装了Rust工具链(通常通过rustup(Rust官方工具链管理器)安装),且rustc已添加到系统环境变量中(rustup安装时会自动配置,无需手动操作)。
总结
rustc --version是查询Rust编译器版本的命令行指令,简写为rustc -V;rustc是Rust编译器可执行程序,--version是查询版本的选项;- 输出包含rustc主版本号(核心信息)及构建提交哈希、发布日期等元数据。
rustup update是什么意思
一、rustup update 核心含义
你问的 rustup update 是 Rust 官方工具链管理器 rustup 的核心命令,其核心作用是:自动检查并将你系统中安装的所有 Rust 相关组件(包括 rustc 编译器、cargo 构建工具、标准库等)更新到最新的稳定版本。
二、命令拆解与执行逻辑
rustup:是 Rust 官方提供的工具链管理工具,负责 Rust 版本的安装、更新、切换、卸载等全生命周期管理,是使用 Rust 的标配工具(而非单独的rustc仅负责编译)。update:是rustup的子命令,代表“检查并更新”,执行时会完成以下步骤:- 第一步:联网查询 Rust 官方服务器上的最新稳定版本;
- 第二步:对比本地已安装的版本,若本地版本较旧,则自动下载并安装最新版本;
- 第三步:更新完成后,将默认使用的 Rust 工具链切换为新更新的版本;
- 第四步:输出更新结果(比如哪些组件更新了、新旧版本号对比)。
三、典型执行示例
在终端执行 rustup update 后,你会看到类似这样的输出:
1 | |
从输出能清晰看到:系统将 Rust 从 1.78.0 版本更新到了 1.79.0 版本,且自动安装了 cargo、rustc 等核心组件。
四、实用补充
- 若只想更新到特定版本(而非稳定版),可指定版本,比如
rustup update nightly(更新到夜间版)、rustup update 1.78.0(更新到指定版本); - 若更新后想验证是否生效,可执行你之前问的
rustc --version,查看版本号是否已变为最新。
总结
rustup update是 Rust 工具链的一键更新命令,会自动下载并安装最新稳定版的 Rust 全套组件;- 它依赖
rustup工具(而非单独的rustc),执行后默认切换到新更新的版本; - 可通过指定参数更新到非稳定版,更新后用
rustc --version验证结果。
rustup doc 报错一
1 | |
一、错误核心含义
你执行 rustup doc 时遇到的这个错误,本质原因是:你的系统里虽然安装了 rustup 工具,但还没有配置任何默认的 Rust 工具链(比如 stable/nightly 版本),rustup 不知道该用哪个版本的 Rust 来打开文档,因此无法执行 doc 命令。
二、解决方案
这个错误的提示已经给出了关键解决办法,我们一步步来操作,确保能彻底解决问题:
1. 第一步:设置并安装默认稳定版工具链
在终端执行提示里的命令,这会自动下载、安装最新的 Rust 稳定版,并将其设为默认工具链:
1 | |

执行后你会看到类似这样的输出(表示正在下载和安装组件):
1 | |
2. 第二步:验证工具链是否配置成功
执行以下命令,确认默认工具链已生效:
1 | |

正常输出会包含 default toolchain: stable-x86_64-unknown-linux-gnu (default),说明配置成功。
3. 第三步:重新执行 rustup doc 打开文档
现在再执行你原本想运行的命令:
1 | |
这个命令会自动在你的默认浏览器中打开 Rust 的官方离线文档(包含 rustc、cargo、标准库等所有核心文档),方便你离线查阅。
三、补充说明
rustup doc还有实用的子命令:比如rustup doc std可直接打开标准库文档,rustup doc cargo直接打开 cargo 工具文档,rustup doc book直接打开 Rust 官方书籍《The Rust Programming Language》;- 若安装过程中遇到网络慢的问题,可配置 Rust 镜像源(比如清华大学镜像),能大幅提升下载速度。
总结
- 错误根源是未配置默认 Rust 工具链,
rustup无法确定执行doc命令的版本; - 核心解决步骤:先执行
rustup default stable安装并设置默认稳定版,再执行rustup doc即可正常打开文档; rustup doc是查阅 Rust 离线文档的便捷命令,可通过子命令快速定位到特定文档。
rustup doc 报错二
1 | |
一、错误核心含义
你这次执行 rustup doc 遇到的新错误,原因很明确:你的默认 Rust 稳定版工具链(stable-x86_64-unknown-linux-gnu)中,没有安装 rust-docs 这个组件,而 rustup doc 正是依赖这个组件来打开离线文档的,因此无法执行该命令。
二、解决方案
错误提示里已经给出了安装指令,我们只需按步骤执行即可解决问题:
1. 第一步:安装 rust-docs 组件
在终端执行提示中的安装命令(也可以用简化版,效果完全一致):
1 | |
执行后会看到类似如下的输出,代表正在下载并安装文档组件:
1 | |

2. 第二步:重新执行 rustup doc 打开文档
安装完成后,再次执行你想要的命令:
1 | |
此时系统会自动启动默认浏览器,并打开 Rust 官方的离线文档主页,包含 Rust 语言、标准库、Cargo 等所有核心文档内容。
三、补充说明
rust-docs是 Rust 的离线文档组件,体积约 200MB 左右,安装后无需联网即可查阅所有官方文档,比在线文档更便捷;- 若安装过程中网速慢,可临时配置 Rust 镜像源(以清华镜像为例),执行以下命令后再安装:
1
export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup - 除了
rust-docs,Rust 还有其他常用组件(如代码格式化工具rustfmt、静态检查工具clippy),若需要可通过rustup component add rustfmt/clippy安装。
总结
- 错误根源是默认工具链缺少
rust-docs文档组件,导致rustup doc无法调用离线文档; - 核心解决步骤:先执行
rustup component add rust-docs安装文档组件,再执行rustup doc即可正常打开文档; rust-docs是离线文档组件,安装后无需联网即可查阅 Rust 全套官方文档。
rustup doc 报错三
输入rustup doc,kali linux的火狐浏览器显示access to the file was denied,我猜测是root权限不能访问html文件
核心矛盾
Kali Linux 中的 Firefox 拥有 AppArmor(强制访问控制) 保护。即便你用 root 身份启动浏览器,Firefox 的渲染进程(Sandbox)依然被禁止跨入 /root 目录。软链接只是一个“快捷方式”,浏览器沿着快捷方式走到 /root 门口时,被系统内核直接拦住了。
我们直接采用 物理隔离(复制) 或 服务化(HTTP)。
方法 A:物理复制(最快)
直接把文件搬离 /root。
1 | |
现在访问: file:///tmp/rust-docs/index.html。这次一定能打开,因为文件已经物理存在于 /tmp 空间。
方法 B:使用 Python 瞬间起一个 Web Server(最优雅)
作为未来的安全审计公司创始人,你应该更习惯于通过“服务”而不是“文件”来解决问题。这能完美绕过所有文件系统的协议限制。
1 | |
现在访问: http://127.0.0.1:8082

为什么你之前的预判是准的?
你之前提到“破除对权威的迷信”,在 Linux 系统里,Root 并不代表绝对的通行证。现代安全系统(如 Kali 默认开启的 AppArmor)通过“最小权限原则”限制了 GUI 软件。
这就是典型的:你以为你有最高权限,但你调用的工具(Firefox)被关在笼子里。
建议:
如果你打算长期在 Kali 下学习 Rust,建议把 方法 B 写成一个 Alias。你想让我帮你写一个能自动寻找路径并开启 8080 端口的 rust-doc-server 命令吗?
一键开启rust文档
既然我们要追求效率,并彻底解决 Kali 下浏览器对 /root 目录的物理隔离问题,最稳健的逻辑就是通过 Python 启动一个本地 Web Server。
这样你不仅能看 Rust 标准库文档,连 cargo doc 生成的项目文档也能一并解决。
1. 编写 Alias
将以下代码添加到你的 ~/.zshrc(Kali 默认使用 Zsh)或 ~/.bashrc 文件末尾:
Rust 本地文档服务器:自动寻找路径并启动 HTTP 服务
1 | |
2. 使配置生效
在终端执行:
1 | |
3. 如何使用
以后你只需要输入一个单词:
1 | |
然后按住 Ctrl 并点击 终端里显示的 http://localhost:8080 链接,或者直接在浏览器输入该地址即可。
为什么这个 Alias 是“正确选项”?
- 权限脱钩:通过 HTTP 协议传输数据,Firefox 认为它在访问网络,从而绕过了 AppArmor 对
/root文件夹的物理路径限制。 - 即用即走:当你不想看了,在终端按
Ctrl + C就能关闭服务,不会像cp命令那样在/tmp留下几百 MB 的垃圾文件。 - 多功能扩展:如果你以后想看自己写的项目的文档(通过
cargo doc),你只需要进入项目的target/doc目录运行python3 -m http.server即可。
进阶小技巧
如果你希望输入 rdoc 后自动打开浏览器,可以把 alias 改成这样:
1 | |
(注:这种方式会在后台运行 Python,关闭时可能需要手动 kill 进程,不如前一种简洁直观。)
你现在的 Rust 学习进度到哪里了?如果是刚开始看文档,我可以顺便推荐几个在 Kali 下配置 Rust 审计环境的必备 Cargo 工具。
推荐几个在 Kali 下配置 Rust 审计环境的必备 Cargo 工具
在 Kali Linux 下进行 Rust 审计,意味着你不仅在关注代码的逻辑安全性,还在关注供应链安全和二进制安全性。
既然你已经通过 rdoc 解决了文档访问权限问题,为了构建一个高效的审计环境,我建议你安装以下几款“重型”或“精准”的 Cargo 工具。这些工具能够帮你从依赖项、代码质量和深层逻辑三个维度排除错误选项。
1. 供应链安全:cargo-audit
这是审计的第一步:检查你的项目是否使用了已知存在漏洞的依赖库。
- 功能:自动扫描
Cargo.lock文件,并比对 RustSec 咨询数据库。 - 安装:
cargo install cargo-audit - 使用:在项目根目录运行
cargo audit。 - 审计视角:在开始手动读代码前,先排除那些由于第三方库带进来的“已知错误”。
2. 二进制审计增强:cargo-auditable
这是针对生产环境二进制文件的审计神器。
- 功能:在编译时将依赖树元数据嵌入到 ELF 二进制文件中。
- 意义:通常 Rust 编译后的二进制文件很难回溯依赖版本,该工具让
cargo audit bin <FILE>成为可能,即便你没有源代码也能审计该程序。 - 安装:
cargo install cargo-auditable
3. 代码质量与模式审计:clippy
虽然它是官方工具,但在审计中它是发现“不安全坏味道”的第一现场。
- 审计用法:使用
cargo clippy -- -W clippy::pedantic。 - 审计视角:它能识别出非成俗的代码写法,这些地方往往是逻辑漏洞(如整数溢出、未处理的 Result 等)的藏身之处。
4. 深度静态分析:rudra
这是一个专门用于查找 Rust 内存安全问题的静态分析工具。
- 功能:专注于扫描 Unsafe Rust 中的潜在漏洞,比如
Send/Sync实现不当导致的 Race Condition。 - 地位:它曾扫描整个
crates.io并发现了数百个 CVE。 - 使用建议:当你在审计涉及大量底层操作(如 Web3 合约、驱动程序)的项目时,这是必备项。
5. 模糊测试:cargo-fuzz
对于逻辑极其复杂的函数(尤其是解析器、协议栈),手动审计很难穷尽边界条件。
- 功能:基于 LLVM 的
libFuzzer,自动生成海量输入来尝试让程序崩溃(Panic)。 - 安装:
cargo install cargo-fuzz - 使用逻辑:如果你不确定某个函数是否安全,就让它“跑一万遍错误选项”,看它是否还活着。
总结建议工具表
| 工具 | 审计维度 | 推荐理由 |
|---|---|---|
| cargo-audit | 供应链安全 | 快速排除已知的 CVE 依赖漏洞 |
| cargo-deny | 策略控制 | 限制特定许可证(License)或有风险的源 |
| cargo-expand | 宏审计 | 看到宏展开后的真实代码(防止宏内藏毒) |
| cargo-fuzz | 动态审计 | 通过自动化输入探测崩溃点 |
下一步:将审计流程自动化
既然你在 Kali 下工作,可以考虑把这些工具组合成一个简单的 shell 脚本。你想让我帮你写一个名为 rust-scan 的脚本吗?它可以一键运行 audit、clippy 和权限检查,帮你快速对一个陌生项目进行初步的安全评估。
Rust Project Security Auditing Workflow
这视频展示了 2025 年及以后 Kali Linux 中最先进的安全工具趋势,虽然涵盖了更广的网络安全范畴,但其中关于漏洞扫描和自动化分析的逻辑,与我们在 Rust 审计中追求的“排除错误选项”思路不谋而合。
官方的 Rust Playground
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024 这个网站可以编译运行rust语言
这个网站就是官方的 Rust Playground。正如你所说,它是学习和快速验证 Rust 代码最方便的工具。
结合你在 Kali Linux 下配置环境的经历,这个网站在你的“预判逻辑”中可以作为以下几个用途:
1. 跨平台验证的“控制变量”
当你怀疑某个错误(比如你刚遇到的权限问题)是 Kali 系统环境导致,还是 Rust 代码逻辑本身的问题时,你可以把代码直接粘贴到 Playground 运行:
- 如果在 Playground 成功,本地失败 说明是本地环境权限或配置问题(验证了你对 Kali 权限限制的猜想)。
- 如果 Playground 也失败 说明是代码逻辑错误。
2. 预研 2024 Edition 新特性
你给出的 URL 中 edition=2024 是 Rust 的最新版本(目前处于稳定化阶段)。
- 2024 Edition 引入了许多关于 异步(Async) 和 解耦(Gen blocks) 的改进。
- 作为写书和做审计的人,你可以直接在这里测试最新的语法特性,而无需在本地频繁更新多个 Toolchains。
3. 分享与协作
你在写书或记录复盘笔记时,如果想展示一段代码的运行结果,点击 Playground 页面上的 “Share” 按钮,会生成一个永久链接。这比发截图或代码片段更具有“可验证性”,非常符合你“相信逻辑、排除错误”的风格。
提醒:Playground 的局限性
虽然它很强大,但对于你关注的“审计”和“复杂项目”来说,它有两个短板:
- 无法安装任意第三方库:它只支持排名前 100 左右的热门 Crate。
- 无法模拟系统底层操作:因为它运行在受限的沙盒环境中,你无法测试涉及 Kali 特有的网络协议栈或文件系统权限的代码。
既然你在用最新的 2024 Edition,是在研究什么新的语法特性吗?如果有具体的代码逻辑想验证,也可以发给我,我陪你一起“复盘”它的运行逻辑。