当前位置: 首页 > news >正文

Rust:如何在 Windows 的 Linux 子系统(WSL)下安装

一、安装步骤

在Windows Subsystem for Linux (WSL)下安装Rust,可以按照以下步骤进行:

  1. 打开WSL终端
    首先,确保你的WSL已经安装并正常运行。你可以在Windows搜索栏中输入“WSL”并选择你安装的Linux发行版(如Ubuntu)来打开它。

  2. 更新包管理器
    在开始安装之前,建议更新你的包管理器。如果你使用的是基于Debian的发行版(如Ubuntu),可以运行以下命令来更新apt

    sudo apt update && sudo apt upgrade -y
    

    这将确保所有现有的软件包都是最新的,同时更新包管理器的索引。

  3. 安装Rust和Cargo
    Rust语言和其包管理工具Cargo可以通过Rust的安装脚本来安装。在WSL终端中运行以下命令:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    

    这个命令会下载一个脚本并执行,该脚本将自动安装Rust编译器和Cargo。

  4. 配置环境变量
    安装完成后,你需要将Cargo的安装目录添加到你的PATH环境变量中。通常,安装脚本会提示你如何操作。如果你使用的是bash,可以添加如下命令到你的~/.bashrc~/.bash_profile文件中:

    source $HOME/.cargo/env
    

    然后重新加载配置文件或重新打开终端,以确保环境变量生效。

  5. 验证安装
    安装完成后,你可以通过运行以下命令来验证Cargo是否正确安装:

    cargo --version
    

    如果安装成功,你应该会看到Cargo的版本号输出。

  6. 使用Rust
    现在你已经成功在WSL下安装了Rust,可以开始编写和运行Rust程序了。

请注意,这些步骤可能因你使用的Linux发行版和WSL的版本而略有不同。如果遇到任何问题,建议查阅Rust的官方文档或寻求社区的帮助。

二、curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh 这个命令停留很久也没反应

如果你执行 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 命令后很长时间没有反应,这可能是由于多种原因造成的。以下是一些建议的解决步骤:

  1. 检查网络连接
    确保你的网络连接是稳定的,并且WSL可以访问外部网络。你可以尝试在WSL终端中ping一个常见的网站,比如 ping google.com,来检查网络连通性。

  2. 代理或VPN
    如果你在使用代理服务器或VPN,请确保它们配置正确,并且允许WSL通过它们进行连接。有时候,代理或VPN的设置可能会阻止或减慢脚本的下载速度。

  3. 尝试手动下载
    如果通过curl直接运行脚本没有反应,你可以尝试手动下载rustup安装脚本。在浏览器中访问 https://sh.rustup.rs ,然后将页面上的脚本内容保存为一个文件(比如 rustup-init.sh),之后在WSL中运行这个脚本:

    chmod +x rustup-init.sh
    ./rustup-init.sh
    
  4. 查看curl的进度
    如果可能的话,你可以尝试去掉-sSf参数来查看curl的下载进度,这样可以帮助你确定是否真的有数据在传输。命令如下:

    curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -o rustup-init.sh
    chmod +x rustup-init.sh
    ./rustup-init.sh
    
  5. 检查防火墙和安全软件
    确保你的防火墙或安全软件没有阻止curl或WSL的网络访问。

  6. 更新WSL和Linux发行版
    有时候,WSL或其Linux发行版可能存在bug或兼容性问题。确保你的WSL和Linux发行版都是最新版本。

  7. 查看日志和错误信息
    如果上述方法都不行,尝试查看curl或WSL的日志,看是否有任何错误信息可以帮助你诊断问题。

如果尝试了上述所有方法仍然无法解决问题,你可能需要更深入地调查网络设置,或者寻求社区或专业人士的帮助。在论坛、Stack Overflow或Rust社区中提问时,请提供尽可能多的信息,以便他人能够帮助你解决问题。

三、Warning: Failed to create the file rustup-init.sh: Permission denied

当你遇到 “Warning: Failed to create the file rustup-init.sh: Permission denied” 错误时,这通常意味着当前用户没有足够的权限来在指定的目录下创建文件。为了解决这个问题,你可以尝试以下几个步骤:

  1. 检查当前目录的权限
    确认你当前所在的目录是否允许你创建文件。你可以使用 ls -ld . 命令来查看当前目录的权限。

  2. 更改目录
    如果你没有在当前目录的写入权限,尝试切换到一个你有写入权限的目录,比如你的家目录(~$HOME),然后再执行下载命令。

  3. 使用sudo(不推荐)
    虽然使用 sudo 可以提供必要的权限来创建文件,但是在这种情况下并不推荐,因为 rustup-init.sh 脚本将在你的用户环境下运行,并不需要超级用户权限。

  4. 修改文件夹权限
    如果你确实需要在当前目录下创建文件,而且你有足够的权限去修改文件夹的权限,你可以使用 chmod 命令来更改文件夹的权限。但是,请谨慎操作,因为这可能会影响其他用户和应用程序对该文件夹的访问。

