2019 版“完全用 Linux 工作”

2019-12-11 11:12:46 +08:00
 conanca

标题党来了,给王垠大神的名作狗尾续貂一把。注意,本文标题虽大但内容有局限性,如果你不喜欢红帽系,不喜欢 gnome,日常开发也用不到文中提到的工具、技术栈,那么其对你来说没有太大参考价值。

V 站最近讨论日常工作使用 Linux 的帖子又多起来了。有人依旧安利了一批发行版;有人认为 duck 不必花在自己不熟悉的东西上花时间;很多跃跃欲试的 V 友对此也颇有疑虑。 我呢,从 2012 年至今,一直在 fedora 上进行日常的开发工作,工作和研究方向是爬虫、微服务、容器技术、开发方法论、devops。可以说是越用越爽。借此机会来分享作为一个程序猿“完全用 Linux 工作”的体验,希望能帮上大家的忙。

首先说说在 linux 下搞开发的优势:

  1. 使用原生命令的效率更高,比如文件操作相关命令、vi、ssh、scp、curl、以及各种网络相关命令。比起 windows 下安装并打开各种软件、拿鼠标各种点击,用 linux 终端,配合一个机械键盘,相信你工作效率会直线上升,还能帮助你真正理解你所正在做的操作。更重要的是比起第三方闭源软件,这些命令更安全。
  2. 对于常用的一些开发工具原生支持和支持友好,比如 git、docker、mvn、python。其中 git 不必说了,Linus 的第二伟大发明;而 docker 本身就是依赖 linux 内核特性实现的。还是那句话,用命令比用图形界面更能帮助你真正理解你所正在做的操作。避免误操作、错误提示更详细明确。
  3. 至于环境变量、换行符、编码、目录路径、文件名大小写等等这类环境差异问题。我建议本地开发环境的配置尽量往测试或生产环境上靠拢,以避免“在我的电脑上明明是好使的!”的问题出现。
  4. 可以远离:昂贵的正版 windows 售价、病毒、恼人的系统更新、蓝屏崩溃。

Fedora 调教、使用心得

本人并不喜欢折腾(大误),所以一直用的 fedora 默认桌面版——gnome 那个。中间升级过两、三次版本,目前在用 fedora30。 硬件方面用过几台 DELL 商务机、xps 和 thinkpad。双屏。

驱动、硬件兼容问题

  1. n 卡显卡驱动 系统默认装的是开源驱动,显示效果不佳,所以必须安装官方驱动。 我的显卡一直是 n 卡,参考这篇就没错了: https://www.if-not-true-then-false.com/2015/fedora-nvidia-guide/

  2. 原生支持双屏 设置非常简单,在 Displays 里。

dnf 相关

  1. 有时显卡驱动更新不及时会导致兼容问题,所以需要排除内核更新:
    /etc/dnf/dnf.conf 文件加一行

    exclude=kernel*
    
  2. 提高安装速度
    /etc/dnf/dnf.conf 文件加一行

    fastestmirror=True
    
  3. 增加源

    sudo dnf install --nogpgcheck  https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
    
  4. 查找所缺少依赖库所在软件包,例如:

    dnf provides */libQt5X11Extras.so.5
    

    然后就可以根据显示的来进行安装了。

字体

如果操作系统安装时语言选择的中文,字体默认应该是思源字体。效果还可以,不需要调整。

gnome 技巧

  1. 快捷键 非常多,不一一列举了。一定要尝试多用、习惯用。 介绍几个对于新手很有用的:
    • nautilus 地址栏显示文字:Ctrl+L
    • 显示隐藏文件:Ctrl+H
    • 搜索 /选择 /切换应用:win 徽标键
  2. Desktop 文件 有些工具软件并不会生成图标,需要自己创建 Desktop 文件。推荐使用 alacarte 这个工具来生成。如果常用的话,可以拖到左侧 favorites。

