首页
社区
课程
招聘
[分享]浅谈如何学习linux
发表于: 2009-5-1 08:24 24560

[分享]浅谈如何学习linux

2009-5-1 08:24
24560

一.为什么要学linux?

当然最重要是爱好和兴趣!如果你这种必要学,或者根本不喜欢,请不要浪费时间,你学也学不好!

二.起步

你应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix
    如何选择版本:北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术最先进的linux开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。

对于初学linux的人来说,我建议是使用redhat,原因如下:
    1)现在很多书都是以redhat为例讲的,为了与书本协调一致
    2)周围的人都用redhat,交流比较方便
    3)redhat应用范围广,有典型性和代表性
    4)它易于使用和安装,我们没有必要把时间浪费在“装系统”上而应集中精力学习最有用的东西。

【注】现在觉得RH很死板,AS,ES等用在服务器上或许不错,Personal desktop用mandrake,debian,suse都不错,笔者现在用Mandrake,因为她长得漂亮:)

如果你并不打算深入学习linux,而是有诸如适应北京市政府办公平台迁移到linux上这种需要,那么中软,红旗等中文linux是不错的选择

我强烈建议:自己亲自动手把linux装到你的硬盘上,你必须学会独立安装linux系统的技能,对于现在的版本来说,其实跟装WinXP一样简单

从此现在开始,请不要以windows的工作方式来考虑问题,应该尝试挖掘linux身上的“天才unix”的气质。

三.进阶

    掌握至少50个以上的常用命令
    理解shell管道"|",文件流重定向">"及追加">>"等
    熟悉Gnome/KDE等X-windows桌面环境操作
    掌握.tgz.rpm.biz等软件包的常用安装方法
    学习添加外设,安装设备驱动程序(比如modem)
    熟悉Grub/Lilo引导器及简单的修复操作
    熟悉系统固有目录的名称及公用
    学会用mount命令访问其他文件系统
    了解vi,gcc,gdb等常用编辑器,编译器,调试器
    学习linux环境下的简单组网

建议:买一本不需要太厚的linux教材,大致可以满足要求(现在的书越来越多了,还带很多图,我当时可没这么多书)

四.高级应用

澄清一些概念:linux的普通操作与真正的系统管理不能相提并论,后者需要很多知识

1.英语
    即使你不学linux,我也强烈建议你学好英文[U.S.english]。因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装。你必须能无障碍的阅读大量的英文技术文档在搜索引擎找到的英文网站和网页中熟练的检索最好能有用英文直接交流的能力,摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距。

2.shell[sed/awk]
    shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的.bat但shell比.bat强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上
这也是CS中的一个重要思想。此外,shell可以实现工作自动化,这个概念也比较重要sed,awk用来处理文本,历来很常用。

3.Perl/PHP
    漂亮的脚本, CGI的首选,比ASP好,应用面很广

4.C\C++

C、C++是linux/unix的核心语言,系统代码都是C写的

5.ASM
   系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要。//走核心路线的话,c\c++,asm最重要

6.Java,Python,Tcl,XML

五、系统管理篇

    在熟悉linux的基础上还需要掌握至少一种unix。我首推Solaris,其次是FreeBSD比如运营级系统一般是Solaris+Oracle/DB2之类的学习apache、ssh、sendmail/Qmail、proftp/vsftp、Samba、Squid、MySQL/PostgreSQL/Oracle、Bind等各种应用服务器的构架及电子商务的应用熟悉TCP/IP协议族,学习诸如apache+php+proftp+mysql+quota的实现以及大型局域网,分布式集群等各种企业级应用解决方案熟悉多用户管理,数据库管理,文件系统,逻辑存储管理,日志分析,备份与灾难数据修复系统补丁,内核升级,以及在此基础上的防火墙构架等以保障系统安全在内的各种系统管理技能。

我觉得,如果在此基础上再掌握路由/交换设备便是一个不错的系统管理员  

各种基于linux的解决方案可参考相关书籍和文献,必要时用google或各大linux站点站内搜索引擎寻找最新文档,以避免错误和漏洞有几本技术大全和技术内幕我认为都是这方面不错的书

六、深入学习linux

我个人理解的读linux内核需要的基础:在此之前,希望先把应用层的东西学一下,那样会比较好理解
    1.C
    如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种),建议再看一下《The C Programming Language》Second Edition这本圣经(如果想学缓冲区溢出,这点C的功力可能是不够的,还有<C陷阱与缺陷>,<C专家编程>,<C\C++深层探索>,反正经典书看多了是没有坏处的)

2.asm (AT&T语法,保护模式)

保护模式下的比较复杂,基本上每本讲内核的书都会有介绍有80x86 Intel语法的基础就行,
有兴趣可以看看Intel的官方网站

3.数据结构(离散数学)

计算机专业的核心课程,重要性我就不说了

4.操作系统原理

看懂这个再去读linux吧

5.微机原理/组成原理(数字电路)

底层直接和硬件打交道,所以这个也要

6.了解linux/unix

我想至少你要会操作吧,了解unix的API

7.软件工程/编译原理

这方面的经典书去www.china-pub.com可以搜到很多我觉得APUE这种书不适合初学者,还是先看看UPE之类的吧。

APUE: 《advanced programming in the unix environment》,中文名《unix环境高级编程》,作者:W.Richard.Stevens(共有6本经典),尊为“圣经”。他的书为全世界黑客所拜读!

UPE:《unix programming environment》,中文名《unix编程环境》比较适合初学者的,深入浅出,其中有一些比较重要的思想。

另外,介绍linux下应用层编程的书也有很多,比如<GNU\Linux编程指南>,redhat,redflag出的书...........
    经典书还有很多很多......

