网络推荐



本广告位招租!

推荐给好友 上一篇 | 下一篇

“懒惰” Linux 管理员的 10 个关键技巧

BSD爱好者乐园zg:\o9MQ]h

级别: 初级BSD爱好者乐园"M,oO5I$|b7h7P

/U,f@`fY.{Vallard Benincosa, 认证技术销售专家, IBM
;q]k p*^!SW(U:LaBSD爱好者乐园f?Hnz2I;n

$_ F(C5lq K2008 年 8 月 11 日BSD爱好者乐园.Da}FhkMn'B

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

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

6qn`!LR8y z3_BSD爱好者乐园7_4J s!GQ?5[ L+f$o ^

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

CvZ[8X3~%H

kn^'b~'e技巧 1:卸载无响应的 DVD 驱动器

{+U `Lz(^BSD爱好者乐园m*F R#W^f!v k5Y

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

BSD爱好者乐园Q C Ay/d

下面介绍如何找到保持 DVD 驱动器的进程,并轻松弹出 DVD 驱动器:首先进行模拟。在 DVD 驱动器中放入磁盘,打开一个终端,装载 DVD 驱动器:BSD爱好者乐园"`.IhQ:j tny @

BSD爱好者乐园i9F]S%v

# mount /media/cdrom
r k8gq5|eta)O# cd /media/cdrom
0Hxb L%f#}A&@~{# while [ 1 ]; do echo "All your drives are belong to us!"; sleep 30; done
BSD爱好者乐园,@ ciI+RSs

#j R.OxWC$A;F-nT现在打开第二个终端并试着弹出 DVD 驱动器:BSD爱好者乐园*H*z1AXb*f oe

BSD爱好者乐园.S;]V.X5BpJ%C R

# ejectBSD爱好者乐园*@|5Y+g?:i

BSD爱好者乐园0l"B,Ap+c4DY5J-s0T

将得到以下消息:BSD爱好者乐园V4mq:a5H%C

BSD爱好者乐园D*}EX8Ei\ h

umount: /media/cdrom: device is busy

;M_1` v3?)g;~0M

\wf)^/^%Y3M1NfB在释放该设备之前,让我们找出谁在使用它。BSD爱好者乐园vpE,Mf b

BSD爱好者乐园l,@A X|-QwJ/f s

# fuser /media/cdrom

`5TfP4_[ He:J)g

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