建议的解决方法是切换到你的家目录或其他你有写入权限的目录,然后再次尝试下载 rustup-init.sh 脚本。例如:

cd ~
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init.sh
chmod +x rustup-init.sh
./rustup-init.sh

这将确保你有足够的权限来创建和执行脚本文件。记得在执行脚本之前先给它执行权限(chmod +x rustup-init.sh)。

四、查看自己的权限

ls -ld
dr-xr-xr-x 1 xuyeping xuyeping 512 May 20 19:58 .

从给出的目录权限 dr-xr-xr-x 可以看出,当前用户(在这个例子中是 xuyeping)只有读取(r)和执行(x)权限,而没有写入(w)权限。这就是为什么你无法在当前目录下创建 rustup-init.sh 文件的原因。

为了解决这个问题,你需要改变目录的权限或者更改到一个有写入权限的目录。由于更改目录权限可能会影响系统的安全性和稳定性,因此建议的做法是切换到用户有写入权限的目录,比如用户的家目录。

请按照以下步骤操作:

  1. 切换到家目录:
cd ~

或者

cd $HOME
  1. 在家目录中下载 rustup-init.sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init.sh
  1. 赋予脚本执行权限:
chmod +x rustup-init.sh
  1. 运行安装脚本:
./rustup-init.sh

这样你就应该能够在不遇到权限问题的情况下安装 Rust 了。如果你需要在家目录以外的其他地方创建文件,并且有足够的理由要这么做,你可能需要联系系统管理员来调整文件夹的权限。但请注意,随意更改系统文件夹的权限可能会导致安全问题或系统不稳定。

五、安装过程详细内容

~$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
info: downloading installerWelcome to Rust!This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:/home/xuyeping/.rustupThis can be modified with the RUSTUP_HOME environment variable.The Cargo home directory is located at:/home/xuyeping/.cargoThis can be modified with the CARGO_HOME environment variable.The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:/home/xuyeping/.cargo/binThis path will then be added to your PATH environment variable by
modifying the profile files located at:/home/xuyeping/.profile/home/xuyeping/.bashrcYou can uninstall at any time with rustup self uninstall and
these changes will be reverted.Current installation options:default host triple: x86_64-unknown-linux-gnudefault toolchain: stable (default)profile: defaultmodify PATH variable: yes1) Proceed with standard installation (default - just press enter)
2) Customize installation
3) Cancel installation
>info: profile set to 'default'
info: default host triple is x86_64-unknown-linux-gnu
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
730.9 KiB / 730.9 KiB (100 %) 127.4 KiB/s in  2s ETA:  0s
info: latest update on 2024-05-02, rust version 1.78.0 (9b00956e5 2024-04-29)
info: downloading component 'cargo'8.0 MiB /   8.0 MiB (100 %)   4.2 MiB/s in  2s ETA:  0s
info: downloading component 'clippy'
info: downloading component 'rust-docs'15.1 MiB /  15.1 MiB (100 %)   4.4 MiB/s in  4s ETA:  0s
info: downloading component 'rust-std'24.3 MiB /  24.3 MiB (100 %)   4.2 MiB/s in  6s ETA:  0s
info: downloading component 'rustc'63.7 MiB /  63.7 MiB (100 %)   4.1 MiB/s in 18s ETA:  0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'15.1 MiB /  15.1 MiB (100 %)  11.5 MiB/s in  1s ETA:  0s
info: installing component 'rust-std'24.3 MiB /  24.3 MiB (100 %)  18.3 MiB/s in  1s ETA:  0s
info: installing component 'rustc'63.7 MiB /  63.7 MiB (100 %)  19.8 MiB/s in  3s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'stable-x86_64-unknown-linux-gnu installed - rustc 1.78.0 (9b00956e5 2024-04-29)Rust is installed now. Great!To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).To configure your current shell, you need to source
the corresponding env file under $HOME/.cargo.This is usually done by running one of the following (note the leading DOT):
. "$HOME/.cargo/env"            # For sh/bash/zsh/ash/dash/pdksh
source "$HOME/.cargo/env.fish"  # For fish

