Linux Bash的基础特性
一、history(命令历史记录)
1、语法与常用参数
history
列出当前shell的所有history
history [-c]
将当前shell的所有 history 清除
history [n]
n为数字,列出最近的n条记录
history [-raw] histfiles
-a [HISTFILES]
:手动追加当前会话缓冲区的命令历史至文件中,如果histfiles事先不存在,则创建, 如果不指定histfiles文件,则默认写入~/.bash_history中
-r HISTFILES : 将histfiles中的内容读取到当前shell的history中
-w HISTFILES : 将当前shell 的history写入之histfiles文件中
2、环境变量
HISTSIZE:命令历史记录的条数,默认为1000条
HISTFILE:~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
[[email protected] ~]# echo $HISTFILE /root/.bash_history [[email protected] ~]# echo $HISTSIZE 1000 [[email protected] ~]# echo $HISTFILESIZE 1000
3、history的调用
!#:重复执行第#条命令
!!:执行上一条命令
!string:执行最近一条包含指定字符串的命令
!$:调用上一条命令的最后一个参数
[[email protected] ~]# history 10 1019 history -a 11.txt 1020 cat 11.txt 1021 echo $HISTSIZE 1022 ls 1023 echo $HISTFILESIZE 1024 history 1025 ping baidu.com 1026 alias 1027 ls 1028 history 10 #####!# [[email protected] ~]# !1026 alias alias cdnet=‘cd /etc/sysconfig/network-scripts‘ alias cp=‘cp -i‘ alias l.=‘ls -d .* --color=auto‘ alias ll=‘ls -l --color=auto‘ alias ls=‘ls --color=auto‘ alias mv=‘mv -i‘ alias rm=‘rm -i‘ alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘ #####!! [[email protected] ~]# !! alias alias cdnet=‘cd /etc/sysconfig/network-scripts‘ alias cp=‘cp -i‘ alias l.=‘ls -d .* --color=auto‘ alias ll=‘ls -l --color=auto‘ alias ls=‘ls --color=auto‘ alias mv=‘mv -i‘ alias rm=‘rm -i‘ alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘ #####!string [[email protected] ~]# !ping ping baidu.com PING baidu.com (111.13.101.208) 56(84) bytes of data. 64 bytes from 111.13.101.208: icmp_seq=1 ttl=128 time=66.8 ms 64 bytes from 111.13.101.208: icmp_seq=2 ttl=128 time=66.9 ms 64 bytes from 111.13.101.208: icmp_seq=3 ttl=128 time=66.9 ms 64 bytes from 111.13.101.208: icmp_seq=4 ttl=128 time=67.4 ms ^C --- baidu.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 7408ms rtt min/avg/max/mdev = 66.844/67.046/67.480/0.253 ms #####!$ [[email protected] ~]# ping -c 1 !$ ping -c 1 baidu.com PING baidu.com (111.13.101.208) 56(84) bytes of data. 64 bytes from 111.13.101.208: icmp_seq=1 ttl=128 time=67.4 ms --- baidu.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 4071ms rtt min/avg/max/mdev = 67.433/67.433/67.433/0.000 ms
4、控制命令历史的记录方式
环境变量:HISTCONTROL
ignoredups:忽略重复的命令,连续且相同的命令
ignorespace:忽略所有以空白开头的命令
ignoreboth: 以上两条均生效
修改环境变量:
[[email protected] ~]# export HISTCONTROL=ignoreboth [[email protected] ~]# echo $HISTCONTROL ignoreboth
二、命令与路径补全
1、命令补全
bash执行命令,在用户给定的字符串只有唯一对应的命令时,直接Tab补全;如果不唯一,则再次Tab会给出匹配到的命令列表。bash根据PATH变量中定义的路径自左向右寻找唯一匹配字符串的命令,第一次找到的即为要执行的命令
2、路径补全
把用户给出的字符串当作路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名,如果唯一,直接补全;否则再次Tab,给出列表
三、命令行展开
~:展开为用户的主目录
~USERNAME:展开为指定用户的主目录
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
[[email protected] ~]# mkdir -pv /tmp/{1{1.1,1.2},2}/{a,b} mkdir: 已创建目录 "/tmp/11.1" mkdir: 已创建目录 "/tmp/11.1/a" mkdir: 已创建目录 "/tmp/11.1/b" mkdir: 已创建目录 "/tmp/11.2" mkdir: 已创建目录 "/tmp/11.2/a" mkdir: 已创建目录 "/tmp/11.2/b" mkdir: 已创建目录 "/tmp/2" mkdir: 已创建目录 "/tmp/2/a" mkdir: 已创建目录 "/tmp/2/b"
四、命令的执行状态结果
程序执行有两类结果;一类是返回值,一类是执行状态结果
bash的特色标量$?,保存最近一条命令的执行状态结果
0:成功
1-255:失败
[[email protected] ~]# date 2017年 07月 09日 星期日 17:39:35 CST [[email protected] ~]# echo $? 0 [[email protected] ~]# data -bash: data: command not found [[email protected] ~]# echo $? 127
五、alias(命令别名)
1、语法与常用参数
alias[-p] [name[=value] ... ] -p:打印已设置的命令别名
alias:显示当前shell进程所有可用的命令别名
alias NAME=‘VALUE‘:定义别名NAME,相当于执行VALUE。
注意:VALUE中有空格等要带引号
2、alias配置
(1)在命令行中定义的别名,仅对当前shell有用
(2)定义在~/.bashrc中对当前用户有效
(3)定义在/etc/bashrc中对所有用户有效
(4)配置完成后,重读配置文件可立即生效
source /etc/bashrc
3、unalias(撤销别名)
unalias[-a] name [name ...] -a:撤销所有别名 注意:如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND":