Shell是系统管理员跟Linux系统打交道的主要途径。大部分的管理任务都是通过shell工具来完成的。有时候,要看一个系统管理员是否精通Linux操作系统的管理,只需要看看他shell操作的熟练程度就可以来判断。Shell工具虽然是一个命令行的窗口,对于部分系统管理员来说操作起来可能比较麻烦一点。但是这个工具提供了很多帮助管理员来进行系统维护的手段。合理使用这些手段,会让Shell工具更加的便捷,更加具有人性化。
一、定义别名让命令更加的简捷。
Linux系统在设计的时候,崇尚的是简单即美的设计理念。如在shell中的各种命令,基本上都只是完成一些特定的简单功能。如ls命令只是列出名录与文件的名字。这跟Windows操作系统的Dos命令不同。DOS命令往往是一个命令加上参数可以实现一些很复杂的功能。虽然在Linux操作系统的shell命令中也可以带上参数,但是仍然要比DOS命令简单的多。所以在Linux操作系统的shell命令就要比Dos命令多的多。这有利于用户了解这些命令的用途,而且通过命令的组合可以实现一些复杂的功能。所以命令的使用更加灵活。但是要实现一个功能,要采用多个命令的组合,在书写的时候就会比较麻烦。
如现在在一个图片目录下存放着很多产品的图片。现在用户想将这些产品图片的详细信息,如产品的名字、最近更新时间、文件大小等等信息保存到一个文件中。或者说,湘江操作系统中所有的图片文件都找出来,并以列表的形式将图片的名称保存到文本文件中。此时该如何处理呢?要实现这个需求的话,光用一个命令无法实现,而需要使用几个命令的组合。如通过ls *.jpg –l >list.txt命令可以查询处当前目录下所有JPG图片的信息,并将这个文件的详细信息保存到一个文本文件中。
如果经常需要用到这个功能的话,那么每次书写的时候都会非常的麻烦。这个命令还算简单的。有时候为了实现某些特定的复杂功能,可能需要十多个命令组合来完成。此时组合后的命令就会非常的长。如果每次都输入的话,不仅准确率不高,而且也浪费时间。为了解决这个问题,在操作系统中设计了一个别名的功能。简单的说,就是将用户组合的命令保存到系统中,然后给这个组合命令取一个新的命令。以后系统管理员只需要输入这个别名就可以调用自己所创建的组合命令。
在Linux操作系统中定义别名是很简单的一件事情,主要是通过alias关键字来完成。其格式为alias 别名=’组合命令’。如alias ljpg=’ls *.jpg -l>sh1.txt’这就定义了一个别名。主要实现的功能就是查询当前目录下所有的JPG文件并将详细的信息保存到一个文本文件中。如此定义之后,下次系统管理员还需要这个功能的话,则可以直接执行ljpg命令,就可以调用后面一长串的命令了。通常情况下一些有经验的系统管理员往往会将自己常用的命令组合定义成别名,以方便其后续的调用。如此的话,就不用每次都重复输入一长串代码了。这也是提高组合命令重复利用率的一种有效手段。
二、查询现有的别名并取消别名。
其实安装完操作系统后,系统已经预先定义好了一些比较常用的别名。操作系统版本的不同,这个预定义别名的数量也有所不同。如下图所示,如果要查看系统中现有的可用别名,则只需要在命令行窗口下,输入alias命令即可。此时系统会列出所有可用的别名。从图中可以看出,除了我们刚才定义的别名外,还有系统定义的一些别名。
不过如果用户退出系统再重新登录时,会发现一个奇怪的问题。就是上次定义的别名都会丢失。这主要是默认情况下,在这个命令行中定义的别名是暂时性的,只在当前有效。当用户退出操作系统之后,这些定义的别名会自动消失。显然如果每次登录操作系统后都需要定义别名,那显然会很麻烦。所以为了让管理员定义的别名永远的有效,就需要在另外一个地方来定义别名。通常情况下,在用户的主目录下面有一个.bashrc的文件。在这个文件中可以加入一些别名的信息。其格式跟命令行的格式相同,也是alias 别名=’组合命令’。不过需要注意的是,一行只能够定义一个别名。如果需要定义多个的话,则就要分多行来写。在这个文件中定义的别名,只对当前的用户有效。如在用户sa01下定义了这些别名,那么只有以sa01用户登录系统才可以使用这些别名。如果以其他的帐户,如sa02登录时这些别名的定义就不可用了。这主要的目的是为了给用户一个相对独立的、干净的工作环境。如现在企业中有一台Linux服务器。这台服务器上面分别部署由邮件服务与数据库服务。为此系统管理员可能需要设置两个帐户,如分别为mailma与basema。而分别有两个员工来负责。此时这两个员工可能有自己的工作习惯,需要定义自己的别名。此时就可以在各自目录下的.bashrc文件中定义别名。两个用户的别名相互之间不会产生干扰。所以说这种特性也是Linux多用户操作系统的体现。
如果这些不同的应用都是有系统管理员来维护。只是为了各个应用程序不相互干扰,才为其设置不同的帐户来进行管理。此时系统管理员就希望别名能够对所以的用户都有效。如此的话,管理员就不需要为每个用户去单独设置相同的别名了。此时就需要在/etc/profile.d目录下进行设置。如在红帽子Linux操作系统中,在这个目录下有两个文件,分别为colorls.sh和which-2.sh。如果在这两个文件中定义别名的话,那么对操作系统中的所有用户都是有效的。系统管理管理员可以直接使用vi等命令来修改这两个文件。不过需要注意的是,这两个文件有优先性之分。通常情况下系统会先读取colorls.sh这个配置文件,然后再读取另外一个。
如果第一个文件中没有设置别名,而第二个配置文件中设置了的话,那么这个别名也是有效的。也就是说只需要在一个文件中设置即可。但是如果管理员不小心,在两个地方都设置了,此时该如何处理?如某个系统管理员可能是中途接手来做企业的系统管理员。如果以前的系统管理员喜欢在colorls.sh这个文件中进行设置,而现在这个系统管理员喜欢在which-2.sh这个文件中进行设置。如果现在的系统管理员设置别名的时候,与原先的系统管理员设置的别名发生了冲突。即别名相同,但是实现的功能不同。此时系统会如何处理呢?根据系统的处理规则,如果两个文件定义中的别名有冲突的话,则会以后者为准,即以which-2.sh文件定义中的别名为准。为此如果读者是中途接手来担任企业的系统管理员,在定义别名的时候,就需要注意会不会发生别名冲突的情况。或者说,干脆就在which-2.sh这个文件中设置别名。因为这个文件的别名定义具有优先性。即使别名存在冲突,也会以系统管理员此时设置的为准。为此系统管理员需要了解各个别名配置文件的优先性,并合理加以利用。特别需要提醒的是,如果一个操作系统有多个员工进行维护的话,那么最好在自己的帐户下设置别名,防止对其他用户产生干扰。
最后笔者要提醒各位读者的是,这几个配置文件中除了定义别名外,还包含其它的一些启动配置信息。为此在这几个文件中定义别名之前最好先对这些文件进行备份。如果不小心修改了不应该修改的内容,则会影响系统的稳定性。修改之前花点时间先进行备份,如此即使文件被你损坏掉了,也有弥补的机会。另外有经验的系统管理员往往会将这些别名带着走。即他们即使跳槽到其它公司去做系统管理员,也用得着这些别名。为此系统管理员如果将别名的定义文件放在邮箱中或者其他的移动存储设备。那么即使在一个新环境中也可以通过复制粘贴来迅速定义自己熟悉的别名。而不用再重头再来,一个个的重新定义。
当然在shell中,类似的工具还有很多,如历史命令、命令补全等等,都可以提高这个工具的便捷性。各位读者有机会的话,可以自己去尝试一下,相信不会让大家失望。