shell中的引用‘’:强引用,变量替换不会进行“”:弱引用,能够执行变量替换``:命令替换,引用命令的执行结果:命令的替换的另外一个符号:$()
shell命令历史:history 内置命令当前shell进程的命令保存在缓存缓冲区中当退出shell缓冲区的命令会保存至其用户家目录下的隐藏文件:.bash_history
以点号开课的文件为隐藏文件,ls -a可以查看隐藏文件,如果我们要再次执行命令历史中对于数字后面的命令,只需要!数字即可
678 ls -a
679 cat .bash_history
680 vi
681 history
[root@docker-node1 ~]# !678
ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc in.sh .pki .tcshrc .viminfo
[root@docker-node1 ~]#
那如果我们要执行上一条命令,则使用!!即可
[root@docker-node1 ~]# !678
ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc in.sh .pki .tcshrc .viminfo
[root@docker-node1 ~]# !!
ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc in.sh .pki .tcshrc .viminfo
[root@docker-node1 ~]#
那如果要执行倒数的命令,则可以!-即可
682 ls -a
683 history
[root@docker-node1 ~]# !-2
ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc in.sh .pki .tcshrc .viminfo
[root@docker-node1 ~]#
如果你想执行上次命令且不看命令数字,且引用命令参数,则可如下(只可以执行命令历史中最近一次的命令,并且是从下往上)
[root@docker-node1 ~]# cat in.sh
#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid
[root@docker-node1 ~]# !ca
cat in.sh
#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid
[root@docker-node1 ~]#
当我们查看一个目录是否存在,如果存在且进入目录,快速切入则可以使用如下示例
[root@docker-node1 ~]# ls /usr/local/
apache-tomcat-7.0.63 bin etc include lib libexec share tomcat tomcat3
apache-tomcat-7.0.63.tar.gz cmdline-jmxclient-0.10.3.jar games jdk-7u79-linux-x64.rpm lib64 sbin src tomcat2
[root@docker-node1 ~]# cd !$
cd /usr/local/
[root@docker-node1 local]#
当然,你也可以先按住esc 在按. 即可快速的引用上个命令
如果你不喜欢被看见所有的历史命令,则history -c则可以清空命令历史,如果你不喜欢被看见某条则可以history -d 数字 指定删除,但是这种方式删除,你的删除命令历史的操作还是存在于history中
691 cat in.sh
692 ls /usr/local/
693 cd /usr/local/
694 history
[root@docker-node1 local]# history -d 693
[root@docker-node1 local]# history
693 history
694 history -d 693
695 history
追加当前会话的命令历史到历史文件中-a即可读取所有的包括历史文件中的,但是未被读取到当前会话,-n读取历史文件,保存到历史列表中-r讲当前历史写到历史文件中去,并附加到历史列表-w
命令历史默认保存1000条命令,在HISTSIZE中定义
[root@docker-node1 local]# echo $HISTSIZE
1000
[root@docker-node1 local]#
.bash_history
[root@docker-node1 local]# echo $HISTFILE
/root/.bash_history
[root@docker-node1 local]#
命令历史文件保存数:HISTFILESIZE
控制命令历史生成机制:HISTCONTROL[root@docker-node1 local]# echo $HISTCONTROLignoredups :忽略记录重复的命令[root@docker-node1 local]# 这里的重复仅说是连续的则认为是重复,不连续则不重复
ok。那如果我不想别人看到我执行了那些命令,我们在还需要修改以下即可:将ignoredups修改为ignorespace[root@docker-node1 local]# HISTCONTROL=ignorespace[root@docker-node1 local]# echo $HISTCONTROLignorespace在执行命令之前加上空格 ls
[root@docker-node1 local]# ls
apache-tomcat-7.0.63 bin etc include lib libexec share tomcat tomcat3
apache-tomcat-7.0.63.tar.gz cmdline-jmxclient-0.10.3.jar games jdk-7u79-linux-x64.rpm lib64 sbin src tomcat2
[root@docker-node1 local]# cd tomcat
[root@docker-node1 tomcat]#
在看history
[root@docker-node1 tomcat]# history
1 history
2 history -m
3 history -n
4 ls
5 history
6 histzize
7 echo $HISTZIZE
8 echo $HISTsIZE
9 echo $HISTSIZE
10 echo $HISTFILE
11 echo $HISTCONTROL
12 echo $HISTFILESIZE
13 HISTCONTROL=ignorespace
14 echo $HISTCONTROL
15 history
[root@docker-node1 tomcat]#
那如果希望加上空格不记录,且能够去重,修改HISTCONTROL=ignoreboth即可