linux是可以让你成为计算机专家(黑客)的操作系统!
刚接触linux的朋友,可能还不知道从哪里开始学习linux。本文从实际情况出发,给出了学习linux的一些建议。 会玩linux不

一.linux学习建议

回到顶部

很多技术,包括linux运维c/c++编程linux高级编程linux内核架构等,就像一层窗户纸,捅透了就会发现非常的简单。 任何看上去复杂的事物,都是由简单的东西组合而成,每一层都会向上一层提供API,所有的事物都是这样的基本原理。 linux也同样遵循简单的哲学。祝愿大家都能学好linux,用好linux!

1.在主流linux发行版中选择适合自己的linux发行版

linux发行版实在太多了,很多刚接触linux的朋友总是在纠结该选择哪个发行版。 如果你不想在选择上浪费时间,基于目前国内linux的使用现状,我们建议可以先从linux mint或者centos入手。 关于发行版的选择问题,我们应该抱着开放的心态。除了centos和linux mint,还有很多优秀的linux发行版. 大家在业余时间不妨多多尝试,说不定就能找到更适合自己的。 可以参考linux发行版排行网站distrowatch:https://distrowatch.com,查询主流的linux发行版。
更多参考:最受欢迎的linux发行版

2.在实体物理机和虚拟机里安装和学习linux

初学者可以先通过虚拟机安装linux,常见的虚拟机有vmware和virtualbox。 我们鼓励大家多尝试体验不同的linux发行版,最方便经济的做法就是通过虚拟机来安装体验了。 如果条件允许,最好是在实体物理机上安装和使用linux。 通过反复安装linux,可以学到很多方面的知识,包括虚拟机、计算机基本原理、磁盘分区和挂载点分配、linux启动过程等等。 所以要想学习linux,先从安装linux开始吧。生命不息,折腾不止。
关于linux安装请参考这里: linux安装

3.在图形界面模式下学习linux命令操作

linux主要有两种运行模式,一种是图形用户界面模式,另一种是命令行模式。
我们学习linux,大部分都是在学习各种linux命令, 虽然现在linux的图形界面已经非常美观和人性化,很多操作都可以通过图形界面简单快速的完成,但是我们的学习重点并不是图形界面的操作,而是linux的命令操作! x window作为linux内核之上运行的应用软件,并不是linux内核的组成部分,也不是linux运行的必备软件。 相对于命令行模式,图形界面有很多的局限性,而且还会占用相当大的系统资源! 在企业运维环境下,通常是远程连接linux主机, 图形界面会占用网络带宽,消耗网络资源,命令行模式传输的都是文本数据,所以有着无与伦比的优势! 在服务器的应用上,文件的安全性、用户账号的管理、软件的安装修改与设置、登录文件的分析以及自动化工作例程与程序的编写等,都是我们需要学习的重点内容。 而这些管理操作往往比在图形界面模式下更有效率!
说到这里,很多朋友可能已经开始跃跃欲试了!在自己的电脑上面安装了命令行模式的linux,但是开机后面对黑黑的屏幕,不知道要干什么,只能干瞪眼。 既然学习linux大部分都是命令操作,又不让学习图形界面,那就是要在命令行模式下学习了,其实不是这样的。 我们的建议是在图形用户界面模式下学习linux命令操作。
因为在图形用户模式下,遇到任何问题都可以方便直观的查找各种学习资料。注意这里说的并不是在图形界面模式学习图形界面的操作, 本站的重点并不是介绍图形界面操作,现代linux发行版的图形界面都已经非常人性化了,都是开箱即用的傻瓜式操作, 只需要花上一两天时间就可以熟悉图形界面的操作了,即使是第一次接触也很容易上手操作。
那linux命令不是要在命令行模式才能运行吗?怎么要在图形用户模式下学习呢? 这是因为在图形用户模式下也可以学习和运行linux命令,只需要随时打开图形界面下自带的terminal工具就可以了。
大部分发行版的terminal工具都很容易找到,打开terminal最常用的的方式就是在桌面上右击鼠标,在弹出的菜单中, 一般会有"open in terminal"选项,点击该选项即可打开terminal。
如果你非要用命令行模式运行命令,那么在图形模式下也可以很方便的切换到命令行模式,linux默认会提供7个终端让用户登录, 可通过"Ctrl+Alt+F1~F7"组合键来切换不同的终端,分别对应tty1-tty7终端界面。一般tty1运行图形界面,其他的都运行在命令行模式下。 在图形模式下,只需要通过"Ctrl+Alt+F1~F7"组合键即可方便的切换到命令行模式。
虽然企业生产环境下的服务器大部分运行在命令模式下,但是我们在实际工作中也是在图形模式下,因为我们可以方便的通过ssh远程连接到远程服务器。 所以大部分工作其实通过图形界面下的terminal就可以了。而本站所有的命令操作都是在图形界面下的terminal完成的。