(P Om5[ `c Hg4@0x

&avw @ h*{B"d(_现在,如果您是根用户,可以随意终止进程:BSD爱好者乐园7~6U.ts f

BSD爱好者乐园uH7v/a5c u

# fuser -k /media/cdromBSD爱好者乐园7c \C7`7kTZ/u#U

BSD爱好者乐园6G.~\/yS0i W

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

'PyEp2nx.?l

1r-E^!I4`A$t m# ejectBSD爱好者乐园 C2V)dW_d0Sv/V

BSD爱好者乐园$J*PjC0p#G4X+X3e%j4o L

fuser很正常。BSD爱好者乐园6\;m8Q4V7t&S\5V_

BSD爱好者乐园z&b)z9u*SU s-o

 BSD爱好者乐园6Qsd3t\*_+Ce"h

BSD爱好者乐园8|C C?c!rSI

技巧 2:恢复出现问题的屏幕BSD爱好者乐园0[k O:ink

BSD爱好者乐园'E9@ @[ @

尝试以下操作:BSD爱好者乐园.r&~9@4_^b9z oF:rB

!Xbh6d_ K(|# cat /bin/cat

D]Vz.WUF]3S

-q-ZM%V(z#rw注意!终端就想垃圾一样。输入的所有内容非常零乱。那么该怎么做呢?BSD爱好者乐园+q[?LwwB{

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

S R7y'Nk:QU

o,[v6b2|eHO T+O放心吧,在进行此操作时,机器不会重启。继续操作:

c*gA}Pw { cBSD爱好者乐园 o0}"T |7e#T:P

# resetBSD爱好者乐园8l.xx-p\t4VJX

:Q"Dk{X){O} uJ@现在屏幕恢复正常了。这比关闭窗口后再次登陆好多了,特别是必须经过 5 台机器和 SSH 才能到达这台机器时。

#~S8sm j LA%jBSD爱好者乐园 c$Cx|xr Xg1~7S

6Q%qVlu技巧 3:屏幕协作

T \Av,e6fBSD爱好者乐园,pM7N#Y mZt

来自产品工程的高级维护用户 David 打电话说:“为什么我不能在您部署的这些新机器上编译 supercode.c”。BSD爱好者乐园m ^7zK;z p,P,a1w

S$c)VS(YZ您会问他:“您运行的是什么机器?”

W{R?j"iQ$GBSD爱好者乐园/f"PeIbA9t;_ g4d

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

BSD爱好者乐园a(gC.J#x:G#`;H0y

# su - davidBSD爱好者乐园tBF}g2k"n?

BSD爱好者乐园6tbkp6Z _1Va|

转到 posh:BSD爱好者乐园 crZ"}3~

BSD爱好者乐园B-c^H$iW%L+\{|

# ssh poshBSD爱好者乐园P0maxr

LJL v` {K到达之后,运行以下代码:BSD爱好者乐园6W6A!{9Y"~lK}f

BSD爱好者乐园r*{ QXYMz z

# screen -S foo

$a-G(|} R[lBSD爱好者乐园-_@Z4gNeeEL:g

然后呼叫 David:BSD爱好者乐园_iFMZ3wPp

BSD爱好者乐园`0h@Qs|g

“David,在终端运行命令# screen -x foo”。BSD爱好者乐园WAs*f$B#u A.x

jt a7mLW^4X ~N3R这使您和 David 的会话在 Linux shell 中联接在一起。您可以输入,他也可以输入,但彼此可以看到对方所做的事情。这避免了进入其他层次,而且双方都有相同的控制权。这样做的好处是 David 可以观察到您的故障诊断技巧,并能准确了解如何解决问题。BSD爱好者乐园+v7RZ m| kA%`e

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

p Klw?dBSD爱好者乐园+mfq,b3Ol @m:?B

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

BSD爱好者乐园!})E O7z1]N/lr h

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

Jw,\'JG9HP6jzBSD爱好者乐园{2j9I;[7O ^^-_

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

$Oz/^ e8TBOBSD爱好者乐园3MT^IRq0c
BSD爱好者乐园no ^a RCN0I0[

技巧 4:找回根密码BSD爱好者乐园G!VKE e.zR

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

BSD爱好者乐园&ob E^M}I

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

Q7Tj:SU9?Q|I}/r

od2TF.b;Soe
?H ?@:{5?As F图 1. 重启后的 GRUB 屏幕
4@L X^6c.U-?wyY kBSD爱好者乐园N?{4ioHkP5z+b

l;_/tV/c4zftL)q然后,使用箭头键选择要启动的内核,并输入E编辑内核行。然后便可看到如图 2 所示的屏幕:BSD爱好者乐园z5S"t)YW

BSD爱好者乐园%R8S}'CT&I"E

BSD爱好者乐园M"p%o3t"K7@^]
图 2:准备编辑内核行BSD爱好者乐园mP7___s:F*Q
BSD爱好者乐园3M"Y&XO7F%~

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

;xRad5Q] aBSD爱好者乐园*k0\5^b(@


a/K g%a8zk图 3. 在参数后追加数字 1
T5O.go? h_:@cBSD爱好者乐园v!~)?&s-IB3A1u

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

H `a&kMs]!eBSD爱好者乐园+z6xdM'R

sh-3.00# passwdBSD爱好者乐园rQq S)}-@4YVH
New UNIX password:BSD爱好者乐园|2^Q/N7n
Retype new UNIX password:BSD爱好者乐园hsHOU
passwd: all authentication tokens updated successfully

8VQI7}M

P+V9K4Jq#t现在可以重启了,机器将使用新密码启动。BSD爱好者乐园BF.mCEHR

BSD爱好者乐园.v&D.]#[r q,EnL

