搭建开发环境-WSL+Ubuntu(一键搭建开发环境)

news2024/11/16 11:40:33

概述

所谓工欲善其事必先利其器,搭环境往往是开发过程中卡出很多初学者的拦路虎。
对于很多老鸟来说,很多东西都已经习惯成自然,也就没有刻意和初学者说。但对于很多初学者,却是受益良多。
这个系列,先从操作系统开始,记录一些在开发中常用的工具和小技巧

操作系统

.NET 和 iOS 开发请绕路,这里主要针对的Linux。目前很多开发都需要一台Linux环境来进行编译,调试等等。然而公司发给大家的一般都是win的电脑。
考虑到各种安全策略的限制,还没发直接安装Linux系统,若干年前,只能通过Virtualbox等软件来安装虚拟机,来曲线救国。
后来有了Microsoft 的Hyper-V 等技术,方便了虚拟机的安装,但终究是要在不同的系统之间来回切换的,还是不是很方便。那么有什么方法可以在windows 下操作linux呢?
当然有了,不得不提当前Linux最优秀的发行版本,Windows 的 Subsystem Linux(WSL)!!!

曾几何时,WSL 还只能支持命令行操作,在WSL中使用GUI 应用,还需要另外配置RDP。现在,已经进化到自带RDP协议Run Linux GUI apps on the Windows Subsystem for Linux,只需要一个命令,就可以在WSL中使用IDEA敲代码, 然你感受丝般顺滑(真的,不信的去试下在WSL打开IDEA和Win 下打开IDEA的速度)。
支持各类Shell 命令(再也不用在Git Bash 里敲命令了,太爽了)。

安装WSL 也极其简单, 参照这里Install Linux on Windows with WSL

  1. 检查当前操作系统,需要Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11, 不满足条件的请升级,如果硬件不够不能升级的,请打公司老板或者IT一顿。(老子10年前的i5 都能升级,连这个硬件都没有,还搞什么开发???)
  2. 进入PowerShell, 查看可安装版本
(base) PS C:\Users\Administrator> wsl --list --online
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed
  1. 选取所需版本,并进行安装,(我习惯ubuntu了,就安装了最新的ubuntu)
wsl --install -d Ubuntu-22.04
  1. (可选)切换WSL 版本,新系统的WSL 一般是v2, 如果是v1 可以切换为v2。两者主要是IO上有些性能差距,做一些特定方向的测试时可能会有影响,个人实际开发中一直使用v2,感觉良好。具体差异对比见Comparing WSL Versions
wsl --set-version Ubuntu-22.04 2

然后就是进入系统,设置用户名,密码这些,和正常安装ubuntu一样。

  1. (可选)安装Windows Terminal
    Terminal工具大家挑个自己顺手的就行,都能连WSL。 如果没有,这里安利下Windows Terminal,毕竟一家的产品,集成的比较好。非运维的话,日常用足够了。

setup

1. (可选)换源

sudo mv /etc/apt/sources.list  /etc/apt/sources.list.bak
sudo cat > /etc/apt/sources.list << EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
EOF

sudo apt-get update -y
sudo apt-get upgrade -y

2. 安装常用lib

sudo apt-get install vim -y # nano用不惯,替换为vim
sudo apt-get remove nano -y
sudo apt-get install curl -y
sudo apt-get install git -y
sudo apt-get install  iputils-ping net-tools -y
sudo apt-get install sshpass -y
sudo apt-get install zip unzip -y
sudo apt-get install git -y
sudo apt-get install openssh-server -y
sodu apt-get install jq -y

3. 安装zsh 和 oh-my-zsh

# install zsh
sudo apt install zsh -y
chsh -s $(which zsh)
## verify
zsh --version

# install oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

## 国内
# sh -c "$(wget https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh -O -)"


# set oh my zsh theme
##vi .zshrc
##ZSH_THEME="afowler"
## 更多主题参见 https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

## plugins 自动补全和加亮
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
## 更多插件,查看 https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins

## plugin 配置
#vi .zshrc
#plugins=(git
#zsh-autosuggestions
#zsh-syntax-highlighting
#)

4. 安装SDKMAN

SDKMAN 是一个 SDK 管理工具, 可以管理多个JDK版本。 除了JDK外,还支持Scala, Groovy 等SDKs

curl -s "https://get.sdkman.io" | bash
sdk install java 8.0.382-amzn
sdk install java 11.0.20-amzn
sdk install java 17.0.8-amzn
sdk install gradle 8.2.1  
sdk install maven 3.9.4
sdk install scala 3.3.0

5. 安装nvm, node

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
nvm install latest
npm install --global yarn
#(可选)换源
nvm npm_mirror https://npmmirror.com/mirrors/npm/
nvm node_mirror https://npmmirror.com/mirrors/node/

6. anaconda

sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 -y

wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh # 从这 https://repo.anaconda.com/archive/替换为你需要的版本

sh Anaconda3-2022.05-Linux-x86_64.sh # 一路yes

# (可选)换源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/simpleitk

conda config --remove-key channels # 建议删除defaut的默认源(推荐) 或者 vi ~/.condarc

conda config --set show_channel_urls yes
conda info

# 创建python 环境
conda create -n mypython python=3.10.3

7. docker

# 一键安装docker 
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl start docker
docker version

# 设置Docker 自启动
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
# 关闭docker 服务自启动
systemctl disable docker.service

# 添加docker 用户组
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
sudo systemctl restart docker
docker ps

8. 安装vscode, idea等

wsl 已经继承了RDP 协议,可以直接在wsl里面起这些有UI的应用

# 查看有哪些可用的
sudo snap search chrome

# 安装
sudo snap install --classic code
sudo snap install firefox
sudo snap install pycharm-community 
sudo snap install intellij-idea-community

# 启动的话,只需要  snap run firefox

支持中文

# 安装中文语言包
sudo apt install language-pack-zh-hans

# 设置中文为默认语言 选择en_US.UTF-8和zh_CN.UTF-8, 选择zh_CN.UTF-8为默认语言
sudo dpkg-reconfigure locales

# REF: https://blog.csdn.net/weixin_43589764/article/details/124327175

9. kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

10. all in one script

针对自己的需求,可以把常用的写进一个脚本里,这样换环境的话,就能一键setup了。
这是我常用的setup_in_one_script_ubuntu…sh

11. 配置.zshrc

因为用了zsh, 有些调整需要改下.zshrc 才生效。
还有snap 启动应用这些,可以写一些alias,更加方便

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="robbyrussell"
plugins=(git
        zsh-autosuggestions
        zsh-syntax-highlighting
        )

source $ZSH/oh-my-zsh.sh


# conda
export PATH=/home/miao18/anaconda3/bin:$PATH

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/miao18/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/miao18/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/miao18/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/miao18/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
conda activate spider

# nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# alias
alias pycharm="snap run pycharm-community"

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

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

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

相关文章

MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)

目录 概述 约束演示 表格创建 验证 图形化界面约束 外键约束 概念 语法 外键删除/更新行为 总结 概述 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中数据。目的&#xff1a;保证数据库中数据的正确、有效性和完整性。分类&#xff1…

有哪些常人不知道的赚钱方法?

在目前互联网时期&#xff0c;如果说还有什么挣钱方法让别人不知道&#xff0c;那一定是赚大钱或者违法乱纪的挣钱渠道。但是对于普通人而言&#xff0c;确实是有一些挣钱的方法不被其了解&#xff0c;我这里就介绍几个&#xff0c;供大家一起探讨。 第一个&#xff1a;知识变…

TCP/IP五层模型、封装和分用

1.网络通信基础2.协议分层OSI七层协议模型TCP/IP五层/四层协议模型【重点】 3. 封装&分用 1.网络通信基础 IP地址&#xff1a;表示计算机的位置&#xff0c;分源IP和目标IP&#xff1b;举个例子&#xff1a;买快递&#xff0c;商家从上海发货&#xff0c;上海就是源IP&…

爱奇艺数据湖实战 - 基于数据湖的日志平台架构演进

01 背景 为了满足公司内日志实时查询分析的需求&#xff0c;爱奇艺大数据团队自研了Venus日志服务平台&#xff0c;负责爱奇艺各服务日志的采集、存储、处理、分析等场景。早期采用基于ElasticSearch的存储分析架构&#xff0c;随着数据规模的不断扩大&#xff0c;出现了成本高…

C语言基础之——指针(上)

前言&#xff1a;小伙伴们又见面啦&#xff01;本期内容&#xff0c;博主将展开讲解有关C语言中指针的上半部分基础知识&#xff0c;一起学习起来叭&#xff01;&#xff01;&#xff01; 目录 一.什么是指针 二.指针类型 1.指针的解引用 2.指针-整数 三.野指针 1.野指针…

Day46|动态规划part08:139.单词拆分、多重背包理论基础、背包问题总结

139. 单词拆分 leetcode链接&#xff1a;力扣题目链接 视频链接&#xff1a;你的背包如何装满&#xff1f;| LeetCode&#xff1a;139.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意&#xff1a;不要…

【Linux】目录结构、路径

目录 1. 目录结构 1.1 基本概念 1.2 具体的目录结构 2. 路径 2.1 绝对路径和相对路径 2.2 特殊路径符 1. 目录结构 1.1 基本概念 Linux的目录结构是一个树形结构。 Windows系统可以拥有多个盘符&#xff0c;如 C盘、D盘、E盘。Linux没有盘符这个概念&#xff0c;只有一…

树莓派自带的GPIO串口输出及输出乱码问题解决方案