我们学习linux主要是学习linux的命令操作,那么我们平时学习linux在哪种环境下比较好呢?
initroot给出的建议是在图形用户界面模式下学习linux命令操作。
对于研发人员,在图形界面模式下也是非常方便的。 那么企业生产环境下的服务器都是运行在命令行模式下,那么是不是工作中就要在命令行模式下工作呢?答案是否定的。 因为服务器大部分情况下不在你的办公地点,而是存放在机房或者某个角落里,大部分时间我们不需要在服务器跟前直接操作服务器, 而是利用自己的电脑通过ssh远程连接到服务器进行远程操作。

4.熟悉shell命令行环境

我们所运行的每一条命令,都是在linux命令行环境下运行的。而linux命令行环境其实是由shell提供的。大部分发行版默认启动的shell就是bash shell。 linux下的很多概念,比如变量、环境变量、shell脚本、shell启动配置文件、命令执行都和shell有关。很多命令其实是shell本身提供的功能,我们称为shell内置命令。 所以如果要学好linux,先扒了shell这层皮(外壳),你才能看到裸奔的linux。

5.了解linux命令执行背后的原理

在学习一样东西的时候,最好能先了解一下基础原理。这样在学习的时候心里才有底儿。 虽然会在一定程度上降低学习效率,但是从长远角度来看,实际上是加快了学习效率。我们在命令行下敲命令的时候,其实是在跟一个叫shell的程序打交道, shell会根据用户敲的命令名字,判断是内置命令还是外置命令,如果是内置命令,直接执行该命令的功能即可。 如果是外置命令,shell会在环境变量PATH指定的路径下寻找和命令名字对应的二进制可执行文件,找到后shell会创建一个子进程,在子进程中加载并执行该可执行文件。
所以我们平时敲的大部分命令都是一个已经存在的可执行文件,那么这个可执行文件放在哪里呢,通过whereis就可以看到命令所对应的可执行文件的路径了, 例如要看看ls这个命令在哪里,就执行whereis ls就可以看到ls的路径了。如果你把这个文件删掉,那么shell就会告诉你找不到这条命令。大部分命令都是一个可执行文件, 但是我们在用whereis查看cd命令的可执行文件路径的时候,shell的输出是这个样子的:“cd:”,竟然没有路径名,这是什么鬼? 这是因为cd是shell的一个内置命令,不以可执行文件的形式存在。所以咱们平时敲的命令主要分为两种,一种是以可执行文件存在的外部命令, 一种是没有可执行文件的内置命令。
这里的外部和内置是从shell的角度说的。通过help命令可以查看所有的shell内置命令,那么怎么判断一条命令是shell内置命令还是外部命令呢,用type查看就可以了,比如查看cd,在命令行下敲type cd, shell的输出是cd is a shell builtin。那么cd就是一条shell内置命令。
通过上面简单的分析我们就可以发现,一个问题就引出了好几个非常重要的概念, 包括shell、环境变量、进程、内置命令和外置命令、inux内核原理等。所有这些看似零散的知识点,其实就可以通过一条主线串联起来。

6.实际动手操作linux命令并查看运行效果

linux的学习离不开实践,如果只是范范的看看命令的介绍而不去实际操作运行一遍,很多命令是很难体会到其真正含义的。 所以在接触新命令的时候,我们可以随时打开termial工具,实际执行看一下命令的运行效果。 可能光看书看不懂的地方,实际操作一遍,瞬间就明白了。 比如我们一直建议用户在敲命令的时候养成经常敲tab的习惯,也讲了tab的用处和好处,可是如果你只是看看,从来不动手实践一下, 就很难体会tab命令补全的功能和好处了。

7.通过linux自带的帮助系统和网络搜索引擎百度解决问题