推荐软件

  1. Atom、eclipse、IDEA、Mysql Workbench、Postman、robo3t、VirtualBox、Team Viewer
    这些均有 linux 版,而且表现优异
  2. 终端
    我并没有用自带的终端。而是用的 Guake。按 F12 挥之则来呼之则去非常好用。快捷键跟原生的终端一样用。
  3. 办公软件
    对于我来说用自带的 LibreOffice 足够了。我日常用纯文本写文档。没错你猜对了,本文就是 markdown 语法。
  4. 即时通讯
    微信网页版(搞一个 icon 放在 favorites )。QQ 我基本不用,不过前些天官方更新 linux 版本了,还算能用。
  5. 截图
    用自带的工具,同样也支持快捷键。
  6. 游戏
    steam 里有很多支持 linux 的游戏。
  7. docker
    有时候因为各种原因比如技术选型评估、做 benchmark,需要我们本地搭开发环境组件。像 redis、mysql、es、mongodb、nginx、consul,都可以用 docker 轻松创建运行。

搭飞机方案

用的 cisco anyconnect。fedora 也原生支持。 配置添加好 VPN 后,在 Keyboard 中配置俩快捷键,比如 Shift+Ctrl++的命令是:

nmcli con up xxxx 你配置的 VPN 名字 xxxx

Shift+Ctrl+-的命令是:

nmcli con down xxxx 你配置的 VPN 名字 xxxx

就能实现一键出国 /回国啦

26255 次点击
所在节点    Linux
138 条回复
geligaoli
2019-12-12 11:31:22 +08:00
真正用 linux 工作的人,用的都是 archlinux。而且多年前就这样啦。
mgrddsj
2019-12-12 11:43:47 +08:00
@photon006 #97 其实 Windows 版的 Chrome 也有切换 tab 的,是 Ctrl + 数字。另外我记得 Linux 下的 Chrome 也是 Ctrl + 数字 吧?
amaranthf
2019-12-12 12:08:57 +08:00
@reus emmmmm,如果需要写程序才能完成功能的话,windows 也没有实现不了的功能啊
pipapa
2019-12-12 12:14:30 +08:00
fedora 也就图一乐,真用还得 Archlinux
mlyy
2019-12-12 13:00:47 +08:00
虽然本人也是 arch 选手,但是 arch 自动升级 python, tensorflow 还有 postgresql,php 真的很崩溃。
charlie21
2019-12-12 13:07:00 +08:00
来看看如果抱着折腾 linux 的精神在 windows 上一顿操作 会是什么感觉
http://www.ishenping.com/ArtInfo/419102.html
reus
2019-12-12 13:14:22 +08:00
@amaranthf 能不能先实现出来,再来说话?我一开始就让他实现,结果他没有实现,转战千里,连“自绝于人民”都出来了。如果我是你,想反驳我,那我会直接用事实说话,用代码说话,直接显示在 windows 下实现同样的效果也不费功夫。但他没有,你也没有,有什么说服力?
你是不是不会写代码?是不是写任何代码对你来讲都是一样的,都是不会?
拿点干货出来,不要闪避,不然没有讨论的价值。
reus
2019-12-12 13:27:37 +08:00
@amaranthf 另外,就 gnome 来讲,是有在线的扩展仓库的,浏览器点一下就能用别人写好的扩展,不用写代码,不会写代码的人也能用现成的扩展。
skyrem
2019-12-12 13:31:43 +08:00
@reus #59
老哥把代码分享出来看看?
另外我是双屏的,你有处理过多屏的情况吗
reus
2019-12-12 14:04:15 +08:00
@skyrem https://gist.github.com/reusee/c8dbba4d2172352870a8e0349fd1b2f1

我没试过双屏,mutter 是支持多个显示器的,display 类里有相应的 api: https://gjs-docs.gnome.org/meta4~4_api/meta.display

