1.重复指令
1.1 重复执行先前的指令,可以使用!!命令
运行如下
zjq@ubuntu:~$ ls -l Music
total 0
zjq@ubuntu:~$ !!
ls -l Music
total 0
zjq@ubuntu:~$
1.2 .!String则是重新执行最近执行的,以String为起始的命令,而!?String[?]则表示最近执行的,包含String的字符串。!n则表示重复执行命另历史缓冲区或文件中的第n号命令。
示例如下
zjq@ubuntu:~/Desktop$ cd ..
zjq@ubuntu:~$ !cd
cd ..
zjq@ubuntu:/home$
另外利用“!!:[g]s/old/new[/]”可以对命令进行修正后再执行。如果全部需要替换吗、,则在s前面加一个g。当然,最后一个/可以省略。
zjq@ubuntu:~$ sudo mkdir test
zjq@ubuntu:~$ !!:s/test/test2/
sudo mkdir test2
zjq@ubuntu:~$ ls
Desktop Downloads Music Public test Videos
Documents examples.desktop Pictures Templates test2
zjq@ubuntu:~$
1.3 在Korn Shell中,可以使用命令r重复执行先前的一个指令。
如果没有安装ksh那么就先安装一下。在学习的时候,我看了一下我的系统可以使用什么命令,
zjq@ubuntu:~$ sudo cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
很不巧,没有ksh命令,我尝试装了一下,没装上去。但是为了使用这个命令,我们在这里也可以使用r命令。如下所示。
zjq@ubuntu:~$ alias r='fc -s'
zjq@ubuntu:~$ ls
Desktop Downloads Music Public test Videos
Documents examples.desktop Pictures Templates test2
zjq@ubuntu:~$ r
ls
Desktop Downloads Music Public test Videos
Documents examples.desktop Pictures Templates test2
2.补充命令
2.1 命令补充,如果有的时候命令记不住了可以使用命令补充,输入bz 按两个tab后出现如下命令,
zjq@ubuntu:~$ bz
bzcat bzegrep bzgrep bzless
bzcmp bzexe bzip2 bzmore
bzdiff bzfgrep bzip2recover
加C后再按两次tab如下
zjq@ubuntu:~$ bzc
bzcat bzcmp
输入a后按tab会自动补全
zjq@ubuntu:~$ bzcat
2.2 文件名补充,输入一部分文件名后,按tab键进行补充。
2.3 变量名补充,Bash也支持变量名的补充功能,当输入一个变量名的起始地址后,输入tab键,Bash将会提供变量名的另一部分。
zjq@ubuntu:~$ echo $HO
$HOME $HOSTNAME $HOSTTYPE
zjq@ubuntu:~$ echo $HOME
/home/zjq
2.4 命令别名,这个相对比较容易,在Windows的dos窗口下,在做数字证书的时候,我也曾经使用过这个别名设置的方法。下面是一个把ls -l 起一个别名叫ll
zjq@ubuntu:~$ alias ll="ls -l"
zjq@ubuntu:~$ ll
total 52
drwxr-xr-x 2 zjq zjq 4096 Oct 23 08:54 Desktop
drwxr-xr-x 2 zjq zjq 4096 Oct 23 08:54 Documents
drwxr-xr-x 2 zjq zjq 4096 Oct 23 08:54 Downloads
在定义命令别名时,还需要注意的是,如果别名中含有Value之类的值的话,单双引号的使用就会有一些区别,请看下面两个例子。
双引号
zjq@ubuntu:~$ alias mydir="echo current directory is $PWD"
zjq@ubuntu:~$ alias mydir
alias mydir='echo current directory is /home/zjq'
别名里面的value已经被提前解释了,里面的目录就是当前的目录,跳转到其他目录下面去了也不会改变。下面我跳转一下路径然后执行mydir
zjq@ubuntu:~$ cd Public
zjq@ubuntu:~/Public$ mydir
current directory is /home/zjq
字符串的值完全没有变过
单引号
zjq@ubuntu:~$ alias mydir='echo current directory is $PWD'
zjq@ubuntu:~$ alias mydir
alias mydir='echo current directory is $PWD'
我执行一下mydir看看。
zjq@ubuntu:~$ mydir
current directory is /home/zjq
我先跳转一个目录再执行mydir
zjq@ubuntu:~$ cd Public
zjq@ubuntu:~/Public$ mydir
current directory is /home/zjq/Public
zjq@ubuntu:~/Public$
取消别名,下面使用unalias取消别名,再使用alias查看别名,别名已经取消了。
zjq@ubuntu:~/Public$ unalias mydir
zjq@ubuntu:~/Public$ alais mydir
alais: command not found
3.作业控制
3.1 作业控制,当在命名的后面输&是时,shell会出现下列信息,一个数字表示作业号、另一个是进程ID
zjq@ubuntu:~$ ls &
[1] 4445
我这里没有需要运行很长时间的作业,所以暂时只是记录一下命令的用法。
当作业在后台运行后,可以使用jobs命令查看后台正在运行的作业。
当一个作业过大我们想把它停止时,可以使用Ctrl+Z
要把一个停止的命令放到后台运行,使用bg %n (n为作业号)
要让后台作业回到前台运行,使用fg %n(n为作业号)
要停止一个后台作业,使用kill %n (n为作业号)
要等待一个作业运行,使用wait %n (n为作业号)
当然有的时候我们可能还想把终端关掉,但是不影响作业的运行,直到作业结束。可以使用呢nohup命令。例如运行一个脚本 nohup load.sh
3.2会话记录与命令确认。
使用script会保存在在当前目录的typescript中,可以再script后指定不同的文件名,当然如果使用一个文件,在script后面加-a参数也可以,这样就不会覆盖之前的内容。
zjq@ubuntu:~$ script
Script started, file is typescript
zjq@ubuntu:~$ date
Thu Nov 27 04:07:09 PST 2014
zjq@ubuntu:~$ k
k: command not found
zjq@ubuntu:~$ ls
Desktop Downloads Music Public test typescript
Documents examples.desktop Pictures Templates test2 Videos
zjq@ubuntu:~$ uptime
04:07:22 up 5:16, 2 users, load average: 0.00, 0.01, 0.05
zjq@ubuntu:~$ exit
exit
Script done, file is typescript
zjq@ubuntu:~$
使用exit终止会话记录功能,并不是退出终端!
下面就可以查看记录的内容了
zjq@ubuntu:~$ cat tyoescript
cat: tyoescript: No such file or directory
zjq@ubuntu:~$ cat typescript
Script started on Thu 27 Nov 2014 04:07:04 AM PST
zjq@ubuntu:~$ date
Thu Nov 27 04:07:09 PST 2014
zjq@ubuntu:~$ k
k: command not found
zjq@ubuntu:~$ ls
Desktop Downloads Music Public test typescript
Documents examples.desktop Pictures Templates test2 Videos
zjq@ubuntu:~$ uptime
04:07:22 up 5:16, 2 users, load average: 0.00, 0.01, 0.05
zjq@ubuntu:~$ exit
exit
Script done on Thu 27 Nov 2014 04:07:27 AM PST
zjq@ubuntu:~$
3.3 如何验证Ubuntu的命令。输入一个liux命令时,Shell会按path变量列出的目录顺序,也就是所谓的检索路径,检索出与其
相匹配的命令。有时候可能不经意间修改可检索的顺序,这个时候就需要看看到底执行的是哪一个命令,
whichis命令:
zjq@ubuntu:~$ which tar
/bin/tar
whereis命令
zjq@ubuntu:~$ whereis tar
tar: /bin/tar /usr/include/tar.h /usr/share/man/man1/tar.1.gz
3.4 当需要执行某个特定的处理任务,又不知道确切的命令名字时,可以使用apropos命令
起始它和man -k完全一样。
zjq@ubuntu:~$ apropos who
at.allow (5) - determine who can submit jobs via at or batch
at.deny (5) - determine who can submit jobs via at or batch
bsd-from (1) - print names of those who have sent mail
from (1) - print names of those who have sent mail
w (1) - Show who is logged on and what they are doing.
w.procps (1) - Show who is logged on and what they are doing.
who (1) - show who is logged on
whoami (1) - print effective userid
whois (1) - client for the whois directory service
当然如果你知道了某一个命令却又不知道他的确切用途时,可以使用whatis命令
zjq@ubuntu:~$ whatis who
who (1) - show who is logged on