Linux命令速查

11.1        查看命令行历史

   第11章Shell

到目前为止,本书介绍的都是在bash shell中运行各种命令,一直没有关注shell本身。本章将介绍两个影响shell使用的命令:historyalias前者可以列出所有在命令行中输入的命令,后者可以为命令创建快捷方式。这两个命令很有用,能够在使用命令行时为你节省大量时间。对于计算机用户,懒惰并不是件坏事。在使用Linux系统时,这两个命令一定能尽可能地满足用户懒惰的要求。

11.1 查看命令行历史

history

每当在shell中输入命令时,命令就会保存在主(home)目录中一个名为.bash_history的文件里(文件名之前的点号表示这是一个隐藏文件,只有用ls -a才能显示出来)。在默认情况下,这个文件只保存最新的500条命令行历史记录。要查看命令行历史列表,只需输入history命令。如下所示:

1.  $ history   

2.   

3.    496 ls  

4.    497 cd rsync_ssh  

5.    498 ls  

6.    499 cat linux  

7.    500 exit 

因为正在查看的命令可能会有500条,它们会快速地闪过屏幕,在到达最后一条记录之前,快得看不清任何内容。想要一次只查看一个屏幕的内容,就得靠老朋友less命令了。如下所示:

1.  $ history | less 

现在就能非常容易地逐一查看结果了。

警告 现在应该明白为什么在命令行中输入密码以及其他敏感信息时,需要谨慎的原因了吧:任何能够查看.bash_history文件的人,都能够看到那些密码。小心些,仔细想想在命令行中直接输入了什么!

 

11.2 再次运行最近运行过的命令

!!

如果想再次运行刚刚使用过的那条命令,只要输入两个叹号(!!),就能查看命令历史文件,并运行其中的最后一条命令。如下所示:

1.  $ pwd  

2.  /home/scott  

3.  $ !!  

4.  pwd  

5.  /home/scott 

注意,先看到的是将要运行的实际命令,接着看到的是该命令的执行结果。让计算机做些乏味的工作,这是个非常有用的办法。

11.3 使用数字再次运行以前运行过的命令

