bash特性
一些关于bash的特性和用法
1.光标跳转
ctrl+a:跳到命令行首 ctrl+e:跳到命令行尾
ctrl+u:删除光标至行首 ctrl+k:删除光标至行尾
ctrl+←:向左跳一个单词 ctrl+→:向右跳一个单词
ctrl+l:清屏,clear
2.命令历史
用户每输入一次命令,都会被记录到命令历史中,命令历史默认记录的条数为1000条,暂存于内存中,当用户退出bash后,命令历史会被记录到用户家目录下的.bash_history文件下
[root@localhost ~]# echo $HISTSIZE 命令历史缓冲区默认大小 1000 [root@localhost ~]# ls -la .bash_history 命令历史保存文件 -rw-------. 1 root root 1388 Dec 25 13:49 .bash_history
history:查看命令历史
-c:清空命令历史
-d:删除指定序号的命令历史
[root@bogon ~]# history -d 66 代表删除第66条命令历史 [root@bogon ~]# history -d 66 3 代表删除第66条命令历史后后面的2个
-w:保存命令历史到历史文件
命令历史的使用技巧:
!n:执行命令历史中的第n条命令
!-n:执行命令历史中的倒数第n条命令;感觉这个并不好用,可以用↑键去找
!!:执行上一条命令;这个也不好用,直接用上↑键就可以
!STRING:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数。或者也可以使用“按下ESC松开之后按‘.’”ESC .
3.命令别名
命令别名可以快速的执行一段长命令,或者你不习惯使用某个命令,可以直接定义命令别名来代替他。可以通过alias来查看所有已经定义的命令别名。
alias 别名='原命令 [选项] [参数]' 定义命令别名
unalias 别名 取消命令别名
\命令 直接使用原始命令
4.命令替换、变量替换
在一些时候,执行命令的时候,可能需要另一个命令的支持,例如我要新建一个现在时间的文件,命令替换可以用$()或反引号``完成。
[root@bogon test]# touch $(date +%y-%m-%d-%H-%M-%S).doc [root@bogon test]# ls 17-12-27-00-27-15.doc 可以使用$() [root@bogon test]# touch `date +%y-%m-%d-%H-%M-%S`.doc [root@bogon test]# ls 17-12-27-00-27-15.doc 17-12-27-00-29-54.doc 也可以使用``反引号
变量替换可以使用${}完成,当不影响调用变量名称时,大括号{}可以省略
[root@bogon ~]# a=bbb [root@bogon ~]# echo $a ;echo $aa ;echo ${a}a bbb bbba
5.引号
三种引号的用法
` `:命令替换,$()同样可以使用命令替换
" ":弱引用,变量替换
' ':强引用,不完成变量替换
6.文件名通配符
通常在查找文件时,不能准确描述文件名,但知道文件名格式,可以用通配符来查找
*:匹配任意长度任意字符
?:匹配任意单个字符
[ ]:匹配中括号内的单个字符
[^ ]:匹配除了括号内的任意单个字符
[0-9] [[:digit:]] 数字
[a-z] [[:lower:]] 小写字母
[A-Z] [[:upper:]] 大写字母
[a-zA-Z] [[:alpha:]] 大小写字母
[a-zA-Z0-9] [[:alnum:]] 数字和大小写字母
[[:space:]] 空白字符
[[:punct:]] 标点符号
7.bash配置文件
全局配置文件:/etc/profile,/etc/bashrc和(etc/profile.d/*.sh这里面是各种shell脚本)
个人配置文件:~/.bash_profile,~/.bashrc
profile类文件用来在登入系统时设定环境变量,运行命令或脚本的
bashrc类文件是用来登入系统时设定本地变量,定义命令别名的
登录式shell读取配置文件过程:
/etc/profile->/etc/profilce.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
非登录式shell读取配置文件过程:
~/.bashrc->/etc/basrc->/etc/profile.d/*.sh
最终都是以个人shell为标准
8.输入输出重定向
>:覆盖输出
>>:追加输出
2>:错误覆盖输出
2>>:错误追加输出
&>:正确错误都输出到一个文件
[root@bogon ~]# ls -l > a 2> b ##这样正确输出给a,错误输出给b
可以用set -C禁止对已经存在文件使用覆盖重定向,强制覆盖输出使用>| ,用set +C关闭上述功能。
<:输入重定向
[root@localhost ~]# tr 'a-z' 'A-Z' < a ABCEDFG
<<:此处输入文本,后缀即为结束符
[root@localhost ~]# cat <<a > aaa > aa > a aaa aa
|:管道符,将前一个命令执行的结果传递给下一个命令