命令历史,bash的基础特性之一
history命令可以用来查看命令历史用来确认在什么时间使用了什么命令也可以用它来重复执行命令。
当我们登录shell时,会读取命令历史文件中记录下的命令,在家目录的.bash_history文件中,很多黑客在入侵你的服务器后,会清除此文件的内容让你不知道他到底做了什么操作。
登录shell后,新执行的命令是记录在缓存中的,命令会在用户退出时追加到命令历史文件中。
我们可以通过配置用户家目录下的.bashrc或者/etc/profile文件以及/etc/profile.d/NAME.sh,来设置history命令的变量及显示特性。推荐写到/etc/profile.d/NAME.sh里面,对于.bashrc和/etc/profile文件,我们会在以后的系统启动过程中学习。
定制命令历史相关环境变量:
HISTSIZE:shell进程可保留命令历史记录的条数
HISTFILE:持久保存命令历史的文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT=“%F %T “ 显示时间
HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2开头的历史
控制命令历史的记录方式:
环境变量:HISTCONTROL
ignoredups 默认,忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
export 变量名="值“
存放在 /etc/profile 或 ~/.bash_profile
重复前一个命令,有4种方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-1 并回车执行
按 Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
Ctrl + n 显示当前历史中的下一条命令,但不执行
Ctrl + j 执行当前命令
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以“string”开头的命令
!?string 重复前一个包含string的命令
!string:p 仅打印命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!*:p 打印输出 !*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的第一个string1替换为string2
!:gs/string1/string2 将上一条命令中所有的string1都替换为 string2
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
要重新调用前一个命令中最后一个参数
!$ 表示
Esc, .(点击Esc键后松开,然后点击 . 键)
Alt+ .(按住Alt键的同时点击 . 键)
调用历史参数
command !^ 利用上一个命令的第一个参数做cmd的参数
command !$ 利用上一个命令的最后一个参数做cmd的参数
command !* 利用上一个命令的全部参数做cmd的参数
command !:n 利用上一个命令的第n个参数做cmd的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后一个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一 个参数
command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n 个参数
command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数
命令补全,路径补全
shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令;
命令查找机制:
查找内部命令;
根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名
给定的打头字符串如果能唯一标识某命令程序文件,则直接补全
不能唯一标识某命令程序文件,再次tab键一次,会给出列表;
路径补全
在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件;
tab:
如果能唯一标识,则直接补全
否则,再次tab,给出列表
命令行展开机制
~:自动展开为用户的家目录,或指定的用户的家目录
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
例如:/tmp/{a,b} 相当于/tmp/a /tmp/b
命令的执行状态结果
bash通过命令执行的状态返回值来输出此结果:
成功:0
失败:1-255
命令执行完成后,其状态返回值保存于bash的特殊变量$?中,命令运行结束后立即使用
命令正常执行时,有的还会有命令返回值
根据命令及其功能的不同,结果各不相同
引用命令的执行结果:
$(COMMAND)
或`COMMAND`
引用
强引用:''
弱引用:""
命令引用:``
快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Alt + f 光标向右移动一个单词尾
Alt + b 光标向左移动一个单词首
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + N 提示输入指定字符后,重复显示该字符N次 注意:Alt组合快捷键经常和其它软件冲突
globbing文件名通配机制
匹配模式:需要用到元字符(整体文件名匹配,而非部分)
*:匹配任意长度的任意字符
pa*,*pa*,*pa,*p*a*
?:匹配任意单个字符
pa?,??pa,p?a,p?a?
[]:匹配指定范围内的任意单个字符
有几种特殊格式:
[a-z],[A-Z],[0-9],[a-z0-9]
[[:upper:]] 所有大写字母
[[:lower:]]所有小写字母
[[:alpha:]]所有字母
[[:digit:]]所有数字
[[:alnum:]]所有字母和数字
[[:space:]]所有空白字符
[[:punct:]]所有标点符号
[^]:匹配指定范围外的任意单个字符
[^[:upper:]] 匹配非大写字母
[^0-9]或[^[:digit:]] 匹配非数字
[^[:alnum:]] 匹配非正常字符
IO重定向及管道(bashshell的重要特性)
标准IO和管道