提高效率! Linux 管理员必用的10个关键技巧

好的系统管理员区分在效率上。若是一位高效的系统管理员能在 10 分钟内完成一件他人须要 2 个小时才能完成的任务,那么他应该受到奖励(获得更多报酬),由于他为公司节约了时间,而时间就是金钱。如下这些技巧能够节约时间 —— 即便没有由于高效而获得更多的报酬,但至少能够有更多的自由支配时间。正则表达式

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

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

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

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 busyless

在释放该设备以前,让咱们找出谁在使用它ssh

fuser /media/cdrom

进程正在运行,没法弹出磁盘实际上是咱们的错误。如今,若是您是根用户,能够随意终止进程:编辑器

fuser -k /media/cdrom

如今终于能够卸载驱动器了:ide

eject

fuser 很正常。

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

尝试如下操做:

cat /bin/cat

注意!终端就想垃圾同样。输入的全部内容很是零乱。那么该怎么作呢?

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

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

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 屏幕

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

图 2:准备编辑内核行

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

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

而后按 Enter 和 B,内核会启动到单用户模式。而后运行 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. 在防火墙上砸一个洞

如下是操做步骤:

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

使用 -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

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

如今指示 tech 上的朋友使用 SSH 链接到 blackbox,而不须要使用任何特殊的 SSH 标记。但必须把密码给他们:

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

tech 位于 blackbox 上后,可使用如下命令从 SSH 链接到 ginger:

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

Tech 将提示输入密码。应该输入 ginger 的根密码。如今您和来自 tech 的支持能够一块儿工做并解决问题。甚至须要一块儿使用屏幕!(参见 技巧 4)。

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

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

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

能够尝试使用 -X 选项经过 SSH 链接到 ginger 并启动它,但这对带宽要求很高,您须要忍受等待的痛苦。VNC 是一个网络友好的工具,几乎适用于全部操做系统。

假设设置与技巧 5 中的同样,但但愿 tech 能访问 VNC 而不是 SSH。对于这种状况,须要进行一些相似的操做,不过转发的是 VNC 端口。执行如下操做步骤:

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

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

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

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

从 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。为此,须要另外一个通道。在 tech 中,打开一个通道,经过 SHH 将端口 5999 转发到 blackbox 上的端口 5999。这经过运行如下命令完成:

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

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

在 tech 中,运行如下命令使 VNC 链接到 ginger:

root@tech:~# vncviewer localhost:99

Tech 如今将拥有一个直接到 ginger 的 VNC 会话。设置虽然有点麻烦,但比为修复存储阵列而四处奔波强多了。不过多实践几回这就变得容易了。

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

图 5. Putty 能够转发用做通道的 SSH

若是进行了此设置,那么 tech 就可使用 VNC 链接到 localhost:2,如同 tech 正在 Linux 操做系统上运行同样。

技巧 7:检查带宽

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

实现此操做的最经常使用和最便宜的方式是将两个吉比特以太网 NIC 组合在一块儿。这是最便宜的,由于您一般会有一个额外的可用 NIC 和一个额外的端口。

因此采起此这个方法。不过如今的问题是:到底须要多少带宽?

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

1Gb = 1024Mb;1024Mb/8 = 128MB;”b” = “bits,”、”B” = “bytes”

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

wget http://dast.nlanr.net/Project...

须要在 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 系统管理员经过使用权威的命令行脚本会变得更高效。这包括巧妙使用循环和知道如何使用 awk、grep 和 sed 等的实用程序解析数据。一般这能够减小击键次数,下降用户出错率。

例如,假设须要为即将安装的 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 上运行如下命令。这将显示第一个控制台中的内容。也可使用 二、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 进行网络编程。

三、解决问题。做为系统管理员,老是要解决问题,无论是您仍是其余人引发的问题。这就是经验,经验可使您更优秀、更高效。

最好的管理员比较清闲,由于他们能找到完成任务的最快方法,而且能快速完成任务,从而保持休闲的生活。(来源:ibm.com)

相关文章
相关标签/搜索