1.4 Linux 该如何学习
为什么大家老是建议学习Linux最好能够先舍弃X Window的环境呢? 这是因为X window了不起也只是Linux内的“一套软件”而不是“Linux核心”。 此外,目前发展出来的X-Window对于系统的管理上还是有无法掌握的地方,举个例子来说,如果 Linux本身捉不到网卡的时候,请问如何以X Window来捉这个硬件并且驱动他呢?
还有,如果需要以Tarball(源代码)的方式来安装软件并加以设置的时候,请以X Window 来架设他!这可能吗?当然可能,但是这是在考验“X Window开发商”的技术能力, 对于了解Linux架构与核心并没有多大的帮助的!所以说,如果只是想要“会使用Linux”的角度来看, 那么确实使用X Window也就足够了,反正搞不定的话,花钱请专家来搞定即可;但是如果想要更深入 Linux的话,那么命令行界面才是不二的学习方式!
以服务器或者是嵌入式系统的应用来说,X Window是非必备的软件,因为服务器是要提供用户端来连线的, 并不是要让使用者直接在这部服务器前面按键盘或鼠标来操作的!所以图形接口当然就不是这么重要了! 更多的时候甚至大家会希望你不要启动X window在服务器主机上,这是因为X Window通常会吃掉很多系统资源的缘故!
再举个例子来说,假如你是个软件服务的工程师,你的客户人在台北,而你人在远方的台南。某一天客户来电说他的Linux服务器出了问题, 要你马上解决他,请问:要您亲自上台北去修理?还是他搬机器下来让你修理?或者是直接请他开个帐号给你进去设置即可? 想当然尔,就会选择开帐号给你进入设置即可啰!因为这是最简单而且迅速的方法!这个方法通常使用命令行会较为单纯, 使用图形接口则非常麻烦啦!所以啦!这时候就得要学学命令行来操作Linux比较好啦!
另外,在服务器的应用上,文件的安全性、人员帐号的管理、软件的安装/修改/设置、 登录文件的分析以及自动化工作调度与程序的撰写等等,都是需要学习的, 而且这些东西都还未涉及服务器软件呢!对吧!这些东西真的很重要,所以,建议你得要依据下面的介绍来学习才好。
Tips 这里是站在要让 Linux 成为自己的好用的工具 (服务器或开发软件的程序学习平台) 为出发点去介绍如何学习的喔!所以,不要以旧有的 Windows 角度来思考! 也不要说“你都只有碰过触摸式设备”的角度来思考!加油啰!
1.4.1 从头学习Linux基础
其实,不论学什么系统,“从头学起”是很重要的!还记得你刚刚接触微软的Windows都在干什么? 还不就是由文件资源管理器学起,然后慢慢的玩到控制台、玩到桌面管理, 然后还去学办公室软件,我想,你总该不会直接就跳过这一段学习的历程吧?那么 Linux的学习其实也差不多,就是要从头慢慢的学起啦!不能够还不会走路之前就想要学飞了吧!^_^!
常常有些朋友会写信来问鸟哥一些问题,不过,信件中大多数的问题都是很基础的! 例如:“为什么我的使用者个人网页显示我没有权限进入?”、 “为什么我下达一个指令的时候,系统告诉我找不到该指令?”、 “我要如何限制使用者的权限”等等的问题,这些问题其实都不是很难的,只要了解了 Linux的基础之后,应该就可以很轻易的解决掉这方面的问题呢! 所以请耐心的,慢慢的,将后面的所有章节内容都看完。自然你就知道如何解决了!
此外,网络基础与安全也很重要,例如TCP/IP的基础知识,网络路由的相关概念等等。 很多的朋友一开始问的问题就是“为什么我的邮件服务器主机无法收到信件?” 这种问题相当的困扰,因为发生的原因太多了,而朋友们常常一接触Linux就是希望 “建站!”根本没有想到要先了解一下Linux的基础!这是相当伤脑筋的! 尤其近来计算机怪客(Cracker)相当多,(真奇怪,闲闲没事干的朋友还真是不少....) ,一个不小心您的主机就被当成怪客跳板了! 甚至发生被警告的事件也层出不穷!这些都是没能好好的注意一下网络基础的原因呀!
所以,鸟哥希望大家能够更了解Linux,好让他可以为你做更多的事情喔! 而且这些基础知识是学习更深入的技巧的必备条件呀!因此建议:
计算机概论与硬件相关知识: 因为既然想要走Linux这门路,信息相关的基础技能也不能没有啊! 所以先理解一下基础的硬件知识,不用一定要全懂啦!又不是真的要你去组计算机~^_^, 但是至少要“听过、有概念”即可;
先从Linux的安装与指令学起: 没有Linux怎么学习Linux呢?所以好好的安装起一套你需要的Linux吧!虽然说Linux distributions很多, 不过基本上架构都是大同小异的,差别在于接口的友好度与软件的选择不同罢了! 选择一套你喜欢的就好了,倒是没有哪一套特别好说~
Linux操作系统的基础技能: 这些包含了“使用者、群组的概念”、“权限的观念”,“程序的定义”等等,尤其是权限的概念, 由于不同的权限设置会妨碍你的使用者的便利性,但是太过于便利又会导致入侵的可能! 所以这里需要了解一下你的系统呦!
务必学会vi文书编辑器: Linux的文书编辑器多到会让你数到生气!不过,vi却是强烈建议要先学习的! 这是因为vi会被很多软件所调用,加上所有的Unix like系统上面都有vi,所以你一定要学会才好!
Shell与Shell Script的学习: 其实鸟哥上面一直谈到的“命令行”说穿了就是一个名为shell的软件啦!既然要玩命令行,当然就是要会使用shell的意思。 但是shell上面的数据太多了,包括“正则表达式”、“管线命令”与“数据流重导向”等等,真的需要了解比较好呦! 此外,为了帮助你未来的管理服务器的便利性,shell scripts也是挺重要的!要学要学!
一定要会软件管理员: 因为玩Linux常常会面临得要自己安装驱动程序或者是安装额外软件的时候,尤其是嵌入式设备或者是学术研究单位等。 这个时候Tarball/RPM/DPKG/YUM/APT等软件管理员的安装方式的了解,对你来说就重要到不行了!
网络基础的创建: 如果上面你都通过了,那么网络的基础就是下一阶段要接触的咚咚,这部份包含了“IP概念”“路由概念”等等;
如果连网络基础都通过了,那么网站的架设对你来说,简直就是“太简单啦!”
在一些基础知识上,可能的话,当然得去书店找书来读啊! 如果您想要由网络上面阅读的话,那么这里推荐一下由Netman大哥评论员的Study-Area里面的基础文章,相当的实用!
- 计算机基础 (http://www.study-area.org/compu/compu.htm)
- 网络基础 (http://www.study-area.org/network/network.htm)
1.4.2 选择一本易读的工具书
正所谓这:“好的书本带你上天堂、坏的书本让你穷瞎忙...”一本好的工具书是需要的,不论是未来作为查询之用,还是在正确的学习方法上。 可惜的是,目前坊间的书大多强调速成的Linux教育,或者是强调Linux的网络功能, 却欠缺了大部分的Linux基础管理~鸟哥在这里还是要再次的强调,Linux的学习历程并不容易, 他需要比较长的时间来适应、学习与熟悉,但是只要能够学会这些简单的技巧, 这些技巧却可以帮助您在各个不同的OS之间遨游!
您既然看到这里了,应该是已经取得了鸟哥的 Linux 私房菜 -- 基础学习篇了吧! ^_^ 。 希望这本书可以帮助您缩短基础学习的历程,也希望能够带给您一个有效的学习观念! 而在这本书看完之后,或许还可以参考一下Netman推荐的相关网络书籍:
不过,要强调的是,每个人的阅读习惯都不太一样,所以,除了大家推荐的书籍之外, 您必须要亲眼看过该本书籍,确定您可以吸收的了书上的内容,再下去购买喔!
Tips 其实鸟哥买科技类书籍比较喜欢买基础书耶,因为基础学好了,其他的部份大概找个 keyword ,再 google 一下,一大堆数据就可以让你去分析判断了! 你会说,既然如此,那基础书籍内的项目不是 google 也是一大堆?不要忘记了,“最开始你是要用什么关键字去 google 啊?”! 所以,阅读基础书籍的重点,就是让自己能够掌握住那些“ keyword ”啰!加油!
1.4.3 实作再实作
要增加自己的体力,就是只有运动;要增加自己的知识,就只有读书;当然,要增加自己对于Linux的认识, 大概就只有实作经验了!所以,赶快找一部计算机,赶快安装一个Linux distribution,然后快点进入Linux的世界里面晃一晃! 相信对于你自己的Linux能力必然大有斩获!除了自己的实作经验之外,也可以参考网络上一些善心人士整理的实作经验分享喔! 例如最有名的Study-Area(http://www.study-area.org)等网站。
此外,人脑不像计算机的硬盘一样,除非硬盘坏掉了或者是数据被你抹掉了, 否则储存的数据将永远而且立刻的记忆在硬盘中!在人类记忆的曲线中, 你必须要“不断的重复练习”才会将一件事情记得比较熟!同样的,学习Linux也一样, 如果你无法经常摸索的话,那么,抱歉的是,学了后面的, 前面的忘光光!学了等于没学,这也是为什么鸟哥当初要写“鸟哥的私房菜”这个网站的主要原因, 因为,鸟哥的忘性似乎比一般人还要好~~呵呵!所以,除了要实作之外,还得要常摸!才会熟悉Linux而且不会怕他呢!
Tips 鸟哥上课时,常常有学生问到:“老师,到底要听过你的课几次之后,才能学的会?”鸟哥的标准答案是:“你永远学不会!” 因为你是用“听”的,没有动手做,那么永远不会知道“经验”两个字怎么写!很多时候计算机/网络都会有一些莫名其妙的突发状况, 没有实际碰触过,怎么可能会理解呢?所以“永远是不可能听会的!”为啥要实验?因为实验过后你才会有经验来记下来? 否则实验结果课本都有啊!不是背一背就好了,干麻实验呢?浪费钱吗? ^_^
1.4.4 发生问题怎么处理啊?建议流程是这样...
我们是“人”不是“神”,所以在学习的过程中发生问题是很常见的啦!重点是,我们该如何处理在自身所发生的Linux问题呢? 在这里鸟哥的建议是这样的流程:
- 在自己的主机/网络数据库上查询How-To或FAQ
其实,在Linux主机及网络上面已经有相当多的FAQ整理出来了!所以,当你发生任何问题的时候,除了自己检查, 或者到上述的实作网站上面查询一下是否有设置错误的问题之外,最重要的当然就是到各大FAQ的网站上查询啰! 以下列出一些有用的FAQ与How-To网站给您参考一下:
- Linux自己的文件数据: /usr/share/doc (在你的Linux系统中)
- CLDP 中文文件计划 http://www.linux.org.tw/CLDP/
- The Linux Documentation Project:http://www.tldp.org/
上面比较有趣的是那个TLDP(The Linux Documentation Project), 他几乎列出了所有Linux上面可以看到的文献数据,各种How-To的作法等等,虽然是英文的,不过,很有参考价值!
除了这些基本的FAQ之外,其实,还有更重要的问题查询方法,那就是利用酷狗(Google)帮您去搜寻答案呢! 在鸟哥学习Linux的过程中,如果有什么奇怪的问题发生时,第一个想到的, 就是去http://www.google.com.tw搜寻是否有相关的议题。 举例来说,我想要找出Linux下面的NAT,只要在上述的网站内,输入Linux跟NAT, 立刻就有一堆文献跑出来了!真的相当的优秀好用喔!您也可以通过酷狗来找鸟哥网站上的数据呢!
- Google: http://www.google.com.tw
注意讯息输出,自行解决疑难杂症:
一般而言,Linux在下达指令的过程当中,或者是log file里头就可以自己查得错误信息了,举个例子来说,当你下达:
[root@centos ~]# ls -l /vbird
由于系统并没有 /vbird 这个目录,所以会在屏幕前面显示:
ls: /vbird: No such file or directory
这个错误讯息够明确了吧!系统很完整的告诉您“查无该数据”! 呵呵!所以啰,请注意,发生错误的时候,请先自行以屏幕前面的信息来进行 debug(除错)的动作,然后,如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file(登录文件),这样可以几乎解决大部分的问题了!
- 搜寻过后,注意网络礼节,讨论区大胆的发言吧:
一般来说,如果发生错误现象,一定会有一些讯息对吧!那么当您要请教别人之前,就得要将这些讯息整理整理, 否则网络上人家也无法告诉您解决的方法啊!这一点很重要的喔!
万一真的经过了自己的查询,却找不到相关的信息,那么就发问吧!不过,在发问之前建议您最好先看一下“ 提问的智慧 http://phorum.vbird.org/viewtopic.php?t=96” 这一篇讨论!然后,你可以到下面几个讨论区发问看看:
不过,基本上去每一个讨论区回答问题的熟手,其实都差不多是那几个, 所以,您的问题“不要重复发表在各个主要的讨论区!” 举例来说,鸟园与酷学园讨论区上的朋友重复性很高,如果您两边都发问, 可能会得到反效果,因为大家都觉得,另外一边已经回答您的问题了呢~~
- Netman大大给的建议:
此外,Netman 兄提供的一些学习的基本方针,提供给大家参考:
- 在Windows里面,程序有问题时,如果可能的话先将所有其它程序保存并结束,然后尝试按救命三键 (Ctrl+Alt+Delete),将有问题的程序(不要选错了程序哦)“结束工作”,看看能不能恢复系统。不要动不动就直接关机或reset。
- 有系统地设计文件目录,不要随便到处保存盘案以至以后不知道放哪里了, 或找到文件也不知道为何物。
- 养成一个做记录的习惯。尤其是发现问题的时候, 把错误信息和引发状况以及解决方法记录清楚,同时最后归类及定期整理。别以为您还年轻,等你再弄多几年计算机了, 您将会非常庆幸您有此一习惯。
- 如果看在网络上看到任何好文章,可以为自己留一份copy,同时定好题目,归类存盘。(鸟哥需要注意知识产权!)
- 作为一个使用者,人要迁就机器;做为一个开发者,要机器迁就人。
- 学写 script 的确没设置 server 那么好玩,不过以我自己的感觉是:关键是会得“偷”, 偷了会得改,改了会得变,变则通矣。
- 在Windows里面,设置不好设备,您可以骂它;在Linux里面,如果设置好设备了,您得要感激它﹗
1.4.5 鸟哥的建议(重点在solution的学习)
除了上面的学习建议之外,还有其他的建议吗?确实是有的!其实, 无论作什么事情,对人类而言,两个重要的因素是造成我们学习的原动力:
- 成就感
- 兴趣
很多人问过我,鸟哥是怎么学习Linux的?由上面鸟哥的悲惨Linux学习之路你会发现, 原来我本人对于计算机就蛮有兴趣的,加上工作的需要,而鸟哥又从中得到了相当多的成就感, 所以啰,就一发不可收十的爱上Linux啰!因此,鸟哥个人认为,学习Linux如果玩不出兴趣, 他对你也不是什么重要的生财工具,那么就不要再玩下去了! 因为很累人ㄋㄟ~而如果你真的想要玩这么一套优良的操作系统, 除了前面提到的一些建议之外,说真的,得要培养出兴趣与成就感才行! 那么如何培养出兴趣与成就感呢?可能有几个方向可以提供给你参考:
创建兴趣: Linux上面可以玩的东西真的太多了,你可以选择一个有趣的课题来深入的玩一玩!不论是Shell还是图形接口等等, 只要能够玩出兴趣,那么再怎么苦你都会不觉得喔!
成就感: 成就感是怎么来的?说实在话,就是“被认同”来的!怎么被认同呢?写心得分享啊!当你写了心得分享,并且公告在 BBS 上面,自然有朋友会到你的网页去瞧一瞧,当大家觉得你的网页内容很棒的时候, 哈哈!你肯定会加油继续的分享下去而无法自拔的!那就是我啦...... ^_^!
就鸟哥的经验来说,你“学会一样东西”与 “要教人家会一样东西”思考的纹路是不太一样的! 学会一样东西可能学一学会了就算了!但是要“教会”别人,那可就不是闹着玩的! 得要思考相当多的理论性与实务性方面的咚咚,这个时候,你所能学到的东西就更深入了! 鸟哥常常说,我这个网站对我在Linux的了解上面真的的帮助很大!
协助回答问题: 另一个创造成就感与满足感的方法就是“助人为快乐之本!”当你在 BBS 上面告诉一些新手,回答他们的问题,你可以获得的可能只是一句“谢谢!感恩呐!” 但是那句话真的会让人很有快乐的气氛!很多的老手都是因为有这样的满足感, 才会不断的协助新来的朋友的呢!此外,回答别人问题的时候,就如同上面的说明一般, 你会更深入的去了解每个项目,哈哈!又多学会了好多东西呢!
参与讨论: 参与大家的技术讨论一直是一件提升自己能力的快速道路!因为有这些技术讨论, 你提出了意见,不论讨论的结果你的意见是对是错,对你而言,都是一次次的知识成长!这很重要喔! 目前台湾地区办活动的能力是数一数二的Linux社群“酷学园(Study Area, SA)”,每个月不定期的在北/中/南举办自由软件相关活动, 有兴趣的朋友可以看看: http://phorum.study-area.org/index.php/board,22.0.html
除了这些基本的初学者建议外,其实,对于未来的学习,这里建议大家要“眼光看远!”一般来说,公司行号会发生问题时, 他们绝不会只要求各位“单独解决一部主机的问题”而已,他们需要的是整体环境的总体解决“Total Solution”。 而我们目前学习的Linux其实仅是在一部主机上面进行各项设置而已, 还没有到达解决整体公司所有问题的状态。当然啦,得要先学会Linux相关技巧后, 才有办法将这些技巧用之于其他的solution上面!
所以,大家在学习Linux的时候,千万不要有“门户之见”,认为MS的东西就比较不好~ 否则,未来在职场上,竞争力会比人家弱的!有办法的话,多接触,不排斥任何学习的机会!都会带给自己很多的成长! 而且要谨记:“不同的环境下,解决问题的方法有很多种,只要行的通,就是好方法!”
Tips 另外,不要再说没兴趣了!没有花时间去了解一下,不要跟人家说你没兴趣!而且,兴趣也是靠培养来的!除了某些特殊人物之外, 没有花时间趣培养兴趣,怎么可能会有兴趣!?