Linux命令速查
Posted yinxingtianxia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux命令速查相关的知识,希望对你有一定的参考价值。
11.1 查看命令行历史
第11章Shell
到目前为止,本书介绍的都是在bash shell中运行各种命令,一直没有关注shell本身。本章将介绍两个影响shell使用的命令:history和alias,前者可以列出所有在命令行中输入的命令,后者可以为命令创建快捷方式。这两个命令很有用,能够在使用命令行时为你节省大量时间。对于计算机用户,懒惰并不是件坏事。在使用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文件,删除前面的英磅符号,保存并重新加载这个文件,就又能使用这个别名了。
以上是关于Linux命令速查的主要内容,如果未能解决你的问题,请参考以下文章