linux自带很多帮助工具,包括man、info、help命令,以及大部分命令自带的--help选项。 另外在/usr/share/doc目录下有大量的说明文档。 另外还有一些网络文档: CLDP中文文件计划 http://www.linux.org.tw/CLDP/
The Linux Documentation Project:http://www.tldp.org/
几乎列出了所有和Linux有关的文献资料,各种How-To等,很有参考价值!
这些都是我们学习linux的好帮手。 正所谓师傅领进门,修行在个人。经常阅读man、info、--help等linux自助系统是一个非常好的习惯。
我们在学习linux的过程难免会遇到各种问题,或者是在阅读上面提到的说明文档会经常遇到陌生的概念术语。 很多命令在出错的时候都会给出错误提示,例如:

              [root@centos ~]#ls -l /initroot
              ls: /initroot: No such file or directory
            
由于系统并没有/initroot目录,系统就会给出上面的错误提示,通过这个错误提示我们可以很容易的找到问题. 但是可能还是有很多提示信息我们看不懂。
这时候最好的老师就是百度和谷歌了,因为你遇到的问题,很有可能别人也遇到过了。那么通过百度就可以很容易找到答案! 常用的网络搜索引擎工具有百度和谷歌google
这时候就可以将错误的关键信息复制粘贴到百度或者google进行查询就可以了!
另外如果是网络服务的问题,也可以查看/var/log/目录中的日志文件,这样可以几乎解决大部分的问题了!
经过各种搜索,却找不到相关的信息,还可以到linux学习论坛进行发问:
linux学习论坛:http://bbs.initroot.com
在发问之前建议您先看一下提问的智慧,相信会有很多大牛会热心帮助你解决问题的!

8.尝试理解linux操作系统内核原理,探究更深层次的东西

理解linux内核的运作原理,可以帮助我们对linux有更深入的认识,使用的时候也会更加得心应手。

9.学会放手,不懂的东西先放一放

linux的学习不能一蹴而就,需要从最基础的内容慢慢学起,而且要经历几个前后交叉的学习阶段。 linux的学习涉及到大量的概念,很多知识点总是前后交织,很难在讲解一个概念的时候不涉及另外的概念, 所以有时候会遇到怎么看书都看不懂的情况,不知所云,云里雾里的感觉。看第一遍很有可能会看不懂,无法真正理解,这个时候千万不要被不懂的知识点绊住, 可以抱着囫囵吞枣的心态,不懂的地方先放一放,了解个大概即可,不需要深究死磕非得弄明白。 接着往后学习,随着学习的深入,等过段时间再回来看之前不懂的知识,可能就会有恍然大悟醍醐灌顶的感觉了,然后捶胸顿足拍大腿,他妈的原来linux如此简单!

10.温故而知新

年纪大了,总是忘东西丢三落四怎么办?先别急着吃药。 很多东西你以为理解了,可过段时间再回来看以前理解的知识点,可能又会有一些新发现。所以要经常温习学过的linux知识,每次都有不一样的小顿悟。 在人类的记忆曲线中, 必须不断的重复记忆才可以永久的记住一件事情! 学习Linux也一样, 除了要实际操作之外,也需要经常复习!
linux的经验都是在反复练习中获得的,很多时候计算机/网络都会有一些莫名其妙的突发状况,如果没有实际碰触过,是不可能体会到的。
学会将文件分门别类,设计好存放目录,不要随意保存文件到不相关的目录。
养成做记录的习惯,发现问题后,把错误信息和引发状况以及解决方法记录清楚,整理归类成文档。
网络上看到的好文章,可以留一份copy,归类存档。
写script的确没设置server那么好玩,不过以我自己的感觉是:关键是得会抄, 抄了得会改,改了得会变,变则通矣。

11.保持兴趣

