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的版本信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode-顺时针旋转矩阵-111

题目要求 思路 1.假设现在有一个矩阵 123 456 789 2.我们可以根据19这个对角线将数据进行交换&#xff0c;得到矩阵 147 258 369 3.然后将矩阵每一行的数据再翻转&#xff0c;得到矩阵 741 852 963 代码实现 class Solution { public:vector<vector<int> > rot…

Django自定义模板标签与过滤器

title: Django自定义模板标签与过滤器 date: 2024/5/17 18:00:02 updated: 2024/5/17 18:00:02 categories: 后端开发 tags: Django模版自定义标签过滤器开发模板语法Python后端前端集成Web组件 Django模板系统基础 1. Django模板语言概述 Django模板语言&#xff08;DTL&…

【译】MySQL复制入门: 探索不同类型的MySQL复制解决方案

原文地址&#xff1a;An Introduction to MySQL Replication: Exploring Different Types of MySQL Replication Solutions 在这篇博文中&#xff0c;我将深入介绍 MySQL 复制&#xff0c;回答它是什么、如何工作、它的优势和挑战&#xff0c;并回顾作为 MySQL 环境&#xff0…

【Qt】深入探索Qt主窗口与菜单栏:构建高效用户界面的实践指南

文章目录 前言1. 什么是Main Window?2. 详细了解一下其中的 菜单栏&#xff1a;2.1. 创建菜单栏2.2. 添加快捷键2.3. 添加子菜单2.4. 添加分割线2.5. 添加图标 3. 内存泄漏问题&#xff1a;总结 前言 在现代软件开发中&#xff0c;用户界面的设计对于提升用户体验至关重要。Q…

【雅特力AT32】串口UART、USART配置和使用方法,数组的阻塞发送函数编写,串口接收中断、回环、重定向

【雅特力AT32】串口UART、USART配置和使用方法&#xff0c;数组的阻塞发送函数编写&#xff0c;串口接收中断、回环、重定向 文章目录 串口配置阻塞发送函数接收中断和串口回环串口重定向附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时…

了解CentOS及其基础

什么是CentOS&#xff1f; CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一个社区支持的操作系统&#xff0c;基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;的源代码。它是免费且开源的&#xff0c;广泛用于服务器环境。 为什么选择C…

深入理解HTTP:工作原理、特性及应用

HTTP&#xff0c;全称Hypertext Transfer Protocol&#xff0c;即超文本传输协议&#xff0c;是互联网上应用最为广泛的一种网络协议。它定义了客户端和服务器之间如何交换信息&#xff0c;以及如何传输超文本和其他内容。HTTP协议的出现极大地推动了互联网的普及和发展&#x…

ARM|DSP+FPGA+NVIDIA AI摄像头定制

信迈拥有高性能的摄像头全栈能力&#xff1a;掌握车载模组光学设计能力&#xff0c;具有多名经验丰富光学设计专家&#xff1b;具备丰富的车载摄像模组硬件设计经验&#xff1b;掌握目前市面上大部分车载平台的ISP图像画质服务能力&#xff0c;能自主开发图像ISP和增强算法&…

第十二章 网络编程

第十二章 网络编程 网络协议概述 通信协议&#xff1a; 协议即规则&#xff0c;就好比汽车上路要遵守交通规则一样&#xff0c;为了使全世界不同类型的计算机都可以连接起来&#xff0c;所以制定了一套全球通用的通信协议——Internet协议。有了Internet协议&#xff0c;任何…

【mysql】【docker】mysql8-互为主从

&#x1f338;&#x1f338; Linux/docker-compose/mysql8 互为主从 优雅部署 &#x1f338;&#x1f338; 记录下两台Linux的mysql需要热备份&#xff0c;互为主从&#xff0c;后期加上keepalived实现高可用切换 参考博客&#xff1a;答 案 &#x1f338; 一、准备文件 这里…

图形学初识--直线插值算法