1.  ![##] 

当运行history时,它自动在每条命令前加一个数字。如果想运行前面的某条命令,而且也知道history赋予它的数字,这时只需要在感叹号后面跟上命令的历史编号,就能再次运行这个命令。如下所示:

1.  $ pwd  

2.  /home/scott  

3.  $ whoami  

4.  scott  

5.  $ !499 

6.  pwd  

7.  /home/scott 

如果不确定这个数字是多少,再运行history命令找找看。要注意的是,在这个例子中,pwd命令第一次的历史数字是499,但在用!499再次运行这个命令后,它就变成了498,因为新命令把它在列表中向下推了一位。

 

11.4 使用字符串再次运行以前运行过的命令

1.  ![string] 

能够通过引用命令的历史编号来再次运行它,当然不错。但这需要事先知道命令在history中的编号,而查找这个编号多少有点麻烦(虽然把history的输出通过管道传递给grep命令可能会有帮助,但仍然不是最好的办法)。为了引用以前输入的命令,通常更好的办法是按照命令的实际名称来引用。如果在感叹号后面输入某个命令的前几位字母,shell将运行它能够在.bash_history文件中找到的与之匹配的第一个命令。

1.  $ cat /home/scott/todo  

2.  Buy milk  

3.  Buy dog food  

4.  Renew Linux Magazine subscription  

5.  $ cd /home/scott/pictures  

6.  $ !cat  

7.  cat /home/scott/todo  

8.  Buy milk  

9.  Buy dog food  

10. Renew Linux Magazine subscription 

如果在命令历史中找到3个cat命令的运行记录,即35(cat /home/scott/todo)、412(cat /etc/apt/sources.list)和496(cat /home/scott/todo),而此时输入!cat,就会运行编号为496的那条命令。如果要运行编号为412的命令,要么直接运行!412,要么在感叹号后面提供足够多的信息,让命令可以判断出要引用的是编号为412的命令。

1.  $ !cat /etc  

2.  cat /etc/apt/sources.list  

3.  deb http://us.archive.ubuntu.com/ubuntu breezy main restricted 

4.  deb-src http://us.archive.ubuntu.com/ubuntu breezy 

5.  ?main restricted 

因为人类记忆单词要比记忆数字容易得多,所以最终可能还是采用通过字符串的方法来调用以前运行过的命令。如果觉得不确定,可以运行history命令看一看。

 

  11.5 显示所有命令的别名

1.  alias 

如果经常使用某个命令,或者是某个命令特别长、很难拼写,那么为这个命令起个别名,是很值得的。在创建别名以后,只要输入别名,就可以运行它所引用的命令。当然,如果一个命令特别复杂,或者包括好多行,则应该把它转换成脚本或者函数。不过对于小事情来说,别名也算是完美的。

所有别名都保存在主目录的一个文件中,可能会在.bashrc中找到它们,但更可能会在.bash_aliases中找到它们。大多数Linux分发版会提供几个事先定义好的别名,要查看这些已有的别名,只需要在命令行中输入alias。如下所示:

1.  $ alias  

2.  alias la='ls -a' 

3.  alias ll='ls -l' 

大多数Linux分发版尽可能减少默认别名的数量,增加新的别名就得靠你自己了,稍后就会看到。

   

11.6  查看特定命令的别名

1.  alias [alias name] 

在定义了多个别名后,输入alias命令,可能很难找到特定的某个别名。如果想查看一下特定别名的命令内容,只需要在alias命令后面加上这个别名的名字就可以了。如下所示:

1.  $ alias wgetpage  

2.  alias wgetpage='wget --html-extension --recursive 

3.  ?--convert-links --page-requisites --no-parent $1' 

现在,wgetpage别名到底做了什么,一目了然,既快又简单。

说明 第15章将会详细介绍wget命令。

11.7 创建新的临时别名

1.  alias [alias]= '[command]' 

如果你发现自己正在反复地输入一个命令,或许这时就应该为它创建一个别名了。例如,要只查看当前工作目录中的子目录,需要使用ls -d */命令。为这个命令创建一个临时的别名,如下所示:

1.  $ ls -d */  

2.  by_pool/  libby_pix/  on_floor/ 

3.  $ alias lsd='ls -d */' 

4.  $ lsd  

5.  by_pool/  libby_pix/  on_floor/ 

用这种方法使用alias时,应该注意几点内容。别名中不能包含等号(=),在定义别名时,会在名称后面立即跟上一个等号。不过,在别名真正的内容中可以使用等号。此外,用这种方法创建的别名只有在当前shell会话(session)有效时才能存在。会话退出后,别名也就不存在了。

想创建会话退出后仍然还能存在的别名吗?请阅读下一节内容。

11.8 创建新的永久别名

1.  alias [alias name]= '[command]' 

如果想让别名能够在不同的shell会话中使用,就需要把它们添加到shell用来保存别名的文件中。大多数情况下,这个文件不是 .bashrc,就是.bash_aliases。本例中使用的是.bash_aliases。不管是哪个文件,编辑它们时要十分谨慎,否则,以后登录时可能会造成麻烦。可以在编辑文件之前先做个备份,有备无患。

说明 如何找出应该使用哪个文件来保存别名?很简单:输入ls -a ~。如果在结果中看到.bash_aliases,那就使用这个文件;否则,检查一下.bashrc,看看里面是否定义了其他别名。如果在这个文件中没有看到任何别名,那就再看看.profile,偶尔也会用到它。

在.bash_aliases中增加新的别名,先用你喜欢的文本编辑器打开它,然后增加如下所示的一行:

1.  alias lsd='ls -d */' 

11.7节中讨论的规则在这里也同样适用:别名的名称中不能包含等号(=)。在.bash_aliases中增加别名以后,保存文件并退出。但新增加的别名不能用。需要重新加载.bash_aliases(或.bashrc,如果使用的是这个文件),新增加的别名才会生效。有两种办法:第一种办法是退出shell,再登录进来,但这种办法并不好用,不推荐使用;第二种是通过运行命令来重新加载文件,如下所示。

1.  $ . .bash_aliases 

先是一个点号(.),后面跟着一个空格,之后是文件名(该文件名以点号作为开始)。现在新加的别名就能够运行了。因为每次增加新的别名后都需要重新加载别名文件,所以一次多增加几个别名,是个好主意。

11.9 删除别名

1.  unalias 

天下无不散的宴席,别名也会有不再需要使用的时候。可以使用unalias命令删除别名。

1.  $ ls -d */  

2.  by_pool/  libby_pix/  on_floor/ 

3.  $ alias lsd='ls -d */' 

4.  $ lsd  

5.  by_pool/  libby_pix/  on_floor/ 

6.  $ unalias lsd  

7.  $ lsd  

8.  $ 

但要注意,正如11.7节所述,这个命令也是永远只对临时的shell 别名有效。前面例子中的lsd别名被删除了。如果对.bash_aliases文件中的别名使用unalias命令,也会删除相应的别名,但前提是一直保持shell登录状态。在退出shell,再登录回来,或是重新加载.bash_aliases时,原来删除的别名依旧存在。

要从.bash_aliases中删除别名,需要编辑这个文件,手工删除包含别名的相应行。如果觉得以后有可能还会使用某个要删除的别名,就在这个别名的前面放一个英磅符号#),表示注释掉它,如下所示:

1.  # alias lsd='ls -d */' 

保存.bash_aliases文件,再用. .bash_aliases命令重新加载它,注释掉的别名就不再起作用了。但如果以后又需要使用它了,打开.bash_aliases文件,删除前面的英磅符号,保存并重新加载这个文件,就又能使用这个别名了。

 

猜你喜欢

转载自blog.csdn.net/yinxingtianxia/article/details/78402797