《操作系统:设计与实现》(交大的考研参考书目,讲Minix的unix操作系统设计)、4.4BSD操作系统设计与实现、昂莱氏unix源代码分析、Understanding the linux kernel (2nd)深入理解linux内核、linux设备驱动程序 (2nd)、linux内核源代码情景分析及《保护方式下的80386及其编程》(次书已绝版,只有超星的电子版,如果谁能搞到纸书,清一定告诉我一下,非常感激!!!)

在这里你能明白"黑客"及"haching"一词所代表的真正意义.希望我写的这篇文章能造就更多的黑客,而不是骇客

七、一些资源

www.linuxforum.net // 国内最高水平GNU站点

www.chinaunix.net  // unix、系统管理的不错

www.linuxeden.com  // 下载软件不错

www.linuxaid.com.cn

www.linuxsir.org

其实还有很多,包括国外的

欢迎访问我的博客:http://billstone.cublog.cn


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 8
支持
分享
最新回复 (30)
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
2
添点文章,添点人气
2009-5-1 08:25
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
3
感谢billstone的热情介绍和分享。

前面就看到billstone发了不少Linux的精华帖子。
2009-5-3 19:28
0
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
4
嘿嘿,谢谢捧场啊
2009-5-4 08:19
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
5
Linux确实是非常重要的平台,无论在嵌入式,PC,服务器领域都有非常广泛的用途。

质量好,成本低,还有很多大公司的支持。
2009-5-4 08:23
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
6
另外不知道billstone有没有对比过桌面平台的Linux和嵌入式Linux有哪些主要区别?

特别是在开发和安全领域?
2009-5-4 08:37
0
雪    币: 201
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主的文章很好,但是很多内容是linux服务器相关的。比如Perl/PHP和Java Python等部分,楼主提到的系统管理部分。
做嵌入式的话虽然开发环境在linux下是最好,但也不是绝对。所以一般熟悉linux下的开发环境,熟悉shell,熟悉一些常用的命令,就差不多了。其他的可以在需要的时候再补充。
UPE的确很好,不过和APUE不是一回事,个人以为这两本似乎没有太多承启关系。另外楼主还漏掉了UNP:《UNIX NETWORK PROGRAMMING》,涉及网络的话,这本也是必读。APUE新版虽然有更新网络部分,不过还不够。
个人以为linux做嵌入式比起pc上,更精简或者说是定制性。一些比较简单例子,busybox,是一些常用命令的单个可执行实现。驱动和内核当然也会根据平台去精简和优化。
两者面对的存储设备也是不一样的,服务器一般不会去搞虾米Nand文件系统吧。
比较贴近用户的图形这一块,与传统的X window的架构也会不一样,不过我只用过microwidow和fltk,感觉不好的是,这一部分和pc一样,标准不一各家产品都有,实在麻烦。
boot部分一般有一个bootloader,流行的如uboot,这个与pc也不一样,bootloader除了启动系统加载内核外,一般还承担更新烧录程序的任务。
与服务器不同的是嵌入式linux一般不会去跑多用户,服务器安全威胁多来于外部,嵌入式的话,呵呵我想威胁多来于内部吧。
2009-5-4 14:15
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
8
cryptwind介绍的相当详细,受益匪浅!

基于嵌入式Linux的手机平台很多公司都有做,目前一个比较麻烦的问题就是不同平台之间的兼容性不够好。
2009-5-4 14:23
0
雪    币: 201
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是啊,LiMO OpenMoko提出的比较早,现在google也插了一手,我还看到国内有人做一个broncho的平台,采用GTK+/DirectFB。跟pc一样,也是五花八门
2009-5-4 15:29
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
目前还没学到里面
了解前辈们是怎么学习  以后好不走弯路
2009-5-4 17:43
0
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
11
to 各位大哥:

  我还没有接触过linux嵌入式开发相关的项目或经验,不过还是希望各位说点看法
2009-5-4 22:58
0
雪    币: 226
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
...感谢分享。。。。
2009-5-5 10:00
0
雪    币: 235
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
Linux0.11内核完全注释 不错!
2009-9-20 19:34
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
一定要感谢一下
2009-9-21 09:43
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
说的太复杂了。

其实掌握核心的内核原理(如某种类型板卡硬件开发,操作系统启动过程(包括bootload),内存管理,进程管理,调度算法,文件系统,网络系统)就可以了,足够了,其他用到自然就会了。

一句话:简单,初学者不要被吓倒。原理很重要,已有的代码是原理最好实践,因此原理和实践相结合了,就这样。

不过建议切勿好高骛远,长城不是一天建成的,呵呵
2009-9-23 13:10
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢各位大侠!
2009-9-25 21:13
0
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
surport!!
2009-10-17 22:08
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
多的我头晕,O(∩_∩)O~,顶
2009-12-28 07:39
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
可能现在用ubutun比较 多,指个人!
2009-12-29 11:33
0
雪    币: 137
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
呵呵……正好赶上!!!!!正不知道怎么学习Linux~~~~~多谢楼主
2010-1-2 18:53
0
雪    币: 615
活跃值: (1212)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
很赞的内容!
2010-1-2 19:46
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
给想学习Linux的朋友一个很好的指导方向。
2010-1-5 18:35
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
好文章,关注一下
2010-1-7 09:03
0
雪    币: 104
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
24
个人,弱弱的感觉
5.微机原理/组成原理(数字电路) 写驱动的应该掌握的重点;
7.软件工程/编译原理 做编译器应该掌握的重点;

如果都做为重点的话,估计用一生的时间也八大够吧!

只是个人弱弱的感觉,如有错误,恳请指正。
2010-5-11 10:12
0
雪    币: 208
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
原理很重要!
2010-12-9 10:51
0
游客
登录 | 注册 方可回帖
返回
//