技巧 5:SSH 后门BSD爱好者乐园4l e"X}IoKb0@

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

#bYoc.p e!|

/F"P+j(v$Ni(`8{9e从本意讲,这称为 “在防火墙上砸一个洞”。我称之为SSH 后门。为了使用它,必须有一台作为中介的连接到 Internet 的机器。

N+j)T7C-W7z1@ EBSD爱好者乐园S,Ycz2t(?4B%l

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

I:w?1ki3]P` K8_i0iBSD爱好者乐园%i$oz o5RnS%nF
图 4. 在防火墙上砸一个洞BSD爱好者乐园 `!b#H ?(wf4E%i
BSD爱好者乐园(S%~#^:U8vTom)O

BSD爱好者乐园'Q"l4q7L [/mX8@6Om

以下是操作步骤:BSD爱好者乐园x|*oqr2{ X

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

    "~8Y0`i"d)M2{Bv3}6N+S
  2. 使用-R标记通过 SSH 从 ginger 连接到 blackbox.example.com。假设您是 ginger 上的根用户,tech 需要根用户 ID 来帮助使用系统。使用-R标记将 blackbox 上端口 2222 的说明转发到 ginger 的端口 22 上。这就设置了 SSH 通道。注意,只有 SSH 通信可以进入 ginger:您不会将 ginger 放在无保护的 Internet 上。BSD爱好者乐园(SA7h1GD%NH O

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

    2g!a]0^(hBSD爱好者乐园O9V'E0v}n'x

    ~# ssh -R 2222:localhost:22 thedude@blackbox.example.comBSD爱好者乐园9LM+L[)B U}Q

    BSD爱好者乐园1_8JPYLl wC#x

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

    #s mi'}E0rLBSD爱好者乐园/j^ J I9zG'V

    thedude@blackbox:~$ while [ 1 ]; do date; sleep 300; doneBSD爱好者乐园6Frj1jP-q.LBAS't%Y C

    &`#b\?4]aE使机器保持忙碌状态。然后最小化窗口。BSD爱好者乐园*haY|T `

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

    )UD&K9R)?-TD{root@tech:~# ssh thedude@blackbox.example.com.

    `*h'_m+h
  4. tech 位于 blackbox 上后,可以使用以下命令从 SSH 连接到 ginger:

    IWEE;[;[?5h7Ythedude@blackbox:~$: ssh -p 2222 root@localhostBSD爱好者乐园2|K$S \j

  5. Tech 将提示输入密码。应该输入 ginger 的根密码。
    4?!E*t|!^5_
    6}*jLQ'v6`']
  6. 现在您和来自 tech 的支持可以一起工作并解决问题。甚至需要一起使用屏幕!(参见技巧 4)。
BSD爱好者乐园1H#U%J+dU/U$^{Nq-D

技巧 6:通过 SSH 通道进行远程 VNC 会话BSD爱好者乐园fr&EQwBx.quJZ

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

:G(Z/c ^Q'xjnO3xBSD爱好者乐园2d{9](R(t

例如,假设在技巧 5中,ginger 是一台存储服务器。许多设备都使用 GUI 程序来管理存储控制器。这些 GUI 管理工具通常需要通过一个网络直接连接到存储服务器,而这个网络有时保存在专用的子网络中。因此,只能通过 ginger 访问这个 GUI。BSD爱好者乐园}/^o%M`Y!S(S#LL

BSD爱好者乐园6L/] l QH8^PUY

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

%? V]`2`4R假设设置与技巧 5 中的一样,但希望 tech 能访问 VNC 而不是 SSH。对于这种情况,需要进行一些类似的操作,不过转发的是 VNC 端口。执行以下操作步骤:BSD爱好者乐园R3F9f!G6v6c.y}1V1H

  1. 在 ginger 上启动一个 VNC 服务器会话。运行以下命令:BSD爱好者乐园3p4hF/{6Z;E+wv3jw[

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

    St-Wr"a,~$AWYABSD爱好者乐园 G$fBU Z3nk

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

    9xq#n,_9{&MsI|$OfBSD爱好者乐园g#JHsh&a

    启动该会话时,要求您指定密码。用户 ID 与启动 VNC 服务器时的用户相同(本例中就是根用户)。BSD爱好者乐园^y7zi Iw7D2OB

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

    icBQB"rX Soroot@ginger:~# ssh -R 5999:localhost:5999 thedude@blackbox.example.com

    :qUO;l(U&x,jEXBSD爱好者乐园KP-P(}'~ T.z

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

    BSD爱好者乐园$hUbn8w[

    thedude@blackbox:~$ vncviewer localhost:99BSD爱好者乐园/Tg5js+[*]6{

    BSD爱好者乐园Q9J+y$~/g

    这将通过 SSH 将端口转发给 ginger,但我们希望通过 tech 让 VNC 访问 ginger。为此,需要另一个通道。BSD爱好者乐园x j@%l UBV-T

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

    tI6av|(C:c??root@tech:~# ssh -L 5999:localhost:5999 thedude@blackbox.example.comBSD爱好者乐园:aIA`8K5JR'ch

    BSD爱好者乐园]*w:x-Xe6X(pN

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

    U3Wn\;c}
  4. 在 tech 中,运行以下命令使 VNC 连接到 ginger:BSD爱好者乐园5|T%g0~/Yv.a

    root@tech:~# vncviewer localhost:99.BSD爱好者乐园fio _ Z!f

    BSD爱好者乐园+GO]0i W8f tQV

    Tech 现在将拥有一个直接到 ginger 的 VNC 会话。BSD爱好者乐园}DWs+k|6Q1|

