显示自十一月 2008以来最新的 19 个帖子(共 23 个)。显示较早的帖子
显示自十一月 2008以来最新的 19 个帖子(共 23 个)。显示较早的帖子

2008年11月26日

Fedora 9中的服务介绍

以下是对Fedora 9中不同服务关于使用和推荐方面的简要介绍。


理解服务

请阅读Fedora中设置服务,它包含了对不同服务/看守进程、runlevels和各种工具的说明以设置各种服务。


如果你使用命令行的话,使用chkconfig或ntsysv设置你的服务,如果是图形界面的话,使用system-config-services。Gnome用户:系统->管理->服务,你必须拥有root权限。


各种服务


以下是对Fedora 9中服务的简要说明与一些建议(并没有列出每个服务)。注意:不要禁用那些你不确定需不需要或者你不理解它们的作用的服务。


并不推荐禁用以下服务(除非你明白你在做什么)

haldaemon, messagebus, klogd, rsyslogd


确认已经把runlevel应用到3和5上。


NetworkManager, network
NetworkManager 是用来自动化管理网络设备和网络连接的服务。那些需要在无线WiFi和有线以太网之间切换的笔记本用户会发现它很有用。Fedora 9默认启用它。如果你的网络连接工作很好的话,可以不要管它。如果它有问题的话或者你更倾向于使用network服务的话,那就禁用 NetworkManager服务,启用Network服务。注意请确认你的网络设置是正确的,不管是通过system-config-network来 设置network服务,还是nm-connection-editor来设置NetworkManager。使用固定IP的服务器/桌面或者会更倾向于 network服务。更多相关信息:Fedora 9-Network Management


acpid
高 级配置与电源接口守护进程,它控制和提供了管理电源和某些输入设备的界面。推荐只有当你需要时启用它。如果你使用现代桌面环境的话 (GNOME,KDE),那么许多ACPI函数都应该由acpid提供了。试一下禁用它,如果你在电源管理方面有问题的话(挂起,睡眠,唤醒),再重新启 用它。如果你不使用桌面环境的话(runlevel 3),你会发现对于使用ACPI函数这个服务是很有必要的。

anacron,atd,cron
它 们是目的稍微有些不同的调度程序。推荐启用通用目的的调度程序cron,特别是你需要计算机长时间运行时。如果你运行的是一个服务器的话,查看一下需要哪 些调度程序。一般来说atd和anacron对于桌面/笔记本用户来说是不需要的。请注意诸如清理/tmp和/var的任务是需要专门的调度程序的。


auditd
它保存了由内核产生的审计。可以通过几种不同的方法来使用这些信息。SElinux使用audit看守进程记录事件。推荐你开启这个服务,特别是使用SElinux的用户。更多有关如何利用audit的信息:RHMagazine


bluetooth,hcid,hidd,dund,pand
bluetooth 用于局域网的无线连接(不是wifi,802.11),一些笔记本带有bluetooth。有bluetooth鼠标,耳麦和手机接口。对于没有 bluetooth的用户应该禁用bluetooth服务。其它有关bluetooth的服务:hcid控制所有的设备,hidd提供输入设备(键盘,鼠 标)支持,dund支持通过bluetooth进行拨号,pand允许通过bluetooth连接以太网络。


btseed,bttrack
这 些服务支持点对点网络系统BitTorrent使用的自动播种和跟踪torrents。应该禁用这些服务除非你特别想播种或跟踪torrents。通过播 种本质上你可以和他人分享torrent中的内容和跟踪其它和你一样行为的BitTorrent客户端。更多有关信息:BitTorrent FAQ。请记住这些服务很需要网络带宽和其它的配置。


capi
仅对于使用IDSN的用户有用,其它的用户应该禁用它。


cpuspeed
它 控制你的CPU的运行时间以降低功耗。大多现代的笔记本电脑的CPU支持这个特性,许多桌面电脑也有支持。大多用户应该启用它,Pentium-M, Centrino, AMD PowerNow, Transmetta, Intel SpeedStep, Athlon-64, Athlon-X2, Intel Core 2的除外。强烈推荐笔记本用户启用这个服务,除非你想使你的CPU运行在固定的状态。


cron
See anacron


cupsd,cups-config-daemon
用于打印,只有当你有在Fedora下可以正常工作的打印机时启用它。


dund
See bluetooth


firstboot
这个服务是专门用于在Fedora的安装过程中处理一些特定任务,并在仅在安装后的第一次启动过程中运行一次。

即使是这样,它还是要检测它是否已经运行过(通过/etc/sysconfig/firstboot),可以禁用这个服务。


fuse
这个服务用于给其它用Fuse挂载文件系统的服务提供相应功能。GNOME的虚拟文件系统需要这个服务以提供更为简洁的跨网络文件系统的接口。应该启用这个服务。


gpm
用 于终端鼠标指针(无图形)。如果你不使用字符终端的话(CTRL-ALT-F1,F2...),那禁用它。However it is good practice to leave this enabled for runlevel 3 (console) and disabled for runlevel 5 (x-server).


halddaemon

HAL
HAL是指Hardware Abstraction Layer。这是个从几个来源收集和保持有关硬件信息的重要服务。Fedora需要它,因些让它保持启用状态。阅读overview of HAL

hsqldb
Hsqldb是一个JAVA数据库服务器,除非你从事JAVA方面的开发,否则禁用这个服务。


httpd
这是Apache HTTP Web Server。如果你从事网络方面的开发并且安装了它,那就应用它。大多数桌面用户或者说是非开发人员都应该禁用这个服务。


iptables
这是linux中标准的软件防火墙。如果你是直接连接到互联网上的话(cable,DSL,T1),强烈建议你使用这个服务,如果你使用了硬件防火墙的话(D-Link,Netgear,Linksys等),这个服务并不是必须的,但是仍推荐你使用它。


ip6tables
这个服务用于IPv6通讯的防火墙,如果你没有使用IPv6的话,那么禁用它。