想要学好linux这么一套优秀的操作系统, 除了前面提到的一些建议之外,得要培养出兴趣与成就感才行!
学习Linux如果玩不出兴趣, 学起来也会比较痛苦。 Linux上面可以玩的东西真的太多了,可以选择一个有趣的主题深入下去!不论是Shell还是图形接口, 只要自己感兴趣,都可以深入研究!
可以经常写心得体会,学会一样东西与教会一样东西是大不一样的!学会一样东西可能学会了就算了! 但是要教会别人,得要思考相当多的理论与实践方面的东西,这样所能学到的东西就更深入了!
经常回答新手的问题,回答别人问题的时候,就如同上面说的一样, 会更深入的去理解每个方面!
参与技术讨论是一件提升自己能力的快速方法!每一次的技术思想的碰撞,都是一次知识成长! 一般来说,公司在遇到问题的时候,不是解决一部主机的问题,而是需要给出整体环境总体解决方案Total Solution。 而目前学习的Linux其实仅是在一部主机上面进行各种设置, 还没有到达解决整体公司所有问题的状态。 得要先学会Linux基础技巧后, 才有办法将这些技巧用于整体解决方案!
谨记不同的环境下,解决问题的方法有很多种,只要行的通,就是好方法!
另外在学习linux的时候,不要排斥微软windows,抱着开放的学习心态!

二.linux学习路线图

回到顶部

目前国内学习Linux主要从事如下几个方面的工作:
1.嵌入式linux应用开发;
2.linux后台服务开发;
3.linux内核驱动开发;
4.linux服务器运维;
嵌入式linux应用开发和linux后台服务开发需要linux应用程序设计方面的知识,涉及到c/c++编程和linux/unix环境高级编程,本站为此提供了两个板块方便开发者学习。
点这里查看c/c++编程;
点这里查看linux/unix环境高级程序设计;
更多关于嵌入式linux方面的知识可查看嵌入式linux ;
如果您打算从事服务器运维方面的工作,那么需要学习linux各种服务器的架设和配置,linux服务器(集群)架构设计。本部分内容可查看 linux运维
更多linux内核驱动方面的知识可查看 linux内核

不管哪个方向,需要学习的linux基础知识都是一样的。总之在你成为linux大牛之前,一定要好好学习linux基础知识! 这些基础知识包括如下几个方面:
一.linux基础入门
1.学习计算机基础知识;
linux的运行和计算机硬件密不可分, 理解计算机原理和硬件相关基础知识,对于linux的学习是很有帮助的,例如理解硬盘的组成原理,可以在学习linux硬盘分区管理和文件系统的时候有所帮助;
2.学习linux系统的安装;
通过学习Linux系统的安装,可以学到非常多的Linux系统知识,例如linux的启动过程,磁盘的分区等;
3.认识和学习linux基础命令;
Linux操作系统的基础知识包含用户、群组的概念、权限的观念,程序和进程的定义等等,尤其是权限的概念, 对于计算机安全至关重要! 4.学习文件和目录管理相关的命令;
5.学习磁盘管理相关的命令;
6.学习一些基础工具例如vi编辑器的使用;
vi/vim编辑器的熟练使用是linux下的必备技能,vi会被很多软件所调用,加上所有的Unix like系统上面都有vi,所以一定要学会!
7.学习shell脚本编程;
linux文本命令行模式由shell提供的,我们在命令行模式下做的任何操作,都是在和shell打交道, 所以一定要深入的了解shell,包括shell作业管理、正则表达式、管道命令以及数据流重导向等
8.学习linux账号管理相关的命令;
9.学习linux进程管理方面的知识;
10.学习linux系统服务相关的知识;
12.学习linux启动流程等方面的知识;
13.学习linux软件安装和卸载方面的知识。
我们经常需要在linux下安装各种驱动程序和应用软件, linux下的软件包安装管理工具有Tarball、RPM、DPKG、YUM、APT等,这些都非常重要,!
14.网络基础的建立:
网络与安全非常重要,例如TCP/IP的基础知识,网络路由的相关概念等。这些都是服务器配置的基础.
以上都是比较基础的内容,也是linux学习最重要的内容。如果要继续深入学习的话,就要学习各种服务器运维方面的知识, 这方面的内容更偏向于企业实战,如下所示:
二.linux服务器运维
1.linux网络管理方面的知识;
2.linux路由与防火墙的设置;
3.常见服务的安装与配置,比如ftp服务,http服务,ssh服务,nfs服务等。
4.linux集群架构设计;
三.c/c++编程
四.linux/unix环境高级程序设计
五.linux内核
学习linux内核并不是要去做linux内核开发方面的工作,了解Linux内核原理可以对linux有更深入的了解,对命令背后的运作原理有更深入的理解。 这方面的学习也可以贯穿在linux学习的整个过程中。

initroot编辑整理,转载请注明www.initroot.com技术交流群:59909790