F;jA(Nd+vB2hM0T设置虽然有点麻烦,但比为修复存储阵列而四处奔波强多了。不过多实践几次这就变得容易了。BSD爱好者乐园3k:m Li@ _3O;m

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

BSD爱好者乐园*zZ9jo |$rI#B


W8VOE%v图 5. Putty 可以转发用作通道的 SSH
["?6}4I:P y2@OBSD爱好者乐园rJ;\?-s6eB

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

:Pl |"HxE#I]BSD爱好者乐园x'S E-O\a

技巧 7:检查带宽

4\5BA,^-E_NfBSD爱好者乐园/_hg/mUe0m{

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

? d H+N9B.aB P

A$g*e1y|~@M实现此操作的最常用和最便宜的方式是将两个吉比特以太网 NIC 组合在一起。这是最便宜的,因为您通常会有一个额外的可用 NIC 和一个额外的端口。BSD爱好者乐园xAc,y0V

!^'In"|%o&y所以采取此这个方法。不过现在的问题是:到底需要多少带宽?

2^Z~ X3b|9x(S%N qBSD爱好者乐园 uU:B{dV7lFq,{[

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

/JNX%N&v*hY{)K`BSD爱好者乐园`s [ Y+WQq#[,}2G

1Gb = 1024Mb1024Mb/8 = 128MB;"b" = "bits,"、"B" = "bytes"BSD爱好者乐园O.| F0nAdY&p

BSD爱好者乐园OkI"` i?V1^(B

但实际看到的是什么呢,有什么好的测量方法呢?我推荐一个工具 iperf。可以按照以下方法获得 iperf:BSD爱好者乐园c^-dk,o F

@d{K C^gC# wget http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gzBSD爱好者乐园B2TY\O1XXB

BSD爱好者乐园 ]-].ok+\ _u'O,@"w

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

/}C!sWw0rlT*F |BSD爱好者乐园3V [l k9G tj

tar zxvf iperf*gzBSD爱好者乐园aw| y:lL
cd iperf-2.0.2
qO*R!uU-mF3C+lM./configure -prefix=/home/bob/perfBSD爱好者乐园j~{.QPI,i:H
makeBSD爱好者乐园4f&H,B7y V
make install

2T4Tx'w-~3Vc

H] R_2r6C9qBFm在 ginger 上,运行:BSD爱好者乐园A WD(]0C

,z&`[i3wO%g# /home/bob/perf/bin/iperf -s -f MBSD爱好者乐园2u*U,j(tC&d }.e {~

BSD爱好者乐园u'm1C7Lz e

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

"D? |$E2Td)|BSD爱好者乐园1VK:h2\D]"|k

在 beckham 节点上,运行:

5P*vU^;B-XdK\ vk

${X MV3jq\# /home/bob/perf/bin/iperf -c ginger -P 4 -f M -w 256k -t 60BSD爱好者乐园.\%t`*H7K

BSD爱好者乐园|`,I9f v

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

8s@X7Z&l!`BSD爱好者乐园&B_ L4^7U H,KlbEg

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

wh ? CW

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

hc&QW,{Y6h'W

\(@Q3c1O6^j/~技巧 8:命令行脚本和实用程序

#`D l2yOA_7lBSD爱好者乐园 W f2XfG x-Z"k

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

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

(yj/e+R@xa6I!t@

G1f*b0l#db# P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);BSD爱好者乐园n5Z?k8D:^
done >>/etc/hosts

8z2b?{ Ss1{4?

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

BSD爱好者乐园,o2D x){hR1woM

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

g4Bfz3}4j,TBSD爱好者乐园TR$~(AKug

假设 SSH 设置为不使用密码验证。然后运行:BSD爱好者乐园7[ _oCl

BSD爱好者乐园r5KKZ"\w3j

# for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';BSD爱好者乐园|.i])Vk(M'X
done | sort | uniq
BSD爱好者乐园OU3F*kHo

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

j V4Pf*H;R jBSD爱好者乐园P.kO)Tgp.x,E$t1t

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

BSD爱好者乐园 \H U;HL(k

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

n8mMqTBSD爱好者乐园%\0o0a%AkT

这个命令的意思是:

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

2Ri.w8I"Mo1`在每个节点上执行这个操作。

|#[!ld4E0kWC9n-^BSD爱好者乐园Gh2T*d ?l%^6n+Y

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

:j.aa+WA/G+K0rk9}+J最后,使用uniq命令消除重复项。这个命令会导致以下情况中的一种:BSD爱好者乐园3T)y6?2Hii5c9[$z

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

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

F/n BFwP)l$y_这个技巧提供了一种查看某些内容的快速方式,而且如果发生错误,您可以立刻知道。其价值在于快速检查。BSD爱好者乐园X z2nY3r

-jKl2^!|CSl!|技巧 9:控制台侦察

g \ju5f3J-N/KC

ds(Z$x){Ep有些软件会向控制台输出错误消息,而控制台不一定会显示在 SHH 会话中。使用 vcs 设备可以进行检查。在 SSH 会话中,在远程服务器# cat /dev/vcs1上运行以下命令。这将显示第一个控制台中的内容。也可以使用 2、3 等查看其他虚拟终端。如果某个用户在远程系统上输入,您将看到他输入的内容。BSD爱好者乐园&O#zj7~A(Oop6{M7I

BSD爱好者乐园)O8RR9@ku'yA

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

BSD爱好者乐园o_{.Y(T,Q,r


+Rp FT aZ,l,S技巧 10:随机系统信息收集

] bB!]'K M2}!MBSD爱好者乐园TP&O^ z G

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

.v'q#??s])H

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

,`[(NV.^%hP:l"rBSD爱好者乐园4e;S8WL'X~J

# cat /proc/cpuinfoBSD爱好者乐园1{ W*{%j7l+S/z6O

BSD爱好者乐园H1r5u"b#y`VC

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

5]|`:Z9[!UX$UT*@PBSD爱好者乐园8G{$~~#@p

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

i Q"i6N:Z1gBSD爱好者乐园V7qiV t8RI%q!v

# cat /proc/cpuinfo | grep processor | wc -lBSD爱好者乐园0@-M"_ D2U}\

qW7{/v0mJ"`Wd6z4]3m"v然后我看到值应该是 8。如果不是,我会打电话给供应商,让他们给我派送另一台处理器。

ieHO){

%n2U+uuO7rA'U4f&B.c&]我需要的另一条信息是磁盘信息。可以使用df命令获得。我总是添加-h标记,以便看到以十亿字节或兆字节为单位的输出。# df -h还会显示磁盘的分区情况。BSD爱好者乐园U e7a6\r@

3b j Ya'V.X9s1p |"} p列表最后是查看系统固件的方式 —— 一个获取 BIOS 级别和 NIC 上的固件信息的方法。

o8nfI0G2^JuBSD爱好者乐园M x$E X ~ A'? Y

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

N^~J,T1[#dmidecode | lessBSD爱好者乐园&tJREs i,T9j
...
#l_*f:Oj.E%v PBIOS InformationBSD爱好者乐园 Us2fd vr
Vendor: LENOVOBSD爱好者乐园%A @ G/E2^.E
Version: 7LET52WW (1.22 )
yc#}!b h5P7bRelease Date: 08/27/2007BSD爱好者乐园B{n"m?-xq
...
BSD爱好者乐园a{)y qI&c7DO

([HGnX9Z这比重启机器并查看 POST 输出有效得多。BSD爱好者乐园q X}/u?$s+R

BSD爱好者乐园J L)jNlZ%\D

要检查以太网适配器的驱动程序和固件版本,请运行ethtoolBSD爱好者乐园FL ])n Dh%dw"{!^

BSD爱好者乐园l@dEo+Du5wW

# ethtool -i eth0
A.tiTc7Gu)adriver: e1000
y XIAp [4B0|version: 7.3.20-k2-NAPI
2}r:rE'j`7W'{firmware-version: 0.3-0

w9wN}g+?Vm-V

z1sW#_#UYRz结束语

7i3]A3z"N:\BSD爱好者乐园\7^K6I"@8P)T1_w

可以从精通命令行的人那里学习很多技巧。最好的学习方式是:BSD爱好者乐园{"E*w#k'E4`4j)H

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

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

BSD爱好者乐园%? l&WVl$Z:lA

参考资料BSD爱好者乐园-N0U.KG:A0l,b

$CTHk]0e!Q2a"T学习BSD爱好者乐园7k i:`8Z }|n

Y!u8n%q$e8hlb

`8i8Hm RRBSD爱好者乐园aj-p/B2} b'Qc
获得产品和技术
AHW,^zWU:BBSD爱好者乐园Fl9Y5xR'@)h

  • 订购 SEK for Linux,共包含两张 DVD,其中有用于 Linux 的最新 IBM 试用软件,包括 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere®。
    "`:v'Y^/s%^LBSD爱好者乐园,^4ng5igBj
  • 使用可直接从 developerWorks 下载IBM 试用软件构建您的下一个 Linux 开发项目。
    $_ba8Kiav"e.Ei2wBSD爱好者乐园 h`A,M o$?d6s
BSD爱好者乐园S@#z2}D:R3[


3} Y"CjaK,d&M讨论
8e.W:_ h\*T)_

3k`Q+D3[ WC[BSD爱好者乐园1z1|*Y)nm@;W9d+x

BSD爱好者乐园6kO1O4o8u-z-z1]T

#E+m)m4t [$h'zSu$]w8R 

st0]e ?6inBSD爱好者乐园$R2w O fe

关于作者

Y!H(wba5W{

^` SZ:I Y3u ys

"Shn;Ll

Z'{}:p9VV}'f9@ef)B

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

qSK9|e@-e
BSD爱好者乐园3e.e~zmX


[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: shell
 

评分:0

我来说两句

seccode