Answers:
您可以在The Linux Documentation Project的guides页面中找到一些免费的指南。这是我从那里选择的简短列表,但是您应该滚动浏览页面以找到所需的内容。
您应该为感兴趣的主题查找特定的HOWTO。另一个日期按HOWTO list排序。
Linux评论初学者页面上有一些初学者。
最后,这是一本可在线获得的小书-Nutshell中的Linux内核。其为2007年版本的PDF格式。
您应该仅将这些引用用作探针来开始自己搜索所需的东西。
理解Linux的最好方法是严重破坏它,然后再对其进行修复。
我不确定,当您说“更深层次”时,是否要谈论更多地进入命令行(如果可以想象的话,有些人永远不会离开发行版附带的GUI),或者粗糙的低级内容,例如编写内核驱动程序。我将承担更多的前者而不是后者。
我建议您为使用Linux和在Linux上运行的应用程序想要做的事情设定合理的目标(运行Web服务器,将文件提供给Windows主机,提供DHCP,运行图形桌面等)。我坚信,只有在“做事”时才能学习。一旦有了目标,就可以追求它。这意味着要阅读手册页(很多手册页),“ HOWTO”文档,邮件列表清单,随机博客文章,当然还有要安装或编译以在您的程序上运行的各种程序随附的文档盒子。
我从事基于课堂的IT认证课程的教学已经有几年了,我相信我可以说有一定的权威性,我看到最进步的学生是那些正在做自己设计的疯狂项目并在座位上学习的学生。他们的裤子。
正如我之前说过的,手册页,“ HOWTO”文档(http://tldp.org/docs.html以及'net上的许多其他地方)和邮件列表档案是您的朋友。至少在现阶段,我不会讲任何有关内核内部的书籍。您不需要那种深入的知识就可以开始。
与其他人交谈。Server Fault看起来是个很好的建议的好地方。在这里提问,不要以为你看起来会很愚蠢。如果您可以和熟悉Linux的人打交道,那就去吧。(尽管我建议您尝试将观点与事实分开。在Linux社区中,关于做事的观点与其他社区中一样,存在着许多“圣战”,鉴于社区的性质,也许更多)
要真正真正了解Linux的Unix知识,您可以去一些旧的Unix特定的管理或参考手册。我会尽早地避免这些问题(至少直到您了解与Unix衍生的某些操作系统相比,Linux的“未采用的路径”的历史性质)。
不知道您的整体技能水平是什么,我会大声疾呼一本我自己或可能不会很高兴的书。我强烈建议使用“ TCP / IP图解说明”(http://www.amazon.com/Illustrated-Volumes-Addison-Wesley-Professional-Computing/dp/0201776316)。它根本不是特定于Linux的,但是您将要做许多处理TCP / IP的事情,以至于知道它“冷”就可以了。
简而言之,我想我想说的是没有一本或多本魔术书,也没有从“大师”那里学到的超级秘密视频,但是如果坚持下去并且不害怕,绝对可以学到什么使您的手变脏。
除了每天使用它(我认为这是一件很了不起的事情!)之外,我建议您开始考虑可以在Linux机器上为网络实现的服务。开始基于Linux服务进行设计,准备就绪后进行研究和实施。希望过程中会出现错误,这些经验将帮助您更深入地了解操作系统。
要获得一般的Unix哲学和对命令行的出色介绍,可以参考Brian Kernighan和Rob Pike的经典著作《 Unix编程环境》。
另外,IBM的DeveloperWorks网站的Linux部分有900篇文章。您可以浏览文章列表以查找感兴趣的主题。
最后,一旦您准备好了解细节,请查阅源代码。在kernel.org上获取您正在使用的内核版本的源代码(您的发行版还将包含您可以安装的内核源程序包),并签出Documentation目录。您会在内核内部和配置设置上找到很多参考资料。
学校。要真正了解Linux系统,您需要各种各样的计算机科学系统背景。编译器,计算机体系结构和操作系统。您需要一个指南,该指南可以告诉您重要的内容并纠正您对表格的任何误解。
了解了现代处理器的工作原理以及C编译器如何利用它们之后,您就可以阅读Minix 3之类的书:
这是Linux内核作者Torvalds(轻松地)基于他的著作的最新版本。您将了解操作系统的基本组件和算法,以及如何精确地实现一个:文本附带将源代码几乎完整地打印到Minix中,以供参考和指导。检查中断处理程序,以全面了解系统如何工作以及控制流向何处。
而且,在嘲笑学校和计算机科学之前,请务必注意,要求操作系统完成的工作通常是NP完整的。因此,了解广泛的可用算法对于性能调整至关重要,因为不会有可证明的最佳算法。
除了内核之外,还有许多其他领域。因为Linux是开源的,所以这是一个学术金矿。像Debian和Ubuntu这样的系统使它们的源可用,这简直是简单的:
apt-get source package-name
许多上游程序还将它们的代码托管在版本控制中,因此您可以阅读程序源代码的最新版本,甚至可以查看它几年前的构建方式。
该源。
当然,如果您的意思是内核。
如果您想学习内核和API之上的系统,那么我将从学习老派开始Unix
。也许尝试一些FreeBSD / OpenBSD / NetBSD / DragonflyBSD。一点Minix也可以提供帮助。然后转到Slackware,Arch,Debian和Gentoo。他们都是不同的(并且 都 带有 很大的 文件),并在这些diferencies,你的好奇心会让你寻找它为什么是这样,你将获得很多技术业,贸易,政治和历史知识。
另一种方法是在/etc
旧的Unix手册(当然还有Google)中进行挖掘。
从头开始使用Linux是learning
GNU / Linux的一种好方法。
刚开始建立自己的发行版。我已经为您自己完成了,您知道吗?在4个月后,我花了更多的时间来了解Linux的内部知识,而不是周围使用Linux超过10年的人。
在任何* nix环境中学习都是一种整体方法。它涉及一系列的顿悟和经验。这不是偶然的。它是其设计的故意副产品,因为原始环境是针对计算机程序员而设计的。这也是它的最大缺点,因为重点是技术方面而不是用户体验。它是“具有坚固框架的房屋,即使不使用也可以使用100年,但是其壁板是随意的,油漆显然被忽略了”。
将其与Windows进行对比,Windows是此哲学的镜像-做一些可以为用户带来切实体验的事情,但可以使他们免受事物内部的影响。它是“具有漂亮装饰和油漆的房子,但基础已经经过多次解决,已经经过多次建造”。
为了真正开始学习,我建议您构建具有特定于您的硬件的选项的自定义内核映像,并使用所需的选项进行安装。您应该完全期望进入此操作后,某个地方的某些东西会破裂,并且您可能能够也可能无法将其恢复为“正常”状态。这是该学习过程的正常部分,您应该采取措施,好像事情会破裂(即不要将其作为主要安装,使用单独的驱动器或虚拟机之类的东西)。
我已经对一个类似的问题做了回答,为了减少输入,我将在这里进行交叉链接。您还将需要阅读本页的前几段,这将使您对所要从事的工作有更好的感觉。
开始读取文件/为其添加文件,/proc
并且/etc
-仅读取文件就不会造成任何损坏(如果您保存会产生二进制信息的文件,则可能会损坏终端/ ssh连接)可读的。“ sysctl -a
”输出也是一个金矿。当您发现有趣的东西时,请使用google或man
有关它的更多信息。
您可以找到有关内核和操作系统如何工作的真正瑰宝。
一些快速提示:
/ etc / inittab /etc/rcS.d /etc/rc2.d / etc / crontab / proc / 1 /环境 / proc /文件系统 / proc / meminfo / proc / cpuinfo sysctl -a | grep vm.swappiness / etc / default#基于debian / etc / sysconfig#基于Redhat的
快速提示-/ proc中的某些输出是NUL分隔的,因此很难阅读。使用“ tr”将NUL转换为换行符,例如:
须藤猫/ proc / 1 / environ | tr'\ 0','\ n'
关于Linux或任何操作系统,有很多知识要学习。一种学习是我所谓的“深度”学习,它是要了解内核的运行方式,其做出的假设,各个位之间如何相互通信以及如何处理硬件。那是内核的东西。这样的东西对于弄清操作系统为何以这种方式崩溃非常有用。实际上,我是和卡尔·卡茨克(Karl Katzke)一样学习的。我把东西弄碎了,变得更好了。
对于这种知识,Linux非常简单。所有地方都有记录。尽管Windows上仍然有很多文档,但对于Windows来说还不能完全相同。
然后是“在操作系统中变通”学习,这是对bash / sed / awk / regex以及其他所有知识的了解。因为事实是,如今,操作系统已远远超过其内核。您有供应商提供的驱动程序Blob。您具有此特定发行版如何打包其启动脚本。您有各种修补程序/更新机制。您拥有每个人都需要的系统守护进程,但不是内核。
这比简单的核函数更广泛的知识范围。它因发行商而异,因此在Red Hat上的工作方式在Slackware上可能会不同。文件保存的位置可能会有所不同。他们可以选择替换“ vi”。
“学习Linux”更多地是关于学习整个生态系统,而不是简单的操作系统。
我发现在Linux,FreeBSD,OpenBSD,Solaris,甚至其他各种Linux发行版中都可以找到很多学习Linux的好方法。关于它如何做事不同。在访问其他地方时,您对自己的家乡的了解远比对自己的所在地要了解的多。
在书籍方面,我喜欢O'Reilly的书籍,因此“基本系统管理口袋参考”和“ Linux系统管理”是可能的起点。
我的《TCP / IP网络管理》是一个较旧的副本,我已经有一段时间没有使用它了,但是我发现它对于深入了解正在发生的事情非常有用。
我强烈建议将此作为“必读”:
Unix编程环境-Brian W. Kernighan / Rob Pike
书号0-13-937681-X
http://www.amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X
有人提到了这一点,我认为这是使用各种Linux风格对我最大的帮助。如果您觉得在Linux上有合理的处理方法,请开始使用open / net / freebsd。
至于为什么,与我合作过的大多数Linux人员可能使用一个或两个Linux发行版,它们彼此之间并没有什么不同。当然,他们中的大多数人都知道像手背一样的发行版,但是他们仍然会对某些事情感到震惊。我认为(不要发动火焰战争)BSD的组装方式更容易发现事情的“原因”(此外,潜伏在bsd邮件列表中,他们解释说“为什么”会死掉) )。归结于改变您的观点,直到有人以完全不同的方式进行操作,您才可能问自己为什么某些事情是这样的。
Stackoverflow上的这篇文章大量列出了Unix / Linux资源,包括有关该主题的大多数规范著作。
了解导致Linux出现问题的另一种方法是通过Linux From Scratch(http://www.linuxfromscratch.org/)进行工作。从本质上讲,它是一组手动安装和配置linux系统各种组件的练习,并且是从中学习基本知识的很好的介绍。