Linux中学会灵活使用shell下的特殊字符
众所周知,shell是Linux操作系统下的主要管理工具。系统管理员除了要掌握shell下的命令外,还需要掌握一些特殊的字符。这些特殊字符可以帮助系统管理员将多个命令组合成一个命令,或者说可以让系统管理员更便捷的操作。笔者就给大家介绍一下这些特殊字符以及相关的应用。
一、快速在目录之间切换。
在Linux操作系统的文本模式下,在目录之间进行切换都需要通过命令来完成。显然这没有图形化界面下使用鼠标点点那么方便。但是,shell中仍然提供了一些特殊的字符。在这些字符的帮助下,系统管理员可以轻松的在不同的目录之间进行切换。
如现在系统管理员想从任何目录中回到用户的主目录下,除了按原路返回外,还有其他更快的方法吗?其实,要回到用户的主目录下,有一个很便捷的方式,就是通过一个特殊的字符~来完成。通常情况下,当管理员创建某个用户后,在系统的/home目录中会以这个用户的名字建立一个文件夹。这个文件夹所在的目录就是用户的主目录。当用户不知道自己所处那个目录,而需要迅速回到自己的主目录时,可以使用这个命令来实现:cd ~。也就是说,特殊符号~在操作系统中代表的是用户的主目录。由于不同用户的主目录不同,利用这个主目录可以快速的回到自己的主目录下面。
在目录切换过程中,还有两个比较重要的特殊字符,分别为.与..符号。其中“.”表示当前目录。这个符号很重要,在很多地方都需要用到。如在定义PATH环境变量的时候,在路经的最后需要加上这个.号,这表示当前目录。另外,如果系统管理员想运行当前目录下的一个脚本文件,如setup.sh。则可以不采用绝对路径,而直接使用./setup.sh。其中这个.符号就代表当前目录。在cd命令中也可以使用.号,如cd ./setup,就表示进入到当前目录的下一个子目录setpup下面。所以说这个特殊符号..(英文状态下的点号)在切换目录的时候非常有用。另外一个特殊的字符就是“..”(英文状态下的双点号)在系统中表示的是上一级目录。如故管理员利用cd命令定义到一个目录后,又想回到上一级目录中,则可以使用cd ..命令来实现。注意cd命令与点号之间要有空格。
系统管理员若能够熟练应用这些特殊字符,特别是表示用户主目录的~符号,能够帮助管理员迅速切换到自己想要的目录下。如在Linux客户端中,往往用户邮箱的文件夹是保存在用户主目录下面的。如用户可能采用的是thunderbird的邮件客户端。采用这个客户端有一个弊端,即当Linux系统非法关机后,开会在邮件的目录中产生一个lock的文件。客户端就不能够打开。只是系统管理员需要切换到用户主目录下的邮件文件夹中,删除这lock文件。此时比较简单的方法,就是直接使用~符号定位到用户的主目录下,然后再进入到邮件目录中,找到这个文件并删除。这笔一级一级的进入要快的多。
二、将执行结果保存到文件中。
用户在日常的操作中,可能需要将某些命令的执行结果保存到文件中。如需要将一些程序的运行结果保存到日至文件中等等。笔者现在以一个简单的例子为例。Ps命令是用来显示当前系统运行程序的命令。如在命令行中,输入ps命令可以显示当前系统运行的所有程序(注意程序跟进程是两个不同的经验)。其中会显示应用程序的进程号、终端信息、运行时间以及程序名字等等。现在管理员如果要将这些信息保存到一个特定的文件中,该如何实现呢?
此时系统管理员可以在命令后面采用一个特殊的字符>,如ps > ps.txt的方式,将命令ps的执行结果保存到文本文件ps.txt 中。如果目标文件不存在的话,则系统会创建文件并保存信息。如果目标文件存在的话,则系统会覆盖原先的文件。所以,在使用>这个特殊符号来创建文件的时候,需要特别的注意。因为目标文件存在,则系统不会给用户任何的提示信息,就把目标文件删除并新建同名的文件。为此一不小心就可能会造成文件的丢失。不过其还有一个双胞胎的兄弟,即>>符号。这个特殊符号跟>符号类似,也是将执行结果保存到一个文件中。不过这个符号与>符号有一个很大的不同。如果目标文件已经存在的话,两个符号的执行效果是不同的。如果采用的是>符号的话,则系统会自动覆盖它。而如果采用的是>>符号的话,在系统不会覆盖已经存在的目标文件,而只是在这个目标文件中追加相关地记录。如果目标文件不存在的话,则仍然会自动创建目标文件。
由于>>符号不会自动覆盖目标文件,只是在目标文件中追加记录。为此这个符号还有其他一些特殊的用途,如可以用来合并不同的文件。如现在有连个文件listjpg.txt与listgif.txt。在这个两个文件中主要保存着jpg与gif的图片名字。现在用户想将这个两个文件合并,或者说想将listjpg.txt中的记录追加到listgif.txt文件中。此时该如何处理呢?利用命令cat listjpg.txt >> listgif.txt就可以实现这个功能了。这个命令的意思是,先利用cat命令将文件listjpg.txt的内容读取出来然后追加到listgif.txt文件中。执行了这个命令后,就会将两个文件合并。不过原先的文件仍然存在。如果不需要的话,就需要手工的删除它。
由于这两个特殊符号功能类似,但是实现细节上有所差异。为此系统管理员需要掌握其中的差异,并在实际工作中选择合适的处理方式。如在一些安装程序中,需要将安装过程中的信息保存在日志文件中。但是在下一次重新安装的过程中,系统管理员可能喜欢先将原先的日志删除。因为这会增加阅读量。此时就是采用>这个特殊符号来实现比较合理,因为其会自动删除日志文件。
三、将程序放在后台运行。
有些时候,系统管理员可能希望某些程序在系统后台运行。如果将Linux操作系统当作服务器来管理的话,讲一些长时间运行的程序放在后台运行是一种很常见的手段。如现在管理员利用while循环来实现一个功能。每5分钟来判断一下某个应用系统是否有产生错误的日志文件。如果有的话要马山将这个错误日志文件发送给系统管理员。写完这个脚本程序之后,最好的方式就是将这个脚本程序放置在后台运行。因为这个程序需要长时间运行,如果在前台运行的话,可能会对其他程序产生干扰。而且也容易被误关闭。所以,放在后台执行反而更加合理。那么在Linux操作系统中是如何将脚本程序防止在后台运行的呢?此时也需要用到另外一个特殊字符&。如这个脚本程序的名字为errorlog.sh。则管理员只需要运行命令errorlog.sh &,系统就会将这个程序放置在后台运行。
四、解释特殊字符的转义字符。
在微软操作系统中,某些字符是不能够用来做文件名的。如*这个米字符号,其是用来做通配符用的,不能够在文件名或者目录名中出现。但是在Linux操作系统中没有这方面的限制。如test*.txt在Linux操作系统中是一个合法的名字。难道*符号在Linux操作系统中不做通配符使用吗?其实,在Linux操作系统中这个*符号也有特殊的含义,其也是代码通配符。如使用ls text*命令,可以列出所有已text开头的文件或者目录的名字。那么为什么在Linux操作系统中还可以利用这个*米字符号来作为文件名呢?这都是转义字符\在其作用。