从 Windows 到 Ubuntu 系统的转变

如果阅读过我的早期博客,便可知道我曾使用过win、mac及现在的Ubuntu(linux)等主流操作系统。简单评价,mac是适合开发的绝佳选择,但价格较高;而Ubuntu则是妥协之选,但实际开发体验与mac相差无几;win的话胜在用户基数、软件生态和简化的系统操作。如果想在win系统中学习linux,通过WSL或虚拟机学习就很不错,这也是我一开始入门的方式。接下来,我将讲讲最近几个月从win转向Ubuntu进行日常开发的挑战和收获。

为什么转到Ubuntu

  1. 为什么选择Ubuntu,而不是其他linux发行版?

Ubuntu是非常受欢迎、易于使用、社区支持和相对稳定的Linux发行版之一。 Ubuntu相对于其他发行版,如Fedora、Debian和Arch,有许多优点。首先,Ubuntu拥有广泛且强大的社区支持。它是一个基于Debian的Linux发行版,这意味着可以获得Debian的稳定性和安全性。同时,Ubuntu的用户数量也相对较多,因此更容易获得帮助和支持。 其次,Ubuntu非常易于使用,尤其是对于初学者来说。Ubuntu安装程序比其他Linux发行版要简单,并且拥有许多易于使用的应用程序,例如Ubuntu Software Center。除此之外,Ubuntu拥有易于访问的文档和简单的用户界面,可方便用户在不熟悉命令行的情况下进行各种操作和配置。 最后,Ubuntu拥有广泛的软件库和更新机制,可确保软件的更新和安全性。对于开发人员来说,Ubuntu提供了各种编程工具和IDE,例如VSCode、JetBrains系列、远程连接等等。

  1. 相对于Linux,Windows的缺点在哪里?

Windows缺点众所周知,其中包括安全性不足、易受攻击、比较稳定,而且频繁崩溃、很容易受到病毒和恶意软件的攻击等等。除此之外,Windows需要大量的系统资源,这导致了它的性能较低。这种问题尤为严重,当你需要同时运行多个软件时,如开发环境和游戏。 而最让我受不了的是Windows的色彩管理实在做的太烂,校准非常麻烦。

  1. 个人需求:开发、游戏

Ubuntu是一个非常适合日常使用和开发的操作系统,Ubuntu的开源性质使得几乎所有的开发工具和应用程序都有很好的支持。除此之外,Ubuntu提供的高效、稳定、安全的操作环境使得用户不必担心杂七杂八的软件崩溃和病毒攻击等问题。 同时,作为一名游戏玩家,我主要在steam平台上玩游戏。但是很多游戏并不支持Linux环境,这时就可以使用Proton技术协议来解决这类问题。Proton技术采用基于Wine的应用程序兼容层,在没有特定的游戏发行商支持的情况下,在 Ubuntu 上也能实现运行更多 Windows 游戏。

使用Ubuntu的挑战

  1. 常用软件的替代

目前一些特定的 Windows 软件并没有支持 Ubuntu,比如微信、网易云、Framer、Pixso等。在这里非常感谢 ElectronPWAWine 技术,这些技术为Ubuntu用户提供了许多优秀的软件。例如,在Ubuntu上,使用Electron技术实现类似网易云的应用程序(YesPlayMusic),使用PWA技术实现在线IDE环境的CodeSandBox。此外,对于那些只能在Windows上运行的软件,也可以借助Wine来模拟一个Windows环境,并在其中运行这些软件。

  1. 硬件驱动适配

某些硬件设备可能没有 Ubuntu 驱动程序的支持,这意味着用户可能无法使用这些设备。对于新的硬件设备,自己需要花费一些时间去调整和安装驱动程序。

  1. 命令行操作

Ubuntu 是一个基于 Linux 的系统,与 Windows 不同,它需要用户习惯命令行界面。尽管现在 Ubuntu 的大多数操作都可以用鼠标和图形界面来完成,但是在一些情况下,需要使用命令行操作完成某些操作或问题的调试和修复。因此,需要自己学会一些基本的 Linux 命令,例如:ls、cd、mkdir等等。

学到了什么

  1. 日常开发写写shell脚本,减轻敲命令的负担。比如下面的脚本实现项目构建和部署:
#! /usr/bin/env bash
set -e

if [ "$1" ] && [[ "$1" =~ ^\d{4}-\d{2}-\d{2}$ ]] ; then
  npx yarn build "$1"
else
  npx yarn build
fi

cd docs

if ([ "$1" ] && [ "init" = "$1" ]) || ([ "$2" ] && [ "init" = "$2" ]) ; then
  rm -rf .git
  git init
  git add -A
  git commit -m "deploy"
else
  git add -A
  time=$(date "+%Y-%m-%d %H:%M")
  git commit -m "$time"
fi

# 远程仓库地址
git push -f "address"
cd -

# 这段代码是一个shell脚本,使用`#!/usr/bin/env - sh`声明了脚本使用的解释器。
# 使用`set -e`开启了错误检查,如果出现任何错误,脚本会立即退出。
# 在if语句中,首先判断是否传入了一个日期(即$1是否存在),同时这个日期满足形如"XXXX-XX-XX"的格式。
# 如果满足该条件,则执行带参数的npx yarn build命令,否则执行不带参数的npx yarn build命令。
# 进入docs目录。再次使用if语句判断参数,如果传入了init,则删除.git文件夹并初始化git仓库。
# 否则,使用当前时间作为提交信息进行提交。最后,使用git push命令将代码推送到远程仓库,并返回上一级目录。
  1. 配置环境变量,起别名
# 软件快速启动
alias clash="~/Clash/start.sh"
# mac上有open命令,ubuntu没有,所以起个别名
alias open="xdg-open"

# 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

PATH=$PATH:$HOME/bin:/usr/bin:/usr/local/bin
export PATH

其他:比如软件管理 apt,vim的使用,进程控制,文件(夹)权限管理......

总结

在Ubuntu上进行开发非常方便,因为它具备优秀的软件包管理系统,可以轻松地获取所需的工具和库。如果已熟悉类Unix系统的终端操作,将对在Ubuntu操作系统中的日常开发工作更为顺畅。除此之外,Ubuntu还涉及许多系统级别的知识需要学习,例如文件系统权限、硬件设备管理、各种维护任务和服务管理等等。学习这些知识将有助于自己更好地理解和管理操作系统,并且可以解决一些基础配置或运行时出现的问题,同时这些知识对了解计算机系统和网络管理方面也非常有帮助。总之, 通过使用Ubuntu,有助于自身扩展技能和思考问题的广度,并为日后的开发工作做好充分准备

参考

posted @ 2023-04-19 22:53  晨米酱  阅读(204)  评论(1编辑  收藏  举报