英文提示翻译如下:

看起来你已经成功地开始安装Rust和Cargo了!安装程序已经给出了它将要做的事情的详细说明,包括安装位置和一些环境变量的修改。这里是安装过程中所提供信息的中文解释:

欢迎来到Rust世界!

安装程序将下载并安装Rust编程语言的官方编译器及其包管理器Cargo。

Rustup的元数据和工具链将被安装到Rustup的主目录中,该目录位于:

/home/xuyeping/.rustup

你可以通过设置RUSTUP_HOME环境变量来修改这个目录位置。

Cargo的主目录位于:

/home/xuyeping/.cargo

这个目录也可以通过设置CARGO_HOME环境变量来修改。

cargo, rustc, rustup等命令将被添加到Cargo的bin目录中,该目录位于:

/home/xuyeping/.cargo/bin

安装程序将通过修改以下配置文件来将这个路径添加到你的PATH环境变量中:

/home/xuyeping/.profile
/home/xuyeping/.bashrc

这样做的目的是让你能够在任何位置直接通过命令行运行Rust相关的命令。

你可以随时卸载:如果你在未来任何时候想要卸载Rust和Cargo,只需运行rustup self uninstall命令,安装程序所做的所有更改都将被撤销。

现在,你应该已经准备好开始使用Rust进行编程了!如果你想要验证安装是否成功,可以打开一个新的终端窗口,并尝试运行rustc --versioncargo --version命令来查看Rust编译器和Cargo的版本信息。

很好,你已经成功安装了Rust!现在,为了让Rust和Cargo的命令在任何地方都能被识别和执行,你需要将这些命令的路径添加到你的环境变量PATH中。安装过程中已经提到了这一点,并为你准备了一个环境脚本文件,在$HOME/.cargo目录下。

根据你的shell类型,你需要运行相应的命令来使这个环境脚本生效。以下是具体的步骤:

  1. 对于sh/bash/zsh/ash/dash/pdksh用户
    打开你的终端,并执行以下命令:

    . "$HOME/.cargo/env"
    

    注意命令前面的点(.)是必需的,它表示在当前shell中执行脚本,而不是启动一个新的shell来执行。

  2. 对于fish用户
    如果你使用的是fish shell,你需要执行以下命令:

    source "$HOME/.cargo/env.fish"
    

    source命令在fish中与在其他shell中的行为略有不同,但效果是相同的,即在当前shell环境中执行脚本。

执行完上述命令后,你的PATH环境变量就会被更新,以包含Cargo的bin目录($HOME/.cargo/bin),这样你就可以在任何位置直接运行rustc, cargo等命令了。

如果你想要这些变更在每次打开新的终端窗口时都自动生效,你可以将上述命令添加到你的shell配置文件中(如.bashrc, .zshrc, config.fish等),具体取决于你使用的shell类型。

最后,为了验证安装和配置是否正确,你可以尝试在新的终端窗口中运行rustc --versioncargo --version,看看是否能正确显示出Rust编译器和Cargo的版本信息。

相关文章:

Rust:如何在 Windows 的 Linux 子系统(WSL)下安装