可以使用树莓派的UART0进行串口输出&#xff0c;具体连接方法如图所示&#xff1a; 连接后可以使用如下代码发送串口数据&#xff1a; import serial import time# 串口初始化 ser serial.Serial(/dev/serial0, 9600, timeout1) # /dev/serial0 是树莓派上默认的串口设备# 发…

图书馆项目Java阅览室管理系统jsp源代码MySQL

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 图书馆项目 系统有1权限&#xff1a;管理员 用所技术…

Scikit-Learn中的特征选择和特征提取详解

概要 机器学习在现代技术中扮演着越来越重要的角色。不论是在商业界还是科学领域&#xff0c;机器学习都被广泛地应用。在机器学习的过程中&#xff0c;我们需要从原始数据中提取出有用的特征&#xff0c;以便训练出好的模型。但是&#xff0c;如何选择最佳的特征是一个关键问…

eslint和prettier格式化冲突

下载插件 ESLint 和 Prettier ESLint 进入setting.json中 setting.json中配置 {"editor.tabSize": 2,"editor.linkedEditing": true,"security.workspace.trust.untrustedFiles": "open","git.autofetch": true,"…

ARM开发,stm32mp157a-A7核(UART总线实验)

1.目标&#xff1a;键盘输入一个字符a,串口工具显示b&#xff1b; 键盘输入一个字符串"nihao",串口工具显示"nihao"&#xff1b; 2.框图分析&#xff1a; 3.代码&#xff1a; ---.h头文件--- #ifndef __UART4_H__ #define __UART4_H__#include "st…

1.Prometheus

文章目录 Prometheus概述存储特点生态组件Prometheus serverClient LibraryExportersService DiscoveryAlertmanagerPushgatewayGrafana 工作模式工作流程局限性 部署prometheus部署 Node Exporter部署mysqld_exporter部署nginx-exporter部署grafana 总结 Prometheus 概述 za…

Yolo系列-yolov1

YOLO-V1 经典的one-stage方法 YouOnlyLookOnce&#xff0c;名字就已经说明了一切&#xff01;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;可以对视频进行实时检测&#xff0c;应用领域非常广&#xff01; 核心思想&#xff1a; Yolov1的核心思想是将对象…

Adapter Tuning Overview:在CV,NLP,多模态领域的代表性工作

文章目录 Delta TuningAdapter Tuning in CVAdapter Tuning in NLP Delta Tuning Adapter Tuning in CV 题目: Learning multiple visual domains with residual adapters 机构&#xff1a;牛津VGG组 论文: https://arxiv.org/pdf/1705.08045.pdf Adapter Tuning in NLP …

input输入框和按钮相关联

有了内容&#xff0c;提交按钮才会起作用&#xff01;&#xff01;&#xff01; 当input输入框中输入内容的时候&#xff0c;按钮从禁用状态变成可用状态&#xff01; 输入框中输入的内容会同步输出&#xff0c; 输入的内容被存放在e.detail.value中&#xff0c;将其提取出来赋…

MybatisPlus拦截器实战之数据的加解密和脱敏

文章目录 一、前言二、拦截器简介三、代码目录结构简介四、核心代码讲解4.1 application.yml文件4.2 自定义注解4.2.1 SensitiveEntity4.2.2 SensitiveData4.2.3 MaskedEntity4.2.4 MaskedField4.2.5 MaskedMethod 4.3 Mybatis-Plus 拦截器数据自动加密4.4 Mybatis 打印完整sql…

浅析Linux SCSI子系统:设备管理

文章目录 概述设备管理数据结构scsi_host_template&#xff1a;SCSI主机适配器模板scsi_host&#xff1a;SCSI主机适配器主机适配器支持DIF scsi_target&#xff1a;SCSI目标节点scsi_device&#xff1a;SCSI设备 添加主机适配器构建sysfs目录 添加SCSI设备挂载Lun 相关参考 概…

FTHR-G0001 新手小白的第一块keil开发板

前言 作为从未接触过这类板子的新手&#xff0c;从申请起就十分忐忑&#xff0c;拿到板子的第一印象就是小而又特别&#xff0c;既可以整块板使用&#xff0c;也可以掰开用杜邦线连接的形式具备了灵活与小巧的特点&#xff0c;而核心板的把排针围成一圈的设计就足以让它在树莓…

HRS--人力资源系统(Springboot+vue)--打基础升级--(五)编辑当条记录

今天开发第一步&#xff1a;当前条记录&#xff0c;点击编辑&#xff0c;可以修改数据 1. 首先点击编辑&#xff0c;获取到了当前条的数据&#xff0c;弹出了一个小窗口 这个窗口是不是很熟悉&#xff0c;&#xff0c;没错。。这个窗口跟新增按钮弹出的窗口是同一个的 bug1&am…