上面的是 js 的文档,C 的文档信息更全一些: https://developer.gnome.org/meta/stable/
amaranthf
2019-12-12 14:19:57 +08:00
@reus 呃,我又没这需求,实现那个干啥?我只是从十来年 windows 编程的经验来说可以实现而已,你不信就算了呗。
yanqiyu
2019-12-12 14:28:15 +08:00
@amaranthf Windows 上当然可以实现类似的功能, 但是 Windows 并没有提供桌面扩展开发的文档(或者说 Windows 上实现桌面自定义扩展都很 dirty)
yanqiyu
2019-12-12 14:34:59 +08:00
@geligaoli
干活用 Arch 太折腾了, 并且 Arch 的包管理不太可靠的样子. 最主要的问题是 Arch 包管理依赖粒度是包而不是文件, 这就会导致由于 sobump 而不被满足的依赖关系被掩盖. 然后结果就是部分更新可能导致整个系统崩盘.

所以 Arch **不支持部分更新**, 因为 pacman 并不能处理部分更新带来的复杂的依赖问题. 我很喜欢 Arch 所主张的 KISS 原则, 但是设计上的 Simple 有时候会成为用户的麻烦.

结果就是你可能需要保持更新, 一段时间没有更新的系统想要更新就很危险了.
12101111
2019-12-12 14:56:21 +08:00
Archlinux 也就图一乐,真用还得 Gentoo Linux
zjsxwc
2019-12-12 14:58:37 +08:00
全年 Deepin 路过
xsen
2019-12-12 15:05:02 +08:00
@geligaoli 日常工作用,基本都是 Ubuntu 系列(不限于官方版本及国内出的改进版)
reus
2019-12-12 15:07:54 +08:00
@yanqiyu 可以用 nix: https://wiki.archlinux.org/index.php/Nix,甚至直接用 nixos。不过 arch 就算升级挂了,直接重新 pacstrap 覆盖一遍就是了。
amaranthf
2019-12-12 15:12:03 +08:00
@yanqiyu 定位不同而已,windows 认为一个应用程序是由开发者设计好怎么用,最终用户只需要遵循开发者的规则使用即可,linux 认为用户就是开发者,所以规则可以由开发者自己来定,而桌面管理器也就是这样一款应用而已。
后者固然有好处,但是相应的,很多工具不定制的话就很难用,因为工具开发者倾向于既然有了定制性,默认配置下的用户体验就不那么重要。
甚至多说两句,现在很多开发者愈发倾向于,定制性没有多好,用户体验也依然我行我素。举个栗子,早年的复选框,点击文字或者点击方框本身都有点击效果,这是 Windows 给开发者直接定好的,控件本身就是这么设计的,后来网页应用流行起来,html 提供的复选框没有这功能,如果要实现这功能就需要开发者自己将对应文字的点击绑定到复选框上面,这时候就有大量的开发者做出方框和文本独立的复选框了,即点了文字毫无效果。——这就是定制性增加,体验反而下降的一个例子。
另一个例子是键盘操作,有多人知道早期的 Windows 程序都是可以全靠键盘来操作的?我指的不是鼠标键这种模拟性质的东西,而是 windows 上面你所看到的几乎所有窗口元素都是有快捷键可以直接按下的,比如 Alt+下划线字母直接访问菜单项,这也是 windows 控件内置的功能,开发者只需要加一个 & 符号即可实现。而后面 directui 流行起来之后,各种 UI 库开发者们也自己定制各种行为,然后现在你就会发现相当多的图形 app 都没办法用键盘快捷操作了,好一点的可以不停的按 tab 来定位,差一点的你按 tab 键都不知道焦点去哪儿了,啧。
reus
2019-12-12 15:28:14 +08:00
@amaranthf <label>foo<input type="checkbox" /></label> 这样就能实现点 foo 的时候控制 checkbox,你举了一个错误的例子。
另外就算是 linux,也不是所有桌面环境都和 gnome 有同样的取向。例如 KDE 就更像 windows,交互习惯和 windows 差不多,也不注重可编程性。所以你认为的“linux 认为用户就是开发者”,也是不对的。
Rheinmetal
2019-12-12 15:55:48 +08:00
@charlie21 系统做到 U 盘里面 随身携带 完事了
@reus https://github.com/Aurelain/Exo 这个库可以用 js 调用 ahk 控制 windows

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/627912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX