start

去年公司空了几台台式机,当时看了下似乎配置比我用的乞丐版 air 略高一些,而且除了 ssd 以外还有一个 1T 的大硬盘,加上后面可能会有一段时间不做 iOS 了,那就不需要 macOS 了,于是顺了一台过来桌上用来打算做开发机,当时可选的方案有 Windows 10 和 Linux,思考了下机器上 60G 的 ssd 估计是不能装那么多东西的,而 Windows 要把好多东西装到 D 盘,其实用起来好麻烦,感觉自己不太会用,于是选择了 Linux

本文写在我使用 Linux 作为开发环境后的三个月,也就是主力开发环境为纯 Linux 环境,偶尔使用虚拟机做配合,Linux 是天生为喜欢折腾的人准备的,当然也是为了知道自己想要做什么和想要什么的人准备的,所以本文的目的是为了以 Linux 作为生产开发环境为目标的人准备的,如果只有想要装个 Linux 的想法,或者只有想要试试玩玩的想法,个人建议使用自己熟悉的环境(Windows 或者 macOS)搭配虚拟机从完整配置一个 ArchLinux 开始学习

本文主要是为了将要以 Linux 作为自己主力开发环境的同学准备的一些意见建议,以及自己的踩坑经历,如果你想要以 Linux 作为主力开发环境可以把本文作为开始,但是本文绝对不是结束,linux 的折腾是无止境的

好处和坏处

  • 好处
    • 开箱即用的开发环境,和 macOS 一样,Linxu 几乎为所有主流开发平台、语言提供了开箱即用的环境
    • 大量开箱即用的开源工具,后来我喜欢上了 Kate(KDE 上提供的一个文本编辑器,虽然插件少,但是本身功能完善)
    • 很少让人分心的东西(没有 QQ,基本没有游戏)
    • 超好用的终端模拟器
    • 很多好用的开源工具,有些甚至带到了 mac 上继续使用
    • 高度可配置,只要你有心思,外表想做成什么样都可以
    • 折腾
    • 折腾
    • 折腾
  • 坏处
    • 折腾
    • 折腾
    • 折腾
    • 没有 QQ,只能虚拟机或者 wine,smart qq 消息或者群多,就二了
    • 微信,只有 web 微信,或者经过 electronic 包装的 Electronic-Wechat 或者非官方的 wewechat,但是一直用 web 版本微信,容易被封号,前几天我被封号了,用户反馈了,理所当然的未果,用了两周虚拟机,莫名的解封了
    • 高度可配置,双刃剑,配置的后果,杀敌1000,起码自损300,用了一些暗色系主题。。。结果有些文本,button 看不清了,wps 的表格居然变黑了(暂时懒得解,用 libreoffice 其实挺顺畅的,之前在 mac 上这东西可卡了)

Linux 中折腾,既是好处也是坏处,好的地方是让你知道盒子里到底是哪个齿轮坏了,坏的地方是找来找去,发现盒子里齿轮没坏,只是每个齿轮都有那么一丢丢不正常,所以我一直觉得开源那帮人其实是非常不靠谱的,如果没有需求,真心不需要折腾 Linux,你看得没错,我在劝退

开始折腾

上面介绍完了,有兴趣的同学继续往下看吧,接下来m.lom599开始正题吧,Linux 之路折腾无限,但是作为开发环境,m.lom599需要在折腾和稳定之间找到平衡点

折腾的背景

下面是我在 Linux 世界探索(碰壁)以及对我使用 Linxu 有帮助的一些经验,希望对大家有用

  • 很多的 Windows 安装经验和 Linux 安装经验,多体验不同的发行版,找到合适自己使用的,以前电脑性能很差跑虚拟机很费劲,对于现在电脑来说,有虚拟机会很方便你的学习
  • 通过配置一个完整的 ArchLinux 环境,学习整个 Linux 系统的配置,启动,桌面环境相关的所有基础知识
  • 4年的 macOS 使用经验,大家别说,从 macOS 迁移到 Linux 除了开发者们给m.lom599准备的各色精致的 mac 应用以外,整个迁移过程非常顺滑
  • 知道自己想要什么
  • 遇到问题能自己解决

上面几点,是我这次能成功把工作环境迁移到 Linux 的一个基本保障,接下来我在下面列下我折腾了哪些东西,让我的工作丝般顺滑

发行版选择

作为生产开发环境不同于实验研究环境,最主要是需要稳定能够持续支持工作,至少不经常崩溃或者每过几个月就需要重装系统。我曾经在大学时候和工作以后,体验过很多主流的发行版(这里说主流就是真的主流主要包括,Debina,Fedora,Ubuntu,openSuse,ArchLinux),最终选择了 Fedora 27(当时是测试版,但是我相信自己有坑能踩过并且正式版还有一个月就发布了,不太信自己的同学可以在选择的时候选择正式版,毕竟是用于支持生产开发的环境,最主要是稳如老狗)

  • 排除的理由
    • Debian:排除,装的次数太少了,熟悉程度不高
    • Ubuntu:安装了两次,每次都有奇奇怪怪的问题(可能跟我安装的是非 LTS 版本有关)
    • openSUSE:上大学的时候用的最多的就是他,但是那时候总有些奇奇怪怪的问题没办法解决
    • ArchLinux:太过于折腾,工作以后装了几次,从安装到桌面环境,一般需要一到两天的时间,个人感觉坚守 Arch 的简单哲学 pacman 其实没有 dnf 那么完善,但是如果初学 linux,那么这个是首选
  • 选择的理由
    • 我第一次折腾 Linux 的时候,尝试了 RedHat 9,之后尝试了 Fedora Core(那时候 Fedora 的原名),选择 Fedora 有种熟悉的配方的感觉
    • 服务器大多数用 CentOS,依然是熟悉的配方的感觉,将来部署应用也会有熟悉的味道
    • 知呼看介绍,Fedora 是 Linux 的 Cutting-Edge,想要体验最新最棒的 Linux 就靠他了
    • 两次 Ubuntu 的安装失败。。。让我怀疑这最广的发行版,不是为我准备的(我真不是黑 Ubuntu,在想要切换的一开始就想到他了,也动手装上了)

桌面环境的选择

Linux 上的开放性,所以,m.lom599在不喜欢当前用着的桌面环境的时候,可以换一个。。。这似乎是个很美好的事情。。。但是很遗憾,开源社区再次 show 出了他们的不靠谱

最终我选择了 GNOME on Xorg,原因如下:

  • KDE 依然是炫技的平台,高端大气上档次,但是各种 bug 不断
  • GNOME on Wayland,不能用 shutter 截图,偶尔整个 GNOME 挂,Wayland 离稳定使用还有一些距离
  • 虽然 GNOME 的臃肿是大家一直诟病的问题,但是我只是需要一个常用的工作环境,并不想花一两天去折腾,而 GNOME 确实符合这个需求
  • 感觉 GNOME 的文件管理器跟 Finder 很类似,稍微好用一些了

为什么不直接全盘命令行?

  • 我虽然熟悉以及喜爱命令行,但是我倡导合适的地方使用合适的工具,m.lom599主要的目的是工作,而不是炫技,并不是所有人都能只用命令行完成所有工作
  • 相比每次找到项目路径,敲入 push,pull 我还是喜欢用点下鼠标就能 push pull 代码还能分组库的 GitEye
  • VSCode – 我的主力开发工具,并没有命令行版
  • 图形界面下,有 Tilix 这样方便的神器,可以类似 iTerm 一样分割窗口各种,也有 Hyper 这样能随意扩展的现代命令行工具
  • 多窗口管理,对,我还要聊天呢

这里可以说下,个人建议使用 KDE 或者 GNOME,因为我的目的是稳定,当然大家也可以尝试其他的桌面环境,毕竟 linux 最大的优势就是开放

安装

安装指引

  • 需要材料
    • 网络
    • fedora live 镜像,可以到 Fedora 官网 下载
    • 一个 4G 的优盘(live 镜像大约 1.7G ~ 2G 左右,大一点没啥坏处)
    • Etcher 用于将 live 镜像写入优盘中

上面就是安装 fedora 需要的所有材料了

  • 安装步骤
    • 使用 Etcher 将 fedora 的镜像写入到优盘中
    • 重启电脑,在 BIOS 中设置通过优盘启动
    • 启动后会进入到 fedora 的 live 界面中,在 live 界面中找到安装程序并打开
    • 根据提示选择安装位置,语言,市区等各种东西,之后点击开始安装,这样就开始了安装之旅

