linux之基础命令history使用详解

2023年 7月 15日 74.7k 0

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即可QQ截图20160705140309.png

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论