初撸 Linux 的正确姿势

我是个非常不专业的 Linux 用户. 我知道的 Linux 命令很少, 只会装系统, 装驱动, 换一下源, 调一下网络, 配置一下几个常用的开发环境. 我花在 Linux 上面的时间并不少, 但是走了崎岖的弯路, 不得要领. 我要写的是我那些坑爹的历史.

我只会 Ubuntu, 所以别的发行版不讨论.

 

安装操作系统

安装 Ubuntu 和安装 Windows 的区别在于分区方式不同. 把时间花在理解这种区别是值得的. 介绍这种区别的文章特别多, 然后别的就没啥好说的了.

 

安装驱动程序

安装驱动非常蛋疼. 我的笔记本装上 Ubuntu 后连 WIFI 都用不了. 还好网卡驱动在那个设置里面可以一键安装; 最讨厌的就是玩独显. 独显有几种安装方法. 一种是从官网下载, 然后 chmod + x 搞一下, 然后直接运行; 一种是在设置里面一键安装; 一种是安装开源社区的第三方驱动, 添加列表到仓库以后 apt-get 一下就好了. 这几种方法没有一种是好用的, 我在这上面浪费了非常大的时间. 为什么我非要安装上独显驱动呢? 因为如果没有安装, 那么在 Ubuntu 下面开发 Android 是非常坑爹的, 那个模拟器运行起来就卡爆了, 让我根本无法理解为什么有这么多人在 Ubuntu 下面搞 Android 开发. 我搞了很多回, 其中还成功过, 能够指定程序用独显运行, 其余用集显运行, 然后一不小心点错了地方桌面就全崩溃了.

独显驱动的各种不良经历让我认为 Ubuntu 是非常失败的东西, 因为竟然想正常使用电脑的基本功能都是很大的问题. 花在修电脑上面的时间远远大于 Linux 带来的便捷. 既然如此为何不用 Windows. 最终我妥协了, 每次安装好 Ubuntu 第一件事情就是把独显给屏蔽了, 这个习惯养成了以后, 诸多奇奇怪怪的系统崩溃都消失了.

 

安装 IDE

我为了追求完全在 Ubuntu 下工作的状态, 打算把我所有常用的 IDE 都在 Ubuntu 上面安装好. 然后问题就来了, Eclipse 运行起来之后上面的菜单有问题, 必须搞一个 .desktop 文件然后把那个什么给禁用了, 他才正常. 这让我又一次感受到了 Ubuntu 桌面系统的蛋疼. 为什么就没有点安装好就能用的东西? 除了 Eclipse, 别的 IDE 也有这样那样的坑, 比如 CodeBlock 的某些版本就曾经出现了非常难以安装完整的问题, 而曾经还有一段时间提供 CB 的第三方源的那个源跪了! 到处都找不到编译打包好的 CB. 为了安装一个普通的软件, 不仅需要用鼠标点这点那, 还要与终端结合, 用一些奇怪的命令来促使他变得正常. 我相信一定有不少的人, 很大一批人, 都和我一样在折腾这些奇奇怪怪的问题上面花费了很多事情, 去 Google 解决方法, Google 到了就按照人家写的步骤来一二三四步按顺序完成, 如果失败了, 再换一个方法; 如果成功了, 也不太明白为啥就成功了. 这种状态不仅浪费时间, 而且学不到什么东西; 看起来你在配置系统, 逐渐逐渐"打磨"出一个能用的系统, 但是实际上你只是把本来操作系统应该自动化完成的事情手工调整. 我一个朋友花了一个暑假的时间研究如何配置一个能榨干自己电脑性能的 Gentoo, 也是醉了.

 

Ubuntu下的QQ和迅雷下载

最后让我彻底认为 Ubuntu 没啥好用的, 是因为这两个软件用不了. 我高中玩 Ubuntu 的时候, 就用 Wine + QQ 折腾了好多个周末; 感觉 Ubuntu 的意义就在于你通过努力, 弄出了一个能用的 QQ. 直到大学我还在这么玩 Ubuntu, 搞什么 lwqq, 或者绿色精简版迅雷5+Wine拯救世界. 现在回忆起来, 感觉我也是太蛋疼了, 可能是没啥玩的了, 就甘于这样瞎搞些没有意义的事情; 或者是那时候看不到什么是有意义的什么是没有意义的, 没有高手带着玩, 自己走写死胡同也是正常.

我一直在想, 为什么腾讯停止了 LinuxQQ 的开发, 很多年前就停止了, 他们难道不知道我这样的人很希望完全在Ubuntu下使用电脑, 而开发一个勉强能用的版本吗? 现在看来, 是我用 Ubuntu 的方式不对.

 

Linux 为何而生

全球有多少人在用 Linux, 有多少服务器在使用 Linux, 他们用 Linux 的哪一部分, 用来干些什么事情, 不用来干些什么事情, 我当初就是懒得考虑这些问题, 所以走了弯路. 别人都不在 Linux 上面玩QQ, 我偏偏要走小众路线, 在这个问题上这就是弯路. 在没有玩 Linux 的高手带着玩的情况下, 这是一种防止走弯路的好方法. 所以说有人带是非常重要的事情, 没人带的情况下自己就要收集信息, 自己把握全局, 自己把握时代潮流, 自己把握领导人的思想, 才能走好人生路呀.