因为安装的时候我没有截图,这里用虚拟机打开了镜像给大家看下安装界面,等待半小时左右,就可以安装完成了,安装完成后重启就会进入到新的系统了,m.lom599就进入纯 linxu 的世界了

系统调配

安装完成后,这只是一个刚好可以用,并附带了 GNOME 所附带的大部分应用程序的系统,那么离m.lom599可以使用,其实还是有距离的,接下来我会介绍我对系统的初步调配

将消耗空间的东西链接到磁盘上去

我的初衷就是为了想要一个启动快速的系统,并且能安装大量应用,所以第一步,我将会把很多消耗磁盘空间的路径链接到 1T 的机械硬盘上(哎呀,好长,下面统一叫 HDD 了),如果这一步失败了,那么也不会有剩下的步骤了,链接后给我的感觉是,整体系统速度并没有变慢很多,不过在打开大应用(比如 Jetbrain 家的大型 Java 应用)时会有一些卡顿,但是打开后,整个使用体验是很流畅的,不过也因为本机内存不是很大(8G)所以应用开多了还是会卡,特别开了虚拟机以及某些大型 Java 应用的时候很容易出现卡顿的现象

下面是我电脑上磁盘使用的截图,data 1 - 3 就是 HDD(切勿嘲笑别人取名无力),这里没有显示 home 的分区,我的 home 分区大约是 20G,root 分区大约是 40G(当然还有 boot 啊之类的分区,这个在选择自动分区的时候,安装程序会帮你搞定)

磁盘截图

  • data1 作为 home 的延伸,主要用来存放文档,开发中的项目等
  • data2 用作虚拟机存储空间,单独分区,方便管理
  • data3 就是这一环节的主角了,大部分的系统应用都链接到了这里

不过我并不是一次性把所有的路径链接好的,而是在用的过程中发现 SSD 空间不足的时候,找到一些消耗空间大的路径,把他链接到 HDD 上,这里是我链接的一部分路径,供大家参考下:

  • ~/.icons~/.themes:主题和图标路径,链接这个主要是装主题方便
  • ~/.local:当前用户的应用数据,链接这个帮你解决大部分的空间问题
  • ~/.var:当前用户的 var 路径,一部分(主要是 flatpak 打包的)应用会把数据写到这个路径
  • /opt:部分应用会安装到这个路径
  • /var/lib/flatpak:flatpak 的应用会安装到这里
  • /var/log:日志

把这些路径链接后,相信磁盘空间会空闲出很多了,这样小 SSD 的电脑也能愉快玩耍了

另外,除了上面的路径外,还有一些比较特殊的路径也会占用大量空间,这里也列举下

  • ~/.stack:学 haskell 的时候,stack 是 haskell 的包管理器,通过 stack 安装的包会在这里
  • ~/.nixnote:nixnote 是 linux 下的 evernote 实现,他的数据会放这里
  • /usr/share/dotnet:.net 相关的东西,老占空间了
  • /usr/lib64/ghc-x.x.x:haskell 的编译器,老占空间了

除了这些如果大家在使用过程中发现某个路径,或者某个应用特别占空间,也可以把他们链接到 HDD 上,节约 SSD 上宝贵的空间

安装大概率用得到的包

参考 -> RPMFusion 配置 根据系统版本启用 RPMFusion 自由(free)和非自由(nonfree)的软件源配置

参考 -> FDZH 配置 根据系统启用 FDZH 中的源,同时 FDZH 的 wiki 中也包含了一些常用软件的安装配置,大家可以参考下

  • 刷新下 dnf 源

第一次安装完成,或是添加了 RPMFusion 和 FDZH 的源后,需要刷新一下 dnf 的源,这样m.lom599就能安装到新添加的软件包了

``` sudo dnf update --refresh

```

  • 安装 Development Tools 软件组

Development Tools 包含了开发使用到的各种工具,所以m.lom599首先要把他装上

``` sudo dnf group install "KDE Plasma Workspaces"

```

  • 安装 KDE

这一步是可选的,如果喜欢 KDE 的,那么可以输入下面的命令安装

``` sudo dnf group install "KDE Plasma Workspaces"

```

  • 看看还需要什么

