我对各种 Linux 发行版有相当多的经验,自 1998 年以来,我使用过大多数主流发行版,包括 Redhat、Debian、Slack、SUSE、Gentoo 等。就我个人而言,我更喜欢 slack 或 arch,或者在某些情况下更喜欢 Debian,因为它们的基础最小,并且可以更好地了解系统上的内容,而不必依赖帮助程序。
现在,在整个经验丰富的社区中,人们喜欢 Gentoo、Slackware、Arch 甚至 BSD 或 LFS,而其他一些发行版,如 Ubuntu、Fedora、RHEL、SUSE 以及某种程度上的 Debian 都依赖于特定于发行版的配置工具或方法,这使得人们很难理解底层系统。
就我个人而言,我确信我记得几次警告不要手动编辑配置文件,或者这样做非常困难。
确实,有句俗话说,如果你学习 Ubuntu,那么你就会学习 Ubuntu,就像如果你学习 Slackware,那么你就会学习 Linux 一样。出于论证的目的,这也可以适用于 RHEL、SUSE 等。
我最近和一位 Ubuntu 粉丝聊天,他对此表示质疑。他说配置文件都在那里,可以手动理解和编辑,就像在 Slack 或 Arch 上一样,只是如果你需要的话,你还可以使用额外的帮助程序。
那么我想知道,如果你学习 Ubuntu 或 RHEL 或其他任何系统,你学习的都是特定系统而不是 Linux,而且如果你了解 Linux,那么手动管理所有东西会很困难,这种观点是否合理?这种观点有道理吗?
答案1
你的问题听起来不像是一个问题。不过我会咬牙回答,因为我就是这么厚颜无耻。
我不能谈论 Debian 和派生发行版,因为除了玩玩之外我从未以任何方式使用过它们。对它们从来没有兴趣。
长期以来,RedHat 和 RedHat 衍生发行版一直是我的主要“Linux 首选”。我不喜欢在生产角色的计算机上安装不必要的软件。这意味着我将 CentOS(以及所有 RedHat 和衍生发行版)机箱“精简”到最低限度的 RPM。这也意味着“手动”编辑配置文件并删除用于为我管理配置文件的工具。
我喜欢 RedHat 用于指定网络接口、静态路由和 iptables 配置参数的“设计”,因此我通常会保留所有这些。对于将用作防火墙、Web 服务器、DHCP 服务器或其他“无头”活动的机器,我会删除所有与 X 相关的 RPM(如有必要,使用 --nodeps 强制删除)以及任何不必要的或与机器角色无关的 RPM。如果需要,我可以随时再次添加它们。
我看到我的一个 CentOS 5.2 VM 在“rpm -qa | wc -l”上显示 113 RPM。该操作系统占用了大约 600MB。与旧发行版相比,它当然不是“精简版”,但对于 CentOS 来说,它很轻量。
(这些年来,RedHat 衍生发行版上的 RPM 依赖关系树变得越来越疯狂。事实上,我现在想不起其中一个比较愚蠢的依赖关系,但随着 RedHat 衍生发行版的版本号上升,它们让我越来越抓狂。)
答案2
嗯,这里有两个层次的理解。理解 Linux 和理解发行版的做事方式是两回事。要成为一名优秀的 Linux 管理员,您必须很好地掌握 Linux 的工作原理,但您还需要很好地理解您正在运行的发行版的做事方式。
这与网络管理员需要了解如何配置和管理他们的设备以及需要了解网络层、其用途和协议的方式没有什么不同。
归根结底,Linux 就像数学一样是一种工具。一旦你理解了一个概念并知道如何应用它,使用计算器就没什么问题了。
答案3
我的看法很简单 - 系统管理员设置服务器或用户启动工作站,需要开箱即用且只需付出最少努力的东西。这就是为什么 Windows 尽管存在无数问题,但仍然如此受欢迎的原因。
因此,基本上,生产计算所需的任何东西都可以通过从源代码安装轻松获得。而且您可以确保您安装的每个软件包都经过了 QA 并且已准备好投入生产。所有这些都在简单的安装后完成,无需满足数十亿个依赖项并从源代码编译所有内容。
是的,对于习惯于 LFS 方法的人来说,这样的系统可能显得有些臃肿,但凭借现代计算能力,内核中额外的模块占用百分之 0.00001 并不是问题。
我早期的 Linux 体验涉及大量编译和更多 CPAN 安装,直到我遇到 Debian - 每个 perl 包都可以通过 apt 获得,并且每当我需要更新时它们都会自动更新。因此,作为一个需要照看几百台服务器的人,我绝对反对从源代码编译所有内容并构建和自定义每个可能的包。我宁愿依靠主要发行版的 QA 团队。
答案4
如果你深入研究它,就会发现内核之后的一切都十分方便。
以网络接口为例,Redhat 提供了 system-config-network-gui 和 system-config-network-tui 这两个脚本,分别用于将配置文件写入 /etc/sysconfig/network 和 /etc/sysconfig/network-scripts。
但这些实际上是配置文件,它们为“ifup”和“ifdown”等脚本提供信息,这些脚本在启动时被调用。“ifup”命令本身是“ifconfig”命令的包装器。
它本身是一个方便的程序,可以让您操纵内核中的值。
有人可能会说,如果你没有编写自己的 C 程序来直接使用内核提供的 API,那么你就没有学习“linux”。
内核之上的这些便利都不是强制性的——RedHat 还提供了“ip”命令,它的功能与“ifconfig”命令相同。而且可能还有脚本和 GUI 包装器,它们都是基于这种便利而构建的。
所以这完全取决于你想在哪里划一条界线。无论你学什么,你都会学到一些并非普遍适用的东西,即使在 Linux 上也是如此。
但方便并不是一件坏事。标准化也不是一件坏事。这就是为什么许多工具供应商偏爱(或仅支持,取决于供应商)特定版本的 RedHat 系列发行版的原因:因为这样他们就知道当客户遇到问题时,他们可以在实验室中重现客户正在使用的环境,这样他们就可以看到发生了什么。他们不必担心六百万个微妙冲突的“优化”中的任何一个,这些优化会让任何 Gentoo 机器或多或少变得独一无二。