一、安装步骤 在Windows Subsystem for Linux (WSL)下安装Rust,可以按照以下步骤进行: 打开WSL终端: 首先,确保你的WSL已经安装并正常运行。你可以在Windows搜索栏中输入“WSL”并选择你安装的Linux发行版(如Ubuntu&a…...

工具分享:VsCode注释神器,koro1FileHeader

他是有官方Wiki的。 https://github.com/OBKoro1/koro1FileHeader/wiki/ 项目在GitHub上开源。以下摘录部分wiki,用作介绍分享在这里插入代码片 如何找到setting.json设置模板 简单的输入命令 打开VSCode命令面板: mac: command p window: ctrl p输入> Ope…...

水面漂浮物生活垃圾识别检测系统

水面漂浮物生活垃圾识别检测系统通过现场监控摄像机对河道湖面等水体进行实时监测,水面漂浮物生活垃圾识别检测系统借助智能视频分析技术和YOLO深度学习技术,系统能够自动识别和抓拍水面上的垃圾漂浮物。一旦系统检测到有垃圾漂浮在水面上,立…...

通过python读取并发送二进制文件到串口

代码 #!python.exe """ filename send_bin.py brief According to the users input, read bin file, subpackage and send the file by UART. HowToUse send_bin.py -h author shadowThreeDgmail.com data 20220224 &q…...

前端笔记-day07

学成在线网站 文章目录 效果图代码展示index.htmlindex.cssbase.css 效果图 代码展示 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…...

【MySQL精通之路】INFORMATION_SCHEMA库-INNODB_METRICS表

INNODB_METRICS表提供了各种各样的INNODB性能信息&#xff0c;补充了INNODB性能模式表的特定重点领域。通过简单的查询&#xff0c;您可以检查系统的整体运行状况。通过更详细的查询&#xff0c;您可以诊断诸如性能瓶颈、资源短缺和应用程序问题等问题。 每个监视器表示InnoDB…...

React Native 之 定义全局状态管理库(九)

假设你正在使用基于单页面应用&#xff08;SPA&#xff09;的微前端框架。以下简化一个应用之间共享状态的例子。 1. 使用发布/订阅模式 // globalStateManager.js class GlobalStateManager { constructor() { this.subscribers {}; this.state {}; } subscribe(key…...

java线程池实战应用总结

一、线程池的创建方式 方式&#xff08;一&#xff09;&#xff1a;通过构造函数ThreadPoolExecutor()方式创建线程池 步骤1&#xff1a;先构建线程池 public class AsyncTaskExecutor {/*** 核心线程数*/private static final int corePoolSize 10;/*** 最大线程数*/priva…...

部署 harbor 创建私有项目

一在 Docker harbor 节点&#xff08;192.168.11.&#xff09;上操作 1 关闭防火墙防护 systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 2 安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-ma…...

在Linux系统中解决Java生成海报文字乱码和缺少字体文件的问题

在Linux系统中,如果缺少特定的字体文件,可以通过以下几种方法来解决: 1. 安装系统字体包 大多数Linux发行版提供了各种字体包,可以通过包管理器安装这些字体包。例如,在Debian/Ubuntu系统上,可以使用以下命令安装常见的字体包: # 安装基本的字体包 sudo apt-get updat…...

升级版网创教程wordpress插件自动采集并发布

主要功能&#xff1a; wordpress 插件主题系列支持自动采集并发布。 主要采集: 福缘&#xff0c;中创&#xff0c;冒泡 自动采集各大项目网进行整合发布到自己个人网站 插件话更新&#xff0c;减少网络请求&#xff0c;提升稳定性 代码完美开源 傻瓜式操作&#xff0c;一…...

MySQL 视图(1)

常用视图语句 -- 创建视图 CREATE VIEW t1_view AS SELECT * FROM t1; CREATE VIEW v AS VALUES ROW(1,2);-- 查询视图 SELECT * FROM t1_view;-- 查询视图的相关系统视图 SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = test AND TABLE_NAME =…...

在排序数组中查找元素的一个位置和最后一个位置-力扣

第一此次想到的解法是首先使用二分查找在排序数组中查找到一个指定元素&#xff0c;随后对该元素左右进行遍历&#xff0c;找到起始位置和结束位置&#xff0c;代码如下&#xff1a; class Solution { public:vector<int> searchRange(vector<int>& nums, int…...

系统分析师-案例分析-数据库

系统分析师-案例分析-数据库 更多软考资料 https://ruankao.blog.csdn.net/ 文章目录 系统分析师-案例分析-数据库数据库考察知识点规范化函数依赖范式1NF2NF3NF 规范化问题不规范化反规范化设计反规范化设计同步问题 并发控制性能优化完整性约束视图安全分布式数据库特点优点…...

【RabbitMQ】使用SpringAMQP的消息队列(Hello Word)和工作队列(Work Queue)

SpringAMQP SpringAMQP中文文档 Hello Word **案例1&#xff1a;**利用SpringAMQP实现HelloWord中的集成消息队列功能 项目结构&#xff0c;如图&#xff1a; 1.引入AMQP依赖&#xff08;父工程中&#xff09; <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependen…...

项目集成SkyWalking,基于k8s搭建

一、搭建SkyWalking 官方文档&#xff08;英文&#xff09;&#xff1a;skywalking/docs at master apache/skywalking 中文可以使用&#xff1a;GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache…...

mysql-差异备份流程

4.差异备份流程 差异备份流程&#xff08;重要) 第一次完整备份 innobackupex /xtrabackup innobackupex --userroot --password123456 /xtrabackup2024-05-23_20-25-05 第一次完整备份 2024-05-23_20-40-55 第二次差异备份 2024-05-23_20-47-37 第三次差异备份再往数据库里面…...

基于动态规划算法的DNA序列比对函数,给出两条序列(v和w)的打分矩阵

一.什么是动态规划算法 1.1总体思想 动态规划算法与分治法类似&#xff0c;基本思想也是将待求解的问题分成若干个子问题 经过分解得到的子问题往往不是互相独立的&#xff0c;有些子问题被重复计算多次 如果能够保存已解决的子问题答案&#xff0c;在需要时再找出来已求得…...

Tailwind CSS快速入门

文章目录 初识安装Tailwindcss试用安装快速书写技巧扩展好处Todo 初识 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站 Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;它通过提供大量的原子类&#xff08;utility classes&#xff09;…...

Postman使用技巧

Postman是一款广泛使用的API开发和测试工具&#xff0c;专为简化Web服务API的开发、测试、文档编制和协作过程而设计。它支持各种HTTP请求方法&#xff0c;包括GET、POST、PUT、DELETE等&#xff0c;允许用户轻松地构建和发送请求&#xff0c;以及检查响应。 本文介绍几个提升效…...

sqli-labs靶场

less---11 1.求闭合字符 输入1报错说明存在注入点 存在注入点 2.查库名 使用报错注入查库名 admin” and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)y)# //floor函数报错 3.查表名 admin and upd…...