使用 Linux 作为主力环境最方便的地方就是m.lom599需要什么那么就安装什么,可以使用下面的命令看下还有些什么软件组可以安装使用

``` dnf group list

```

配置工具系统

  • Font Tweaks Tool:调配字体渲染的,如果看着字体不舒服,就靠他了

Font Tweaks Tool

  • Fedy:fedora 调教工具,附带了一些调教脚本以及一些应用商店没有的应用的安装渠道

Fedy

存活指引

安装配置结束后,接下来介绍下 linux 的日常存活指引

开发存活指引

本文介绍是以主力使用 Linux 开发为主,所以优先介绍开发使用到的工具,其实大部分工具都是开源或是跨平台的,在其他系统中m.lom599也能用到

  • Visual Studio Code:微软搞的开源代码编辑器,个人认为最好的编辑器之一,曾经我觉得我不会放弃 vim 的,后来真香
  • CherryTree:代码笔记上品,代码贴大集合,也是跨平台的(Mac 上没有独立包,最近尝试达了一个,但是始终不是那么顺利)
  • Tilix:媲美 iTerm 的终端模拟器
  • GitEye:基于 eclips 平台开发的 git 工具
  • Zeal:linux 上的 Dash,文档库兼容 Dash 的,并且也可以直接下载 Dash 的文档
  • Jetbrains:全家桶,不得不说 Jetbrains 为m.lom599提供了最好用的 IDE 系列,要说缺点的话,那就一个字 —— 贵!
  • StarUML:画 UML 的好工具,跨平台
  • neovim:作为 vim 党,这个必推,虽然现在主力已经是 VSCode 了,但是我也要 VSCode 掺着 vim 插件才能真香
  • MySQL Workbench:MySQL 官方提供的数据库工具,只用 MySQL 没有比他好的
  • DataGrip:多数据库链接工具,贵!
  • GitKraken:相比 GitEye 是一个更好看的 git 客户端,不过只能免费用于开源项目
  • Kate:KDE 默认的文本编辑器,好用,快速,稳定,但是插件少很多,无法作为主力开发担当
  • 小程序开发工具:https://github.com/cytle/wechat_web_devtools开发小程序必备

有了上面的一堆开发工具相信是可以从容面对日常开发工作了,linux 上除了 DataGrip,Navicat 之类的商业软件以外确实没找到很好用的多数据库链接工具,这点算是一个遗憾了,大家要是有推荐的可以联系我

虚拟机建议

如果虚拟系统是 linux 系并且不使用 GUI,建议直接使用系统自带的 qemu 或是 kvm,另外不要使用 GNOME 带的 Boxes,Boxes 是为了简化虚拟机操作而开发的应用,但是实际上还不是很成熟,建议安装 Virtual Machine Manager 作为虚拟机管理工具,虽然 Virtual Machine Manager 上手会比 Boxes 稍微麻烦一些,但是可配置性要好很多,并且 qemu 和 kvm 对共享文件系统支持要好一些,据说文件读写速度接近原生

并且 qemu 是系统服务,Virtual Machine Manager 只是一个管理界面,在启动好虚拟机后,m.lom599可以直接 ssh 上虚拟机即可操作,无需继续开着管理界面,并且在系统 UI 崩溃的时候,虚拟机服务并不会崩溃,也不会影响m.lom599运行在虚拟机中的程序

如果虚拟系统是 Windows 系或是使用 GUI 的 linux,那么建议使用 Virtual Box 或 VMWare 商业软件,qemu 在图形化操作系统上始终并不是很好用,经常有鼠标位移,速度慢之类的问题

日常存活指引

日常存活主要包括了聊天和 Office 办公系列,以及笔记之类的日常应用

  • ElectronWechat:微信聊天必备
  • WPS:Linux 上唯一能叫做 Office 的工具
  • LibreOffice:Linux 上第二的 Office 工具,这也是对多编码 csv 文件支持最好的工具,就算是 MS 家的 Excel 也没这个对多编码 csv 支持好用,如果需要从数据库导数据做报表之类的,建议一定装一个
  • Nextcloud:如果你有一个私人的服务器,那么建议部署一个 ownCloud 或是 Nextcloud 作为文件共享使用,同步文件丝般顺滑,同时还能提供部分应用使用
  • QOwnNote:比较好的跨平台笔记软件,搭配 Nextcloud 使用完美实现笔记同步
  • Typora:好用跨平台 markdown 写作工具,可以将 markdown 输出为 pdf 和 html 页面,本文就是用 Typora 和 Kate 共同完成写作
  • Firefox:忘了 chrome 吧,firefox 才是最好用的,哈哈哈哈哈
  • CopyQ:好用的剪贴板管理工具