文章目录 为什么需要插值算法&#xff1f;插值算法是什么&#xff1f;有哪些常见的插值算法呢&#xff1f;1. 线性插值&#xff08;Linear Interpolation&#xff09;2. 多项式插值&#xff08;Polynomial Interpolation&#xff09;3. 样条插值&#xff08;Spline Interpolati…

Blazor 下支持 Azure AD 的多套登录方案

比如上图配置了两套不同的登录方案&#xff0c;各有自己的 TenantId 和 ClientId &#xff0c;要同时支持他们的登录&#xff08;其实在同一套 TenantId 和 ClientId 里面配置多个登录账户不就好了&#xff0c;但是......那套登录的管理是在客户自己的Azure AD账户管理下的&…

SpringBoot3 解决NoResourceFoundException: No static resource favicon.ico.异常

SpringBoot3 解决NoResourceFoundException: No static resource favicon.ico.异常 spring boot3项目中浏览器中访问报错找不到favicon.ico&#xff0c;虽然不影响使用&#xff0c;用api工具也可以忽略这个异常&#xff0c;但是防止浏览器访问时出现异常干扰日志&#xff0c;所…

oracle数据库解析过高分析

解析非常高&#xff0c;通过时间模型可以看到解析占比非常高 解析大致可以分为硬解析&#xff08; hard parse&#xff09;、软解析&#xff08; soft parse&#xff09;和软软解析&#xff08; soft soft parse&#xff09;。如&#xff0c;执行一条 SQL 的时候&#xff0c;如…

星型模型和雪花模型的区别

星型模型和雪花模型都是数据仓库设计中常用的维度建模方法&#xff0c;它们之间的主要区别在于数据组织结构、数据冗余度、查询效率、可扩展性和正规化程度等方面&#xff1a; 星型模型 结构特点&#xff1a;星型模型中&#xff0c;一个中心的事实表连接多个维度表&#xff0…

在电脑中,Apple Mobile Device Support程序是什么?

Apple Mobile Device Support 是一项关键的后台服务&#xff0c;它为 Windows 用户提供了与苹果 iOS 设备&#xff08;包括 iPhone、iPad 和 iPod&#xff09;顺畅互动的能力。这项服务的核心功能是为iTunes软件提供必要的支持&#xff0c;使得用户能够将他们的移动设备与电脑连…

Google Find My Device:科技守护,安心无忧

在数字化的时代&#xff0c;我们的生活与各种智能设备紧密相连。而 Google Find My Device 便是一款为我们提供安心保障的实用工具。 一、Find My Decice Netword的定义 谷歌的Find My Device Netword旨在通过利用Android设备的众包网络的力量&#xff0c;帮助用户安全的定位所…

HTML5 历史、地理位置处理、全屏处理

目录 历史HistoryAPI地理位置处理GeolocationAPI全屏处理FullscreenAPIHistoryAPI window.history 对象 window.history 是浏览器提供的一个内置对象,它提供了对浏览器历史记录的访问和操作能力。通过这个对象,开发者可以实现无刷新页面跳转、添加新的浏览历史条目等,从而提…

STM32F4_HAL控制GPIO输出——跑马灯实验

1、GPIO工作模式 1.1 端口输入数据寄存器&#xff08;IDR&#xff09; 1.2 端口输出数据寄存器&#xff08;ODR&#xff09; 1.3 端口置位/复位寄存器&#xff08;BSRR&#xff09; 为什么有了 ODR 寄存器&#xff0c;还要这个 BSRR 寄存器呢&#xff1f;我们先看看 BSRR 的寄…

23种设计模式(持续输出中)

一.设计模式的作用 设计模式是软件从业人员长期总结出来用于解决特定问题的通用性框架&#xff0c;它提高了代码的可维护性、可扩展性、可读性以及复用性。 二.设计模式 1.工厂模式 工厂模式提供了创建对象的接口&#xff0c;而无需制定创建对象的具体类&#xff0c;工厂类…