irda
IrDA支持设备间的红外通信(笔记本,PDA's,移动电话,计算器等),对于大多数用户可以禁用这个服务。


irablalance
这个服务用于增强多处理器或多核心系统的性能。对于没有多处理器或多核心系统的用户可以禁用这个服务。

对于较新的多核心计算机(intel Core 2 Duo,AMD X2),应该启用这个服务,启用这个服务对于单核心的系统没有影响。


isdn
这是另一个形式的网络连接服务/硬件,如果有ISDN猫的话,启用它,否则禁用它。


kernelloops
这是个报告服务,当内核遇到被称为“oops“的问题时向内核开发人员发送专门的调试信息。更多相关的信息: kernel oops website。可以禁用这个服务。对于使用开发中的内核并且想帮助调试内核问题的用户应该启用它。

lm_sensors
lm_sensors提 供了对主板传感器或特殊设备(一般被用在笔记本电脑或高端服务器中)的监控。它用来监视电脑健康状况等方面的相关数值。很多[/url=http: //members.dslextreme.com/users/billw/gkrellm/gkrellm.html]GKrellM[/url]用 户要用到它。如果没有需要的话建议关闭它。



mdmonitor
用来监控软RAID或LVM信息。这并不是一个必要的服务,可以关闭它。


microcode_ctl
这个服务允许对Intel CPU(奔腾Pro,奔二,赛扬,奔三,至强,奔四等)进行特殊的微代码更新。更新将在每次引导时被写入。仅在你拥有一块Intel的CPU的时候打开它。

messagebus
这是一个针对Linux的IPC(进程间通信)服务。通过D-BUS进行通信,这是一个必要组件。强烈建议你保持它的打开状态。


multipathd
此服务用来监控多路径设备,即那些可以被多个控制器或多种方法进行存取的存储设备。此服务应该被关闭。


netconsole
初始化网络控制日志。此服务可以保持它默认的关闭状态。


netfs
此服务用来在系统启动时自动加载任何共享网络文件空间,例如NFS或Samba等等。该服务在当你连接到另一台服务器或在你的局域网内文件共享时起作用。大多数单机用户应该关闭它。


netplugd
netplugd可以监控网络界面并在它们的状态改变时执行命令。此服务可以保持它默认的关闭状态。


network
参阅NetworkManager。


nfs, nfslock
这是标准的Unix/Linux/BSD类型操作系统的网络文件共享。关闭它,除非你需要通过这种方式共享数据。


nmbd
此服务被Samba使用。请参阅Samba。


nscd
这个守护进程处理密码并为像NIS,NIS+,LDAP或者hesiod之类的命名/验证服务存储它。此服务应该被关闭。


ntpd
此服务自动通过互联网更新系统时间。在安装过程中提到了它。如果你有一个活动的(“总是在线”)internet连接的话建议你打开它,但这不是必须的。


ntpdate
此服务根据NTP设置系统时间。此服务应该被关闭因为ntpd服务提供了这一功能。


pand
请参阅bluetooth。


pcscd
提供对智能卡和智能卡读卡器的支持。这是小芯片一样的嵌入到信用卡,身份证等证件中的设备。可以关闭它,除非你有这样一个读卡器。

restorecond

用于去监视和恢复SELinux的正确文件内容.如果启用了SELinux这不是必选的,但是强烈推荐启用。


rpcbind

这个服务处理“远程过程调用(RPC)”对其他服务的支持(比如NFS或者NIS)。这和"Portmap”类似,如果没有其它的服务依赖它的话,它可以被停用。


rpcgssd, rpcidmapd, rpcsvcgssd
用于NFS v4版本,除非你要求或者在使用NFS v4,否则这个服务可以被停用。


sendmail
除 非你在运行一个服务器,或者你想转发和支持一个本地共享的IMAP/PO3 服务,大多数的人们不需要一个邮件传输代理。如果你在Web页面上查看你的邮件(hotmail /yahoo/ gmail)或者你使用一个邮件程序比如像Thunderbird, Kmail,Evolution等,那么你完全可以停用该服务。


setroubleshoot
这 是SELinux的后台排错进程,该服务提供信息到setroubleshoot浏览器,如果发生SELinux问题时这个程序就会迅速的通知到桌面(通 常为AVC Denial,当SELinux的问题不是一个临界服务时候,该服务对于SELinux问题的排错有意想不到的作用,如果有已经启用了SELinux,请 保留启用的状态.


smartd
智能磁盘监测后台进程,可以被用于监测或预知在硬盘上的磁盘故障和其他问题的支持,多数的桌面用户可能需要该服务除非认为这是不可能发生的错误,但是还是推荐启用该服务(尤其是对于服务器)。注意,有些磁盘可能不会智能的报告任何(有用)的信息。


smb
SAMBA后台进程是从Linux共享文件到Windows的必需服务,该服务可以被启用仅仅如果你有通过Windows去访问Linux的计算机的需要。这里你可以找到相关的信息在configure Samba For Fedora 9.



smolt
这 个后台程序为[/url=http://fedoraproject.org/wiki/Releases/Smolt]Smolt[/url]提供每月 报告的信息,用于帮助Fedora的开发者们收集统计数值和信息,查看统计数值可以查看这里。希望去帮助和共享信息的用户应该启用该项,否则就可以停用。


sshd
SSH允许本地网络或者远程网络中的其他的用户从其他的计算机在登录到你计算机或运行程序。这是一个潜在的安全问题。当然这不是必须的,如果你没有其他的计算机或者不需要从一个远程的位置(办公室,学校,等)登录,大多数可能的情况下该服务应该是被禁用的。


udev-post
"udev"的用途是Fedora的设备管理系统,默认情况下"udev"支持很多个规则,用于设备的权限和行为管理,该服务允许用于保存用户应用的规则,这里强烈的推荐保留该服务启用。


wpa supplicant
如果你使用一个无线网卡被要求去使用基于WPA加密连接到一个无线接入点的话,VPN或者Rediuas服务器,这个服务必须被启用。多数没有这样需求的的用户可以保留该服务为停用。

阅读全文

Fedora 10正式版发布

期待已久的Fedora 10 正式版终于发布了,这真是一个令人振奋的消息,Fedora 10引入了不少重要的新功能和技术,提高了桌面用户体验的可用性。

Fedora 10 的主要特性:
  • 无线连接共享启用 ad hoc 网络共享

  • 更好的设置并通过改进的管理工具使用打印机

  • 现在简化了本地和远程连接的虚拟化存储供应

  • SecTool 是一个新的安全性审核及入侵侦测系统

  • RPM 4.6 是强大、灵活的软件管理程序库的主要更新



这个发行本中包括的其它特性:

  • 通过重新编写 PulseAudio 声音服务器,让其使用基于时间的音频调度实现无故障音频以及更好的性能

  • 提高的摄像头支持

  • 更好支持红外远程控制使其方便与很多应用程序连接

  • 已为普通用户将 /usr/local/sbin:/usr/sbin:/sbin 添加到 PATH 以便简化命令行管理任务

  • 在线帐户服务为位于 http://online.gnome.org 或者保存在 GConf 中的帐户提供带证书的应用程序

查看详细的发行说明

Fedora 10正式版的下载地址:
http://fedoraproject.org/zh_CN/get-fedora



阅读全文

2008年11月19日

UNIX 高手的 10 个习惯

采用 10 个能够提高您的 UNIX® 命令行效率的好习惯——并在此过程中摆脱不良的使用模式。本文循序渐进地指导您学习几项用于命令行操作的技术,这些技术非常好,但是通常被忽略。了解常见 错误和克服它们的方法,以便您能够确切了解为何值得采用这些 UNIX 习惯。

引言

当 您经常使用某个系统时,往往会陷入某种固定的使用模式。有时,您没有养成以尽可能最好的方式做事的习惯。有时,您的不良习惯甚至会导致出现混乱。纠正此类 缺点的最佳方法之一,就是有意识地采用抵制这些坏习惯的好习惯。本文提出了 10 个值得采用的 UNIX 命令行习惯——帮助您克服许多常见使用怪癖,并在该过程中提高命令行工作效率的好习惯。下面列出了这 10 个好习惯,之后对进行了更详细的描述。

采用 10 个好习惯

要采用的十个好习惯为:

  1. 在单个命令中创建目录树
  2. 更改路径;不要移动存档
  3. 将命令与控制操作符组合使用
  4. 谨慎引用变量
  5. 使用转义序列来管理较长的输入
  6. 在列表中对命令分组
  7. find 之外使用 xargs
  8. 了解何时 grep 应该执行计数——何时应该绕过
  9. 匹配输出中的某些字段,而不只是对行进行匹配
  10. 停止对 cat 使用管道

在单个命令中创建目录树

清单 1 演示了最常见的 UNIX 坏习惯之一:一次定义一个目录树。


清单 1. 坏习惯 1 的示例:单独定义每个目录树
          
~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $

使用 mkdir-p 选项并在单个命令中创建所有父目录及其子目录要容易得多。但是即使对于知道此选项的管理员,他们在命令行上创建子目录时也仍然束缚于逐步创建每级子目录。花时间有意识地养成这个好习惯是值得的:


清单 2. 好习惯 1 的示例:使用一个命令来定义目录树
          
~ $ mkdir -p tmp/a/b/c

您可以使用此选项来创建整个复杂的目录树(在脚本中使用是非常理想的),而不只是创建简单的层次结构。例如:


清单 3. 好习惯 1 的另一个示例:使用一个命令来定义复杂的目录树
          
~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

过去,单独定义目录的唯一借口是您的 mkdir 实现不支持此选项,但是在大多数系统上不再是这样了。IBM、AIX®、mkdir、GNU mkdir 和其他遵守单一 UNIX 规范 (Single UNIX Specification) 的系统现在都具有此选项。

对于仍然缺乏该功能的少数系统,您可以使用 mkdirhier 脚本,此脚本是执行相同功能的 mkdir 的包装:

~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

更改路径;不要移动存档

另一个不良的使用模式是将 .tar 存档文件移动到某个目录,因为该目录恰好是您希望在其中提取 .tar 文件的目录。其实您根本不需要这样做。您可以随心所欲地将任何 .tar 存档文件解压缩到任何目录——这就是 -C 选项的用途。在解压缩某个存档文件时,使用 -C 选项来指定要在其中解压缩该文件的目录:


清单 4. 好习惯 2 的示例:使用选项 -C 来解压缩 .tar 存档文件
          
~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

相对于将存档文件移动到您希望在其中解压缩它的位置,切换到该目录,然后才解压缩它,养成使用 -C 的习惯则更加可取——当存档文件位于其他某个位置时尤其如此。


将命令与控制操作符组合使用

您可能已经知道,在大多数 Shell 中,您可以在单个命令行上通过在命令之间放置一个分号 (;) 来组合命令。该分号是 Shell 控制操作符, 虽然它对于在单个命令行上将离散的命令串联起来很有用,但它并不适用于所有情况。例如,假设您使用分号来组合两个命令,其中第二个命令的正确执行完全依赖 于第一个命令的成功完成。如果第一个命令未按您预期的那样退出,第二个命令仍然会运行——结果会导致失败。相反,应该使用更适当的控制操作符(本文将描述 其中的部分操作符)。只要您的 Shell 支持它们,就值得养成使用它们的习惯。

仅当另一个命令返回零退出状态时才运行某个命令

使用 && 控制操作符来组合两个命令,以便仅当 第一个命令返回零退出状态时才运行第二个命令。换句话说,如果第一个命令运行成功,则第二个命令将运行。如果第一个命令失败,则第二个命令根本就不运行。例如:


清单 5. 好习惯 3 的示例:将命令与控制操作符组合使用
          
~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

在此例中,存档的内容将提取到 ~/tmp/a/b/c 目录中,除非该目录不存在。如果该目录不存在,则 tar 命令不会运行,因此不会提取任何内容。

仅当另一个命令返回非零退出状态时才运行某个命令

类似地,|| 控制操作符分隔两个命令,并且仅当第一个命令返回非零退出状态时才运行第二个命令。换句话说,如果第一个命令成功,则第二个命令不会运行。如果第一个命令失败,则第二个命令才会 运行。在测试某个给定目录是否存在时,通常使用此操作符,如果该目录不存在,则创建它:


清单 6. 好习惯 3 的另一个示例:将命令与控制操作符组合使用
          
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

您还可以组合使用本部分中描述的控制操作符。每个操作符都影响最后的命令运行:


清单 7. 好习惯 3 的组合示例:将命令与控制操作符组合使用
          
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar


谨慎引用变量

始 终要谨慎使用 Shell 扩展和变量名称。一般最好将变量调用包括在双引号中,除非您有不这样做的足够理由。类似地,如果您直接在字母数字文本后面使用变量名称,则还要确保将该变 量名称包括在方括号 ([]) 中,以使其与周围的文本区分开来。否则,Shell 将把尾随文本解释为变量名称的一部分——并且很可能返回一个空值。清单 8 提供了变量的各种引用和非引用及其影响的示例。


清单 8. 好习惯 4 的示例:引用(和非引用)变量
          
~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa

~ $ echo "$VARa"

~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a
~ $

使用转义序列来管理较长的输入

您 或许看到过使用反斜杠 (\) 来将较长的行延续到下一行的代码示例,并且您知道大多数 Shell 都将您通过反斜杠联接的后续行上键入的内容视为单个长行。然而,您可能没有在命令行中像通常那样利用此功能。如果您的终端无法正确处理多行回绕,或者您的 命令行比通常小(例如在提示符下有长路经的时候),反斜杠就特别有用。反斜杠对于了解键入的长输入行的含义也非常有用,如以下示例所示:


清单 9. 好习惯 5 的示例:将反斜杠用于长输入
          
~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar

或者,也可以使用以下配置:


清单 10. 好习惯 5 的替代示例:将反斜杠用于长输入
          
~ $ cd tmp/a/b/c \
> || \
> mkdir -p tmp/a/b/c \
> && \
> tar xvf -C tmp/a/b/c ~/archive.tar

然而,当您将输入行划分到多行上时,Shell 始终将其视为单个连续的行,因为它总是删除所有反斜杠和额外的空格。

注意:在大多数 Shell 中,当您按向上箭头键时,整个多行输入将重绘到单个长输入行上。


在列表中对命令分组

大多数 Shell 都具有在列表中对命令分组的方法,以便您能将它们的合计输出向下传递到某个管道,或者将其任何部分或全部流重定向到相同的地方。您一般可以通过在某个 Subshell 中运行一个命令列表或通过在当前 Shell 中运行一个命令列表来实现此目的。

在 Subshell 中运行命令列表

使用括号将命令列表包括在单个组中。这样做将在一个新的 Subshell 中运行命令,并允许您重定向或收集整组命令的输出,如以下示例所示:


清单 11. 好习惯 6 的示例:在 Subshell 中运行命令列表
          
~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

在此示例中,该存档的内容将提取到 tmp/a/b/c/ 目录中,同时将分组命令的输出(包括所提取文件的列表)通过邮件发送到地址 admin

当您在命令列表中重新定义环境变量,并且您不希望将那些定义应用于当前 Shell 时,使用 Subshell 更可取。

在当前 Shell 中运行命令列表

将命令列表用大括号 ({}) 括起来,以在当前 Shell 中运行。确保在括号与实际命令之间包括空格,否则 Shell 可能无法正确解释括号。此外,还要确保列表中的最后一个命令以分号结尾,如以下示例所示:


清单 12. 好习惯 6 的另一个示例:在当前 Shell 中运行命令列表
          
~ $ { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"


在 find 之外使用 xargs

使用 xargs 工具作为筛选器,以充分利用从 find 命令挑选的输出。find 运行通常提供与某些条件匹配的文件列表。此列表被传递到 xargs 上,后者然后使用该文件列表作为参数来运行其他某些有用的命令,如以下示例所示:


清单 13. xargs 工具的经典用法示例
          
~ $ find some-file-criteria some-file-path | \
> xargs some-great-command-that-needs-filename-arguments


然而,不要将 xargs 仅看作是 find 的辅助工具;它是一个未得到充分利用的工具之一,当您养成使用它的习惯时,将会希望进行所有试验,包括以下用法。

传递空格分隔的列表

在最简单的调用形式中,xargs 就像一个筛选器,它接受一个列表(每个成员分别在单独的行上)作为输入。该工具将那些成员放置在单个空格分隔的行上:


清单 14. xargs 工具产生的输出示例
          
~ $ xargs
a
b
c

Control-D

a b c
~ $

您可以发送通过 xargs 来输出文件名的任何工具的输出,以便为其他某些接受文件名作为参数的工具获得参数列表,如以下示例所示:


清单 15. xargs 工具的使用示例
          
~/tmp $ ls -1 | xargs
December_Report.pdf README a archive.tar mkdirhier.sh
~/tmp $ ls -1 | xargs file
December_Report.pdf: PDF document, version 1.3
README: ASCII text
a: directory
archive.tar: POSIX tar archive
mkdirhier.sh: Bourne shell script text executable
~/tmp $

xargs 命令不只用于传递文件名。您还可以在需要将文本筛选到单个行中的任何时候使用它:


清单 16. 好习惯 7 的示例:使用 xargs 工具来将文本筛选到单个行中
          
~/tmp $ ls -l | xargs
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
joe joe 3239 Sep 30 12:40 mkdirhier.sh
~/tmp $

谨慎使用 xargs

从技术上讲,使用 xargs 很少遇到麻烦。缺省情况下,文件结束字符串是下划线 (_);如果将该字符作为单个输入参数来发送,则它之后的所有内容将被忽略。为了防止这种情况发生,可以使用 -e 标志,它在不带参数的情况下完全禁用结束字符串。


了解何时 grep 应该执行计数——何时应该绕过

避免通过管道将 grep 发送到 wc -l 来对输出行数计数。grep-c 选项提供了对与特定模式匹配的行的计数,并且一般要比通过管道发送到 wc 更快,如以下示例所示:


清单 17. 好习惯 8 的示例:使用和不使用 grep 的行计数
          
~ $ time grep and tmp/a/longfile.txt | wc -l
2811

real 0m0.097s
user 0m0.006s
sys 0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811

real 0m0.013s
user 0m0.006s
sys 0m0.005s
~ $

除了速度因素外,-c 选项还是执行计数的好方法。对于多个文件,带 -c 选项的 grep 返回每个文件的单独计数,每行一个计数,而针对 wc 的管道则提供所有文件的组合总计数。

然而,不管是否考虑速度,此示例都表明了另一个要避免地常见错误。这些计数方法仅提供包含匹配模式的行数——如果那就是您要查找的结果,这没什么问题。但是在行中具有某个特定模式的多个实例的情况下,这些方法无法为您提供实际匹配实例数量 的真实计数。归根结底,若要对实例计数,您还是要使用 wc 来计数。首先,使用 -o 选项(如果您的版本支持它的话)来运行 grep 命令。此选项 输出匹配的模式,每行一个模式,而不输出行本身。但是您不能将它与 -c 选项结合使用,因此要使用 wc -l 来对行计数,如以下示例所示:


清单 18. 好习惯 8 的示例:使用 grep 对模式实例计数
          
~ $ grep -o and tmp/a/longfile.txt | wc -l
3402
~ $

在此例中,调用 wc 要比第二次调用 grep 并插入一个虚拟模式(例如 grep -c)来对行进行匹配和计数稍快一点。


匹配输出中的某些字段,而不只是对行进行匹配

当您只希望匹配输出行中特定字段 中的模式时,诸如 awk 等工具要优于 grep

下面经过简化的示例演示了如何仅列出 12 月修改过的文件。


清单 19. 坏习惯 9 的示例:使用 grep 来查找特定字段中的模式
          
~/tmp $ ls -l /tmp/a/b/c | grep Dec
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf
-rw-r--r-- 1 root root 238 Dec 03 08:19 README
-rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar
~/tmp $

在此示例中,grep 对行进行筛选,并输出其修改日期和名称中带 Dec 的所有文件。因此,诸如 December_Report.pdf 等文件是匹配的,即使它自从一月份以来还未修改过。这可能不是您希望的结果。为了匹配特定字段中的模式,最好使用 awk,其中的一个关系运算符对确切的字段进行匹配,如以下示例所示:


清单 20. 好习惯 9 的示例:使用 awk 来查找特定字段中的模式
          
~/tmp $ ls -l | awk '$6 == "Dec"'
-rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar
-rw-r--r-- 1 root root 238 Dec 03 08:19 README
~/tmp $


停止对 cat 使用管道

grep 的一个常见的基本用法错误是通过管道将 cat 的输出发送到 grep 以搜索单个文件的内容。这绝对是不必要的,纯粹是浪费时间,因为诸如 grep 这样的工具接受文件名作为参数。您根本不需要在这种情况下使用 cat,如以下示例所示:


清单 21. 好习惯和坏习惯 10 的示例:使用带和不带 cat 的 grep
          
~ $ time cat tmp/a/longfile.txt | grep and
2811

real 0m0.015s
user 0m0.003s
sys 0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real 0m0.010s
user 0m0.006s
sys 0m0.004s
~ $

此错误存在于许多工具中。由于大多数工具都接受使用连字符 (-) 的标准输入作为一个参数,因此即使使用 cat 来分散 stdin 中的多个文件,参数也通常是无效的。仅当您使用带多个筛选选项之一的 cat 时,才真正有必要在管道前首先执行连接。


结束语:养成好习惯

最好检查一下您的命令行习惯中的任何不良的使用模式。不良的使用模式会降低您的速度,并且通常会导致意外错误。本文介绍了 10 个新习惯,它们可以帮助您摆脱许多最常见的使用错误。养成这些好习惯是加强您的 UNIX 命令行技能的积极步骤。


关于作者


Michael Stutz 是 The Linux Cookbook 一书的作者,他仅使用开放源码软件对该书进行了设计和排版。他的研究兴趣包括数字出版和图书的发展未来。他使用各种 UNIX 操作系统已有 20 多年。您可以通过 stutz@dsl.org 与他联系。


阅读全文

GNU 与自由软件基金会创始人 Richard Stallman 访谈录

Richard Stallman 是著名的 GNU 项目,自由软件基金会创始人,这是 vnunet.com 对 Richard Stallman 做的一次访谈,谈到了他对自由软件,商业软件以及开源软件看法,另谈到了社会网络站点以及隐私问题。原文作者 Rosalie Marshall。


作为自由软件基金会的创始人,你如何定义自由软件?

自由软件意味着尊重用户的自由,更具体地说,作为用户你拥有以下4个最根本的自由:

  1. 你可以自由使用该软件
  2. 研究其源代码并进行修改
  3. 可以自由分发该软件
  4. 可以自由分发你修改过的版本

基于这些自由,用户可以掌控自己的计算,自由软件是在用户的控制下民主地开发起来,而商业软件是在特定团体的控制下专制地开发起来。用户面临的选择是自由还是受限。

你刻意将自己和开源社区保持距离,能否解释一下二者的区别?

开源软件同自由软件在许可上几乎是一致的,因为开源软件是从自由软件基础上发展起来的,最大的区别在于其价值体系。自由软件运动的主要价值是自由与合作,而商业软件是反合作的,这是一个社会问题,我们的目标是改变这个问题。

1990年代,自由软件社区出现了价值分歧,1998年,一些人提出了“开源”一说,开源这个词的初衷这是为了避免隐含对非自由软件的批评,他们关 注他们的实践价值。开源的理念使一些开发者将自己的产品变成自由软件,我欣赏他们对自由软件社区的贡献,但不赞同他们的价值体系。

自由软件更重视价值,而开源软件重视实践,这是二者最大的区别 - 译者。


是什么东西影响你发起自由软件运动?

1970年代,我在 MIT 的 AI 实验室工作,我加入了那时最大的自由软件社区,那个社区包括当时一些大学和公司。在 AI 实验室,我们使用一个免费的操作系统。在自由软件社区的那段时光我意识到了那是和美妙的事。

1980年代,商业压力,连同大型机的衰落最终导致我们的社区解散。后来开始使用商业软件的日子让我感到非常不堪,便决定自己创建一个新的自由软件社区。

1983年,我宣布了开发 GNU 的计划,这是一个完全自由的,类似 Unix 的操作系统,为了区别于 Unix,我起名为 GNU,意思是,Not Unix。

为什么你认为这些不同的名称,开源,自由软件, 商业软件,GNU/Linux 是很重要的?

在自由软件社区,自由软件和开源代表两个不同立场,作为自由软件运动的发起人,我在努力传播自由的理念。因此我拒绝参加开源活动。

我注意到 FSF 的 Shane Coughlan 在同 Google 的开源团队合作。FSF 是否同那些开源组织合作?

Shane 是欧洲 FSF 的,我不知道他在做什么,但我可以告诉你我们的原则,我们同自由软件项目进行技术合作,只要它是有用的,不管开发者是否认同自由软件的价值观。

在你看来 OpenOffice 与 Firefox 一类的软件是否自由软件?

OpenOffice is free software, and has been ever since it appeared under that name. OpenOffice 一直是。

Firefox 是个奇怪的个案,一开始,Firefox 代码是自由的,但编译的二进制文件不是。他们不是自由软件的理由有二,第一,他们包含一个非自由模块,Talkback,Talkback 的代码不能自由获得(甚至 Mozilla 基金会也得不到),第二,他们使用具有限制性的 EULA (用户许可协议)。

不过,这两个问题现在好象已经改正,所以现在应该也是自由软件。


你对一些地理位置监控类的程序如何看,比如 Yahoo 的 Fire Eagle?

如果你要告诉朋友们你在哪里,这很好,但你不能将自己的交流数据放往一个你不信任的公司的服务器。这个程序可能有一个“删除以往数据”的命令,但你不知道他们是否真这样做了。这是 Internet 被错误利用的很不好的趋势,就是将用户的交流数据送往某个公司的服务器。

你对社会网络站点如何看待?

我从来不用所以没有发言权。我看不出在你的朋友之间分享信息和照片有什么不好,我曾听到传闻,说 Facebook 将私人数据传给 CIA,不知真假。

你觉得 Asus EeePC 一类的笔记本电脑是否推动 FSF。

不 完全是。EeePC 内置了一些 GNU/Linux 操作系统,但也包含很多非自由软件。事实上,这些机器在启用前要求你接受一些用户协议。我受到一个 EeePC 礼物,但我不能使用,因为我的良心不允许我接受那些协议,后来我让人帮我装了一个自由的 GNU/Linux 才开始用。

当自由软件出了问题,谁该负责?

自由软件开发者和商业开发者一样尽我们所能来保证软件的可靠性。自由软件给了用户比起诉软件商更好的东西,如果系统除了问题,你很容易找到人帮你排除,只要价格公道。(未必,当然商业软件也未必 - 译者)

为什么你们在印度和委内瑞拉一类的地区如此卖力推广自由软件?

这 个问题会让人误解,其实我每年花在美国的演讲时间比委内瑞拉和印度要多得多。但我确实花了很多时间外出演讲。委内瑞拉, 厄瓜多尔 一类的地区有政策要求所有政府部门必须使用自由软件。在印度,有三个省的公立学校要求使用 GNU/Linux。我希望在美国也能看到人们对用户的自由的重视。

你是否认为公共部门应该引领自由软件浪潮?

任何公共部门都应该拥有对自己的计算的控制,而非自由软件的控制权在厂商那里。因此,公共部门应当拒绝商业软件而投身自由软件。委内瑞拉, 厄瓜多尔做得对。

一些慈善机构,如 Computer Aid International 会把一些二手电脑收集起来送给发展中国家,如果也投身 GUN,是否意味着会有更少的学校能得到电脑?

你 可以在任何电脑上安装 GNU/Linux,因为使用自由软件并不意味着他们可以捐赠的电脑变少。更进一步,我们的本意是让计算机造福,但将装有 Windows 的电脑送给他们是好事吗?使用商业软件意味着向开发商屈服,这是一个社会问题,我们应该消除这个问题,而不是扩大。向他们捐赠 Windows 电脑是一种屈服,走的是错误的道路。

自由软件如何同当前的经济环境契合?一些人认为经济危机是对资本主义体系的控诉,这是否公正的看法?

和以前一样,自由软件可以同各种经济环境契合,不管经济是好还是坏,你都需要自由。我认为经济危机来自一种普遍存在的深度腐败,因为公司拥有过多政治力量。不公平的版权法律也是这个基本问题的结果。

自由软件固然可以节省成本,但那些在商业软件工作的人怎么办?如果人们都使用自由软件,而不再需要商业软件?

这里存在一个误区,自由软件并不减少技术支持市场。那些购买了商业软件又转用自由软件的人仍然需要支持,自由软件的好处是它允许自由的支持市场。

另外,还有些更根本的东西,就是价值,似乎我们在假设人们喜欢被不公正的权力所左右,我在那里需要人们妥协自己的自由才能使用的软件那里看不到积极 的价值。我自己不会使用这样的软件。我在1983年发起 GNU 项目,就是为了脱离商业软件,现在我离开了,就不会再回来。我希望看到没有人再为商业软件从事开发的那一天。

本文国际来源:http://www.vnunet.com/vnunet/news/2230530/q-richard-stallman-founder-gnu
中文翻译来源:COMSHARP CMS


阅读全文

Adobe发布64位Flash For Linux预览版

Adobe在11月17日发布了64位Flash Player 10 for Linux的Alpha版本,Linux用户可到Adobe Labs的Flash Player 10下载网站去下载,暂时没有Windows和Mac版。
linux对64位处理器的支持明显超过了Windows和Mac OS X,但是因为某些原因,Adobe之前一直没有发布支持64位linux操作系统的flash播放器
原生支持64位跨平台系统的Flash播放器首先放出Linux版本,Adobe表示选择Linux作为第一发布平台是出于用户的需求,64位Linux 发行版没有默认安装32位浏览器或32位模拟层,使用32位Flash播放器还需要安装插件。新的预览版推出之后,Flash Player 10将原生支持64位Linux发行版。Windows和Mac OS X的64位版本将在不久后推出,正式版会同时发布。

以下内容摘自Linuxtoy
Flash Player 10 包含了众多新功能及错误修正:

阅读全文

2008年11月14日

使用 Shell 进行进制转换

假定在您的脚本中有一些数字,您需要以另外的进制处理这些数字。使用 Shell 运算可以很容易地自动实现这类转换。一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)。键入以下内容以得到一些八进制和十六进制值的十进制输出:

$ echo $((013))
$ echo $((0xA4))
您还可以使用以下格式指定 2 到 64 之间的任意进制:
$((BASE#NUMBER))

通过在 Shell 提示符后键入清单 7 中所示的行,尝试将二进制、八进制、十六进制以及其他进制的数转换为十进制。


清单 7. 在 Shell 中将任意进制的数以十进制输出
               
echo $((2#1101010))
echo $((8#377))
echo $((16#D8))
echo $((12#10))
echo $((36#ZZYY))

使用 bc 进行进制转换

Shell 中进行进制转换的另一个诀窍是使用 bc,它是一种任意精度运算语言,大多数 UNIX/Linux 安装程序都提供。因为它允许您指定输出进制,所以当您需要以十进制以外的进制输出时,这是一种很好的技术。

bc 的特殊变量 ibaseobase 分别包含用于输入和输出的进制的值。缺省情况下,都被设置为 10。要执行进制转换,需要改变其中的一个或两个值,然后提供一个数字。立即尝试,如清单 8 中所示。


清单 8. 使用 bc 执行进制转换
               
$ bc -ql
10
10
obase=16
10
A
ibase=2
10
2

要快速执行进制转换,可以联合使用 bcecho形成快捷的单命令行程序,将给定的值通过管道传输给 bc。键入清单 9 中显示的内容。


清单 9. Shell 单命令行 bc 程序
               
$ echo 'obase=16; 47' | bc
2F
$ echo 'obase=10; ibase=16; A03' | bc
2563

警告:当您设置 bc 的输入进制以后,输入 bc 的所有数字都使用该进制,包括您提供用于设置输出进制的数字。因此最好先设置输出进制,否则可能会产生意想不到的结果,如清单 10 中所示。


清单 10. 设置输入和输出进制的先后顺序的重要性
               
$ echo 'ibase=16; obase=10; A' | bc
A
$ echo 'ibase=16; obase=A; A' | bc
10


阅读全文

2008年11月13日

QQ for Linux 1.0 Preview3发布

腾讯今天发布的QQ for Linux 的新版本 QQ for Linux 1.0 Preview3,主要改进:
* 支持和好友传送文件
* 支持和好友/群发送图片
* 支持群里截屏并传送截图
* 优化代码运行效率,降低系统开销

喜欢的朋友赶紧下载吧:
http://im.qq.com/qq/linux/download.shtml
阅读全文

awk内置字符串函数详解

awk提供了许多强大的字符串函数,见下表:
awk内置字符串函数
gsub(r,s)在整个$0中用s替代r
gsub(r,s,t)在整个t中用s替代r
index(s,t)
返回s中字符串t的第一位置
length(s)
返回s长度
match(s,r)
测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp)返回经fmt格式化后的exp
sub(r,s)
用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n)
返回字符串s中从p开始长度为n的后缀部分
详细说明一下各个函数的使用方法。

gsub函数有点类似于sed查找和替换。它允许替换一个字符串或字符为另一个字符串或字符,并以正则表达式的形式执行。第一个函数作用于记录$0,第二个gsub函数允许指定目标,然而,如果未指定目标,缺省为$0。
index(s,t)函数返回目标字符串s中查询字符串t的首位置。length函数返回字符串s字符
长度。match函数测试字符串s是否包含一个正则表达式r定义的匹配。split使用域分隔符fs将
字符串s划分为指定序列a。sprint函数类似于printf函数(以后涉及),返回基本输出格式fmt的
结果字符串exp。sub(r,s)函数将用s替代$0中最左边最长的子串,该子串被(r)匹配。
sub(s,p)返回字符串s在位置p后的后缀。substr(s,p,n)同上,并指定子串长度为n。
现在看一看awk中这些字符串函数的功能。

1.gsub
要在整个记录中替换一个字符串为另一个,使用正则表达式格式,/目标模式/,替换模式
/。例如改变学生序号4842到4899:

$ awk 'gsub('4842/, 4899) {print $0}' grade.txt
J.Troll 07/99 4899 Brown-3 12 26 26

2.index
查询字符串s中t出现的第一位置。必须用双引号将字符串括起来。例如返回目标字符串
Bunny中ny出现的第一位置,即字符个数。

$ awk 'BEGIN {print index("Bunny", "ny")} grade.txt
4

3.length
返回所需字符串长度,例如检验字符串J.Troll返回名字及其长度,即人名构成的字符个
数。

$ awk '$1=="J.Troll" {print length($1) " "$1}' grade.txt
7 J.Troll

还有一种方法,这里字符串加双引号。

$ awk 'BEGIN {print length("A FEW GOOD MEN")}'
14

4.match
match测试目标字符串是否包含查找字符的一部分。可以对查找部分使用正则表达式,返
回值为成功出现的字符排列数。如果未找到,返回0,第一个例子在ANCD中查找d。因其不
存在,所以返回0。第二个例子在ANCD中查找D。因其存在,所以返回ANCD中D出现的首位
置字符数。第三个例子在学生J.Lulu中查找u。

$ awk '{BEGIN {print match("ANCD", /d/)}'
0
$ awk '{BEGIN {print match("ANCD", /C/)}'
3
$ awk '$1=="J.Lulu" {print match($1, "u")} grade.txt
4

5.split
使用split返回字符串数组元素个数。工作方式如下:如果有一字符串,包含一指定分隔
符-,例如AD2-KP9-JU2-LP-1,将之划分成一个数组。使用split,指定分隔符及数组名。此
例中,命令格式为("AD2-KP9-JU2-LP-1",parts_array,"-"),split然后返回数组下标数,这
里结果为4。
还有一个例子使用不同的分隔符。

$ awk '{BEGIN {print split("123#456#678", myarray, "#")}'
3

这个例子中,split返回数组myarray的下标数。数组myarray取值如下:

Myarray[1]="123"
Myarray[2]="456"
Myarray[3]="789"

6.sub
使用sub发现并替换模式的第一次出现位置。字符串STR包含‘popedpopopill’,执行下
列sub命令sub(/op/,"op",STR)。模式op第一次出现时,进行替换操作,返回结果如下:
‘pOPedpopepill’。
假如grade.txt文件中,学生J.Troll的记录有两个值一样,“目前级别分”与“最高级别分”。只
改变第一个为29,第二个仍为24不动,操作命令为sub(/26/,"29",$0),只替换第一个出现
24的位置。

$ awk '$1=="J.Troll" sub(/26/, "29", $0)' grade.txt
L.Troll 07/99 4842 Brown-3 12 29 26
L.Transley 05/99 4712 Brown-2 12 30 28

7.substr
substr是一个很有用的函数。它按照起始位置及长度返回字符串的一部分。例子如下:

$ awk '$1=="L.Transley" {print substr($1, 1,5)}' grade.txt
L.Tan
上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。
如果给定长度值远大于字符串长度, awk将从起始位置返回所有字符,要抽取L.Tansley的姓,只需从第3个字符开始返回长度为7。可以输入长度99,awk返回结果相同。

$ awk '{$1=="L.Transley" {print substr($1, 3,99)}' grade.txt
Transley

substr的另一种形式是返回字符串后缀或指定位置后面字符。这里需要给出指定字符串及其返回字串的起始位置。例如,从文本文件中抽取姓氏,需操作域1,并从第三个字符开始:

$ awk '{print substr($1, 3)}' grade.txt
Troll
Transley

还有一个例子,在BEGIN部分定义字符串,在END部分返回从第t个字符开始抽取的子串。

$ awk '{BEGIN STR="A FEW GOOD MEN"} END {print substr(STR,7)) grade.txt
GOOD MEN

8.从shell中向awk传入字符串
awk脚本大多只有一行,其中很少是字符串表示的,这一点通过将变量传入awk命令行会变得很容易。现就其基本原理讲述一些例子。
使用管道将字符串stand-by传入awk,返回其长度。

$ echo "Stand-by" | awk '{print length($0)}'
8

设置文件名为一变量,管道输出到awk,返回不带扩展名的文件名。

$ STR="mydoc.txt"
$ echo $STR | awk '{print subst($STR, 1, 5)}'
mydoc

设置文件名为一变量,管道输出到awk,只返回其扩展名。
$ STR="mydoc.txt"
$ echo $STR | awk '{print substr($STR, 7)}'
txt


阅读全文

2008年11月12日

Linux禁止单用户模式(single)来增强系统安全

一、Linux忘记root密码,进入单用户模式修改密码

(一)、关于lilo

1. 在出现 lilo: 提示时键入 Linux single

画面显示 lilo: Linux single

2. 回车可直接进入Linux命令行

3. 用password命令修改密码

(二)、关于 grub

1. 在出现grub画面时,用上下键选中你平时启动Linux的那一项,然后按e键

2. 再次用上下键选中你平时启动Linux的那一项(类似于kernel/boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然后按e键

3. 修改你现在见到的命令行,后加上数字1或者single:

kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ 1

kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ single

4. 回车返回,然后按b键启动,即可直接进入Linux命令行

5.直接输入passwd 回车即可修改密码,在默认情况下这里直接回车是直接修改ROOT超级管理用户的密码,当然,你要修改其他用户密码,在PASSWD后直接跟需要修改密码的用户名即可。

#vi /etc/shadow

  将第一行,即以root开头的一行中root:后和下一个:前的内容删除,

  第一行将类似于

  root::......

  保存

 #reboot重启,root密码为空。

(三)使用redhat的第一张安装光盘启动,在出现' boot:'时,输入“Linux rescue”,然后一直按回车,直到出现命令提示符后,输入“chroot /mnt/sysimage ”取得root权限,再输入“password root”修改root密码,再reboot就好了

二、禁止进入单用户模式

如果禁止进入单用户,首先要对GRUB进行密码配置,只需要修改/boot/grub/grub.conf或者 /etc/grub.conf(/etc/grub.conf是/boot/grub/grub.conf的符号链接),例如:vi /boot/grub/grub.conf进入配置文件编辑。

这里我们介绍个方法,给grub加个密码,增禁止他人以单用户模式进入系统. 有2个方式:

1、明文方式

在splashimage这个参数下一行添加: password=密码。保存后重新启动计算机,再次登录到GRUB菜单页面的时候就会发现,这时已经不能直接使用e命令编辑启动标签了,须先使用p命 令,输入正确的密码后才能够对启动标签进行编辑.但是我们设置了明文密码也不是很安全的.如果他人得到了明文密码后仍然可以修改GRUB启动标签从而修改 root密码.

2、MD5加密方式

在终端中输入grub-md5-crypt回车,这时系统会要求输入两次相同的密码,之后系统便会输出MD5码。大家只需要将生成的MD5密文复制 下来,在splashimage这个参数下一行添加: password --md5 MD5密文比如: splashimage=(hd0,0)/grub/splash.xpm.gz

password --md5 $1$xI6vS$Wi5pi8JyORUNnj3/0Yq2/0

hiddenmenu

保存后重新启动计算机,再次登录到GRUB菜单页面的时候就会发现,这时已经不能直接使用e命令编辑启动标签了,须先使用p命令,输入正确的密码后才能够对启动标签进行编辑。


阅读全文

“懒惰”Linux:“懒惰”集群管理员的 11 个秘诀

集群 对于不同的人有不同的含义。在本文的上下文中,集群最好定义为横向扩展(scale-out)—— 横向扩展集群一般包含大量相同类型的组件,比如 Web 场、表示场和高性能计算 (HPC) 系统。管理员会告诉您,对于横向扩展集群,必须百千次地重复修改,无论修改是多么小;最懒惰的管理员精通横向扩展管理技术,因此无论节点的数量有多少,需 要的工作量都是相同的。在本文中,作者将泄露世界上最懒惰的 Linux® 管理员的秘诀。

自从世界上最快 的 500 台计算机清单于 1998 年首次发布以来,Linux 集群已经从科学实验项目发展成了当今超级计算领域的主流技术。实际上,在 1998 年的 Top 500 清单中 Linux 集群只占据一席(一个集群,一个 Linux 操作系统),但是在 2008 年的清单中占据了五分之四(400 个集群,458 个 Linux 操作系统)。

管理 Linux 集群需要很独特的技能,单一系统或小型连网系统的 IT 管理员往往不具备这些技能。管理 Linux 集群要求管理员深入理解连网、操作系统和体系结构中的所有子系统。

但是,不仅如此:它还要求采取另一种态度。它要求 “懒惰”。它要求管理员听从 Scrooge McDuck 在 Duckburg 中对侄子们的教导:“工作越巧妙,就越轻松” 。

在本文中,我们讨论最懒惰的 Linux 集群管理员的一些秘诀。尽管它们并不是真正的秘诀,但是由于某种原因,人们要么不了解这些思想,要么低估了它们的作用。为了纠正这个问题,我们在讨论这些秘诀的同时会解释它们的重要性。

更多的偷懒方法

些秘诀是:

  1. 不要开发已有的东西。
  2. 使用开放源码软件。
  3. 将所有东西自动化。
  4. 在设计时就考虑到可伸缩性 —— 从一开始就要计划偷懒。
  5. 在设计时就考虑到硬件的可管理性。
  6. 使用出色的集群管理软件 —— 工欲善其事,必先利其器。
  7. 使用开放源码的监视解决方案。
  8. 用队列系统控制用户。
  9. 检验付出所得到的回报 —— 执行基准测试!
  10. 管理集群管理员交流。
  11. 不断寻找更懒惰的办法。

1. 不要开发已有的东西

懒惰的 Linux 集群管理员不会开发已有的东西;他们主要依靠别人的成果来完成自己的任务。如果已经有免费的得到良好支持的解决方案,那么浪费时间开发应用程序又有什么意义呢?

世 界上最稀少的东西之一是独创的思想或首次出现的问题,在 Linux 集群环境中尤其如此。很少会遇到在 2004 年出现并且没有解决的问题。这是好事情;您应该相信实际上没有什么问题是不能解决的(从技术上说是这样,但是在政治和社会方面就不一定了)。因此,要接受 这个现实:大多数问题都已经被发现、诊断和解决了。

为了少浪费时间,有经验的管理员会在以下方面多花些时间:

  • 研究现有的解决方案并根据自己的需要采用它们。牛顿在评价自己的成就时曾经引用 Bernard of Chartres 的话说,他是站在 “巨人的肩膀上”。如果他没有首先尝试理解欧几里得原理,就不可能建立自己的理论体系,但是这并不会抹杀他的成就。
  • 对开放源码项目做贡献或进行定制,而不是重新发明已经存在的东西 —— 他完全明白,如果自己编写软件,那么在他跳槽时很可能会留下一个烂摊子,因为没有别人了解他写的软件。

我们并不想扼杀您的创造力 —— 其实正好相反。利用别人已经完成的成果会帮助您进入更高的层次,这会使您的环境比其他组织的 IT 环境更出色更高效。

2. 使用开放源码软件

我 们认识的最成功的 Linux 集群管理员都非常了解当前的开放源码项目。他们是邮件列表的积极参与者,当在网络上搜索时会发现他们的名字常常与热门的项目联系在一起。他们常常在 http://sourceforge.net 和 http://freshmeat.net 上寻找感兴趣的新项目。

开放源码工具的性质使它们的寿命很长,对于流行的工具尤其如此。例如,尽管 Ganglia、Nagios 和 TORQUE 等工具已经存在很长时间了,但是仍然有不少人在使用它们。它们很出色,能够帮助管理员节省软件成本并避免许可协议的限制。

最 懒惰的集群管理员的另一个特点是,他们对开放源码运动都非常热心,愿意在自己的工作中使用开放源码软件。他们可能在家里建立自己的 Web 服务器,或者在 Linux 笔记本计算机上运行应用程序。您会发现最懒惰的 Linux 管理员除了在工作中负责管理的集群之外,在他们生活中的其他方面也常常运行 Linux,包括 Pidgin 和 Firefox 等各种软件。

3. 将所有东西自动化

在命令行上使用脚本和其他快速工具在 Linux 管理员的工作中占很大部分。脚本(只要不是重新发明任何东西)有两个优点:

  • 最显著的优点是,它节省了输入命令的时间,提供可重复执行的命令模式。
  • 第二个优点是,它可以说明本身的用途,便于以后重用。

我们常常发现,有经验的管理员会在自己的计算机上用专门的目录存储他们编写的脚本。这些脚本的用途五花八门,从检查节点上的防火墙版本到映射 InfiniBand 集群中的 GUID。

非 常适合使用脚本的一种情况是生成操作系统映像(无论是无状态的还是有状态的)。如果管理员有一个 “黄金映像”,需要把它传播到系统中的每个计算节点,那么他应该了解其中包含的内容。创建此映像的脚本就是最好的文档,因为它精确地解释了执行的操作,而 且是可重复执行的。如果没有构建映像的脚本,就会发生映像膨胀,导致占用的空间增加和系统速度下降。

我们常常遇到一些组织有黄金映像,他们自 2000 年以来一直使用这些映像。最大的原因是:他们不知道如何重新构建它。第二个(可能更重要的)原因是:他们的应用程序已经在此映像上测试和 “认证” 过了。认证 是经常会遇到的词,但是它的定义与云计算 一样含糊不清(顺便说一句,“云计算” 这个词汇不是专利,也不是商标词)。

应 该把工作自动化的原因是:避免工作比实际做工作需要更多的脑力。懒惰的 Linux 集群管理员不会做那些让他们的脑子变得迟钝的工作。如果您不得不在集群中的每台计算机上启动 ssh 并运行一个命令,那么您就是不够懒。对节点执行的所有命令都应该通过并行命令或过程自动执行。如果硬件厂商没有提供自动化的 Linux 工具来更新 BIOS 或刷新子系统,那么在考虑成本时要算上这个因素。

我们的前一篇文章 ““懒惰” Linux 管理员的 10 个关键技巧” 中的技巧 8 和技巧 10 讲解了我们常用的几种命令行脚本编程技术。还有其他许多方法,而且其中一部分可能效率更高,这些技巧只是提供一个思路,促使您思考脚本可以完成哪些工作。

4. 在设计时就考虑到可伸缩性,从一开始就要计划偷懒

第三个秘诀(自动化)是一个大目标,但它只是实现完全清闲 的过程中的一个步骤。对于最懒惰的管理员,“完全清闲” 只能通过自治的横向扩展管理来实现。实现此目标的第一步是在系统中避免不可伸缩的操作。

大 型横向扩展集群的主要麻烦是瓶颈。大多数横向扩展集群管理员使用 TFTP 执行网络引导或安装大量计算机。任何有经验的横向扩展集群管理员都会告诉您,TFTP 不可靠而且不可伸缩。如果没有适当的远程硬件控制,那么只要发生一次大规模的 TFTP 故障,管理员就不得不从椅子里跳起来,直奔数据中心,复位每台计算机(够他忙的)!即使有适当的远程硬件控制,管理员也必须长时间停止玩 WoW,因为必须一次又一次向集群中的节点发送复位命令(这也不轻松)。

只需提前做一点计划管理,就可以避免瓶颈(比如下面的瓶颈)。

瓶颈 1:供应服务

DHCP、TFTP、HTTP、NFS 和 DNS 是集群最常用的服务。它们都会形成瓶颈 —— 在集群扩展时,TFTP 是最糟糕的。幸运的是,很容易通过复制它们来帮助伸缩。

提示:把 DHCP 和 TFTP 隔离在另一个 NIC 中,这会极大地提高可伸缩性。例如,如果与其他供应服务共享 NIC,我们度量出的 TFTP 伸缩比是 40:1;如果不共享或者采用无状态引导,结果是 80:1。

瓶颈 2:网络

网络常常是设计中最容易被忽视的部分。这里说的网络是指用于管理的 GigE 网络,而不是专门用于应用程序通信的高性能网络。尽管在许多情况下只有一个网络必须是共享的(用于数据和管理),但是这可能导致许多伸缩问题。

在设计层次化网络时,一定要注意,不要太保守。如果要求节点与服务节点比例达到 80:1,那么要确保在整个结构中保持或超过此比例。

瓶颈 3:不要贪多嚼不烂

在 设计大型横向扩展集群时,我们采取 “集群的集群” 方式。每个子集群(即可伸缩单元,SU)是一个构造块,其本身可以针对所有集群操作(例如,安装、网络引导、BIOS 更新、监视等)扩展。每个 SU 有一个或多个服务节点(数量取决于 SU 的规模),它们提供对 SU 中所有节点进行控制、监视和供应所需的服务。为了进一步帮助可伸缩管理,每个 SU 有自己的广播域(路由 SU-to-SU 和 SU-to-World 通信 —— 检查瓶颈)。

中心管理节点和服务节点有一个私有的物理或虚拟网络,因此从服务节点发送出的信息和发送到服务节点的数据不会干扰其他集群的通信流。我们把此网络、管理节点和服务节点称为层次化管理云 (hierarchal management cloud, HMC)。它的设置和操作只在管理员的域中进行。

这种 “集群的集群” 方式使懒惰的管理员设计的系统能够超过预期规模,支持集中的管理控制,同时不必担心大规模操作失败。

5. 在设计时就考虑到硬件的可管理性

许 多管理员在设计集群时并没有考虑到 “可控制” 方面。高效的管理员都操作可控制集群,也就是说他们的集群放置在黑屋子中,远离工作人员,在理想情况下人们几周或几个月都不必看到他们每天操作的物理机 器。在某些情况下,他们从来都没见过这些物理机器,因为他们是在世界的另一端管理它们。当然,最懒惰的管理员甚至不知道数据中心的具体位置 —— 对于他们来说,数据中心仅仅是一组主机名或 IP 地址。

数据中心噪音很大,有时候很冷,甚至可能有危险; 懒惰的管理员应该尽可能避免到数据中心去。有人甚至认为呆在充满大量机器的房间里可能有对健康有害,尽管还没有发现这方面的证据。随着电力/制冷/人力成 本的上升,越来越多的数据中心被转移到运营成本比较低的地方。因此,绝对的远程控制现在对于管理 Linux 集群越来越重要了,在不远的将来此功能可能是必需的。

硬件厂商非常重视客户对远程管理系统标准的需求。当 前,IPMI 2.0 已经成为大多数 Linux 集群的标准。IPMI 提供了远程控制机器电源的方法,还提供远程控制台,可以观察计算机的 BIOS 引导过程。在我们的一位客户的站点上,我们能够坐在客户的办公室中,舒舒服服地对 60 英里外的计算机进行调试。(这位客户的 Linux 管理员真的很懒惰,他的办公室只用墙上昏暗的霓虹灯来照明。这间办公室简直成了单身汉的公寓,这里有两个冰箱,装满了饮料和甜食。不用说,我们不愿意离开 那里)。

IPMI 是强大的 —— 我们可以修改 BIOS 设置,重新启动节点,观察它们的引导过程,查看屏幕转储,而根本不需要看到物理机器 —— 它应该安装在所有集群中。您至少需要以下功能:

  • 远程控制机器的电源
  • 远程控制台或观察机器引导过程的更好方法,从而应付可能发生的引导问题

有 了 IPMI,Linux 集群中就不太需要其他软件了,那些软件只提供运行 IPMI 的豪华界面,而不是管理节点。实际上,我们建议使用开放源码工具,比如大多数 Linux 发行版已经附带的 ipmitool。我们发现最懒惰的 Linux 集群管理员依赖于命令行。

对于 IPMI 远程控制台的可靠性还有争议。我们意识到,有时候真正的带外终端服务器是很有价值的。Cyclades ACS48 等终端服务器是合理的投资,它们提供带外访问和 IPMI 不具备的可靠性。

另 外,IPMI 1.5 不是最可靠的 IOHO(这是一个全行业范围的问题)。IPMI 2.0 在这方面好多了,而且许多厂商围绕它添加了新颖的网页,使它看起来更容易使用。是包含终端服务器,还是只在机器上直接使用 IPMI,对于这个问题还有争议。我们的大多数客户的想法是这样的:每个懒惰的 Linux 管理员都知道,需要花费大量时间排除 5% 的节点的故障,而 95% 的节点都是正常的。在这种情况下,更好的办法是多购买 5% 的节点(而不是基础设施)当作备份。这意味着花费在计算能力上的预算比花费在基础设施上的预算多一些。

考虑到这一点,如果使用终端服务器可以避免管理员长途赶去排除节点的故障,那么终端服务器就是物有所值的。我们让懒惰的 Linux 管理员自己做决定 —— 毕竟,必须去赶飞机的是他。我们看到争论的双方似乎都有一定的道理。

6. 使用出色的集群管理软件 —— 工欲善其事,必先利其器

自从 1999 年 Linux 集群首次出现以来,集群工具已经有了长足的进步。在当时,可用的集群管理工具并不多,因此大多数管理员用自己开发的工具集来部署、监视和管理他们的集群。

最 懒惰的管理员已经接受了开放源码工具,或者把他们在 1999 年开发的工具贡献给了社区。很少有开放源码工具无法应付的极其独特的集群环境。在大多数情况下,坚持使用自己的工具的管理员都很孤独,当他们离开组织时, 他们的工具也就随其消失了。但是,我们发现在许多站点上仍然在使用定制的工具。

如果您对自制的工具不满意,正在寻找更好的工具,那么可以考虑几个开放源码工具。最受欢迎的集群管理工具包括 OSCAR (System Imager)、ROCKS、Perceus 和我们喜爱的 xCAT 2。它们都是开放源码的。

当 今最流行的开放源码集群部署/控制解决方案可能是 ROCKS。ROCKS 是由 UCSD 开发和维护的,他们在集群的用户友好性方面完成了出色的工作。我们对它惟一的不满之处是,它的灵活性不足,主要在操作系统级。ROCKS 基于 Red Hat 发行版,这对于大多数人是合适的,但是对于使用 SUSE 或者希望使用在 RH 6.2 发行版上创建的映像的人就不合适了。另外,ROCKS 不是克隆解决方案,而我们发现许多 IT 组织都使用克隆解决方案。

Perceus 是另一个流行的解决方案。它与 ROCKS 的不同之处在于,它是无状态的。对于本文的上下文,我们把无状态计算定义为在内存中运行操作系统,而不是把操作系统放在磁盘上。不需要磁盘,但是可以使用磁盘执行本地操作或交换。

与 其他解决方案相比,我们更喜欢 xCAT(当然,我们必须坦白,我们向 xCAT 项目贡献了代码并积极参与开发,所以推荐它有点儿 “自买自夸”)。它的优点是比其他任何工具都要灵活、可伸缩且更强大。(它的代码贡献者也是最英俊最聪明的)。世界上最快的超级计算机 LANL RoadRunner 系统就是用 xCAT 来管理的(此系统是 Cell/B.E.™/Opteron™ 的混合体,是第一个 one-petaflops 系统,也是第一个 one-petaflops Linux 集群)。

xCAT 可以针对几乎所有企业 Linux 发行版实现映像生成、kickstart、autoyast、iscsi 和无状态。另外,它还提供命令行工具,这些工具对从远程电源控制到控制台设置的各种 IPMI 命令进行抽象,可以在同一框架中使用它们。xCAT 的开发从 1999 年 10 月 31 日开始,IBM 在 2007 年开放了它的源代码。

但是公正地说,xCAT 也有缺点:

  • 它的设置比较难;由于灵活性很强,它有许多可配置参数。我们建立了一个 wiki 来帮助管理员设置 xCAT,还可以通过邮件列表和 IRC 频道获得大量帮助。
  • xCAT 2 完全改写了古老的 xCAT 1.3,因此管理员需要学习许多新东西。
  • 与许多开放源码工具一样,文档还有待改进。

还有许多其他集群管理解决方案,我们可以就这个主题滔滔不绝地谈下去。但是,我们还是就此打住:如果您要寻找更好的工具或思想,请试试 xCAT。

7. 使用开放源码的监视解决方案

在去年的 SC'07 上,我们遇到了在几家美国大型实验室工作的朋友,我们谈到了在监视 Linux 集群方面遇到的难题。这促使我们在 2008 年初多次讨论这个问题。监视的困难源于几个原因:

  • 随着集群的增长,收集的数据越来越多,接收这些监视信息的计算机的性能就越来越差。例如,如果有 2,000 台计算机,每台计算机都把性能指标发送到一个基础设施节点,此节点就会非常缓慢。
  • 在计算节点上通过代理收集数据会与用户的作业争夺内存和 CPU 时间。许多站点不希望节点上有代理,因为它会降低应用程序的性能。这就需要回答一个问题:花费 CPU 时间获取监视数据是值得的吗?
  • 我们还没有找到一种可伸缩工具能够把用户作业与计算机性能联系起来,从而有效且直观地分析作业。
  • 还 没有任何工具能够完全满足管理员的需求。这可能就是这个领域中最大的问题:使用的工具的功能不全面,至少缺乏人人都需要的某种功能。大多数管理员会结合使 用两三种管理工具。我们常常听到一些集群监视产品宣称比所有其他解决方案都优秀,但是我们很怀疑这种说法:每个集群都不一样,真的有万灵药吗?定制的监视 解决方案似乎是惟一的解决之道。

既然监视的复杂性这么大,那么最懒惰的管理员会怎么解决这个问题呢?

在大型集群上(包括著名大学和政府的实验室),最常见的解决方案是使用 Nagios 实现报警,使用 Ganglia 进行监视。通过结合使用这两种可定制性很强的工具,管理员可以很好地了解集群中发生的大多数情况。事实证明 Ganglia 的可伸缩性非常强。

但是,其他人也有不同的观点。在 USC,Garrick Staples 编写了 pbstop 作为 TORQUE 的插件,它可以显示当前正在运行的每个作业以及运行的位置。他说,这就是他需要监视的,他不需要使用其他任何工具。

我们看到横向扩展集群使用的最流行的开放源码监视工具包括:

  • Nagios
  • Ganglia
  • Cacti
  • Zenoss
  • CluMon

我们可以说这些工具的实现大多利用了 RRDtool。CluMon 还在底层使用 Performance Co-Pilot (PCP),PCP 也很流行。xCAT 在未来的版本中将支持 Ganglia 和 PCP。

重申一下,懒惰的 Linux 集群管理员知道:

  • 没有适合所有集群的监视解决方案。监视对于不同的人有不同的含义。一些人只对计算机报警感兴趣,一些人需要监视性能指标,一些人需要作业分析,其他人只希望知道某些服务或应用程序是否在运行。
  • 对于不同的站点或相同站点中的不同集群,定制的方式也不一样。
  • 要在监视的目标、监视的用途和所需的资源之间找到平衡点。

8. 用队列调度程序控制/管理用户

懒惰的管理员都知道,用户是所有问题的根源。因此,防止用户获得根权限是极其重要的。甚至可以这样说:您应该尽一切努力把用户挡在您的计算机之外。

队列系统就提供这样的功能:用户提交作业,队列系统决定在哪些节点上运行此作业。除了运行作业之外,用户应该完全影响不了系统。

当今流行的队列系统包括一些付费产品,比如 LSF 和 PBS Pro。许多商业客户、政府实验室和大学使用这些产品。但是,对于许多系统,一般的开放源码解决方案(比如 TORQUE 和 SLURM)就很好了。

我们喜欢结合使用 TORQUE 和 Maui 调度程序来把用户挡在集群之外(除了运行作业)。在 Linux 上,这需要先设置 /etc/security/access.conf 文件,只允许根用户登录,拒绝其他任何人。例如,如果在每个节点上运行命令:

echo "-:ALL EXCEPT root:ALL" >>/etc/security/access.conf

那么只有根用户能够登录此计算机。接下来,创建一个 TORQUE 序言脚本,它运行下面这样的命令:

perl -pi -e "s/:ALL$/ $USER:ALL/" /etc/security/access.conf

(提示:$USER 变量是在运行脚本时 TORQUE 传递给脚本的第二个变量)。因为根用户运行序言脚本,所以此用户被允许登录集群。当作业完成时,运行收尾脚本,该脚本从 /etc/security/access.conf 中删除此用户,因此他无法再登录节点:perl -pi -e "s/ $USER\b//g" /etc/security/access.conf。这会防止用户相互冲突。

我们在集群上看到的一些 “性能” 问题实际上与计算机本身无关;真正的问题是多个用户在同一台计算机上运行作业,而他们运行的作业都要求占用全部 CPU 时间。

众 所周知,用户管理是必需的。但是,在排除故障时,管理员常常没有认识到用户本身正是问题的根源。我们强烈建议把用户挡在系统之外,只允许他们通过受控的环 境(比如资源调度程序)进入系统。另外,我们建议集群网络本身(千兆管理或用户网络)应该与公司或校园 WAN 的其余部分分开,只允许某些用户节点提供访问点。

9. 执行基准测试!提前发现性能问题

很多人只有在集群性能急剧下降、计算结果不正确时,才会意识到危险迫在眉睫。所以要记住,在判断集群的性能时硬件诊断常常是惟一的测试方法,但是硬件诊断提供的信息可能不完整。

硬件诊断常常以厂商指定的阈值作为成功/失败的评判标准 —— 实际的阈值可能高些,也可能低些。如果硬件诊断测试失败了,那么您就遇到问题了;但是,即使没有失败,也不意味着没问题。

下面的这些问题会对系统性能产生实质性影响,但厂商无法诊断出这些问题:

  • 双位内存错误
  • 单位内存错误
  • SRAM 奇偶错误
  • PCI 总线错误
  • 数字错误
  • 缓存错误
  • 磁盘错误
  • 性能不一致

问题常常与硬件无关,而是与软件相关。应用程序、库、编译器、固件和操作系统的任何部分都可能是问题的根源,而硬件诊断探测不出这些问题。运行硬件诊断的运行时环境常常与应用程序的环境不一样,而且子系统承受的压力也不一样 —— 所以无法重现软件造成的问题。

显然,需要在操作环境中运行某种相应的工作负载,从而检查集群的实际工作情况。这可以通过运行几个行业认可的基准测试来完成。基准测试的目的不是要获得最好的结果,而是要获得一致的、可重复的、精确的结果(当然,这也是最好的结果)。

如何知道结果是否是最好的?集群可以划分为下面的主要子系统:

  • 内存
  • CPU
  • 磁盘
  • 网络

硬件厂商应该有基准测试数据,这些数据说明预期的内存、CPU (FLOPS)、磁盘和网络性能。

如何知道结果是否是一致的?

采用统计学技术。在每个节点(对于多节点测试,是节点集)上运行每个基准测试一次或多次,然后把每个节点(或节点集)的最具代表性的数据集中在一起,并进行分析。结果的分布形态比结果本身更有意义。本文中所有基准测试的经验证明,结果都应该形成正态分布。正态分布是典型的钟形曲线,这在统计学中经常出现。它是更小的独立(可能无法察觉到的)恒等分布的变量或随机事件的综合结果。

基准测试也有许多很小的独立(可能无法察觉到的)恒等分布的变量,这些变量可能会影响性能,比如:

  • 小的竞争进程
  • 上下文切换
  • 硬件中断
  • 软件中断
  • 内存管理
  • 进程/线程调度
  • 宇宙射线

这些变量可能是不可避免的,但是它们是形成正态分布的原因之一。

基准测试还可能有 恒等分布的可观察到的变量,它们也会影响性能:

  • 大的竞争进程
  • 内存配置
  • BIOS 版本和设置
  • 处理器速度
  • 操作系统
  • 内核类型(比如 NUMA、SMP 和 UNI)和版本
  • 坏内存(比如过多的 ECC)
  • 芯片组修订
  • 超线程或 SMT
  • 不均衡的竞争进程(比如在某些节点上运行 httpd,但是在其他节点上不运行)
  • 共享库版本

这些变量是可避免的。可避免的不一致性可能导致多重模态分布或非正态分布,可能会对应用程序性能造成可度量的影响。

由于我们的目标是一致的、可重复的、精确的结果, 所以最好先尽可能减少变量。首先进行单节点基准测试,比如 STREAM。如果所有计算机都产生相似的 STREAM 结果,那么在其他基准测试出现异常时,就可以排除内存这个因素。接下来,做处理器和磁盘基准测试,然后是两节点(并行)基准测试,再执行多节点(并行)基 准测试。在完成每个更复杂的基准测试阶段之后,检查结果是否是一致的、可重复的、精确的,之后才能执行下一个测试。

下面是我们推荐的基准测试次序(报告组件性能的基准测试以粗体显示)。

  • 单节点(串行)基准测试:
    1. STREAM(内存 MBps
    2. NPB Serial(单处理器 FLOPS 和内存)
    3. NPB OpenMP(多处理器 FLOPS 和内存)
    4. HPL MPI Shared Memory(多处理器 FLOPS 和内存)
    5. IOzone(磁盘 MBps、内存和处理器)
  • 并行基准测试(只针对 MPI 系统):
    1. Ping-Pong(互连 microsecMBps
    2. NAS Parallel(多节点 FLOPS、内存和互连)
    3. HPL MPI Distributed Memory(多节点 FLOPS、内存和互连)

等一下,听起来要做的工作太多了!

是这样的,但是如果您希望以后清闲的话,这也是必要的。幸运的是,可以通过工具和文档简化这些工作。提前做一点儿计划,以后就能够避免许多麻烦。我们将在以后的一篇文章中讨论基准测试工具和图表;在未来的 xCAT RPM 中也会提供这些工具,这会极大地提高生产力。

10. 管理集群管理员交流

设置 MediaWiki
要想设置 MediaWiki,首先要指定一个驻留它的服务器。如果没有其他节点可用的话,我们常常使用管理服务器:
ssh mgmt

现在,确保安装 http 服务器、mysql 服务器和 php5。如果使用 Red Hat 5.1 或其衍生版本,那么输入:
yum install http mysql php5 mysql-server

接下来,配置 mysql:
service mysqld start
mysql_install_db
mysqladmin -u root password 'mypasswd'

下载安装媒体 wiki:
cd /tmp/
wget http://download.wikimedia.org/mediawiki/1.13/mediawiki-1.13.0.tar.gz
tar zxvf mediawiki-1.13.0.tar.gz
mv mediawiki-1.13.0 /var/www/html/wiki
chmod a+x /var/www/html/wiki/config


完成这些步骤之后,在 Web 浏览器中访问 http://localhost/wiki。然后,只需按照菜单安装其余部分。

安装完成之后,会提示您执行命令:
cd /var/www/html/wiki
mv config/LocalSettings.php

收 集系统的相关信息之后,应该把这些信息存储在某个方便的位置,让其他集群管理员可以轻松地访问。请回想一下 2000 年的情况,那时候文档大都采用 Word 或 Excel 格式,这既不酷,效率也不高。目前,生产力最高的文档共享方法是设置一个内部 wiki。这是因为懒惰的管理员不喜欢反复回答相同的问题。有了 wiki,管理员就不必这么做了,他只需说:“您自己去查看 wiki”。然后就不关他的事儿了。

每个站点都应该维护一个内部 wiki,其中应该包含所有常常被问到的集群相关信息,比如:

  • 系统修改的日志记录,包括在集群上执行管理操作的时间。
  • 集群的资产清单:固件版本、型号、序号、集群中的节点数量、处理器类型、内存。
  • 向厂商要求技术支持的链接和获取更新的地址。
  • 关于使用管理软件执行常见任务的文档。
  • 关于创建操作系统映像的过程的信息。

简 单地说,这个 wiki 包含的信息应该足够全面,如果有人询问关于此集群的问题,管理员只需回答 “您自己去查看 wiki”。另一方面,如果有人询问了一个 wiki 中没有涉及的问题,而您回答了他,那么您应该告诉他,作为回报他应该把您告诉他的知识添加到 wiki 中。另外,这也是对他的奖励,因为他发现了别人没有注意到的东西,这会让他在狂野的 IT 世界中获得尊敬。

为什么 wiki 比其他文档形式更好?

  • wiki 是可编辑的,位于一个中心位置,可以根据需要授予用户对它的访问权。我们见过保存在共享信息库中的文档,但是要想查看这些文档,用户必须先导航到信息库,然后把文档保存到自己的硬盘上,然后再打开。效率太低了。对于 wiki,只需单击链接,这更快更简便。
  • Word 文档或电子表格中的信息是静态的,修改起来比较麻烦(编辑、重新保存和发送修订后的文档)。更不用说,常常会看到同一文档的许多修订版,人们无法确定他们 手里的版本是不是最新的。如果多个人编辑同一文档,就更混乱了。实际上,把文档放在 wiki 上,它们的寿命就会长得多。

设置 wiki 是极其容易的。我们使用 MediaWiki。它是免费的,很容易安装和配置。(请参见边栏)。

Wiki 的语法比 HTML 简单得多,而且网上有许多讲解如何使用 wiki 的参考资料。还有一些用来突出显示 perl 或 bash 中的代码语法的扩展。

当我们提议通过安装 wiki 帮助管理员变得更懒惰时,没有遇到过任何阻力。

11. 不断寻找更懒惰的办法

我们常常看到集群管理员总是按照自己的方式做事,这是因为他们习惯了。我们认为,这对于 Linux 集群不是好现象,这会磨灭管理员的才能,丧失进一步挖掘集群的潜力的机会。变化是很重要的,并且新的思想常常伴随变化出现。

当 然,我们并不指望任何人能够研究他们遇到的每个新思想,但是是否熟悉新的趋势是区分优秀的管理员和平庸的管理员的重要标志。在这个快速变化的世界里,没人 能够知晓所有东西,并且只很少一部分人精通某些东西。但是,优秀的管理员了解那些非常好的东西,乐于测试新产品,而且对于以前没听说过的东西很好奇。

因 此,如果有人谈到以前没听说过的东西,懒惰的 Linux 管理员会追问下去,因为他实在太懒了,很希望找到更偷懒的方法。他还会通过搜索引擎查找相关信息。最糟糕的 Linux 集群管理员就是那些从来不提问题的。懒惰的 Linux 集群管理员不怕承认自己不知道某个东西。他对自己的本事很自信,即使他不知道某个产品,也能很快掌握它。

目前,在 Linux 集群管理领域有一些非常好的趋势。我们最感兴趣的是:

  1. 越来越多的集群向无状态计算迁移。这会使映像的管理和保持节点同步更加轻松。
  2. 从数据中心的角度看待集群。这意味着会考虑三年或更长时间内的电力、制冷和人员成本,而不仅仅考虑最初的采购成本。
  3. 从气体制冷向液体制冷发展。您知道吗?液体制冷的效率比气体制冷高 90%。
  4. 自适应式管理。按照这种管理方式,队列系统能够根据需要供应节点。这是真正的云计算,我们已经用 Moab 和 xCAT 证明了它的优越性。这是实现完全清闲 的最后一步。

结束语

如 果本文达到了它的目的,那么您现在应该有了一些偷懒的好主意,应该会尝试减轻自己的工作,同时更好地控制您现有的 Linux 集群环境,还计划在下一个集群中更偷懒。我们相信本文提供的思想和实践有助于更好地使用集群,促使集群管理成为更专业的科学,帮助造就更高效的集群管理 员。

问题越少,要开的会和要做的工作就越少,管理员就有更多时间玩 WoW、睡觉或做懒鬼们喜欢做的任何事情。

获得产品和技术
本文中提到的一些软件:

  • Rocks 是一个开放源码的 Linux 集群发行版,它让最终用户能够轻松地构建计算型集群、网格端点和拼接式显示器墙。它的目标是使实现集群更轻松。
  • OSCAR (Open Source Cluster Application Resources) 让具有不同 *NIX 经验水平的用户都能够安装 Beowulf 类型的 HPC 集群。
  • Perceus 是 Warewulf 的开发人员创建的下一代企业和集群供应工具集。
  • xCAT (eXtreme Cluster Administration Toolkit) 是一种可伸缩的分布式计算管理和供应工具,它为硬件控制、发现和有磁盘/无磁盘操作系统部署提供一个统一的界面。
  • Nagios 是一个主机和服务监视程序,用于提示网络问题。它是为 Linux 设计的,但是可以在大多数 *NIX 变体下工作。
  • Ganglia 是一种可伸缩的分布式监视系统,用于监视以集群联合体为目标的采用层次化设计的 HPC 集群和网格。
  • pbstop 是一种在 perl-PBS (Portable Batch System) 内部分发的 ncurses 监视和管理工具,世界上最大的一些集群使用此工具。
  • TORQUE 是一种开放源码的资源管理程序,可以控制批量作业和分布式计算节点,它是社区基于原来的 *PBS 项目开发的。
  • Cacti 是一个完整的网络绘图解决方案,其设计目的是利用 RRDTool 的数据存储和绘图功能;它包含一个快速投票程序、高级的图形模板功能、多种数据获取方法和开箱即用的用户管理特性。
  • Zenoss 提供商业开放源码 IT 管理解决方案。
  • CluMon 是 National Center for Supercomputing Applications 开发的集群监视系统,用来跟踪它的 Linux 超级集群;它是一个可调优的系统,可以适应几乎任何 Linux 计算机集。
  • RRDtool 是一个开放源码的高性能数据日志记录和绘图系统,用于处理时间系列数据。
  • Performance Co-Pilot 提供一个支持系统级性能监视和性能管理的框架和服务;SGI 在 2000 年提供了一个开放源码版本。
  • SLURM 是 “具备高可伸缩性的资源管理程序”(在漫画 Futurama 中,一种用虫子制作的软饮料也叫作 SLURM)。它是一种为所有规模的 Linux 集群设计的开放源码资源管理程序,提供三种关键功能 —— 分配对资源的排他和/或非排他访问;提供一个用于在分配的节点集上启动、执行和监视工作的框架;通过管理一个未完成工作队列来解决对资源的争用。
  • Moab Workload Manager 是一个基于策略的作业调度程序和事件引擎,支持在集群上进行基于实用程序的计算。

作者简介


Vallard Benincosa 是一位 “懒惰” 的 Linux 认证 IT 专家,在 IBM Linux Clusters 团队工作。他和他的妻子、两个小孩住在俄勒冈州波特兰市。



Egan Ford 从 1999 年开始构建 Web 和 HPC Linux 集群,曾经担任 IBM 的第一个大型 HPC 集群(位于 University of New Mexico 的 Los Lobos)的首席架构师。在此之后,Egan 领导了 IBM 的一些大型系统的设计和实现,包括 AIST、LANL Roadrunner 和 US National Science Foundation Teragrid (teragrid.org)。Egan 是 IBM 的第一个集群管理解决方案 (xCAT) 的创建者,还是两份关于 Linux HPC 的 IBM 红皮书的合著者。



Vallard Benincosa 是一位 “懒惰” 的 Linux 认证 IT 专家,在 IBM Linux Clusters 团队工作。他和他的妻子、两个小孩住在俄勒冈州波特兰市。



Egan Ford 从 1999 年开始构建 Web 和 HPC Linux 集群,曾经担任 IBM 的第一个大型 HPC 集群(位于 University of New Mexico 的 Los Lobos)的首席架构师。在此之后,Egan 领导了 IBM 的一些大型系统的设计和实现,包括 AIST、LANL Roadrunner 和 US National Science Foundation Teragrid (teragrid.org)。Egan 是 IBM 的第一个集群管理解决方案 (xCAT) 的创建者,还是两份关于 Linux HPC 的 IBM 红皮书的合著者。


阅读全文

2008年11月10日

无根的根:无名师的Unix心传

一、无名师与万行码
无名师曾对来访的程序员说:“Unix传统上认为,一行shell脚本胜过万行C程序。”
这个程序员自以为对C极其精通,说:“这不可能。UNIX内核正是用C实现的。”
无名师回道:“确是如此。不过,UNIX传统上认为,一行shell脚本胜过万行C程序。“
程序员颇为沮丧:”但是在C中我们可领会到尊者Ritchie的智慧。我们与操作系统和机器合而为一,可以获取无与伦比的性能。”
无名师回道:“诚如你言。不过,Unix传统上认为,一行shell脚本胜过万行C程序。”
程序员冷笑着想愤然离去。无名师向学生Nubi颔首示意,Nubi在黑板上写下一行shell脚本,问道:“尊敬的程序员,看看这行管道,用纯C实现,是不是要一万行C代码?”
程序员沉吟念诵。最终他承认如此。
“你需要多长时间来实现和调试那个C程序?”Nubi问道。
“很长”,来访的程序员承认。“但傻子才会干这个而不去完成更有价值的任务。”
“那么谁更了解Unix传统?”无名师问道。“是写一万行代码的,还是看到任务的无谓而不去编码的?”
听到此,程序员眼中一亮。


二、无名师与脚本狂
无名师和学生吃早饭时,从黑客大陆来了个陌生访客。
“Ihear y00 are very l33t,”他说。“Pl33z teach m3 all y00 know”。(我听说你很牛,请把你会的都教给我。)
无名师的学生面面相觑,都没听懂这类粗鄙言语。无名师微笑道:“你想弄懂Unix?”
“I want to b3 a wizard hax0r”,陌生人回答,“and 0wn ever3one's b0xen。”(我想当个顶尖黑客,能掌握所有人的机器。)
“我不教这个”,无名师答道。
陌生人很激动。“D00d, y00 r nothing but a p0ser。”,他说。“If y00 n00 anything, y00 wud t33ch m3。”(哥们儿,敢情你没真本事啊,你要知道点儿东西就教给我了。)
“有条路,”无名师说,“可以将你带入真知。”他在纸上写了个IP地址。“黑掉这台机器,这对你来说应该不费什么力气,它的管理员不称职。回来后告诉我你发现了什么。“
陌生人鞠了一躬就离开了。无名师把他的早饭吃完。
几天过去了,几个月过去了。没人再想起陌生人。
数年过去了,黑客大陆来的陌生人回来了。
”你混蛋!“他说,”我黑掉了那台机器,你说的没错,太容易了。但是我被FBI抓起来扔进监狱了。“
”好“,无名师说,”你可以继续下一课了。“他在另一张纸上写了个IP地址交给陌生人。
”你疯了?“陌生人喊道。”经过这事,我再也不黑别人的机器了。”
无名师脸现微笑。“这里就是”,他说,“真知的开始。”
听到此,陌生人眼中一亮。


三、无名师的双路论
无名师如是教导学生:
“达摩教义有条准线,这在尊者McIlroy的符咒“做一件事并做好”中得到体现。它强调软件应当具有简单一致的行为,这符合Unix惯例,人和其它程序便都很容易想象其心理模型。
“但达摩教义还有另一条准线,体现在尊者Thompson的符咒“有怀疑,用穷举”中,很多经文都教导我们现在得到的90%,比等不来的100%更有价值。它强调实现的健壮性和简单性。
“现在告诉我:什么程序符合Unix传统?“
想了一会儿后,Nubi沉思道:
“老师,这些教义有冲突。”
“简单的实现往往对边缘情况有欠考虑,比如资源耗竭、无法关闭竞争窗口以及在未完成事务中超时等等。”
“发生边缘情况时,软件行为往往不规律、难以猜测。这当然不是Unix传统。“
无名师颔首同意。
“另一方面,大家都知道精巧的程序很脆弱。更进一步说,每个对边缘情况的修正往往牵扯到程序的核心算法,还牵扯处理其它边缘情况的代码。”
“于是,对边缘情况防患于未然、确保描述的简单性,反而会使得代码过分复杂、bug成堆、根本无法发售。这当然不是Unix传统。”
无名师颔首同意。
“那么,什么是正确的达摩道?”Nubi问道。
无名师说:
“当鹰飞翔时,它忘记爪子与地面相触?当虎捕食时,它忘记腾空的一刻?VAX只重三斤!”
听到此,Nubi眼中一亮。


四、无名师与方法论
无名师和学生Nubi在圣地行走,无名师习惯在晚间为城市和乡村的Unix新门徒布道。
一次,聆听者中混入了一名方法论者。
“优化程序时不对热点进行反复衡量,就像渔夫把网撒入空湖中。”无名师说。
“那么,”方法论者说,“管理资源时不持续地衡量你的产能,不也像渔夫将网撒入空湖中么?”
“我一次碰到一个渔夫时,他正将网撒入船下的湖中,”无名师说,“他摸了好一会儿船底,像在寻找他的船。”
“但是,”方法论者说,“如果他把网撒入湖中,为什么还要找船呢?”
“因为他不会游泳。”无名师答道。
听到此,方法论者眼中一亮。


五、无名师的GUI论
一晚,无名师和Nubi参加一个程序员的探讨会。有个程序员问Nubi和他的老师来自哪看看学校。当得知他们是Unix大道的追随者时,程序员颇为不屑。
“Unix命令行工具太粗糙太落后”,他讥讽道。“现代的、设计得当的操作系统可以在图形用户界面中做任何事情。”
无名师一言不发,只是指着月亮。旁边的一条狗对着他的手狂吠。
“我不明白。”程序员说。
无名师依然缄默,指着一幅佛祖像,然后又指着一扇窗。
“你想说什么?”程序员问。
无名师指着程序员的头,接着指着一块大石。
“请把话说清楚!”程序员要求道。
无名师深深蹙眉,轻拍程序员的鼻子两下,把他扔到旁边的垃圾箱中。
程序员试图从垃圾堆挣扎出来之时,那条狗跑过来在他身上便溺。
此时,程序员眼中一亮。


六、无名师与Unix班
一个Unix狂热者听说无名师掌握Unix大道真知,便跑来求教。无名师对他说:
“当尊者Thompson发明Unix时,他并不理解它。随后他理解了,受益了,不再发明了。“
“当尊者McIlroy发明管道时,他只知道它将传递软件,并不知道它能传递思想。”
“当尊者Ritchie发明C时,他将程序员放到缓冲溢出、堆损坏和烂指针bug的地狱中惩罚。”
“说实话,这些尊者又瞎又蠢!”
狂热者对无名师的用词极为愤怒。
“这些智者”,他抗议道,“给了我们Unix的大道。我们嘲笑他们,就是混淆是非,比转世为牲畜和MCSE还不如。”
“你的代码全无污点和缺陷?”无名师问。
“不,”狂热者承认,“没人不犯猎。”
“这些尊者之智,”无名师说,“就是了解自身之愚。”
听到此,狂热者眼中一亮。


七、无名师的Unix传统论
一学生对无名师说:“我们听说SCO公司把握着纯正的Unix。”
无名师颔首。
学生继续说,“我们还听说OpenGroup公司也把握着纯正的Unix。”
无名师颔首。
“这怎么可能?”学生问。
无名师答道:
“SCO确实把握着Unix源码,但是Unix的源码不是Unix。OpenGroup确实把握着Unix的名称,但Unix的名称不是Unix。”
“那么,什么是Unix传统?”学生问。
无名师答道:
“非源码。非名称。非思想。非实物。恒变。不变。”
“Unix传统是简单和空。正是简单,正是空,才使得它更强胜飓风。”
“以自然法则前行,在程序员手中,吸纳各种优良设计。与之竞争的软件最终必与之想像;空,空,真空,虚无,万岁!”
听到此,学生眼中一亮。

无名师与最终用户
无名师又一次布道时,一个最终用户听说了他的智慧,跑来求教。
他对无名师三鞠躬。“我欲学习Unix大道,”他说,“但是弄不懂命令行。”
一个旁观的新门徒开始嘲讽最终用户,说他脑子一锅粥,说只有经训练者、有智慧者才配使用Unix。
无名师抚手不语,命这个嘲笑最终用户的新门徒前坐,坐到最终用户身边。
“告诉我,”他对新门徒说,“你写过什么代码,有过什么突出设计。”
新门徒嗫嚅了两句,然后沉默了。
无名师转向最终用户。“告诉我”,他问,“为何你要寻求大道?”
“我用的软件并不能令我满意”,最终用户答,“既不稳定,也不美观。听说Unix之道尽管艰难,但超越一切,我愿抛去一切诱饵和虚像。”
“那么,”无名师问,“你为何想尽办法让软件帮你做事?”
“我是个建筑工”,最终用户答道,“这座城里的很多房屋都出自我手。”
无名师转向新门徒。“家猫也能欺负老虎”,无名师说,“但是猫叫永远比不过虎吼。”
听到此,新门徒眼中一亮。


阅读全文

2008年11月8日

Wine 1.1.8 发布

Wine发布了最新的开发版本Wine 1.1.8, 新版本有以下更新:

丰富了 inetcomm 的组件(针对Outlook)
更好的crypt32 的支持
改进了内存管理
支持按钮主题
大量的bug修正

详细更新内容(英文)

下载地址如下:
http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.1.8.tar.bz2 http://prdownloads.sourceforge.net/wine/wine-1.1.8.tar.bz2


阅读全文

2008年11月7日

KDE 4.1.3 发布

2008 年11月5日(INTERNET 时间),KDE 社区 发布了代号为“Change”的KDE 4.1.3,它是KDE 4.1系列的第三个月度更新版本,其中包含了基本桌面组件与其它一些软件包,如系统管理程序、网络攻击、教学程序、附件、多媒体软件、游戏、美工扩展、网 络开发工具等等。KDE这些广受赞誉的软件已经被翻译成50多种语言。

包括类库及程序在内的全套KDE发布允许在开源授权协议下自由分发。您可以在http://download.kde.org上下载KDE的源码包及二进制包,也可以通过CD-ROM或一些主要GNU/Linux与UNIX发行版来获取。

增强

作为一个服务更新版,您可以在更新日志中查阅到完整的错误修正和改进点,注意这份列表并不是完整的,如果您想看完整的KDE 4.1.3更新列表,可以浏览Subversion代码库日志。本版本值得的注意的更改包括:

  • Dolphin文件管理器中的两个崩溃错误
  • 浏览器渲染组件KHTML引入了大量修正和优化
  • 多协议即时通讯工具Kopete的若干修正
KDE 4.1.3是个值得向每位拥有KDE 4.1.2的用户推荐的更新版,它将按月发布新版本,直到下一个重要的新发布问世,下一个重要版本KDE 4.2.0预计于来年一月发布。
阅读全文

2008年11月6日

OOo世界开源大会首次登录中国

2008年3月3日国际开源社区OpenOffice.org(简称OOo)公布了一直被业界关注的2008年第六届国际OOo年会举办地的申办投票结 果,中国北京以绝对优势战胜五大欧洲劲敌——意大利、荷兰、爱尔兰、斯洛伐克和匈牙利,赢得了年会的举办权。这是OOo年会首次在亚洲国家举办,消息一经 公布即引起众多国际和国内开源业界及爱好者的关注。

 国际OpenOffice.org年会(以下简称OOo大会)自2002年起每年举行一次,目前已经成功举办5届,OOo大会是由世界三大开源社区之一的OpenOffice.org国际社区发起主办,社区采取全球票选形式确定最终主办地。每年OOo社区都将会 接收来自全球的申办申请,能让OOo大会在本国召开,对于开源技术的爱好者和追随者来说,都是一件激动人心的事。以往历届OOo年会都在欧洲国家举行,这 不仅说明欧洲国家对于开源技术的重视,同时也说明开源技术在欧洲的发展程度一直处于世界领先地位。2008年第六届国际OOo年会同样吸引了众多欧洲城 市,红旗2000公司的申办方案最终脱颖而出,使北京成为这届大会的主办地,对于中国的开源界、产业界都将是巨大的鼓舞。

 红旗2000公司开通了大会网站http://www.ooobeijing2008.com/,用于介绍会议各项筹备情况,面向全球接受参会报名,并以此为窗口,介绍中国,介绍开源在中国的发展情况。

此次大会得到了SUN、IBM等国际知名IT企业的踊跃响应,他们都将派出强大技术团队参与大会,共同交流和分享关于开源的成果和进展.

开幕式地点: 北京.钓鱼台国宾馆
时间: 2008年11月5日-7日
阅读全文

2008年11月5日

对话Intel OTC中国内核团队

 中日韩IT司局长会议暨东北亚开源推软件推进论坛已经在中国、日本、韩国轮流成功地举办了六届,今年第七届于10月30~31日在中国无锡市太湖 饭店举行。此次大会上颁布了由共创软件联盟举办的“2008中国开源软件竞赛活动暨开源软件创新与企业应用大赛”决赛获奖名单,来自英特尔开源技术中心中 国内核团队的“Linux内核2.6.27项目”获得第一名,而Intel OTC(Open Source Technology)的内核团队被选举为此次东北亚开源推软件推进论坛中方的“特别贡献奖”。一直以内,人们的惯性思维就是Intel是一家硬件公司, 他们关注的是生成芯片、销售芯片,而软件来自于不同领域,这和Intel是毫不相干的事情。事实上,在软件领域,尤其是开源软件领域,Intel做出了很 多的贡献,很明显的一组数据就是在英特尔中国,专门从事开源软件研发的就有150个工程师左右,这些工程师做的每一件事情都与开源软件有关,并且都回馈与 开源社区。此次代表中国开源社区获得大奖,也体现了对他们做出贡献的一种肯定。《开源》杂志在第一时间采访了Intel OTC内核团队的负责人傅文庆经理以及他所带领的内核开发团队。

  《开源》:首先介绍一下你们内核团队的历史,目前都有哪些成员?如何分工,分别侧重哪些方向?

  傅文庆:OTC的Linux内核开发团队最初成立于2003年,目前有15个工程师,工作在以下领域:

  1.Linux核心支持,主要是对最新的CPU,芯片组的功能提供Linux内核的支持。还包括对内核性能的优化。特别是我们有一个开源的项目 叫LKP(Linux Kernel Performance), 主要工作就是不断测试Linux的最新内核版本,已确定哪个最新引入的补丁会导致内核性能的下降,并且与社区开发者沟通,提出解决方案,以不断提高 Linux最新版本的性能。

  2.Linux 电源管理ACPI 系统。通过我们的工程师的努力,在很短的时间里,修正了250多个Bug, 使Linux ACPI 的稳定性有了极大的改善。

  3.Intel 显卡驱动程序。

  4.Intel 无限网卡驱动。在开发对无线网络支持的同时,我们开发的无线网络(WIFI)协议栈也被Linux接受成为Linux 内核中的标准的WIFI 协议栈。

  5.Netbook 的支持。我们的工程师在加速Netbook 启动的过程中也做出了重要贡献,以实现在Netbook上5秒启动的里程碑。

  《开源》:你们这个team已经存在多年,做出了哪些成果,对Intel、对开源社区都有哪些方面的贡献?

  傅文庆:我们在内核平台配置和电源管理(ACPI),内核性能优化,无线网络协议栈及驱动,PCI子系统功能实 现,Kexec/KDump,SystemTap方面都有贡献。譬如,我们显著改善了内核休眠和唤醒的用户体验,致力于追踪内核性能损失并及时更正,贡献 了第一个开源的无线协议栈等。在开源社区方面,我们多次代表从中国来的开发人员在国际知名内核开发会议上发表论文讲座。积极参加国内开源社区,特别是内核 开发社区,为推动社区发展贡献自己的一份力量,比如我们积极参加北京内核开发研讨会,阿卡内核开发者大会并贡献讲座,我们的成员积极国内内核开发者聚集较 多的linuxforum,zh-kernel等论坛或邮件列表,积极参与讨论,为初学者解惑答疑。

  《开源》:祝贺下你们这个Team代表中国获奖在中日韩论坛大会上获得“特殊贡献”大奖,这体现了你们的价值,也可以看做是中国开源界对您们的一种肯定.


阅读全文

Fedora 10 Preview 发布

更新: Fedora 10正式版已经发布,请参见 Fedora 10正式版发布

Fedora的下一个发行版 Fedora 10 的预览版已经发布了,这个版本是Fedora 10 的正式版发布前的最后一个公开测试版本。根据Fedora 10的日程表,Fedora 10 的正式版将在2008年11月25日发布,相信Fedora 10的会给我们带来不少的新特性,非常期待,希望不会跳票!

Fedora 10 Preview 的下载地址:

Install Media

Fedora Desktop Live Media

Fedora KDE Live Media


阅读全文

2008年11月4日

RPM Fusion 正式启动

RPM Fusion 已经正式启动。等等……什么是 RPM Fusion?简单的说,RPM Fusion 是为 Fedora 及 Red Hat Enterprise Linux 用户提供的一个软件包仓库。各位 Fedora/RHEL 朋友要是想要安装的软件在官方的仓库中找不到,不要泄气,兴许通过 RPM Fusion 你就找到了。

新启动的 RPM Fusion 合并了原有的 DribbleFreshrpmsLivna 等软件包仓库,将成为最大的第三方软件包仓库。

通过 RPM Fusion 软件包仓库,你将找到 ATI/NVIDIA 显卡驱动、私有的音频/视频编码/解码器、游戏、模拟器、以及其他软件包等。

RPM Fusion 网站位于:http://rpmfusion.org

使用前,请参阅配置指南

注:已经使用 livna 的朋友在更新后就会默认启用 rpmfusion 。

原文网址 http://linuxtoy.org/archives/rpm-fusion-launches.html


阅读全文

Wayland:Linux的新X Server

熟悉X Window的朋友都知道,X Window(以下简称X)的开发始于1984年,是一个历史相当悠久的项目(比Linux还早好多年)。

即使是目前的X,也是基于1987年制定的X11协议,这也是现在我们叫X为“X11”的原因。

X的架构虽然灵活(使用Server/Client模式),但是不可避免的带来延迟,影响桌面图形效率。

近日,来自Red Hat的Kristian Høgsberg开启了一个新的项目:Wayland,目的是提供一个“全新的轻量级X Server”。

—–

作为一个已经公开的秘密:X.Org Server已经相当古老并且有些地方已经显得臃肿了。而Server/Client构架虽然将网络/本地的图形一致对待,但是却带来渲染延迟、影响图形 效率。这也是目前Linux桌面图形性能不如Windows/Mac OS X的原因。

而Kristian的Wayland很简单:所有的事物都是直接绘制和合成的!而不是像现在的X一样,客户端请求服务端,服务端发出接收响应并绘制相应的部分。

这意味着使用Wayland,在现有主流显示设备下,桌面图形效率将非常高,不再会有延迟!并且因为Wayland内置了合成管理器,只要硬件支持,桌面将支持丰富的合成视觉效果。当然,用户也可以用其他(如Compiz)来取代内置的合成管理器。

Wayland因为是一个全新的项目,也需要一些全新技术的支持,如内核的kernel mode-setting和Graphics Execution Manager。而KMS和GEM这两项技术并未成熟,当前内核和显卡都没有正式支持。

而且Wayland正处于早期开发当中,缺乏一些当前X拥有的基本特性。所以指望Wayland来代替现有的X还为时过早,并且在不久的将来还需要解决各种图形库(如GTK+)和显示驱动的支持问题。

谁都不能断定未来Wayland不会成为标准的X Server,就像Linus在开发Linux内核初期,他只是将写Linux作为一个业余爱好而从没期望过未来会有这么大成就。

但愿Kristian的Wayland能发展良好并促进Linux在图形领域的发展:因为Wayland作为一个简易的X Server,其特性注定了它的舞台不久久是桌面平台,还能是嵌入式领域。

转自Linux桌面中文网 - Wayland:Linux的新X Server


阅读全文

Linux 管理员的 10 个关键技巧

学会这 10 个技巧后,您将成为世界上最强大的 Linux® 系统管理员,整个世界是有点夸张,但要在一个大团队中工作,这些技巧是十分必要的。学习 SHH 通道、VNC、密码恢复、控制台侦察等等。各个技巧都附有例子,可以将这些例子复制到自己的系统中。

好的系统管理员区分在效率上。如果一位高效的系统管理员能在 10 分钟内完成一件他人需要 2 个小时才能完成的任务,那么他应该受到奖励(得到更多报酬),因为他为公司节约了时间,而时间就是金钱,不是吗?

技巧是为了提高管理效率。虽然本文不打算对所有 技巧进行讨论,但是我会介绍 “懒惰” 管理员所用的 10 个基本法宝。这些技巧可以节约时间 —— 即使没有因为高效而得到更多的报酬,但至少可以有更多的时间去玩。



技巧 1:卸载无响应的 DVD 驱动器

网 络新手的经历:按下服务器(运行基于 Redmond 的操作系统)DVD 驱动器上的 Eject 按钮时,它会立即弹出。他然后抱怨说,在大多数企业 Linux 服务器中,如果在那个目录中运行某个进程,弹出就不会发生。作为一名长期的 Linux 管理员,我会重启机器。如果我不清楚正在运行什么,以及为何不释放 DVD 驱动器,我则会弹出磁盘。但这样效率很低。

下面介绍如何找到保持 DVD 驱动器的进程,并轻松弹出 DVD 驱动器:首先进行模拟。在 DVD 驱动器中放入磁盘,打开一个终端,装载 DVD 驱动器:

# mount /media/cdrom
# cd /media/cdrom
# while [ 1 ]; do echo "All your drives are belong to us!"; sleep 30; done

现在打开第二个终端并试着弹出 DVD 驱动器:

# eject

将得到以下消息:

umount: /media/cdrom: device is busy

在释放该设备之前,让我们找出谁在使用它。

# fuser /media/cdrom

进程正在运行,无法弹出磁盘其实是我们的错误。

现在,如果您是根用户,可以随意终止进程:

# fuser -k /media/cdrom

现在终于可以卸载驱动器了:

# eject

fuser 很正常。


技巧 2:恢复出现问题的屏幕

尝试以下操作:

# cat /bin/cat

注意!终端就想垃圾一样。输入的所有内容非常零乱。那么该怎么做呢?

输入 reset。但是,输入 reset 与 输入 rebootshutdown 太接近了。吓得手心冒汗了吧 — 特别是在生产机器上执行这个操作时。

放心吧,在进行此操作时,机器不会重启。继续操作:

# reset

现在屏幕恢复正常了。这比关闭窗口后再次登陆好多了,特别是必须经过 5 台机器和 SSH 才能到达这台机器时。




技巧 3:屏幕协作

来自产品工程的高级维护用户 David 打电话说:“为什么我不能在您部署的这些新机器上编译 supercode.c”。

您会问他:“您运行的是什么机器?”

David 答道:“ Posh”。(这个虚够的公司将它的 5 台生产服务器以纪念 Spice Girls 的方式命名)。这下您可以大显身手了,另一台机器由 David 操作:

# su - david

转到 posh:

# ssh posh

到达之后,运行以下代码:

# screen -S foo

然后呼叫 David:

“David,在终端运行命令 # screen -x foo”。

这使您和 David 的会话在 Linux shell 中联接在一起。您可以输入,他也可以输入,但彼此可以看到对方所做的事情。这避免了进入其他层次,而且双方都有相同的控制权。这样做的好处是 David 可以观察到您的故障诊断技巧,并能准确了解如何解决问题。

最后大家都能看到问题所在:David 的编译脚本对一个不在此新服务器上的旧目录进行了硬编码。将它装载后再次编译即可解决问题,然后 David 继续工作。您则可以继续之前的娱乐活动。

关于此技巧需要注意的一点是,双方需要以同一用户登录。screen 命令还可以:实现多个窗口和拆分屏幕。请阅读手册页获取更多相关信息。

对于 screen 会话,我还有最后一个技巧。要从中分离并让它打开,请输入 Ctrl-A D (即按住 Ctrl 键并点击 A 键。然后按 D 键)。

然后通过再次运行 screen -x foo 命令可以重新拼接起来。



技巧 4:找回根密码

如果忘记根密码,就必须重新安装整台机器。更惨的是,许多人都会这样做。但是启动机器并更改密码却十分简单。这并非在所有情况下都适用(比如设置了一个 GRUB 密码,但也忘记了),但这里介绍一个 Cent OS Linux 示例,说明一般情况下的操作。

首先重启系统。重启时会跳出如图 1 所示的 GRUB 屏幕。移动箭头键,这样可以保留在此屏幕上,而不是进入正常启动。


图 1. 重启后的 GRUB 屏幕
重启后的 GRUB 屏幕

然后,使用箭头键选择要启动的内核,并输入 E 编辑内核行。然后便可看到如图 2 所示的屏幕:


图 2:准备编辑内核行
准备编辑内核行

再次使用箭头键突出显示以 kernel 开始的行,按 E 编辑内核参数。到达如图 3 所示的屏幕时,在图 3 中所示的参数后追加数字 1 即可:


图 3. 在参数后追加数字 1
在参数后追加数字 1

然后按 EnterB,内核会启动到单用户模式。然后运行 passwd 命令,更改用户根密码:

sh-3.00# passwd
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully

现在可以重启了,机器将使用新密码启动。




技巧 5:SSH 后门

有很多次,我所在的站点需要某人的远程支持,而他却被公司防火强阻挡在外。很少有人意识到,如果能通过防火墙到达外部,那么也能轻松实现让外部的信息进来。

从本意讲,这称为 “在防火墙上砸一个洞”。我称之为 SSH 后门。为了使用它,必须有一台作为中介的连接到 Internet 的机器。

在本例中,将这样台机器称为 blackbox.example.com。公司防火墙后面的机器称为 ginger。此技术支持的机器称为 tech。图 4 解释了设置过程。


图 4. 在防火墙上砸一个洞
在防火墙上砸一个洞

以下是操作步骤:

  1. 检查什么是允许做的,但要确保您问对了人。大多数人都担心您打开了防火墙,但他们不明白这是完全加密的。而且,必须破解外部机器才能进入公司内部。不过,您可能属于 “敢作敢为” 型的人物。自己进行判断应该选择的方式,但不如意时不抱怨别人。

  2. 使用 -R 标记通过 SSH 从 ginger 连接到 blackbox.example.com。假设您是 ginger 上的根用户,tech 需要根用户 ID 来帮助使用系统。使用 -R 标记将 blackbox 上端口 2222 的说明转发到 ginger 的端口 22 上。这就设置了 SSH 通道。注意,只有 SSH 通信可以进入 ginger:您不会将 ginger 放在无保护的 Internet 上。

    可以使用以下语法实现此操作:

    ~# ssh -R 2222:localhost:22 thedude@blackbox.example.com

    进入 blackbox 后,只需一直保持登录状态。我总是输入以下命令:

    thedude@blackbox:~$ while [ 1 ]; do date; sleep 300; done

    使机器保持忙碌状态。然后最小化窗口。

  3. 现在指示 tech 上的朋友使用 SSH 连接到 blackbox,而不需要使用任何特殊的 SSH 标记。但必须把密码给他们:

    root@tech:~# ssh thedude@blackbox.example.com .

  4. tech 位于 blackbox 上后,可以使用以下命令从 SSH 连接到 ginger:

    thedude@blackbox:~$: ssh -p 2222 root@localhost

  5. Tech 将提示输入密码。应该输入 ginger 的根密码。

  6. 现在您和来自 tech 的支持可以一起工作并解决问题。甚至需要一起使用屏幕!(参见 技巧 4)。


技巧 6:通过 SSH 通道进行远程 VNC 会话

VNC 或虚拟网络计算已经存在很长时间了。通常,当远程服务器上的某类图形程序只能在此服务器上使用时,我才需要 VNC。

例如,假设在 技巧 5 中,ginger 是一台存储服务器。许多设备都使用 GUI 程序来管理存储控制器。这些 GUI 管理工具通常需要通过一个网络直接连接到存储服务器,而这个网络有时保存在专用的子网络中。因此,只能通过 ginger 访问这个 GUI。

可以尝试使用 -X 选项通过 SSH 连接到 ginger 并启动它,但这对带宽要求很高,您需要忍受等待的痛苦。VNC 是一个网络友好的工具,几乎适用于所有操作系统。

假设设置与技巧 5 中的一样,但希望 tech 能访问 VNC 而不是 SSH。对于这种情况,需要进行一些类似的操作,不过转发的是 VNC 端口。执行以下操作步骤:

  1. 在 ginger 上启动一个 VNC 服务器会话。运行以下命令:

    root@ginger:~# vncserver -geometry 1024x768 -depth 24 :99

    这些选项指示启动服务器,分辨率为 1024x768,像素深度为每像素 24 位。如果使用较慢的连接设置,8 也许是更好的选项。使用 :99 指定可访问 VNC 服务器的端口。VNC 协议在 5900 处启动,因此 :99 表示服务器可从端口 5999 访问。

    启动该会话时,要求您指定密码。用户 ID 与启动 VNC 服务器时的用户相同(本例中就是根用户)。

  2. 从 ginger 连接到 blackbox.example.com 的 SSH 将 blackbox 上的端口 5999 转发到 ginger。这通过运行以下命令在 ginger 中完成:

    root@ginger:~# ssh -R 5999:localhost:5999 thedude@blackbox.example.com

    运行此命令后,需要将此 SSH 会话保持为打开状态,以便保留转发到 ginger 的端口。此时,如果在 blackbox 上,那么运行以下命令即可访问 ginger 上的 VNC 会话:

    thedude@blackbox:~$ vncviewer localhost:99

    这将通过 SSH 将端口转发给 ginger,但我们希望通过 tech 让 VNC 访问 ginger。为此,需要另一个通道。

  3. 在 tech 中,打开一个通道,通过 SHH 将端口 5999 转发到 blackbox 上的端口 5999。这通过运行以下命令完成:

    root@tech:~# ssh -L 5999:localhost:5999 thedude@blackbox.example.com

    这次使用的 SSH 标记为 -L,它不是将 5999 放到 blackbox,而是从中获取。到达 blackbox 后,需要保持此会话为打开状态。现在即可在 tech 中使用 VNC 了!

  4. 在 tech 中,运行以下命令使 VNC 连接到 ginger:

    root@tech:~# vncviewer localhost:99 .

    Tech 现在将拥有一个直接到 ginger 的 VNC 会话。

设置虽然有点麻烦,但比为修复存储阵列而四处奔波强多了。不过多实践几次这就变得容易了。

对 此技巧我还要补充一点:如果 tech 运行的是 Windows® 操作系统,并且没有命令行 SSH 客户端,那么 tech 可以运行 Putty。Putty 可以设置为通过查找侧栏中的选项来转发 SSH 端口。如果端口是 5902 而不是本例中的 5999,则可以输入图 5 中的内容。


图 5. Putty 可以转发用作通道的 SSH
Putty 可以转发用作通道的 SSH 端口

如果进行了此设置,那么 tech 就可以使用 VNC 连接到 localhost:2,如同 tech 正在 Linux 操作系统上运行一样。


技巧 7:检查带宽

设想:公司 A 有一个名为 ginger 的存储服务器,并通过名为 beckham 的客户端节点装载 NFS。公司 A 确定他们需要从 ginger 得到更多的带宽,因为有大量的节点需要 NFS 装载 ginger 的共享文件系统。

实现此操作的最常用和最便宜的方式是将两个吉比特以太网 NIC 组合在一起。这是最便宜的,因为您通常会有一个额外的可用 NIC 和一个额外的端口。

所以采取此这个方法。不过现在的问题是:到底需要多少带宽?

吉比特以太网理论上的限制是 128MBit/s。这个数字从何而来?看看这些计算:

1Gb = 1024Mb1024Mb/8 = 128MB;"b" = "bits,"、"B" = "bytes"

但实际看到的是什么呢,有什么好的测量方法呢?我推荐一个工具 iperf。可以按照以下方法获得 iperf:

# wget http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz

需要在 ginger 和 beckham 均可见的共享文件系统上安装此工具,或者在两个节点上编译并安装。我将在两个节点均可见的 bob 用户的主目录中编译它:

tar zxvf iperf*gz
cd iperf-2.0.2
./configure -prefix=/home/bob/perf
make
make install

在 ginger 上,运行:

# /home/bob/perf/bin/iperf -s -f M

这台机器将用作服务器并以 MBit/s 为单位输出执行速度。

在 beckham 节点上,运行:

# /home/bob/perf/bin/iperf -c ginger -P 4 -f M -w 256k -t 60

两 个屏幕上的结果都指示了速度是多少。在使用吉比特适配器的普通服务器上,可能会看到速度约为 112MBit/s。这是 TCP 堆栈和物理电缆中的常用带宽。通过以端到端的方式连接两台服务器,每台服务器使用两个联结的以太网卡,我获得了约 220MBit/s 的带宽。

事实上,在联结的网络上看到的 NFS 约为 150-160MBit/s。这仍然表示带宽可以达到预期效果。如果看到更小的值,则应该检查是否有问题。

我最近碰到一种情况,即通过连接驱动程序连接两个使用了不同驱动程序的 NIC。这导致性能非常低,带宽约为 20MBit/s,比不连接以太网卡时的带宽还小!


技巧 8:命令行脚本和实用程序

Linux 系统管理员通过使用权威的命令行脚本会变得更高效。这包括巧妙使用循环和知道如何使用 awkgrepsed 等的实用程序解析数据。通常这可以减少击键次数,降低用户出错率。

例如,假设需要为即将安装的 Linux 集群生成一个新的 /etc/hosts 文件。一般的做法是在 vi 或文本编辑器中添加 IP 地址。不过,可以通过使用现有 /etc/hosts 文件并将以下内容追加到此文件来实现。在命令行上运行:

# P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);
done >>/etc/hosts

200 个主机名(n001 到 n200)将由 IP 地址(192.168.99.1 到 192.168.99.200)来创建。手动填充这样的文件有可能会创建重复的 IP 地址或主机名,因此这是使用内置命令行消除用户错误的好例子。请注意,这是在 bash shell(大多数 Linux 发行版的默认值)内完成的。

再举一个例子,假设要检查 Linux 集群中的各个计算节点中的内存大小是否一样。通常,拥有一个发行版或类似的 shell 是最好的。但是为了演示,以下使用 SSH。

假设 SSH 设置为不使用密码验证。然后运行:

# for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';
done | sort | uniq

这样的命令行相当简洁。(如果在其中放入正则表达式情况会更糟)。让我们对它进行细分,详细讨论各部分。

首先从 001 循环到 200。使用 seq 命令的 -w 选项在前面填充 0。 然后替换 num 变量,创建通过 SSH 连接的主机。有了目标主机后,向它发出命令。本例中是:

free -m | grep Mem | awk '{print $2}'

这个命令的意思是:

  • 使用 free 命令获取以兆字节为单位的内存大小。
  • 获取这个命令的结果,并使用 grep 获取包含字符串 Mem 的行。
  • 获取那一行并使用 awk 输出第二个字段,它是节点中的总内存。

在每个节点上执行这个操作。

在每个节点上执行命令后,200 个节点的整个输出就传送(|d)到 sort 命令,以对所有内存值进行排序。

最后,使用 uniq 命令消除重复项。这个命令会导致以下情况中的一种:

  • 如果所有节点(n001 到 n200)拥有相同的内存大小,则只显示一个数字。这个数字就是每个操作系统看到的内存大小。
  • 如果节点内存大小不同,将会看到几个内存大小的值。
  • 最后,如果某个节点上的 SSH 出现故障,则会看到一些错误消息。

这个命令并不是完美无缺的。如果发现与预期不同的内存值,您就不知道是哪一个节点出了问题,或者有多少个节点。为此需要发出另一个命令。

这个技巧提供了一种查看某些内容的快速方式,而且如果发生错误,您可以立刻知道。其价值在于快速检查。


技巧 9:控制台侦察

有些软件会向控制台输出错误消息,而控制台不一定会显示在 SHH 会话中。使用 vcs 设备可以进行检查。在 SSH 会话中,在远程服务器 # cat /dev/vcs1 上运行以下命令。这将显示第一个控制台中的内容。也可以使用 2、3 等查看其他虚拟终端。如果某个用户在远程系统上输入,您将看到他输入的内容。

在大多数数据场中,使用远程终端服务器、KVM 甚至 Serial Over LAN 是查看这类信息的最好方式;它也提供了带外查看功能的一些好处。使用 vcs 设备能够提供一种快速带内方法,这能节省去机房查看控制台的时间。


技巧 10:随机系统信息收集

技巧 8 中,介绍了一个使用命令行获取有关系统中总内存信息的例子。在这个技巧中,我将介绍几个其他方法,用于从需要进行验证、故障诊断或给予远程支持的系统收集重要信息。

首先,收集关于处理器的信息。通过以下命令很容易实现:

# cat /proc/cpuinfo

这个命令给出关于处理器的速度、数量和型号的信息。在许多情况下使用 grep 可以得到需要的值。

我经常做的检查是确定系统中处理器的数量。因此,如果我买了一台带双核处理器的四核服务器,我可以运行以下命令:

# cat /proc/cpuinfo | grep processor | wc -l

然后我看到值应该是 8。如果不是,我会打电话给供应商,让他们给我派送另一台处理器。

我需要的另一条信息是磁盘信息。可以使用 df 命令获得。我总是添加 -h 标记,以便看到以十亿字节或兆字节为单位的输出。# df -h 还会显示磁盘的分区情况。

列表最后是查看系统固件的方式 —— 一个获取 BIOS 级别和 NIC 上的固件信息的方法。

要检查 BIOS 版本,可以运行 dmidecode 命令。遗憾的是,不能轻易使用 grep 获取信息,所以这不是一个很有效的方法。对于我的 Lenovo T61 laptop,输出如下:

#dmidecode | less
...
BIOS Information
Vendor: LENOVO
Version: 7LET52WW (1.22 )
Release Date: 08/27/2007
...

这比重启机器并查看 POST 输出有效得多。

要检查以太网适配器的驱动程序和固件版本,请运行 ethtool

# ethtool -i eth0
driver: e1000
version: 7.3.20-k2-NAPI
firmware-version: 0.3-0


结束语

可以从精通命令行的人那里学习很多技巧。最好的学习方式是:

  • 与其他人一起工作。共享屏幕会话并观察其他人是如何工作的 —— 您会发现新的做事方法。可能需要谦虚一点,让其他人引导,不过通常可以学到很多东西。
  • 阅读手册页。认真阅读手册页,即使是熟知的命令,也能获得更深的见解。例如,您以前可能根本不知道可以使用 awk 进行网络编程。
  • 解决问题。作为系统管理员,总是要解决问题,不管是您还是其他人引起的问题。这就是经验,经验可以使您更优秀、更高效。

我 希望至少有一个技巧能帮助您学习到您不知道的知识。像这样的基本技巧可以使您更高效,并且能增长经验,但最重要的是,技巧可以让您有更多的空闲时间去做自 己感兴趣的事情,比如玩电子游戏。最好的管理员比较悠闲,因为他们不喜欢工作。他们能找到完成任务的最快方法,并且能快速完成任务,从而保持休闲的生活。


关于作者

Vallard Benincosa 是一位 “懒惰” 的 Linux 认证 IT 专家,在 IBM Linux Clusters 团队工作。他和他的妻子、两个小孩住在俄勒冈州波特兰市.


阅读全文