当前位置: 首页 > 科技观察

高效Linux管理员的10项关键技能

时间:2023-03-21 13:58:21 科技观察

优秀的系统管理员在效率上脱颖而出。如果一个高效的系统管理员可以在10分钟内完成其他人需要2小时的任务,他应该得到奖励(获得更多报酬),因为他为公司节省了时间,而时间就是金钱。这里有一些节省时间的技巧——即使不能因为提高工作效率而获得更多报酬,至少给你更多的自由支配时间。提示1:弹出无响应的DVD驱动器新手网络体验:当我按下服务器(运行基于Redmond的操作系统)DVD驱动器上的弹出按钮时,它会立即弹出。然后他抱怨说,在大多数企业Linux服务器中,如果您在该目录中运行进程,则不会出现弹出窗口。作为长期的Linux管理员,我会重启机器。如果我不知道正在运行什么以及为什么DVD驱动器没有释放,我只是弹出磁盘。但这是非常低效的。以下是找出DVD驱动器上有什么东西并轻松弹出它的方法:首先模拟它。将磁盘放入DVD驱动器,打开终端,安装DVD驱动器:#mount/media/cdrom#cd/media/cdrom#while[1];doecho"Allyourdrivesarebelongtous!";sleep30;done现在打开第二个终端并完成尝试弹出DVD驱动器:#eject会得到以下消息:umount:/media/cdrom:deviceisbusy在释放设备之前,让我们找出谁在使用它#fuser/media/cdrom进程正在运行,无法弹出磁盘是实际上是我们的错误。现在,如果您是root,您可以随意终止进程:#fuser-k/media/cdrom现在终于可以卸载驱动器了:#ejectfuser工作正常。技巧2:恢复有问题的屏幕试试这个:#cat/bin/cat注意!终端就像垃圾。输入的所有内容都非常混乱。那么该怎么办?键入重置。但是,键入reset与键入reboot或shutdown太接近了。手心出汗——尤其是当你在生产机器上做这件事的时候。请放心,机器不会在执行此操作时重新启动。继续:#reset现在屏幕恢复正常。这比关闭窗口并重新登录要好得多,特别是如果你必须经过5台机器和SSH才能到达这台机器。技巧3:屏幕上的协作产品工程部的高级维护用户David打电话说“为什么我不能在您要部署到的这些新机器上编译supercode.c”。你问他,“你在运行什么机器?”大卫回答说,“豪华”。(虚构的公司将其五台生产服务器命名为纪念辣妹)。现在你可以展示你的技能了,另一台机器由David操作:#su-david转到posh:#sshposh到达后,运行以下代码:#screen-Sfoo然后调用David:“David,在终端中运行命令#屏幕-xfoo”。此时,您与David的会话已加入Linuxshell。你可以打字,他也可以,但每个人都可以看到对方在做什么。这样就避免了去其他层,双方控制权相等。这样做的好处是David可以观察到您的故障排除技巧,并确切地知道如何解决问题。最后,每个人都可以看到问题所在:David的编译脚本硬编码了一个不在这个新服务器上的旧目录。加载并再次编译解决了问题,David继续工作。您可以继续之前的娱乐活动。关于此技术需要注意的一件事是双方需要以同一用户身份登录。screen命令还可以:实现多窗口和分屏。请阅读手册页以获取更多信息。对于屏幕会话,我还有最后一招。要与其分离并保持打开状态,请键入Ctrl-AD(即按住Ctrl键并按A键。然后按D键)。然后可以通过再次运行screen-xfoo命令将其重新拼接在一起。技巧4:恢复您的root密码如果您忘记了root密码,您将不得不重新安装整个机器。更糟糕的是,很多人都这样做。但是启动机器和更改密码非常简单。这并非在所有情况下都有效(例如设置GRUB密码但又忘记了它),但这里有一个CentOSLinux示例,说明了一般情况下该怎么做。首先重启系统。重新启动后,将弹出图1所示的GRUB屏幕。移动箭头键,以便您停留在该屏幕上,而不是进入正常启动。图1.重新引导后的GRUB屏幕然后,使用箭头键选择要引导的内核,然后输入E编辑内核行。然后您应该看到图2所示的屏幕:图2:准备编辑内核行再次使用箭头键突出显示以内核开头的行,然后按E编辑内核参数。当您到达图3所示的屏幕时,只需将数字1附加到图3所示的参数:图3.将数字1附加到参数并按Enter和B,内核将启动到单用户模式。然后运行??passwd命令更改用户root密码:sh-3.00#passwdNewUNIXpassword:RetypenewUNIXpassword:passwd:allauthenticationtokensupdatedsuccessfully您现在可以重新启动,机器将使用新密码启动。提示5:SSH后门出现过很多次,我所在的站点需要远程支持,但被公司的防火墙阻止了。很少有人意识到,如果能通过防火墙到达外面,就可以很容易地让外面的信息进来。从字面上看,这就是所谓的“在防火墙上打个洞”。我称之为SSH后门。为了使用它,必须有一台连接到互联网的中介机器。在本例中,将这样的机器称为blackbox.example.com。公司防火墙后面的机器称为生姜。这种技术支持的机器称为技术。图4解释了设置过程。图4.在防火墙上打一个洞方法如下:检查允许的内容,但要确保您问的是正确的人。大多数人担心您打开了防火墙,但他们不了解它是完全加密的。此外,必须入侵外部机器才能进入公司内部。但是,您可能是“可以做”的类型之一。你应该选择你自己判断的方式,但不要在你不满意的时候抱怨别人。使用-R标志从ginger通过SSH连接到blackbox.example.com。假设你是rootonginger,tech需要一个rootID来帮助使用系统。使用-R标志将黑盒上的端口2222上的指令转发到姜上的端口22。这将设置SSH隧道。请注意,只有SSH流量可以进入ginger:您不会将ginger放在未受保护的Internet上。这可以使用以下语法实现:~#ssh-R2222:localhost:22thedude@blackbox.example.com一旦你进入黑盒,只需保持登录状态。我总是输入以下命令:thedude@blackbox:~$while[1];dodate;sleep300;done以保持机器忙碌。然后最小化窗口。现在指导你的技术朋友使用SSH连接到黑盒,而不使用任何特殊的SSH标志。但是必须给他们密码:root@tech:~#sshthedude@blackbox.example.com一旦tech在blackbox上,你可以通过SSH连接到ginger:thedude@blackbox:~$:ssh-p2222root@localhostTechwill提示输入密码。应输入ginger的root密码。现在您和技术支持人员可以一起工作并解决问题。您甚至需要一起使用屏幕!(见提示4)。技巧6:通过SSH隧道的远程VNC会话VNC,或虚拟网络计算,已经存在了很长时间。通常,只有当远程服务器上的某种图形程序只能在本服务器上使用时,我才需要VNC。例如,假设ginger是技巧5中的存储服务器。许多设备使用GUI程序来管理存储控制器。这些GUI管理工具通常需要通过网络直接连接到存储服务器,有时存储服务器位于专用子网上。因此,这个GUI只能通过ginger访问。您可以尝试使用-X选项通过SSH连接到ginger并启动它,但这会占用大量带宽,您将不得不等待。VNC是一种网络友好型工具,几乎可以在任何操作系统上运行。假定与技巧5中的设置相同,但希望技术人员能够访问VNC而不是SSH。对于这种情况,需要做类似的事情,但转发VNC端口。执行以下步骤:在ginger上启动VNC服务器会话。运行以下命令:root@ginger:~#vncserver-geometry1024x768-depth24:99这些选项指示以1024x768的分辨率和每像素24位的像素深度启动服务器。如果使用较慢的连接设置,8可能是更好的选择。使用:99指定可访问VNC服务器的端口。VNC协议从5900开始,所以:99表示可以从端口5999访问服务器。启动此会话时,系统会要求您指定密码。用户ID与启动VNC服务器的用户(在本例中为root)相同。从ginger到blackbox.example.com的SSH将blackbox上的端口5999转发到ginger。这是通过运行以下命令在ginger中完成的:root@ginger:~#ssh-R5999:localhost:5999thedude@blackbox.example.com运行此命令后,您需要保持此SSH会话打开以保留转发到姜港。此时,如果您使用的是blackbox,则可以通过运行以下命令访问ginger上的VNC会话:thedude@blackbox:~$vncviewerlocalhost:99这将通过SSH将端口转发到ginger,但我们希望通过techVNC访问ginger。为此,需要另一个通道。在tech中,通过SHH打开一个通道转发端口5999到blackbox上的端口5999。这是通过运行以下命令来完成的:root@tech:~#ssh-L5999:localhost:5999thedude@blackbox.example.com这次使用SSH标志-L,而不是将5999放入黑匣子,而是从中获取它.到达黑盒后,您需要保持此会话打开。现在您可以在技术中使用VNC了!在tech中,运行以下命令以VNC连接到ginger:root@tech:~#vncviewerlocalhost:99Tech现在将直接与ginger建立VNC会话。设置起来有点麻烦,但总比四处奔波试图修复存储阵列要好。但稍加练习就会变得更容易。此技巧的一个补充:如果技术人员正在运行Windows?操作系统并且没有命令行SSH客户端,技术人员可以运行Putty。可以通过在边栏中查找选项来将Putty设置为转发SSH端口。如果此示例中的端口是5902而不是5999,您可以输入图5中所示的内容。图5.Putty可以转发SSH用作隧道如果已设置,tech可以使用VNC连接到localhost:2作为如果技术在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可以通过以下方式获得:#wgethttp://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz这个工具需要安装在一个对ginger和beckham都可见的共享文件系统上,或者在两个节点上编译并安装。我将在两个节点都可见的bob用户主目录中编译它:tarzxvfiperf*gzcdiperf-2.0.2./configure-prefix=/home/bob/perfmakemakeinstall在ginger上,运行:#/home/bob/perf/bin/iperf-s-fM这台机器将充当服务器并以MBit/s为单位输出执行速度。在beckham节点上,运行:#/home/bob/perf/bin/iperf-cginger-P4-fM-w256k-t60两个屏幕上的结果表明速度是多少。在配备千兆位适配器的普通服务器上,您可能会看到大约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;foriin$(seq-w200);doecho"192.168.99.$Pn$i";P=$(expr$P+1);done>>/etc/hosts200Hostnames(n001到n200)将从IP地址(192.168.99.1到192.168.99.200)创建。手动填充此类文件可能会创建重复的IP地址或主机名,因此这是使用内置命令行消除用户错误的一个很好的示例。请注意,这是在bashshell(大多数Linux发行版的默认设置)内完成的。再举一个例子,假设你想检查Linux集群中每个计算节点的内存大小是否相同。通常,拥有发行版或类似的shell是最好的。但为了演示,以下使用SSH。假设SSH设置为不使用密码身份验证。然后运行:#fornumin$(seq-w200);dosshn$numfree-tm|grepMem|awk'{print$2}';done|sort|uniq这个命令行很简单。(如果你把正则表达式放在那里更糟)。让我们将其分解并详细讨论每个部分。从001到200的第一个循环。使用seq命令的-w选项在前面加上零。然后替换num变量以创建一个通过SSH连接的主机。拥有目标主机后,向其发出命令。在这个例子中:free-m|grepMem|awk'{print$2}'1。这条命令的意思是:使用free命令获取内存大小,单位是兆字节。2.获取此命令的结果并使用grep获取包含字符串Mem的行。3.在那一行中使用awk输出第二个字段,即节点中的总内存,并在每个节点上执行此操作。在每个节点上执行命令后,200个节点的全部输出将通过管道(|d)传输到排序命令以对所有内存值进行排序。最后,使用uniq命令消除重复项。此命令将导致以下情况之一:1.如果所有节点(n001到n200)的内存大小相同,则只会显示一个数字。这个数字是每个操作系统看到的内存量。2.如果节点内存大小不同,您将看到多个内存大小值。3.最后,如果SSH在节点上失败,您将看到一些错误消息。此命令并非完美无缺。如果看到与预期不同的内存值,则不知道是哪个节点出了问题,也不知道有多少个节点。为此需要发出另一个命令。这个技巧提供了一种快速查看某些内容的方法,如果出现问题,您会立即知道。它的价值是快速检查。技巧9:控制台侦察有些软件会向控制台输出错误消息,这些错误消息不一定会出现在SHH会话中。可以使用vcs设备进行检查。在SSH会话中,在远程服务器上运行以下命令#cat/dev/vcs1。这将显示第一个控制台中的内容。也可以使用2、3等查看其他虚拟终端。如果用户在远程系统上键入,您将看到他键入的内容。在大多数数据场中,使用远程终端服务器、KVM甚至SerialOverLAN是查看此类信息的最佳方式;它还提供带外查看功能的一些好处。使用vcs设备提供了一种快速的带内方法,可以节省在机房查看控制台的时间。技巧10:收集随机系统信息在技巧8中,展示了一个使用命令行获取系统总内存信息的示例。在本技巧中,我将介绍一些其他方法,用于从需要验证、排除故障或提供远程支持的系统中收集重要信息。首先,收集有关处理器的信息。这可以使用以下命令轻松完成:#cat/proc/cpuinfo此命令提供有关速度、处理器数量和类型的信息。在许多情况下,grep可用于获取所需的值。我经常做的一项检查是确定系统中处理器的数量。因此,如果我购买了带有双核处理器的四核服务器,我可以运行命令:#cat/proc/cpuinfo|grepprocessor|wc-l我看到值应该是8。如果不是,我会打电话给供应商并让他们给我发送另一个处理器。我需要的另一条信息是磁盘信息。可以使用df命令获取。我总是添加-h标志以查看以千兆字节或兆字节为单位的输出。#df-h也会显示磁盘的分区状态。最后一项是查看系统固件的方法——一种在BIOS级别和NIC上获取有关固件信息的方法。要检查BIOS版本,您可以运行dmidecode命令。不幸的是,信息不能轻易地被grep,所以这不是一个非常有效的方法。对于我的LenovoT61笔记本电脑,输出如下:#dmidecode|less...BIOSInformationVendor:LENOVOVersion:7LET52WW(1.22)ReleaseDate:08/27/2007...这比重新启动机器并查看POST输出。要检查以太网适配器的驱动程序和固件版本,请运行ethtool:#ethtool-ieth0driver:e1000version:7.3.20-k2-NAPIfirmware-version:0.3-0结论可以从精通的人那里学到很多技巧在命令行中。最好的学习方法是:1.与他人合作。共享屏幕会话并观察其他人的工作方式——您会发现新的做事方式。让别人指导你可能需要一点谦逊,但通常有很多东西要学。2.阅读手册页。仔细阅读手册页,即使是众所周知的命令,也可以产生更深刻的见解。例如,您可能不知道可以使用awk进行网络编程。3.解决问题。作为系统管理员,它总是与解决问题有关,无论是您还是其他人造成的。这就是经验,经验可以让你做得更好,更有效率。最好的管理员是悠闲的,因为他们找到了完成工作的最快方法并迅速完成,这样他们就可以保持悠闲的生活。