我建议您为使用 Linux 和在 Linux 上运行的应用程序(运行 Web 服务器、向 Windows 主机提供文件、提供 DHCP、运行图形桌面等)做的事情设定合理的目标。我坚信只有在“做”时才能学习。一旦你有了一个目标,就去追求它。这意味着阅读手册页(很多很多的手册页)、“HOWTO”文档、邮件列表档案、随机博客文章,当然还有你正在安装或编译运行的各种程序附带的文档盒子。
讲授了几年的 IT 课堂认证课程,我相信我可以在一定程度上权威地说,我所看到的进步最大的学生是那些在做自己设计的疯狂项目,并在座位上学习的学生他们的裤子。
理解 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 打交道的事情,以至于知道它“冷”是一件轻而易举的事。
我想,简而言之,我是说没有魔法书或书籍,没有“大师”学习的超级秘密视频,但如果你坚持它并且不害怕,你可以学到的东西绝对没有限制弄脏你的手。
只有多年使用单个组件的经验才能让您深入了解。话虽如此,如果您不是傻瓜并且有超过 24 小时的时间,那么绝大多数 Oreilly Press 的书籍都写得很好而且很完美。:)
有一个名为Linux From Scratch的项目,它向您展示了如何从零开始构建 linux 发行版。你可能会觉得做一次很有教育意义。这将非常耗时,因为您需要从源代码编译所有内容,最后您会将其全部丢弃。
我发现LWN.net的内核页面对于跟上内核在高层次上的工作方式非常宝贵。
除了每天使用它(我认为这是一件很棒的事情!),我建议您开始考虑可以在 linux 机器上为您的网络实现的服务。开始基于 Linux 服务进行设计,一旦准备好就进行研究和实施。在此过程中可能会出现错误,而这种经验将帮助您更深入地了解操作系统。
您可以在 Linux 文档项目的指南页面找到一些免费指南。这是我从那里挑选的一个简短列表,但您应该滚动页面以找到您需要的内容。
您应该为您感兴趣的主题寻找特定的HOWTO 。另一个按日期排序的 HOWTO 列表。
Linux 评论初学者页面上有一些初学者。
最后,这是一本可在线获得的小书——Linux Kernel in a Nutshell。它是 2007 年版的 PDF 格式。
您应该仅将这些参考资料用作开始您自己搜索所需内容的参考。
对于一般的 Unix 哲学和对命令行的出色介绍,请参阅 Brian Kernighan 和 Rob Pike 的经典著作The Unix Programming Environment。
此外,IBM 的DeveloperWorks网站的 Linux 部分有 900 多篇文章。您可以浏览文章列表以查找感兴趣的主题。
最后,一旦您准备好深入了解细节,请前往源头。在kernel.org上获取您正在使用的内核版本的源代码(您的发行版也将包含您可以安装的内核源代码包)并查看 Documentation 目录。你会发现很多关于内核内部和配置设置的参考资料。
学校。要真正了解 Linux 系统,您需要广泛的计算机科学系统背景。编译器、计算机体系结构和操作系统。你需要一个向导,他可以告诉你什么是重要的,并纠正你有或形成的任何误解。
一旦您了解了现代处理器的工作原理以及 C 编译器如何利用它们,您就可以深入研究Minix 3 之类的书籍:
这是 Linux 内核的作者 Torvalds(松散地)基于他的工作的最新版本的书。您将了解操作系统的基本组件和算法,以及如何准确地实现它们:文本附带了几乎完整的 Minix 源代码打印,以供参考和指导。查看中断处理程序以全面了解系统如何工作以及控制流向何处。
在你嘲笑学校教育和计算机科学之前,重要的是要注意操作系统被要求做的工作通常是 NP 完全的。因此,了解各种可用算法对于性能调整至关重要,因为不会有可证明的最优算法。
除了内核之外,还有许多其他领域。因为 Linux 是开源的,所以这是一个学术金矿。像 Debian 和 Ubuntu 这样的系统可以使用它们的源代码,而且非常简单:
apt-get source package-name
许多上游也将他们的代码托管在版本控制中,因此您可以阅读程序源代码的最新版本,甚至查看它是如何在几年前构建的。
只需开始构建您自己的发行版。我已经为自己做了,你知道吗?4 个月后,我对 Linux 内部结构的了解超过了我周围使用 Linux 超过 10 年的人。
来源。_
当然,如果您指的是kernel。
如果你想学习内核和 API 之上的系统,我会从学习 old school 开始
Unix
。也许尝试一些FreeBSD / OpenBSD / NetBSD / DragonflyBSD。一点Minix也可以提供帮助。然后转到Slackware、Arch、Debian和Gentoo。它们都是不同的(并 带有 大量的文档 ),在这些差异中,你的好奇心会让你搜索为什么会这样,你会获得很多技术、商业、政治和历史知识。另一种方法是去挖掘
/etc
旧的 Unix 手册,当然还有谷歌。从头开始 Linux是
learning
GNU/Linux 的好方法。在任何 *nix 环境中学习都是一种整体方法。它涉及一系列顿悟和体验。这不是偶然的。它是其设计的故意副产品,因为原始环境是为计算机程序员设计的。这也是它最大的缺点,因为重点是技术方面而不是用户体验。这是“一栋坚固框架的房子,可以在没有维修的情况下使用 100 年,但它的壁板是随意的,油漆显然被忽视了”。
将其与 Windows 进行对比,后者是这一理念的镜像——做一些能给用户带来有形体验的事情,但保护他们免受事物内部运作的影响。这是“一栋装饰精美、油漆精美的房子,但基础却经过多次变通改造”。
要真正开始学习,我建议构建具有特定于您的硬件选项的自定义内核映像,并使用您想要的选项安装它们。您应该完全预料到某些地方会发生故障,并且您可能会或可能无法将事情恢复到“正常”状态。这是该学习过程的正常部分,您应该将其视为事情会中断(即不要将此作为主要安装,使用单独的驱动器或虚拟机或其他东西......)
我已经回答了一个类似的问题,所以为了减少打字,我会在这里交叉链接。您还需要阅读此页面上的前几段,这将使您更好地了解自己的目的。