扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
一.为什么要学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 (ATT语法,保护模式)
保护模式下的比较复杂,基本上每本讲内核的书都会有介绍有80x86 Intel语法的基础就行,
有兴趣可以看看Intel的官方网站
3.数据结构(离散数学)
计算机专业的核心课程,重要性我就不说了
4.操作系统原理
看懂这个再去读linux吧
5.微机原理/组成原理(数字电路)
底层直接和硬件打交道,所以这个也要
6.了解linux/unix
我想至少你要会操作吧,了解unix的API
7.软件工程/编译原理
这方面的经典书去可以搜到很多我觉得APUE这种书不适合初学者,还是先看看UPE
4.1学习所得
我归纳的一下:其中用户管理重点学习passwd、shadow、group 3个文件和useradd、passwd、groupadd、usermod 4个关键性命令;创建文件系统命令touch、安装文件系统命令、du、df还有find命令;以及rpm的使用等;其中,在软件包安装部分遇到问题,自己不能完成包安装。后来自己在网上查阅了一些资料和多练习才安装成功,另外我觉得本次实习的实践性很强,必须要自己亲手操作一边,在问题和解决问题的循环中才能真正完成本次实习任务。本次实习内容较多,对于有些知识我还比较生疏,没能熟练使用。在下来的学习中加强实践练习,夯实系统管理的具体知识,提升上机操作能力。
对于我个人而言,我对这门课程不太感兴趣。所以在实习过程中我充分利用自己的实习时间,反复的去练习实习项目,在练习中发现问题和解决问题,这样不断的提升自己的学习能力,在结合一些有趣的实验和部分同学进行讨论。非常感谢实习导师们在实习过程中对我们的指导,此次实习我觉得自己收获很多,对我以后的学习和工作有非常大的帮助,在以后的学习中我会更加努力的去学习和加深自己的专业知识。实习有很多的好处,它的好处有验证自己是否真的掌握了这些知识,以及对那些知识的不清楚,在实习中去完善自己的不足,加强和巩固自己的不足,在实践中去验证理论,用理论去解决实践中遇到的问题。
4.2经验教训
经过几天的实习我的长进了很多,我学会了在linux系统下如何进行DNS域名系统配置与管理,对DNS服务器有了更深刻了解,通过两周的实训操作,对常见服务器的搭建与配置管理有了深刻的体会与了解。这次实训不仅让我们在理论上对linux有了全新的认识,在实践能力上也得到了提高,对linux的许多知识加以巩固加深,明白了作为一名新时期的人一定要做到学以致用。实训期间,遇到不懂的问题就问同学,通过同学耐心讲解,克服了许多难题,使我懂得了团结就是力量。在成长的道路上,我们要不断学习,不断进步,使自己得到提升。这次实训对于我们以后学习、找工作也是受益匪浅的。相信这些宝贵的经验会成为我们今后成功的重要基石。,让我弥补了自己许多的不足。其实成功只离你仅有几步之遥,以前有许多的东西都没有学的很扎实,但是经过这一周的实习让我的知识又重新上了一个台阶,在这次实习中我学到了很多的东西,从中自己也在一步的探索中,看到自己一点一滴的变化。在一周的实训中遇到了不少的问题,如果在linux中配置dns的时候马虎,不细心,就会导致启用失败。而dns服务器配置问题也值得我们去理解,去实践,琢磨了很久,才琢磨透彻。
4.3实习体会
通过本次的实习,我知道了“有心人天不负”,我们只有对什么都注意观察、分析、总结、归纳、提炼,才能使自己的工作做出成绩。只有做一个有心人,才能捕捉到每一个细小变化,作出迅速反应,捕捉住每一条信息。“世上无难事,就怕有心人”,做有心人,勤于思考,才能改进我们的工作方法。“学为中,弃为下,悟为上”。勤于思考,才能领悟,才能提高,才能做得更好。
要想在短暂的实习时间内,尽可能多的学一些东西,这就需要跟老师和同学有很好的沟通,加深彼此的了解,刚到培训基地,老师并不了解你的能力,不清楚你会做哪些工作,不清楚你想了解什么样的知识,所以跟老师建立起很好的沟通是很必要的。
在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更应该把学习作为保持工作积极性的重要途径。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是通过实践活动来实现的,也只有通过实践才能锻炼人的品质,彰显人的意志。必须在实际的工作和生活中潜心体会,并自觉的进行这种角色的转换。
这一周的实习,使我对linux有了很深的定义,自己在学习中出现的各种问题,也让我重新审视了自己,并完善自己在学习中的不当方法,学会自己去探索发现,让自己也变得善于动脑,善于思考,不倚仗他人。
学以致用,是人生最大的收获。我会进一步的认识并扩展专业知识,增长见识,不断充实自己,使自己不断的吸收养分,各方面得到充分的提高。为以后出身社会,打下坚实的基础。每一日你所付出的代价都比前一日高,因为你的生命又消短了一天,所以每一日你都要更积极。今天太宝贵,不应该为酸苦的忧虑和辛涩的悔恨所销蚀,抬起下巴,抓住今天,它不再回来。人要走进知识宝库,是一辈子的事情,不可能一蹴而就。因此我们要学习的东西太多了。
在使用3个月 manjaro linux +i3wm 之后我打算写一篇文章来记录一下心得,首先说一下,这篇文章并不是教程,只是分享一下使用心得。在这几个月使用期间,从刚开始的懵,到最后熟练使用效率大大提升,以至于使用gnome 或者windows桌面的时候各种不适应
接下来会分成两部分来写,第一部分是 manjaro linux ,第二部分是 i3wm 。
在使用Manjaro之前使用了大约1个月时间的Deepin Linux,界面确实很华丽漂亮,但是在Deepin的下面很多界面会有卡顿的感觉,比如启动器界面,以及多任务切换的时候,还有一个重要原因:我的蓝牙耳机 Fiil Diva 连上之后断断续续,基本不能用,而在Manjaro下面可以完美使用。
作为一个程序员,命令行上面有些资源难免要出墙,如果不用代理网速有些资源可能是龟速,比如 yaourt 某些软件的时候。如果你使用ss作为代理,可以使用alias给命令行设置代理。使用setproxy给命令行设置全局代理,使用完成之后在使用 unsetproxy 来取消代理。
可以把下面三句话放到你的 .zshrc 里面,这样随时随地就都能使用了。
在使用i3wm之前,我知道的linux桌面有 gnome , cinnamon , kde , xfce 等,对了还有国产的 dde ,这些桌面都有一个特点,就是和windows类似的,浮动窗口管理器,一个窗口可以浮在另外一个窗口上面,所以要在多个窗口间切换,则需要使用 alt+tab 来回切换
如果窗口少还好,如果窗口多的话,来回切换会非常繁琐,直到遇到了 平铺式窗口管理器i3wm。
i3wm的所有窗口都平铺在桌面上,可以按照你的需求平铺或堆叠。初学起来可能配置麻烦,但是一点点熟悉下来会发现熟悉了根本离不开了,就如开头说的那样,所有的熟悉都是从陌生开始的。
放一张截图:
关于i3wm的配置,就不写太多了,就推荐一个视频教程就够了
教程地址: i3wm configuration
附上我的配置文件地址:
正好我上午正在看的这篇:
========================
解答:学习Linux的四个步骤
假设你是计算机科班出身,计算机系的基本课程如数据结构、操作系统、体系结构、编译原理、计算机网络你全修过
我想大概可以分为4个阶段,水平从低到高
从安装使用=linux常用命令=linux系统编程=内核开发阅读内核源码
其中学习linux常用命令时就要学会自己编译内核,优化系统,调整参数
安装和常用命令书太多了,找本稍微详细点的就ok,其间需要学会正则表达式
系统编程推荐《高级unix环境编程》,黑话叫APUE
还有《unix网络编程》
这时候大概还需要看资料理解elf文件格式,连接器和加载器,cmu的一本教材中文名为《深入理解计算机系统》比较好
内核开发阅读内核源码阶段,从写驱动入手逐渐深入linux内核开发
参考书如下《linux device drivers》,黑话叫ldd
《linux kernel development》,黑话叫lkd
《understading the linux kernel》,黑话叫utlk
《linux源码情景分析》
这四本书为搞内核的必读书籍
最后,第三阶段和第四阶段最重动手,空言无益,光看书也不罩,不动手那些东西理解不了
学习linux/unix编程方法的建议
建议学习路径:
首先先学学编辑器,vim, emacs什么的都行。
然后学make file文件,只要知道一点就行,这样就可以准备编程序了。
然后看看《C程序设计语言》KR,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。
如果想学习UNIX/LINUX的编程,《APUE》绝对经典的教材,加深一下功底,学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。
然后再看Douglus E. Comer的《用TCP/IP进行网际互连》第一卷,学习一下网络的知识,再看《UNP》的第一卷,不仅学习网络编程,而且对系统编程的一些常用的技巧就很熟悉了,如果继续网络编程,建议看《TCP/IP进行网际互连》的第三卷,里面有很多关于应用协议telnet、ftp等协议的编程。
如果想写设备驱动程序,首先您的系统编程的接口比如文件、IPC等必须要熟知了,再学习《LDD》2。
对于几本经典教材的评价:
《The C Programing Language》KR 经典的C语言程序设计教材,作者是C语言的发明者,教材内容深入浅出。虽然有点老,但是必备的一本手册,现在有时候我还常翻翻。篇幅比较小,但是每看一遍,就有一遍的收获。另外也可用谭浩强的《C语言程序设计》代替。
《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常经典的书(废话,Stevens的书哪有不经典的!),虽然初学者就可以看,但是事实上它是《Unix Network Programing》的一本辅助资料。国内的翻译的《UNIX环境高级编程》的水平不怎么样,现在有影印版,直接读英文比读中文来得容易。
《Unix Network Programing》W.Richard Stevens:第一卷讲BSD Socket网络编程接口和另外一种网络编程接口的,不过现在一般都用BSD Socket,所以这本书只要看大约一半多就可以了。第二卷没有设计到网络的东西,主要讲进程间通讯和Posix线程。所以看了《APUE》以后,就可以看它了,基本上系统的东西就由《APUE》和《UNP》vol2概括了。看过《UNP》以后,您就会知道系统编程的绝大部分编程技巧,即使卷一是讲网络编程的。国内是清华翻译得《Unix网络编程》,翻译者得功底也比较高,翻译地比较好。所以建议还是看中文版。
《TCP/IP祥解》一共三卷,卷一讲协议,卷二讲实现,卷三讲编程应用。我没有怎么看过。,但是据说也很经典的,因为我没有时间看卷二,所以不便评价。
《用TCP/IP进行网际互连》Douglus.E.Comer 一共三卷,卷一讲原理,卷二讲实现,卷三讲高级协议。感觉上这一套要比Stevens的那一套要好,就连Stevens也不得不承认它的第一卷非常经典。事实上,第一卷即使你没有一点网络的知识,看完以后也会对网络的来龙去脉了如指掌。第一卷中还有很多习题也设计得经典和实用,因为作者本身就是一位教师,并且卷一是国外研究生的教材。习题并没有答案,留给读者思考,因为问题得答案可以让你成为一个中级的Hacker,这些问题的答案可以象Douglus索取,不过只有他只给教师卷二我没有怎么看,卷三可以作为参考手册,其中地例子也很经典。如果您看过Qterm的源代码,就会知道Qterm的telnet 实现部分大多数就是从这本书的源代码过来的。对于网络原理的书,我推荐它,而不是Stevens的《TCP/IP祥解》。
《Operating System - Design and Implement》这个是讲操作系统的书,用Minix做的例子。作者母语不是英文,所以英文看起来比较晦涩。国内翻译的是《操作系统设计与实现》,我没看过中文版,因为翻译者是尤晋元,他翻译的《APUE》已经让我失望头顶了。读了这本书,对操作系统的底层怎么工作的就会
有一个清晰的认识。
《Linux Device Driver》2e ,为数不多的关于Linux设备驱动程序的好书。不过内容有些杂乱,如果您没有一些写驱动的经验,初次看会有些摸不着南北。国内翻译的是《Linux设备驱动程序》第二版,第一版,第二版的译者我都有很深的接触,不过总体上来说,虽然第二版翻译的有些不尽人意,但是相比第一版来说已经超出了一大截。要读这一本书,至少应该先找一些《计算机原理》《计算机体系结构》的书来马马虎虎读读,至少应该对硬件和计算机的工作过程有一些了解。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流