linux基础之bash特性
1、命令历史
命令历史包含的环境变量
$HISTSIZE:命令历史记录的条数
$HISTFILE:命令历史文件~/.bash_history
$HISTFILESIZE:命令历史文件记录历史命令的条数
$HISTCONTROL:控制命令历史的记录方式
关于这个$HISTCONTROL环境变量值的介绍:
ignoredups:设置为这个值时,忽略重复的命令记录到命令历史中,这重复的命令必须是连续的,也就是挨着的($HISTCONTROL默认是ignoredups这个值)
如何设置:
export HISTCONTROL=”ignoredups”
ignorespace:设置为这个值时,忽略所有以空白字符开头的命令记录到命令历史中
如何设置:
export HISTCONTROL=”ignorespace”
ignoreboth:设置为这个值时,上面两个之所对应的功能都生效
如何设置:
export HISTCONTROL=”ignoreboth”
命令历史的使用
history -d num :清除命令历史记录中指定的命令历史编码数
history -c:清除所有命令历史记录
histroy num:显示历史命令记录中最近num条记录
history -a:手动追加当前会话命令历史缓冲区的命令到命令历史文件
命令历史的快捷键
!!:调用上一次使用的命令
!+num:调用历史命令记录中编号为num的命令
!+string:调用命令历史记录中最近一次使用的以string为开头的命令
!+$:调用上一条命令的最后一个参数的快捷键
ESC+ . :调用上一条命令的最后一个参数的快捷键,按键盘上ESC键,松开后再按点号
ALT+ . :调用上一条命令的最后一个参数的快捷键,按键盘上ALT键,不松开接着按点号(可能有些不管用)
2、命令补全
命令补全使用方式:当我敲击一个命令时,可以写前几个字符,然后使用tab键补全
命令补全的实现机制:bash根据PATH环境变量定义的路径,自左向右的在每个路径下搜索以给定字符为开头的对应的命名二进制可执行文件,如果找寻了所有路径只包含一个,那么直接补全,如果包含多个,那么在使用一次tab键,打印给定字符包含的所有可执行命令
bash执行命令过程
外部命令:bash根据PATH环境变量定义的路径,自左向右的在每个路径下搜索以给定命令命名二进制可执行文件,第一次找到即为要执行的命令
3、路径补全
路径补全的实现机制:把用户给出的字符串当做路径的开头,并在其指定上级目录下搜索以指定的字符串开头的文件名,如果唯一则按tab键补全路径,如果不唯一则需要再按一下tab键,此时会列出以这个字符串开头的所对应的文件列表。
注意:他还有一个特殊的机制,那就是当我们给定的字符串搜索时,如果这个目录下的所有文件包含这个字符串,同时还包含了其他相同字符,那么再按一下tab键会补全到所有相同字符串的位置
4、命令行展开
~:展开为用户的家目录
使用案例
[root@oldboy ~]# cd ~oldboy [root@oldboy oldboy]# pwd /home/oldboy
{}:可承载一个以逗号分割的列表,并将其展开为多个路径
使用方式
/tmp/{a,b} 展开为 /tmp/a /tmp/b
/tmp/{tom,jerry}/ha 展开为 /tmp/tom/ha /tmp/jerry/ha
5、命令执行结果状态
命令执行后的结果无非两种,成功或者失败,bash使用特殊变量$?保存最近一条命令执行的状态结果
状态码
0:表示成功
1-255:表示失败
程序的执行有两类结果
一类是:程序的返回值
另一类是:程序的执行状态结果
6、命令别名-alias
基本介绍
命令取的另外一个名字,我们可以把很长的命令格式,通过一个别名,把它简化为一个简短的名字。
基本用法
alias [-p] [name[=value] ... ]
常用参数
-p:打印所有定义的别名
使用注意
alias命令是一个内建命令,如果alias不带任何参数或者选项表示列出所有的别名,如果要定义别名使用alias 命令简写=”命令长格式”
在命令行定义的别名仅对当前shell进程有效。如果想永久有效,需要定义在配置文件中
配置文件有两种:
仅对当前用户有效
~/.bashrc
对所有用户有效
/etc/bashrc
任何修改配置文件,只能被新进程或者让新进程重新读取才生效(这里的进程指的是bash进程)
让bash进程重新读取使用source命令
source 配置文件
. 配置文件
注:新配置的配置文件不会立刻生效,需让bash进程重新读取才会生效
撤销别名:unalias
unalias 别名 :撤销指定别名
unalias -a:撤效全部定义的别名
注意:如果不想使用别名,但是又不想去除别名定义,那么可以在使用别名前加一个反斜线[ \ ],或者补全命令的全路径
7、Glob
基本介绍
bash中用于实现文件名通配
基本使用
通配符
*
基本介绍
匹配任意长度的任意字符
基本使用
a*c 表示 a111c,asdc,ac等,但是不表示acb
?
基本介绍
匹配任意单个字符,必须包含单个字符
基本使用
a?b 表示 acb,adb等,但是不表示adbc,acnb,ab
[]
基本介绍
匹配指定范围内的任意单个字符,如果范围内是小写字母,那么是不区分大小写的,如果范围内是大写,那么只是取大写范围。
注意:如果要匹配连字符[ - ],那么要使用转义符号
案例演示
a[\-cv]b 表示匹配 a-b,acb,avb等
基本使用
[abc] 表示 a,b,c等,但不表示ab,ac,abc等
a[a-z]c 表示 aCc,acc,aDc,adc等
[^]
基本介绍
匹配指定范围之外的任意字符
基本使用
a[^0-9] 表示 ab,a^,a@等,不表示a1,a2等
专用字符集合表示法
[:digit:]:任意数字相当于0-9,这里只表示数字,不是匹配数字,匹配数字要写成[[:digit:]]
[:lower:]:任意的小写字母,这里只表示小写字母,不是匹配小写字母,匹配小写字母要写成[[:lower:]]
[:upper:]:任意的大写字母,这里只表示大写字母,不是匹配大写字母,匹配大写字母要写成[[:upper:]]
[:alpha:]:任意的大小写字母,这里只表示大小写字母,不是匹配大小写字母,匹配大小写字母要写成[[:alpha:]]
[:alnum:]:任意的数字和字母,这里只表示数字和大小写字母,不是匹配数字和大小写字母,匹配数字和大小写字母要写成[[:alnum:]]
[:space:]:任意的空格,这里