为没有程序起动器的应用添加程序起动器

程序起动器m.lom599可以理解是 Windows 里面的快捷方式,linux 中很多应用最主要就是执行二进制文件,但是有些应用却没有提供一个起动器(在 Launcher 中),这让m.lom599每次打开的时候还需源通过命令行去运行,当然还有的应用更过分比如用 python 写的,还需要用 python 去找到那个应用的脚本去执行,既然m.lom599都进入图形界面了,那不能倒退啊,这里说下怎么创建起动器

这里我用 Typora 来举例,Typora 并没有提供 rpm 包装,也没有在 dnf 的软件源中,所以 Typora 在下载后就是一个朴实无奇的压缩包,解压后,就是一堆文件,看下图我圈起来那个文件,那就是 Typora 的可执行文件,双击他也能运行,那么m.lom599起动器的目标就是打开这个可执行文件

Typora

在 linux 中,每一个起动器都对应一个 desktop 文件,所有的 desktop 文件都在 /usr/local/share/applications 路径下,用户自己的起动器,也可以放到 ~/.local/share/applications 路径下,接下来m.lom599来看看起动器的内容,起动器其实就是一个文本文件,告诉系统如何启动这个应用

Name=Typora Comment=Markdown Writer Exec=/home/noark9/data1/Applications/Typora/current/Typora Icon=/home/noark9/data1/Applications/Typora/current/resources/app/asserts/icon/icon_512x512@2x.png StartupWMClass=Typora Terminal=false Type=Application Encoding=utf-8 Categories=Productive; Name[en_US]=Typora.desktop

这里就描述了 Typora 这个应用如何启动,之后把这个文件放到 /usr/local/share/applications 或是 ~/.local/share/applications 路径下,这样在应用程序中就能看到他了,在 /usr/local/share/applications 路径下还有很多起动器,大家在自己写的时候可以多多参考

让心情愉悦的指引

心情愉悦啊,那就包括一些娱乐活动了

  • VLC:看电影的不二之选
  • Steam:其实支持 Linux 的游戏还挺多的
  • OpenRA:红警的开源实现,支持在线对战,玩起来其实挺开心的
  • ioquake3:Quake3 的开源实现,玩起来炒爱心的
  • DosBox:DOS 模拟器,玩 DOS 游戏专用,还可以装个 Win 3.1 在里面,方便管理文件
  • dolphin:wii 模拟器,wii 游戏走起

end

使用了 linux 一年以后,我发现我已经可以很好的在 linux 桌面下存活了,也能很好的完成我的工作,我并不推崇大家盲目的上 linux,毕竟这并不是一个想上就能上的系统,在使用过程中还是遇到了很多奇奇怪怪的问题,也有作死把桌面环境网络全搞挂最后自己恢复的时候,但是 linux 确实是一个能锻炼人的好系统,使用 linxu 能大大增强自己查找资料的能力,解决问题的能力,以及独立思考的能力

本来本文应该是今年年初的时候就会写完了,所以这里最早的标题是在使用 Linux 工作三个月后,直到年末了,我也开始用回 Mac 后才完成本文的撰写,但是本文依然是完全在 linxu 下撰写完成,并未使用到 Mac 做任何的辅助,中途由于我的失误把 GNOME,KDE 等桌面环境卸载了,并且删掉了网卡驱动后重新配置了网卡驱动和重新安装桌面环境,导致部分我使用的部分应用已经没有安装在系统里面了,这样也让我遗失了一些资料

大家也可以经常看看 Fedora Magazine ,我挺喜欢 Fedora Magazine 的,里面经常有有趣的开源工具和 linux 使用经验分享

最后欢迎大家订阅我的微信公众号 Little Code

Little Code

  • 公众号主要发一些开发相关的技术文章
  • 谈谈自己对技术的理解,经验
  • 也许会谈谈人生的感悟
  • 本人不是很高产,但是力求保证质量和原创