一、命令行历史操作

在Linux中有一个history命令,通过它我们可以很方便的查找并执行原来的操作,但是在方便的同时,这个命令也会给系统带来安全隐患,所以配置恰当的history命令是一个Linux运维人员的基本技能之一。

  • 当登录系统时,Linux会自动加载~/.bash_history中的内容到缓存中

  • 登陆后执行的命令操作会记录在缓存中,当用户退出时,系统会自动将缓存中的内容写入命令文件中

history最大的用处是方便我们查找调用以前的命令,其中重复执行前一个命令有4种方法:

  1. 使用上下方向键查找

  2. 执行!!并回车

  3. 执行!-1回车执行

  4. 按ctrl+p回车执行

# !!
ls
adjtime                  e2fsck.conf  krb5.conf                 pki             sestatus.conf
......
[root@centos7 etc]# !-1
ls
adjtime                  e2fsck.conf  krb5.conf                 pki             sestatus.conf
......
  • !字符串:执行前一个以字符串开头的命令

  • !数字n:执行history中数字n的命令

  • !?字符串:执行前一个包含字符串的命令

  • !-n:执行第前n个命令

也可以用ctrl+r来通过关键字搜索以前执行的命令

如果要重新使用上一个命令的参数,有下面几种方法:

  1. !$表示上一个命令的最后一个参数

  2. esc+.:通常在ssh客户端,先按esc松手后在按.,同样表示上一个命令的最后一个参数

调用历史参数:

  • !^:上一个命令的第一个参数

  • !$:上一个命令的最后一个参数

  • !*:上一个命令的所有参数

  • !:n :上一个命令的第n个参数

  1. !n:^:调用第n个命令的第一个参数

  2. !n:$:调用第n个命令的最后一个参数

  3. !m:n:调用第m个命令的第n个参数

  4. !m:*:调用第m个参数的所有命令

  1. !str:^:调用以str开头命令的第一个参数

  2. !str:$:调用str开头命令的最后一个命令

  3. !str:*:调用str开头命令的所有命令

  4. !str:n:调用str开头的第n个命令


history的命令选项:

-c:清空history列表

-d:删除指定的命令,后面接num

n:显示最近的n条历史

-a:追加本次会话新加的命令到历史文件

-n:读历史文件中没有读的到历史列表

-r:读历史文件附加到列表,会叠加原来的命令

-w:保存历史列表到指定的文件

-p:展开历史参数成多行,但不存在列表中

-s:展开历史参数成一行,保存在列表后


history的相关环境变量:

HISTSIZE:命令历史记录的条数

HISTFILE:指定历史文件,默认为~/.bash_history

HISTFILESIZE:历史文件记录历史的条数

HISTTIMEFORMAT="%F %T "记录历史执行时间,注意空格

HISTIGNORE="str1:str2"忽略str1和str2,注:只忽视str命令,如果str命令带参数则不忽视

重点:HISTCONTROL:后面接可选参数(多选一),且只对设置以后的命令生效,但是如果后面执行了相同的命令,以前的相同命令也会被删除

 ignoredups:忽略重复的命令,相同连续为重复

 ignorespace:忽略空格开头的命令

 ignoreboth:ignoredups+ignorespace

 erasedups:删除重复命令,不论是否连续


bash的配置文件:
profile类:为交互式登录的shell提供配置

    全局:/etc/profile,/etc/profile.d/*.sh

    个人:~/.bash_profile

作用:1、定义环境变量         2、运行命令或脚本


bashrc类:为非交互式登录的shell提供配置

        全局:/etc/bashrc

        个人:~/.bashrc

作用:1、定义命令别名        2、定义本地变量


其中:cd -和~-有一些区别

[root@localhost ~]# cd -
/testdir
[root@localhost testdir]# cd -
/root
[root@localhost ~]# cd ~-
[root@localhost testdir]# cd ~-
[root@localhost ~]#

可以看出,-和~-在cd中使用没有区别,但是-只有cd使用有效,而~-则适用于其他的命令

[root@localhost ~]# cd /testdir/
[root@localhost testdir]# ls -
ls: cannot access -: No such file or directory
[root@localhost testdir]# ls ~-
anaconda-ks.cfg  Documents  install.log         
Music     Public     VideosDesktop          
Downloads  install.log.syslog  Pictures  Templates
[root@localhost testdir]# ls /root/
anaconda-ks.cfg  Documents  install.log         
Music     Public     VideosDesktop          
Downloads  install.log.syslog  Pictures  Templates