原文地址: Linux中"!"的惊叹用法
创新互联主要从事做网站、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务云浮,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
实际上,不起眼的"!"在linux中有着很多让你惊叹的妙用。本文就来细数那些"!"的神奇用法。
执行上一条命令
例如,在执行完上面一条命令后,可以使用下面的方式再次执行上一条命令:
!!代表了上一条执行的命令。可以看到,当输入两个感叹号时,它显示上条命令的同时会执行上一条命令。当然了,通常我们还会想到使用“UP”键来完成这个事情。但是如果是基于上条命令扩充,!!就来得更加方便了。
比如,你想查看某个文件,但是忘了输入more:
使用!!是不是方便多了?
比如,你在使用ls列出目录内容时,没有带任何参数,但是想再次执行,带上-al参数,又不想输入长长的参数,可以使用下面的方式:
这里的!$代表了上一条命令的最后一个参数。
而使用上条命令的第一个参数只需要使用!^,例如:
如果想执行上条命令,但不想带上最后一个参数:
什么场景下可能会用呢?比如你上一条命令最后一个参数是一个长长的字符串,而你恰好不想不用它,并且退格键删除又慢的时候,可以使用上面的方法。
前面说了使用上条命令的最后一个参数,那如果不是最后一个参数,该如何使用呢?很简单,使用!*即可。例如我们在输入find命令输错了,想要纠正的时候:
有的读者可能会问了,如果我只想用其中某个参数呢?按照 的规则即可。例如:
当上条命令的参数很长,而你需要取用中间的某个参数时,效果就比较明显了。
我们都知道可以通过history命令可以查看之前执行过的命令,但是如何再次执行history中的命令呢?我们可以通过“UP”键可以查看,但是历史命令很长的时候,并不是很方便,这个时候“!”便派上了用场:
我们可以看到,history命令出来可以看到之前执行过的命令,也会看到它前面带了一个数值。如果我们想执行前面的cp -rf dira dirb/命令,实际上只要用下面的方式即可:
即通过![历史命令数值]的方式执行历史命令。
当然了,如果我们想执行倒数第二条命令,也是有方法的:
!可以根据关键字执行命令。
例如,执行上一条find命令:
再例如,执行上一条包含name的命令:
例如:
如果我们需要将这条命令中的old更换为new:
这个是它最为人所熟悉的作用,例如删除除了cfg结尾以外的所有文件:
这里就不再详述。
惊叹号"!"的作用确实有时候让人惊叹。前面可能只是提到!结合其他字符代表某个特定的含义的某种使用,实际上,我们可以组合或者扩展发现更多的妙用。这里不再展开。
Linux tip: Using an exclamation point (!) to reference events
《A Practical Guide to Linux Commands, Editors and Shell Programming - 4th Edition Nov 2017》
1、fc -s(或!!):执行上一条命令
2、!!执行上一条命令
!45 执行第45条命令
3、按上键,也会回滚到上一条命令
#符号 是系统用户 root
$符号 是你创建的用户 没指定权限!
删除用户: # userdel testuser 删除用户后 ,还要删除home下属于这个用户的文件
切换用户: #su testuser2 $exit:返回到上一级目录. 新用户登录的时候,用户默认的当前目录是用户的住目录 home
给a文件增加相应的权限: # chmod +x a (相应的-x就是去掉某个权限)
首先要明确$符号用在什么地方,使用在不同的地方,其所代表的定义也就不同。比如在bash里$符号表示当前用户为普通用户;在bash脚本里。$开头表示变量。
举例说明,下面是一些特殊的变量:
$# 表示参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 表示所有参数,并且所有参数都是独立的
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
方法一
for i in {1..10}; do echo "Hello, World";
方法二
在~/.bashrc文件中创建一个run函数:
function run() {
number=$1
shift
for n in $(seq $number); do
$@
done
}
1
2
3
4
5
6
7
使./bashrc生效
souce ~/./bashrc
1
示例
run 10 echo "Hello, World"
1、tab:命令或路径等的补全键,也是Linux用的最多的一个快捷键;
2、ctrl+a:光标迅速回到行首;
3、ctrl+e:光标迅速回到行尾;
4、ctrl+f:光标向右移动一个字符;
5、ctrl+b:光标向左移动一个字符;
6、ctrl+insert:复制命令行内容(mac系统不能使用);
7、shift+insert //粘贴命令行内容(mac系统不能使用);
8、ctrl+k //剪切(删除)光标处到行尾的所有字符;
9、ctrl+u //剪切(删除)光标处到行首的所有字符;
10、ctrl+w //剪切(删除)光标前的一个字符;
11、ctrl+y //粘贴 ctrl+k、ctrl+u、ctrl+w删除的字符;
12、ctrl+c //中断终端正在执行的任务并开启一个新的一行;
13、ctrl+h //删除光标前的一个字符(相当于退格键);
14、ctrl+d //退出当前shell命令行,如果是切换过来的用户,则执行这个命令回退到原用户;
15、ctrl+r //搜索命令行使用过的历史命令记录;
16、ctrl+g //从ctrl+r的搜索历史命令模式中退出;
17、ctrl+l //清楚屏幕所有的内容,并开启一个新的一行;
18、ctrl+s //锁定终端,使之任何人无法输入;
19、ctrl+q //解锁ctrl+s的锁定状态;
20、ctrl+z //暂停在终端运行的任务,使用"fg"命令可以使暂停恢复;
21、!! //执行上一条命令;
22、!pw //这是一个例子,是执行以pw开头的命令,这里的pw可以换成任何已经执行过的字符;
23、!pw:p //这是一个例子,是仅打印以pw开头的命令,但不执行,最后的那个“p”是命令固定字符;
24、!num //执行历史命令列表的第num条命令,num代指任何数字(前提是历史命令里必须存在);
25、!$ //代指上一条命令的最后一个参数,该命令常用于shell脚本中
26、esc+. //注意那个".“ 意思是获取上一条命令的(以空格为分隔符)最后的部分;
27、esc+b //移动到当前单词的开头;
28、esc+f //移动到当前单词的结尾;