清理缓存、换软件源、装社区仓库、升级发行版、编译工具链——这些「环境维护」动作每次都要重查一遍。这篇把散在各处的记录收在一起。
清理 VS Code 删除所有已安装的插件 rm -rf ~/.vscode/extensions
删除插件的全局存储数据(如数据库、缓存状态等) rm -rf ~/.config/Code/User/globalStorage
删除插件的工作区状态 rm -rf ~/.config/Code/User/workspaceStorage
1. 删除插件目录 rm -rf ~/.vscode/extensions
2. 删除用户配置和数据目录 (包含 settings.json, keybindings.json, 缓存等) rm -rf ~/.config/Code 9d6b25a544a0e129df7ad4761de21fd4
清理 Cargo 缓存和构建产物 清理 Cargo 缓存和构建产物 TL;DR : 使用 cargo clean 清理项目构建产物,删除 ~/.cargo/registry 清理全局缓存,或使用 cargo-cache/cargo-sweep 工具进行更精细的管理。
快速清理命令 清理当前项目 1 2 3 4 5 cargo clean cargo clean --release
清理全局缓存 1 2 3 4 5 6 7 8 rm -rf ~/.cargo/registryrm -rf ~/.cargo/gitrm -rf ~/.cargo
推荐工具 cargo-cache 功能强大的缓存管理工具。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 cargo install cargo-cache cargo cache cargo cache --remove-dir all cargo cache clean-unref cargo cache --remove-if-older-than 30
cargo-sweep 清理旧构建产物,支持按时间和工具链过滤。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 cargo install cargo-sweep cargo sweep --dry-run --time 30 cargo sweep --time 30 cargo sweep --installed cargo sweep --time 30 /path/to/project
批量清理多个项目 1 2 3 4 5 find /path/to/projects -type d -name target -exec rm -rf {} + find . -name "target" -type d -exec rm -rf {} + 2>/dev/null
Rust 工具链管理 1 2 3 4 5 6 7 8 rustup show rustup uninstall nightly rustup self update
清理未使用依赖 1 2 3 4 5 6 cargo install cargo-machete cargo-udeps cargo machete cargo udeps --all-targets
完全卸载 Rust 1 2 3 4 5 6 rustup self uninstall rm -rf ~/.rustuprm -rf ~/.cargo
环境变量配置 1 2 3 4 5 export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustupexport RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustupexport CARGO_HOME="$HOME /.cargo" export PATH="$CARGO_HOME /bin:$PATH "
清理策略对比
方法
清理范围
推荐场景
风险等级
cargo clean
当前项目构建产物
快速释放项目空间
低
rm -rf ~/.cargo/registry
全局 crate 缓存
急需释放大量空间
中
cargo-cache
可定制缓存清理
精细化管理
低
cargo-sweep
旧构建产物
多项目开发环境
中
rustup uninstall
工具链
切换版本后清理
低
最佳实践
日常开发 :使用 cargo sweep --time 7 每周清理一次
CI/CD 环境 :每次构建前执行 cargo clean
磁盘空间紧张 :优先清理 ~/.cargo/registry 和 ~/.rustup
安全第一 :执行删除前使用 --dry-run 预览效果
Tags : #rust #cargo #cleanup #disk-space #development-tools
npm 和 pnpm 清理缓存 以下是 npm、pnpm 和 yarn 清理软件包缓存的标准命令:
npm 1 2 npm cache clean --force
--force 参数是必需的,因为 npm 默认会提示确认。
清理后,下次安装包时会重新下载。
pnpm
yarn (Classic, 1.x)
在 Yarn 1.x 中,此命令会删除整个缓存文件夹。
yarn (Berry, 2+) Yarn 2+ 的缓存管理略有不同,通常通过其插件系统管理。最常用的清理命令同样是:
其行为与 Yarn 1 类似,会清理全局缓存。
在 Bun 中,清理缓存非常简单,只需执行以下命令即可:
bun pm cache dir
这条命令会删除 Bun 的全局缓存目录(默认位于 ~/.bun/cache),让你在下次安装或运行时重新下载所需的包。 如果你想更彻底地清空缓存,可以加上 --force 选项:
提示
运行 bun cache clean 后,Bun 会在下一次需要时自动重新下载缺失的依赖。
该命令不会影响已安装的本地项目依赖,只会清理全局缓存。
Cargo 包管理器完全指南 Cargo 包管理器完全指南 TL;DR : Cargo 是 Rust 的构建系统和包管理器,处理代码构建、依赖管理和任务自动化。本指南涵盖从安装到高级使用的完整流程。
目录
安装与配置
创建第一个项目
核心命令
依赖管理
项目类型
测试与检查
优化构建
高级技巧
安装与配置 自动安装 1 2 3 4 5 curl https://sh.rustup.rs -sSf | sh sh ./rustup.rs
环境配置 1 2 3 4 5 6 7 8 9 source $HOME /.cargo/envexport PATH="$HOME /.cargo/bin:$PATH " rustc --version cargo --version
包管理器安装(Linux) 1 2 3 4 5 sudo apt install rust cargosudo dnf install rust cargo
创建第一个项目 二进制项目(默认) 1 2 cargo new hello_opensource cd hello_opensource
项目结构:
1 2 3 4 hello_opensource/ ├── Cargo.toml # 项目配置 └── src/ └── main.rs # 入口文件
库项目 1 cargo new --lib libhello
结构差异:
生成 src/lib.rs 而非 src/main.rs
包含默认测试示例
核心命令 构建与运行
命令
功能
输出目录
使用场景
cargo build
编译项目
target/debug/
开发调试
cargo run
编译并运行
target/debug/
快速执行
cargo check
仅检查语法
无二进制文件
快速验证
cargo clean
清理构建产物
删除 target/
释放空间
时间对比示例 1 2 3 4 5 time cargo build time cargo check
依赖管理 添加依赖 编辑 Cargo.toml:
1 2 3 [dependencies] rand = "0.3.14" serde = "1.0"
更新依赖 1 2 3 4 5 6 7 8 cargo update cargo update -p rand cargo tree
依赖解析机制
Cargo.lock:锁定精确版本,确保可重现构建
自动处理传递依赖(如 rand 依赖 libc)
项目类型对比
类型
命令
入口文件
输出
适用场景
二进制
cargo new
main.rs
可执行文件
应用程序
库
cargo new --lib
lib.rs
库文件
共享代码
测试与检查 运行测试 1 2 3 4 5 6 7 8 cargo test cargo test test_name cargo test --doc
默认测试示例 1 2 3 4 5 6 7 #[cfg(test)] mod tests { #[test] fn it_works () { assert_eq! (2 + 2 , 4 ); } }
测试输出示例 1 2 3 4 running 1 test test tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored
优化构建 开发构建(默认)
发布构建 1 2 3 4 cargo build --release
性能对比
构建类型
编译时间
运行时性能
二进制大小
调试信息
Debug
快
较慢
较大
包含
Release
慢
快
小
移除
高级技巧 详细模式 1 2 3 4 5 cargo build -v cargo clean -v
构建外部包 1 2 3 git clone <repo-url> cd <package-folder>cargo build
增量编译
默认启用,加速重新编译
缓存位于 target/debug/incremental/
实用命令集合 1 2 3 4 5 6 7 8 9 10 11 cargo fmt cargo clippy cargo doc --open cargo publish
最佳实践 开发流程
编码阶段 :使用 cargo check 快速验证
调试阶段 :使用 cargo build 生成调试信息
发布阶段 :使用 cargo build --release 优化性能
测试阶段 :使用 cargo test 确保质量
项目维护
定期运行 cargo update 更新依赖
使用 cargo outdated 检查过期依赖
发布前执行 cargo clean && cargo build --release
磁盘管理
使用 cargo clean 清理中间文件
定期清理 ~/.cargo/registry 缓存
使用 cargo sweep 清理旧构建产物
常见问题 如何处理版本冲突? Cargo 自动解决依赖版本冲突,遵循语义化版本规则。使用 cargo tree 查看依赖关系图。
为什么编译这么慢?
首次构建需下载和编译依赖
Release 模式优化级别高
解决方案:使用 cargo check 快速验证
如何加速 CI/CD 构建?
缓存 ~/.cargo 和 target/ 目录
使用 cargo check 代替 cargo build 进行快速验证
Tags : #rust #cargo #package-manager #build-system #development #tutorial #dependency-management
Ubuntu Linux 中移除 Snap 软件包 这个指南阐述了你如何从 Ubuntu 系统中完全移除 Snap。
这些步骤在 Ubuntu 22.04 LTS Jammy Jellyfish 中进行了测试。然而,它应该也适用于所有的 Ubuntu 系统版本。
警告:这些步骤将会移除 Ubuntu 系统中两个关键的程序:软件商店和 Firefox。尝试这些步骤之前确认你已经对书签和 Firefox 的其它设置做了备份。
在 Ubuntu Linux 移除 Snap 软件包
在你的系统中打开一个终端,使用以下命令查看已经安装的 Snap 软件包的列表:
按照以下的顺序移除 Snap 软件包。首先移除 Firefox。然后是软件商店,和用以上命令看到的你的系统中的其它软件包:
1 2 3 4 5 6 7 8 sudo snap remove --purge firefoxsudo snap remove --purge snap-storesudo snap remove --purge gnome-3-38-2004sudo snap remove --purge gtk-common-themessudo snap remove --purge snapd-desktop-integrationsudo snap remove --purge baresudo snap remove --purge core20sudo snap remove --purge snapd
最后,通过 apt 命令移除 Snap 服务:
1 sudo apt remove --autoremove snapd
这还没完,即使你用以上命令移除了 Snap 软件包,但是如果你没有关闭 apt 触发器,sudo apt update 命令会再一次将 Snap 安装回来。
所以,要关闭它,我们需要在 /etc/apt/preferences.d/ 目录下创建一个 apt 设置文件 nosnap.pref 来关闭 Snap 服务:
1 sudo gedit /etc/apt/preferences.d/nosnap.pref
添加以下的命令行,并保存该文件:
1 2 3 Package: snapd Pin: release a=* Pin-Priority: -10
如果你知道如何使用它,那么这个 apt 设置文件是一个潜在的工具。举个例子,在以上的状态中,Pin-Priority -10 意思就是阻止 Snap 软件包的安装。
与此教程不相关的,举个例子,如果你想给所有发行版代号为 “bullseye” 的软件包超高优先权的话,那么就可以查看这些设置文件。如果你想了解更多,你可以访问 apt 手册页 。
1 2 3 Package: * Pin: release n=bullseye Pin-Priority: 900
回到我们的主题,一旦你已经保存和关闭以上文件,从终端中再次运行以下命令:
最后,从 Ubuntu 中移除 Snap 的步骤全部完成。
从 Ubuntu 移除 Snap 后使用 deb 文件安装软件商店和 Firefox 你已经移除了 Firefox 和软件商店,但是你的工作还需要它们。
要安装 apt 版的 GNOME 软件商店,你可以使用以下命令。确保使用 --install-suggests 参数。否则,将会再次安装上 Snap 版本的软件包管理器!
1 sudo apt install --install-suggests gnome-software
要安装 Firefox,通过以下命令使用官方 PPA 仓库:
1 2 3 sudo add-apt-repository ppa:mozillateam/ppasudo apt updatesudo apt install -t 'o=LP-PPA-mozillateam' firefox
一旦你已经安装完 Firefox,使用以下命令开启自动更新:
1 echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
最后但同样重要,当运行 apt 时,为 Firefox 创建另一个设置文件给予以上 PPA 仓库超高优先权。如果你不这么做,apt update 命令会再次安装 Snap 版本 Firefox,并把它的”Snap 朋友们”带回来。
1 sudo gedit /etc/apt/preferences.d/mozillateamppa
最后,添加这些命令行并保存文件:
1 2 3 Package: firefox* Pin: release o=LP-PPA-mozillateam Pin-Priority: 501
完成。
在 Ubuntu 系统恢复到 Snap 软件包 如果你改变想法,移除该设置文件,并通过以下命令再次启动安装程序:
1 2 3 4 sudo rm /etc/apt/preferences.d/nosnap.prefsudo apt update && sudo apt upgradesudo snap install snap-storesudo apt install firefox
快速指南 我们(Fedora EPEL)提供包含存储库配置文件和公共软件包签名密钥的发布包。使用与企业操作系统的主版本对应的版本。
如果您使用的是 CentOS Stream,我们还建议您安装相应的 epel-next-release 软件包。
什么是 epel-next? EPEL 软件包是针对 RHEL 构建的。EPEL Next 是一个额外的存储库,允许软件包维护者根据 CentOS Stream 进行构建。当 CentOS Stream 包含即将到来的 RHEL 库 rebase 时,或者如果 EPEL 包具有 CentOS Stream 中已经存在但尚未在 RHEL 中的最低版本构建要求,则有时需要这样做。EPEL Next 有自己的 distgit 分支、koji build 目标和 bodhi releases。EPEL Next 软件包的 disttag 后附加了 .next(例如 el8.next,epel 8-next 的 disttag 为 .www.example.com),以提供从同一 distgit 提交构建的 EPEL 软件包的升级路径。包维护者可以为 EPEL 和 EPEL Next 重建相同的提交,并在 koji 中获得两个不同的 NVR。在六个月内,需要在 EPEL Next 中构建的构建需求应该在 RHEL 中,并且那时软件包维护者可以在 EPEL 分支中进行正常的发布 bump 提交,并获得比先前的 EPEL 和 EPEL Next 软件包都更新的 NVR。要开始使用 EPEL Next,请为您的目标 EPEL 版本请求相应的分支。
为了方便起见,一些发行版在其默认存储库中包含了这些发布包,允许您按名称安装它们,而无需完整的 URL。
CentOS Stream 10 1 2 dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm sudo crb enable
EL9 CentOS Stream 9 1 2 dnf config-manager --set-enabled crb dnf install epel-release epel-next-release
RHEL 9 1 2 sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch )-rpmssudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
AlmaLinux 9 1 2 dnf config-manager --set-enabled crb dnf install epel-release
EL8 CentOS Stream 8 1 2 dnf config-manager --set-enabled powertools dnf install epel-release epel-next-release
RHEL 8 1 2 3 subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch )-rpms dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm crb enable
AlmaLinux 8, Rocky Linux 8 1 2 dnf config-manager --set-enabled powertools dnf install epel-release
EL7 RHEL 7 1 2 3 4 subscription-manager repos --enable rhel-*-optional-rpms \ --enable rhel-*-extras-rpms \ --enable rhel-ha-for-rhel-*-server-rpms yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
CentOS 7 1 yum install epel-release
来源:EPEL 文档
修复PackageKit无法正确切换代理 使用过代理在图形界面下安装软件包后,会出现这样的毛病:
目前确认为 PackageKit 软件包的问题,无法正确切换代理,需要手动编辑配置(数据库)。
解决方案 命令行操作
安装 sqlite3:
1 sudo dnf/apt install sqlite3
删除代理设置:
1 2 3 sudo sqlite3 /var/lib/PackageKit/transactions.dbDELETE FROM proxy; .exit
重启 packagekit:
1 sudo systemctl restart packagekit
图形界面操作
安装 sqlitebrowser:
1 sudo dnf/apt install sqlitebrowser
删除代理设定:
1 sudo sqlitebrowser /var/lib/PackageKit/transactions.db
点击浏览数据页面,选择表名 proxy 并删除所有数据。
重启 packagekit:
1 sudo systemctl restart packagekit
来源:PackageKit Issue #392
FreeBSD pkg 自动卸载安装依赖 pkg delete <pkgname>pkg autoremove 例如:pkg delete py311-qt5-pyqtpkg autoremove 推荐做法 如果你希望依赖包在安装时就被标记为“自动安装”,安装时加 -A:pkg install -A py311-qt5-pyqt 之后卸载主包:pkg delete py311-qt5-pyqtpkg autoremove pkg autoremove 会删除不再被任何手动安装包需要的自动依赖。 查看会删除什么 先 dry-run:pkg autoremove -n 或者:pkg delete -n py311-qt5-pyqtpkg autoremove -n 关键区别
pkg delete <pkg>:只删除指定包,除非有依赖关系阻止。
pkg autoremove:删除“自动安装且已无其他包依赖”的包。
pkg install -A <pkg>:把包标记为自动安装。
pkg set -A 1 <pkg>:把已安装包改成自动安装。
pkg set -A 0 <pkg>:把包改成手动安装,避免被 autoremove 删除。 如果包当初不是用 -A 安装的 可以先把它和依赖标成自动,再卸载主包并 autoremove。但要小心不要误删你需要的包。 查看包的依赖:pkg info -d <pkgname> 查看哪些包依赖它:pkg info -r <pkgname> 把某个包标记为自动安装:pkg set -A 1 <pkgname> 把某个包标记为手动安装:pkg set -A 0 <pkgname> CI/临时环境推荐 在 GitHub Actions / VM 里安装构建依赖时:pkg install -A -y <deps...> 构建完成后清理:pkg delete -y <top-level-build-pkg>pkg autoremove -ypkg clean -ay 如果只是一次性 CI VM,通常不需要清理;但如果有缓存或镜像复用,建议用pkg autoremove -y && pkg clean -ay
Ubuntu 22.04在线升级注意事项 1. 某些云服务商使用自定义镜像源 在直接使用在线更新时会被禁用,需要使用下列命令更新:
1 RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
2. 新版搭载的 OpenSSH 软件包默认已拒绝 rsa-sha1 算法生成的密钥 请提前配置 sha2 密钥,如:
1 ssh-keygen -t rsa-sha2-512 -b 4096
如果您无法在本地计算机上更改任何内容,或者不想使用新密钥,并且希望在本地计算机上重新启用 RSA,请在远程计算机上编辑文件 /etc/ssh/sshd_config 并添加以下行:
1 2 HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa
这将允许使用您已经拥有的不安全 RSA 密钥。
请记住通过以下方式重新启动 sshd 服务:
1 sudo systemctl restart sshd
否则,您必须重新启动计算机才能使更改生效。
升级gcc 14.2.0 编译 GMP,MPFR,MPC 注意三个库编译的顺序 (gmp -> mpfr -> mpc)。因为编译 mpfr 时需要依赖于 gmp,编译mpc时候又需要依赖于 gmp 和 mpfr,所以需要最先编译 gmp,然后编译 mpfr,最后编译 mpc。编译过程中需要在 configure 配置时设置好 gmp,mpfr 的 include 和 lib 路径,不然就会遇见 configure: error: libgmp not found or uses a different ABI (including static vs shared). configure: error: libmpfr not found or uses a different ABI (including static vs shared). 这两个 configure: error 。
2.1. 编译GMP 编译的时候需要记录下 --prefix 参数的值,也就是我们自定义的gmp的安装目录,后面编译其他两个库和gcc的时候需要使用。
1 2 3 4 5 tar -xvjf gmp-6.2.1.tar.bz2 cd gmp-6.2.1/./configure --prefix=$(pwd ) make make install
2.2. 编译MPFR 1 2 3 4 5 6 7 tar -xvjf mpfr-4.1.0.tar.bz2 cd mpfr-4.1.0/./configure --prefix=$(pwd ) \ --with-gmp-include=/home/test/deps/gmp-6.2.1/include \ --with-gmp-lib=/home/test/deps/gmp-6.2.1/lib make make install
2.3. 编译MPC 1 2 3 4 5 6 7 8 9 tar -xvzf mpc-1.2.1.tar.gz cd mpc-1.2.1/./configure --prefix=$(pwd ) \ --with-gmp-include=/home/test/deps/gmp-6.2.1/include \ --with-gmp-lib=/home/test/deps/gmp-6.2.1/lib \ --with-mpfr-include=/home/test/deps/mpfr-4.1.0/include \ --with-mpfr-lib=/home/test/deps/mpfr-4.1.0/lib make make install
2.4. 配置动态库 (so)到 LD_LIBRARY_PATH 环境变量 在终端运行下面命令可以将上面所编译好的三个库的动态库 (so)文件配置到 LD_LIBRARY_PATH 环境变量中,如果需要让配置永久生效,则需将下面的代码添加到 ~/.bashrc 文件中 并运行 source ~/.bashrc 命令即可。
1 export LD_LIBRARY_PATH=/home/test/deps/gmp-6.2.1/lib:/home/test/deps/mpfr-4.1.0/lib:/home/test/deps/mpc-1.2.1/lib:$LD_LIBRARY_PATH
3. 源代码编译安装GCC 3.1. 下载最新版的GCC 可以直接从 GCC, the GNU Compiler Collection 下载最新版本的 GCC 源码压缩包,在这里我通过 wget命令从GCC mirror sites 服务器下载当前最新版本 GCC 源码压缩包。 关于 GCC mirror sites 的选择可以浏览下面的网页:
GCC mirror sitesgcc.gnu.org/mirrors.html
1 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-13.1.0/gcc-13.1.0.tar.gz
3.2. 编译安装 GCC 详细的 configure 参数设置可以参考:Installing GCC: Configuration ,这里我没有设置过多的参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 tar -xvzf gcc-13.1.0.tar.gz cd gcc-13.1.0./configure \ --disable-multilib \ --prefix=$(pwd )/ \ --with-gmp-include=/home/test/deps/gmp-6.2.1/include \ --with-gmp-lib=/home/test/deps/gmp-6.2.1/lib \ --with-mpfr-include=/home/test/deps/mpfr-4.1.0/include \ --with-mpfr-lib=/home/test/deps/mpfr-4.1.0/lib \ --with-mpc-include=/home/test/deps/mpc-1.2.1/include \ --with-mpc-lib=/home/test/deps/mpc-1.2.1/lib make -j4 make install
如果在make的过程遇见 # error GATHER_STATISTICS must be defined 这个错误,则只需通过在终端运行export CPLUS_INCLUDE_PATH= 命令暂时的清除CPLUS_INCLUDE_PATH 变量即可。
4. 环境变量的配置 安装完 GCC 之后,我们需要将其配置到系统的环境变量中,如果需要长久生效,则需要将下面内容添加到 ~/.bashrc中即可。也可以通过构建软链接的方式替换成老版本的GCC。
1 2 3 4 5 export PATH=/home/test/gcc-14.2.0/bin:$PATH export LIBRARY_PATH=/home/test/gcc-14.2.0/lib64:$LIBRARY_PATH export LD_LIBRARY_PATH=/home/test/gcc-14.2.0/lib64:$LD_LIBRARY_PATH export C_INCLUDE_PATH=/home/test/gcc-14.2.0/include:$C_INCLUDE_PATH export CPLUS_INCLUDE_PATH=/home/test/gcc-14.2.0/include:$CPLUS_INCLUDE_PATH