自由世界的地图-Linux学习路线
作者：じぴ尐俽 ， PHILO （@看见微软我就跑）， 服部半藏（@服部半藏ly） 大神们凭借他们的远见卓识和不懈努力，创造了广袤的自由世界，我们希望提供一张经过验证的地图，让新接触自由世界的人可以免于无谓的迷茫，又不至于过于详细而失去探索的乐趣。文中所列技能可能需要点亮前置技能才可学习，我们会尽可能的指出，另外，本文后出现的技能可能依赖前面的技能。  我们竭力使本文完善，如果有需要修改的地方，请提交补丁，我们会尽快合并。作者们怀着慢慢的善意，写下这篇文章，并不代表他们自信自己无所不知、对未来的每一项预见都是正
Linux 学习 路线图
作者：じぴ尐俽 ， PHILO （@看见微软我就跑）， 服部半藏（@服部半藏ly） 大神们凭借他们的远见卓识和不懈努力，创造了广袤的自由世界，我们希望提供一张经过验证的地图，让新接触自由世界的人可以免于无谓的迷茫，又不至于过于详细而失去探索的乐趣。文中所列技能可能需要点亮前置技能才可学习，我们会尽可能的指出，另外，本文后出现的技能可能依赖前面的技能。  我们竭力使本文完善，如果有需要修改的地方，请提交补丁，我们会尽快合并。作者们怀着慢慢的善意，写下这篇文章，并不代表他们自信自己无所不知、对未来的每一项预见都是正
作者：じòぴé→尐俽 ， PHILO （[@看见微软我就跑](http://weibo.com/u/2250446510)）， 服部半藏（[@服部半藏ly](http://weibo.com/u/2202434993)）


大神们凭借他们的远见卓识和不懈努力，创造了广袤的自由世界，我们希望提供一张经过验证的地图，让新接触自由世界的人可以免于无谓的迷茫，又不至于过于详细而失去探索的乐趣。文中所列技能可能需要点亮前置技能才可学习，我们会尽可能的指出，另外，本文后出现的技能可能依赖前面的技能。


![](/data/attachment/album/201407/30/162212wgayfg0a2a04r524.png)


我们竭力使本文完善，如果有需要修改的地方，请提交补丁，我们会尽快合并。作者们怀着慢慢的善意，写下这篇文章，并不代表他们自信自己无所不知、对未来的每一项预见都是正确的，我们希望你不迷信本文的任何一个字，包括华丽的分割线。


当然，如果您再学习的路上感觉比较孤单，也可以加入到我们这里[加入我们](http://ubtamator.github.io/)共同探讨，共同进步。提出意见，改良文档。群：55958311


计算机小白
-----


本段主要讲解Ubuntu基本操作和计算机相关的基本知识，看完之后应该满足日常使用，如上网、听音乐等。


### 你好，小白，Ubuntu适用群体


尽管有这样或者那样不实的传闻，说Ubuntu如何简单，Linux如何高端，开源精神如何伟大，软件的自由对人类的自由如何重要。但是作为用户，更应该关心软件是否丰富，日常使用的主要还是QQ、Office、中文输入法、LOL等工具，这些在Ubuntu之下都没有良好的解决方案。所以，目前Ubuntu只适用于研究人员和程序员。


### 你好，小白，硬件


土豪君，如果你想买一台新的笔记本电脑，建议选择配置:


* 集成显卡就可以，因为linux对独立显卡的支持还不够好，即使未来有所改善也用不到，原因是你没有游戏可以玩
* 尽量使用SSD，机械硬盘也可以，但是SSD比较快，能够提高工作效率，这里就不为三爽840 pro打广告了。


如果你已经有一台电脑，希望你有


* 主流的配置，再也不要问我你有一台32MB内存的电脑，该怎么安装Linux据说Linux很省资源之类的了，手机都2G内存了


### 你好，小白，CPU位数


CPU根据型号不同，通常分为32位和64位，2005年之后的CPU一般都是支持64位的，64位的CPU可以管理4G以上的内存。如果你的电脑内存不足4G，建议选择32位版本的操作系统，否则应该使用64位的。


#### 关于PAE


虽然4g以上的Linux系统可以使用PAE内核来实现更高的内存容量兼容，但是性能是关键，如果您运行的关键程序是32bit的并且必须在32bit平台上运行这种情况下建议选择，否则可以通过安装32libs来实现程序的运行。


### 你好，小白，发行版选择


Linux是操作系统的内核，搭配不同的软件包、桌面环境，才可以制作成为现代意义的操作系统。我们推荐最新的Ubuntu桌面版，理由如下


1. Ubuntu桌面版提供更新、更全的软件仓库，无论是开发还是科研，这样可以节约大量的时间
2. Ubuntu提供软件商店，并且有很多合作伙伴，你可以用上官方版本的WPS、Steam等
3. Ubuntu默认的桌面环境Unity对笔记本很友好，小小的笔记本屏幕可以展示更多的东西
4. Ubuntu14.04版本非常稳定
5. Ubuntu桌面版用户量非常大，搞不定的问题可以方便的在Google、Stackoverflow、Ubuntu中文论坛等地方找到答案，注意，*百度的答案鱼龙混杂，大多数是坑爹的*


如果你是服务器用户，我们推荐最新的Ubuntu服务器版，理由如下


1. Ubuntu服务器市场占有率世界第一，有搞不定的问题可以Google到
2. 提供众多的软件包，可以节约大量的编译时间
3. 对日益普及的云服务支持非常好，无论是Hadoop还是Stackoverflow，当然还有Docker
4. 非常稳定


### 你好，小白，操作系统安装


操作系统的安装并不简单，在电脑城价值50到100人民币之间，如果你只有一台电脑，希望安装双系统，就更困难一点。


我们不推荐用户靠自己摸索如何安装操作系统，这是一项过时非常快的技术，不值得投入大量的时间。我们推荐的安装方式有


* 找师兄师姐或者本地的社区提供帮助，如果你长的足够漂亮，这样肯定没有问题，如果不是，请继续往下看
* 使用wubi安装，但是这种方式有些过时，不推荐使用
* 使用官方提供的U盘制作工具，制作U盘启动盘安装


我们不推荐的安装方式有


* easyBCD，我们群经常会有很多小白看到百度贴吧的这一神器，然后安装失败
* 硬盘安装，过程非常复杂，买个U盘好吗
* 虚拟机，由于Ubuntu桌面使用了硬件加速，在虚拟机运行的效果并不好，是的，你的电脑20核、64G内存分给虚拟机一半都没用，如果你坚持，我们推荐VMware，开源免费的Virtual Box效果更差一些


PS：在另外一种情况下虚拟机是被推荐的，并且推荐Virtual Box。



> 
> 非生产环境服务器 没有安装图形界面 学习比较复杂的环境配置 学习硬盘管理
> 
> 
> 


### 你好，小白，命令行


截止到这里我们假设你已经安装好了操作系统，并顺利进入了界面，如果没有，请认真审视操作系统安装中建议找别人帮忙那一条。


我们不推荐命令行，除非你对操作系统很熟悉并且知道你在干嘛。尤其不推荐从百度随便贴几行命令，然后执行管理员权限，多数情况下，你会毁掉操作系统。


### 你好，小白，网络连接


截止到这里我们假设你已经安装好了操作系统，并且顺利的进入了桌面。（没错，这是前置依赖的声明）接下来让我们连上互联网吧。


* 已经配置好路由器或者无线路由器，并且使用DHCP服务（就是你的手机、windows系统不需要设置什么东西，连上就能上的那种），插上网线或者点右上角的网络图标选择无线热点，就可以连上互联网了
* 直接连猫需要DSL拨号上网，你需要点击右上角网络图标，点编辑，在弹出的页面中添加DSL连接，顺便补一句，如果你是家庭用户，并且你周围没有Ubuntu用户，请重新审视Ubuntu适用群体那一段
* 锐捷等各种客户端再MenTOHust项目中提供了支持。


FAQ（我们经常回答的问题）


* 有线网络环境，请再三确认网线已经插上并且闪呀闪呀的
* 无线网络环境，不要紧张，请再三确认自己已经打开无线网卡（就是你没有在windows下面把无线网卡关了或者把无线网卡的硬件开关关了）。如果确定已经打开，请连上有线网，继续往下看到驱动那一节。


### 你好，小白，下载源


截止到这里我们假设你已经连上了互联网。


软件源是一个放着各种各样软件的服务器，我们需要连上它，从上面下载一个列表，列表里面记载着它上面有哪些软件。现在，点击左侧面板的软件中心的图标。打开编辑菜单，找到最下面的软件源菜单，打开，在弹出的页面中选择一个国内的源，并且把其它软件列的勾全部去掉（因为我们在天朝，有些服务器连不上）。该过程可能需要输入密码，原因继续往下看。


之后，软件中心就会多出一个Progress的图标，表示正在下载软件列表，该过程中如果发现错误，可以尝试在终端（点桌面左上角那个写轮眼图标，在弹出的框里搜索，跟Mac的Finder很相似）执行



```
sudo apt-get update

```

查看错误信息。


FAQ：


* Hashxxx mismatch，通常使因为你的网络提供商缓存了过期的信息，常见于小的提供商如长城宽带等，没有好的解决方案。


### 你好，小白，语言包


截止到这里我们假设你已经设置了软件源并且下载了软件列表。接下来，会弹出提示，让你安装语言包。你也可以在设置，语言里面安装。


### 你好，小白，系统更新


在下载软件列表之后还会提示你安装更新，实际上，Ubuntu会定期的从你配置的软件源下载软件列表，然后跟本地版本对比，看是否需要更新。你可以执行



```
sudo apt-get upgrade

```

手动完成


### 你好，小白，驱动


截止到这里我们假设你已经安装完系统更新，如果你可以顺利的连上无线网络，并且没有独立显卡，可以跳过本段。


打开软件中心，找到编辑菜单，软件源选项，然后打开，在弹出的页面中找到附加驱动，选择经过验证的（后面会标明tested）驱动，安装。


FAQ:


* 手动下载的硬件提供商提供的驱动，黑屏了怎么办？不知道哎


### 你好，小白，输入法


截止到这里我们假设你已经开机并且安装了语言包。


推荐的输入法有两种:


* 系统自带的，点击桌面右上角的键盘图标，添加Pinyin输入法
* [搜狗拼音输入法](http://pinyin.sogou.com/linux/)，安装之后，同样添加sogou pinyin


### 你好，小白，软件安装


截至到这里我们假设你已经连上了互联网并下载了软件列表。推荐的软件方式有


* 软件中心，里面的软件多数是经过验证的，还有一个评分可供参考


其它的安装方式：


* 下载deb包安装，下载对应版本（32或者64）位的，请注意这种安装方式可能破坏系统的依赖关系
* sh安装文件安装，不推荐
* 压缩包直接拷贝到指定目录，不推荐，确实需要请继续往后看
* 编译安装，极度不推荐，确实需要请继续往后看



> 
> 参考前提：您是新手
> 
> 
> 


### 你好，小白，文本编辑器


截止到这里我们假设你已经安装了输入法。我们推荐的文本编辑器有


* gedit(Text Editor)，在桌面左上角搜索就可以看到，简单易用
* [sublime3](http://www.sublimetext.com/)，官方目前不支持中文输入，如果你是程序员，你肯定喜欢它。另外，它是收费软件，而且很贵
* vim，在软件中心搜索vim即可安装，使用方式参考《a byte of vim》，该书对vim的讲解非常详细，后半部分可能有些过时。还可以参阅vim自带的手册，在终端输入


vimtutor


### 你好，小白，浏览器


我们推荐的浏览器有


* [chrome](http://www.google.cn/chrome/)，内置flash播放器
* firefox，系统自带，具有更好的扩展性，界面跟Ubuntu更搭


### 你好，小白，音乐播放器


我们推荐的音乐播放器有


* Rhythmbox，系统自带，界面可能不符合windows用户的习惯
* [豆瓣fm](https://github.com/yupengfei/Essay/blob/Post_v1/douban.fm)，有很多有有意思的频道


### 你好，小白，支付


目前可用的支付方式有


* 支付宝，包括手机客户端的二维码支付和桌面版的插件，桌面版插件安装请继续往下看到sh文件安装


### 你好，小白，解压缩


ubuntu对常见的格式支持的非常好，双击即可打开压缩文件，如果缺乏对应的库系统会提示安装。


### 你好，小白，磁盘管理


推荐的磁盘管理工具有


* gparted，在软件中心下载安装，谨慎使用


### 你好，小白，Office


推荐的Office工具有


* [WPS](http://linux.wps.cn/)，下载deb包双击安装即可。
* 自带的LibreOffice，勉强可用


### 你好，小白，图片处理


推荐的图片编辑工具


* GIMP，从软件中心下载，具体的使用教程请参考Photoshop教程的视频，另外[官方网站](https://github.com/yupengfei/Essay/blob/Post_v1/gimp.org)也提供了详细的说明。
* InkScape 从软件中心下载，具体使用网上有很多教程，全矢量化处理，非常好用。


### 你好，小白，3D动画


推荐的3D制作工具


* Blender，从软件中心下载


### 你好，小白，QQ


QQ长期不支持Linux，推荐使用


* [webQQ](https://github.com/yupengfei/Essay/blob/Post_v1/web.qq.com)，不好用


不太推荐的有：


* [wineQQ](http://www.longene.org/forum/viewtopic.php?f=6&t=4700)


FAQ：


* QQ不好用怎么办？不知道。


### 你好，小白，wine


极度不建议。 原因：不稳定


### 你好，小白，且容老夫来补一刀吧


Ubuntu软件丰富（仅仅对开发者和研究人员而言）


进阶小白
----


本段包含一些进阶的操作，我想普通用户并不太需要这些。


### 你好，进阶小白，权限管理


Ubuntu默认的不是管理员权限，执行安装软件等操作时需要输入你的密码。


### 你好，进阶小白，新立得软件包管理


在软件中心有一个更强大的包管理工具，非常不建议小白使用，尤其是处女座。


### 你好，进阶小白，FTP上传下载


建议使用软件：


* FileZilla，从软件中心下载。


### 你好，进阶小白，文件系统


[百科详细解释](http://baike.baidu.com/view/671778.htm) [Linux介绍中的解释](http://www.tldp.org/LDP/intro-linux/html/sect_03_01.html)


### 你好，进阶小白，文件权限


[我们认为对此最好的解释](http://www.tldp.org/LDP/intro-linux/html/sect_03_04.html)


### 你好，进阶小白，command


只需要看一眼常用命令就行了，百度一大把。


### 你好，进阶小白，make


主要分为automake的安装[参考大神文档](http://blog.csdn.net/liang890319/article/details/8274917) 另外最近还有一个cmake火起来了。[参考大神文档](http://blog.sina.com.cn/s/blog_5aee9eaf0100y36u.html)


计算机相关书单
-------


本段写给有志于讲编程作为全职工作或者工作中大量使用编程的人。不同语言之间没有明确的依赖关系，同一种语言书目之间有从易到难的关系。


得益于上个世界对语言的研究，人类发现不需要使用机器码（010101010001）编程，可以使用类似于自然语言的人造语言编写程序，然后经由计算机翻译成机器语言。根据不同的人爱好不同，语言经常被分为强类型、弱类型，解释型、编译型，对象导向的、过程导向的、函数导向的等等。这些语言相互影响，相互学习，每几年会有一个新的标准（比如C++99和C++11差异就非常大）。


我们建议你多学几种（这个就跟恋爱一样，只有初恋比较青涩，之后越来越顺，一马平川，虽然女孩子分为很多类型），一方面，在不同的场景你需要不同的女孩子，啊，不，计算机语言（比如操作系统用C写，网页交互用JavaScript）。另一方面，特定的计算机语言本身限定了你的表达方式，多了解它们的区别有利于打开思路。


很多编程的教材都类似于五步画马法，我们更希望提供适合自学的，没有各种各样的坑，不需要丰富的想象力脑补就可以学会的书单。


[![五部画马法](/yupengfei/Essay/raw/Post_v1/pic/5step.jpg)](https://github.com/yupengfei/Essay/blob/Post_v1/pic/5step.jpg)


### 从上到下依次看，C


C语言经历了漫长的演化，现在的它已经不是以前的样子了，但是它仍然适合做你的第一或者第二任女友，啊，不对，计算机语言。所有C语言已经42岁了所以已经不是女神了的思想都是异端邪说。


我们推荐的书：


* [《Head first C》](http://book.douban.com/subject/6919383/)，这本书讲了很多C语言的细节以及编译、运行的细节，很多同主题的书不曾提及。另外，它讲的C比较新。
* [《The C Programming Language》](http://book.douban.com/subject/1236999/)，这本书堪称C圣经，只可惜有部分过时了
* [《C专家编程》](http://book.douban.com/subject/2377310/)，大量整理了C的缺陷和易于混淆的地方，它诞生的比较早，也有点过时了。
* [《数据结构与算法分析 C语言描述》](http://book.douban.com/subject/4924153/)，有了语法，我们需要数据结构和算法才能写出好的程序。


### 从上到下依次看，Python


Python简单易用，非常适合带来你的初吻，啊，不，跟计算机的第一次接触，但是有两个非常不一样的标准，python 2和python 3，鉴于本文写于2014年中旬，我们推荐python 3。


我们推荐的书：


* [《a byte of python3》](http://www.swaroopch.com/notes/python/)，它是一本很简单的入门书
* [官方入门书](https://docs.python.org/3/tutorial/index.html)，有些写的比上一本更清晰
* [《learning python》](http://book.douban.com/subject/3988517/)，非常厚，讲了两个版本的python的方方面面。


我们不推荐的书：


* [《Head first python》](http://book.douban.com/subject/5310233/)，感觉写的有些松散，跨度太大，不太适合新手。


### 从上到下依次看，算法


在有了基本的语法之后，我们仍然需要一种方式把基本的语法组织在一起解决实际问题，这时候你就需要算法了。


我们推荐的书：


* [《编程之美》](http://book.douban.com/subject/3004255/)，标题过于夸张，实际上主要讲了一些很有意思的算法
* [《数学之美》](http://book.douban.com/subject/10750155/)，没有标题的那么夸张，但是不妨花一个下午看一下。
* [《算法导论》](http://book.douban.com/subject/1885170/)，非常厚，但是很值得花时间看完，虽然很多计算语言自带一套标准库实现了很多算法，但是对算法的掌握依然很重要。


我们不推荐的书：


### 从上到下依次看，设计模式


世界上本没有这种程序的写法，写多了也便有了这么多种设计模式。


* [《 Head First Design Patterns》](http://book.douban.com/subject/1400656/)，head first系列最好的几本书之一，讲的很清楚，代码使用Java。
* [《大话设计模式》](http://book.douban.com/subject/2334288/)，大话系列最好的几本书之一，编程语言使用C#，相对于上一本行文略显不通畅，但是所有的设计模式都讲全了。
* [《设计模式》](http://book.douban.com/subject/1052241/)，代码使用C++和SmallTalk编写，微言大义，非常适合买一本放在书架上。


### 从上到下依次看，C++


本段假设你已经会基本的C语法（但是C和C++是两种不同的语言），C++的程序员很贵，因为它非常复杂，在看完以下书单之前，我们不推荐你在简历上写“精通C++”。


我们推荐的书：


* [官方手册](http://www.cplusplus.com/doc/tutorial/)，它是目前能找到的最合适的入门书
* [《C++ primer》](http://book.douban.com/subject/25708312/)，这本书讲了C++的基础知识，非常厚，但是条理比较清楚。
* [《Effective C++》](http://book.douban.com/subject/5387403/)，讲解了C++的一些用法和注意事项，部分因为C++11的标准库而过时。
* [《More effective C++》](http://book.douban.com/subject/5908727/)，讲了一些更高端的用法，部分因为C++11而过时。
* [《深度探索C++对象模型》](http://book.douban.com/subject/10427315/)，对C++的继承、多态等实现机制进行了讲解，非常有启发性。


### 从上到下依次看，Java


Java是一门用途广泛的语言,当然本次我们只针对java语言来说，没有针对web跟安卓来讲。


我们推荐的书：


* [《Head first Java》](http://book.douban.com/subject/4496038/)，Java入门书，讲解的Java5，但是内容没有过时（Java有比较好的向前兼容性，也为此付出了代价），是head first系列最好的书之一。
* [《Think in Java》](http://book.douban.com/subject/2130190/)，对Java基础部门进行了详细的讲解，针对Java5但是没有过时。
* [《深入理解Java虚拟机 JVM高级特性与最佳实践》](http://book.douban.com/subject/24722612/)，对Java运行的环境（Java虚拟机进行了详细的讲解），精通Java必备。


我们不推荐的书：


### 从上到下依次看，Golang


Golang是google推出的服务器编程语言，对多线程支持非常好。


我们推荐的书（其实写的都不是特别好，只是目前可以找到的书非常少）：


* [《Go语言程序设计》](http://book.douban.com/subject/24869910/)，较为细致的讲了Golang的基本语法。
* [《Go web编程》](http://book.douban.com/subject/24316255/)，前半部分是基本语法，后半部分是web开发，部分关于标准库的内容过时了。


我们不推荐的书：


### 从上到下依次看，JavaScript


JavaScript是Html5钦定的脚本语言，在后端也有广泛的用途。


我们推荐的书：


* [《JavaScript语言精粹》](http://book.douban.com/subject/3590768/)，它介绍了作者认为比较好用的JavaScript功能的一个子集合，表述方式可能并不易懂，但是讲的很不错。
* [《JavaScript权威指南》](http://book.douban.com/subject/2228378/)，全面的Javascript语法书，很多地方讲的并不清楚，比如面向对象的部分。


我们不推荐的书：


### 从上到下依次看，git


git是一个强大的分布式版本管理工具，功能强大。


我们推荐的书：


* [《pro git》](http://git.oschina.net/progit/)，对git的命令做了简单的介绍。
* [《Git版本控制管理》](http://book.douban.com/subject/5311565/)，对git的内部机制，高阶用法进行了详尽的讲解。


### 从上到下依次看，操作系统


每天都有很多新手发问，我想深入学习一下Linux，需要看哪一方面的书，有人会推荐一本厚厚的命令手册，我更喜欢推荐操作系统的书。


我们推荐的书：


* [《现代操作系统》](http://book.douban.com/subject/3667744/)，作者很牛气，该书不难但是相当的厚。而且看完之后会让人感觉脑洞大开


### 从上到下依次看，网络


我们推荐的书：


* [《计算机网络》](http://book.douban.com/subject/1179807/)


### 从上到下依次看，数据库


受作者的领域所限，推荐的数据库类型非常少，欢迎补充。


我们推荐的书：


* [《Mysql必知必会》](http://book.douban.com/subject/3354490/)，很有意思的速查手册，虽然不是特别全面。
* [《数据库系统概念》](http://book.douban.com/subject/1929984/)，对数据库系统讲的非常详细。
* [《MySQL技术内幕 InnoDB存储引擎》](http://book.douban.com/subject/5373022/)，对该引擎讲的非常细致，包括存储方式、行级锁等概念都很清晰。
* [《MongoDB权威指南》](http://book.douban.com/subject/6068947/)，为数不多的MongoDB的入门书。


### 从上到下依次看，硬件及汇编


我们推荐的书：


* [《深入理解计算机系统》](http://book.douban.com/subject/5333562/)，以程序员的视角讲解的计算机系统的方方面面。
* [《计算机组成与设计 硬件/软件接口》](http://book.douban.com/subject/10441748/)，MIPS构架。


### 从上到下依次看，编译原理


编译原理虽然日常工作用不到，但是看完了可以知道计算机语言怎么变成机器语言的。


我们推荐的书：


* [《编译原理》](http://book.douban.com/subject/3296317/)


### 从上到下依次看，项目管理


我们推荐的书：


* [《人月神话》](http://book.douban.com/subject/4908230/)
* [《代码大全》](http://book.douban.com/subject/1477390/)


### 不属于以上类别的书


* [《黑客与画家》](http://book.douban.com/subject/6021440/)