基于springboot的大创管理系统

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大创管理系统的开发全过程。通过分析大创管理系统管理的不足&#xff0c;创建了一个计算机管理大创管理系统的方案。文章介绍了大创管理系统的系统分析部分&…...

常用torch.nn

目录 一、torch.nn和torch.nn.functional二、nn.Linear三、nn.Embedding四、nn.Identity五、Pytorch非线性激活函数六、nn.Conv2d七、nn.Sequential八、nn.ModuleList九、torch.outer torch.cat 一、torch.nn和torch.nn.functional Pytorch中torch.nn和torch.nn.functional的区…...

力扣226.翻转二叉树101.对称二叉树

解决二叉树的问题&#xff0c;经常要习惯从递归角度思考 左子树/右子树是否具备某属性、是否属于什么类型&#xff08;和题目要求的判断当前树是否xxx一样&#xff09;&#xff1b; 对左/右子树进行什么操作&#xff08;和题目要求的对当前树的操作一样&#xff09;。 226.翻转…...

word如何按照原本页面审阅文档

1 视图-阅读视图 2 视图&#xff0c;自己看&#xff0c;懒得打字了哈哈...

前端基础入门三大核心之HTML篇:探索WebAssembly —— 开启网页高性能应用新时代

前端基础入门三大核心之HTML篇&#xff1a;探索WebAssembly —— 开启网页高性能应用新时代 WebAssembly基础概念工作原理概览WebAssembly实战示例基本使用 安全性与性能优化防范漏洞实践实际工作中的使用技巧结语与讨论 随着Web技术的飞速发展&#xff0c;前端开发者面临越来越…...

NDIS小端口驱动(四)

NDIS中断相关 1. 注册和取消注册中断&#xff1a; 微型端口驱动程序调用 NdisMRegisterInterruptEx 来注册中断。 驱动程序分配并初始化 NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS 结构&#xff0c;以指定中断特征和函数入口点&#xff0c;驱动程序将结构传递给 NdisMRegister…...

用户态网络缓冲区设计

基于数组实现的环形缓冲区&#xff1a; 优点 使用固定大小的连续空间做用户态缓冲区&#xff0c;利用了内存访问的局部性&#xff0c;可以提高缓存命中率&#xff0c;提高程序性能&#xff0c;在处理大量数据时&#xff0c;缓存的利用率对性能有着很大的影响 正是基于性能的…...

Linux运维工程师基础面试题整理(三)

Linux运维工程师基础面试题整理(三) 1. 文件inode号有什么用?2. 文件的权限怎么设置与管理?3. 如何SSH免密配置?4. 如何快速部署一个web服务?5. 如何更新Linux系统内核?6. centos中如何配置本地yum源?7.Linux 防火墙如何简单配置?8. 有哪些工具可以批量管理Linux服务器…...

基于单片机与传感器技术的汽车起动线路设计

摘 要&#xff1a;在以发动机为动力源的汽车中&#xff0c;起动系统承担起使发动机由非工作状态进入工作状态的重要作用&#xff0c;属于发动机的附属系统。在传统汽车起动系统的基础上提出将单片机与传感器技术运用到起动控制线路中&#xff0c;通过传感器采集发动机工作状态信…...