Linux中学会灵活使用shell下的特殊字符

系统 Linux
众所周知,shell是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文件中。执行了这个命令后,就会将两个文件合并。不过原先的文件仍然存在。如果不需要的话,就需要手工的删除它。

  由于这两个特殊符号功能类似,但是实现细节上有所差异。为此系统管理员需要掌握其中的差异,并在实际工作中选择合适的处理方式。如在一些安装程序中,需要将安装过程中的信息保存在日志文件中。但是在下一次重新安装的过程中,系统管理员可能喜欢先将原先的日志删除。因为这会增加阅读量。此时就是采用>这个特殊符号来实现比较合理,因为其会自动删除日志文件。

 

#p#

三、将程序放在后台运行。

  有些时候,系统管理员可能希望某些程序在系统后台运行。如果将Linux操作系统当作服务器来管理的话,讲一些长时间运行的程序放在后台运行是一种很常见的手段。如现在管理员利用while循环来实现一个功能。每5分钟来判断一下某个应用系统是否有产生错误的日志文件。如果有的话要马山将这个错误日志文件发送给系统管理员。写完这个脚本程序之后,***的方式就是将这个脚本程序放置在后台运行。因为这个程序需要长时间运行,如果在前台运行的话,可能会对其他程序产生干扰。而且也容易被误关闭。所以,放在后台执行反而更加合理。那么在Linux操作系统中是如何将脚本程序防止在后台运行的呢?此时也需要用到另外一个特殊字符&。如这个脚本程序的名字为errorlog.sh。则管理员只需要运行命令errorlog.sh &,系统就会将这个程序放置在后台运行。

  四、解释特殊字符的转义字符。

  在微软操作系统中,某些字符是不能够用来做文件名的。如*这个米字符号,其是用来做通配符用的,不能够在文件名或者目录名中出现。但是在Linux操作系统中没有这方面的限制。如test*.txt在Linux操作系统中是一个合法的名字。难道*符号在Linux操作系统中不做通配符使用吗?其实,在Linux操作系统中这个*符号也有特殊的含义,其也是代码通配符。如使用ls text*命令,可以列出所有已text开头的文件或者目录的名字。那么为什么在Linux操作系统中还可以利用这个*米字符号来作为文件名呢?这都是转义字符\在其作用。

  如现在用户想在文件名字中加入一个*米字符,则可以使用命令vi text\*.txt来实现。在这个通配符*米字符号前面加入一个转移字符\,就告诉系统要将这个*字符当作普通字符来对待。其实这个转义字符的重要作用还是体现在文件的删除上面。如现在某个目录下有如下几个文件,chap*.txt,chap1.txt,chap2.txt。其中chap*表示一本书的目录,而其他的表示这个本书的各章内容。如果现在系统管理员想把目录文件删除了,采用了rm chap*.txt命令,还有什么后果呢?此时系统会把所有的以chap开头的文件删除。也就是说,不光光是目录文件,章节的内容文件也被删除了。因为此时操作系统是将这个*符号当作通配符来对待。如果要删除目录文件在,则正确的命令应该这么写:rm chap\*.txt。这个命令就是告诉系统这个*符号为普通的符号,而不是通配符。此时系统就会将这个目录文件删除了,而不会影响到其他文件。

  虽然说在Linux操作系统中通过转义字符的方法允许用户采用一些特殊的字符来为文件命名。但是出于以后管理的方便,笔者还是建议大家不要采用特殊符号来命名。否则一不小心就会发生不可挽回的损失。如上面的案例中,将*通配符当作文件名字的话,那么在删除时就很容易将相关的文件全部删除。

【编辑推荐】

  1. Linux系统下配置Netware服务器方法
  2. 嵌入式设备上的 Linux 系统开发
  3. 深度介绍Linux内核是如何工作的(1)
责任编辑:庞桂玉 来源: IT专家网
相关推荐

2010-12-23 14:46:08

expect脚本

2013-03-15 16:25:12

架构设计测试程序测试

2013-08-19 12:46:27

2009-12-25 15:51:38

shell特殊字符

2019-08-02 09:13:22

Linux脚本语言欢聚时代

2024-10-09 07:40:43

2015-07-13 11:28:22

Linux文件名

2014-07-31 11:24:21

Linuxshell命令

2020-09-22 07:29:14

Linux stat

2023-11-13 22:08:05

ShellLinux

2017-08-28 14:10:34

LinuxShell命令

2010-02-03 14:57:18

Linux shell

2020-04-02 10:43:30

Linux数据字符

2010-11-02 21:17:17

2020-03-18 14:20:25

shellLinux命令

2009-10-26 13:25:05

Linux Shell

2011-03-30 11:04:11

Linuxmrtg

2009-11-23 11:51:07

linuxscp

2011-01-13 10:50:50

2010-06-23 17:21:30

Linux Bash
点赞
收藏

51CTO技术栈公众号