我很幸运的碰上了学校承办 ACM-ICPC 亚洲区域赛, 然后畅神带着我配置一堆电脑和服务器. 重点是来了三个复旦的神, 三位神来到了之后啪啪啪对着 Linux 终端敲命令, 一边敲一边吐槽我们怎么搞成这个样子, 各种神我就不多说了, 总之最后我都不敢在他们面前碰鼠标, 我人生第一次有这种感觉! 你知道吗, 你感觉你就是个奇葩如果你用鼠标, 还双击, 还右键, 有这样用 Linux 的吗?

没见过的事情有时候就是不相信, 我不相信没有 IDE 的情况下怎么能好好写一个没有错误的大程序; 我不相信那么多文件复制来复制去, 那么多目录切换来切换去, CLI 还能比 GUI 快; 我不相信 vim 用的熟练之后, 能这么快.

我解脱了, 我感觉我再也不用折腾 Ubuntu 的 Unity 桌面什么的了. 因为我开始一个相信一个好的 CLI 的力量了. 曾经我认为随着时代的发展, 像TeX, 像Vim, 像Emacs这样的东西都会淘汰, 但是我现在改主意了. 他们的适用领域虽然会缩小, 但是他们的有些性质还是无法替换掉的. 在听说还有不少 OI 选手用 screen 这样的工具的时候, 我越来越相信我完全没看到过用 CLI 的群体是怎么样的. 互联网连接各个领域, 但是我就是没有去尝试过那个圈子.

那么 Linux 如何使用? 鉴于我是个新手, 所以我要说, 我得出的结论仅供参考. 但是即便如此, 我认为我的这个结论是相当接近正确的了. 我们应该在一个舒适的操作系统下面办公, 比如我就非常喜欢 Windows, 我用了很多年 Windows, 可以熟练修改注册表, 修改组策略, 熟悉他的控制面板, 喜欢他的各种游戏, 各种社交软件. 其次, 我们应该拥有一个窗口, 一个黑色的终端, 他连接着一台 Linux. 终端里面连接着的 Linux 和终端外的 Windows 通过某种方式有联系(FTP或者直接挂载). 这样我们既可以舒服的在熟悉的 Windows 下面娱乐和工作, 又可以拥有强大的 Linux 工具箱.

 

Linux 用来玩什么

对于大多数人来说, Linux 并不是一个舒适的办公环境, 为了避免使用 Windows, Google要求要么用 Mac, 要么用 Goobuntu. 而这个 Goobuntu 也是 Google 有专门的团队来打造的.

但是 Linux 却是一个非常好的操作系统, 这个操作系统大部分时间不是用来给人办公的, 而是用来跑你的程序的. 比如说, 服务器装上 Linux, 就是用来跑 Apache 和 PHP 和 数据库程序的, 不是用来插上键盘鼠标给你玩的. 再比如说玩数据挖掘, Linux 就是用来搭建分布式集群的, 然后跑挖掘软件的; 再比如车载 Linux 系统, 比如机器人身上装的 Linux 系统, 都不是用来搞个显示器插上去用鼠标来玩的. 刚开始接触 ubuntu 的时候, 是可以安装个 X11, 然后玩玩几天, 甚至一个月; 但是那个东西基本干不了几件像样的事情, 我们也别想着在上面用 Open Office 来搞文档. 就算 Valve 公司说游戏机应该用 Linux 来当系统, 也完全不是我们从某个网上下载的发行版所能干的事情. 因为 valve 用了正确的方式玩 Linux, 他做成一个成品, 里面系统是 Linux, 用来跑他的业务程序; 而我们如果在自己的电脑上装一个 Ubuntu, 然后装个 Steam, 完全不是一回事. 这就像 KTV 里面的 XP 系统+点歌软件, 与我们自己在笔记本上面装个卡拉OK软件完全不是一回事一样.

 

最终解决方案: Windows + SSH Terminal

我想这是大多数人的最佳组合.

  1. 在 VMware 里面安装一个 Ubuntu, 让他开机不要启动 X11, 并用桥接的方式让他和 Windows 在同一个网段里.
  2. 在 Ubuntu 里生成公钥, 私钥, 私钥放在 Windows 下;
  3. Windows 下安装一个 XShell, 通过私钥连上虚拟机里面的 Ubuntu.

如果条件允许, 这个虚拟机和ubuntu可以改为 vps 与 CentOS. 一台有独立 ip 的 vps 远比虚拟机要方便的多.

  • vps的好处: 永不停机, 到什么地方用什么终端都可以 SSH 连上去. 适合跑服务器程序或者爬虫程序;
  • 虚拟机的好处: 方便搭建多个机子, 适合玩分布式网络编程, 能够和 Windows 下面的硬盘共享文件夹, 看心情来选择本地工作环境.