bash及其特性
shell:外壳
GUI:Gnome,KDE,Xfce
CLI:sh,csh,ksh,bash(Bourne-Again SHell),tcsh,zsh
不同用户启动相同sh程序,但是是不同的进程。
进程:在每个进程看来,当前主机上只存在内核和当前进程。
进程是程序的副本,也是程序执行的实例,具有生命周期。
用户工作环境
bash:不同用户的工作环境设定可以不同。
# root
$user
shell:有子shell的概念。可以交互打开。
bash:
1、命令历史,命令补全
2、管道、重定向
3、命令别名
4、命令行编辑
5、命令行展开
6、文件名通配
7、支持变量
8、支持编程
特性:
一、命令行编辑
光标跳转:Ctrl+a 跳到命令行首
Ctrl+e 跳到命令行尾
Ctrl+u 删除光标至行首的内容
Ctrl+k 删除光标至行尾的内容
Ctrl+左右箭头 一次跳一个单词
Ctrl+l 清屏
二、命令历史
自动记录使用过的命令,保存在内存的一段缓冲区中。
使用 history 查看命令历史。
-c:清空命令历史
-d OFFSET [n]:删除指定位置历史列表。 history -d 300 20
当用户退出,会在用户家目录下追加此前的命令历史到.bash_history隐藏文件。
-w:将缓冲区的命令历史至历史文件中
命令补全:
在PATH环境变量下搜索补全。
路径补全:
环境变量:
PATH:命令搜索路径
HISTSIZE:命令历史大小
[root@localhost ~]# echo $HISTSIZE
1000
命令历史的使用技巧:
!n :执行命令历史中的第n条命令
324 history
325 ls -a
326 echo $HISTSIZE
327 history
[root@localhost ~]# !326
echo $HISTSIZE
1000
!-n:执行历史中倒数第n条命令。
!!:执行上一条命令。
328 echo $HISTSIZE
329 history
[root@localhost ~]# !-2
echo $HISTSIZE
1000
[root@localhost ~]# !!
echo $HISTSIZE
1000
[root@localhost ~]# !!
echo $HISTSIZE
1000
!string: 执行命令历史中最近一个以指定字符串开头的命令。
!$:引用前一个命令的最后一个参数。
Esc, . :按下Esc,再按‘点’,引用最后一个参数。
三、命令别名
alias CMDALIAS='COMMAND [option] [arguments]'
仅在当前shell进程的生命周期有用。别名的有效范围仅为当前shell进程。
[root@localhost ~]# alias cls=clear
撤销别名
[root@localhost ~]# unalias cls
\CMD : 来使用命令本身,而不是别名(当别名和命令名称一样时)
当在~/.bashrc下编辑别名后,可使用 source .bashrc 命令运行bash。直接使用别名
四、命令替换 $(),或反引号 `COMMAND`
把命令中某个子命令替换为其执行结果的过程。
[root@localhost sysconfig]# echo "The current directory is $(pwd)."
The current directory is /etc/sysconfig.
[root@localhost sysconfig]# cd /root/
[root@localhost ~]# echo "The current directory is $(pwd)."
The current directory is /root.
[root@localhost ~]# echo "The current directory is `pwd`."
The current directory is /root.
创建 file-2016-5-17-18-52. txt
[root@localhost ~]# touch ./file-$(date +%F-%H-%M-%S).txt
bash支持的引号:
``:反引号,命令替换
"":弱引用,可以实现变量替换,将变量名替换为变量值
'' :强引用,不完成变量替换。
五、文件名通配,globing
*:匹配任意长度的任意字符
?:匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[abc],[a-z],[A-Z],[0-9],[a-zA-Z]
[^]:匹配指定范围外的任意单个字符
[root@localhost test]# touch a123 abc ab123 xyz x12 xyz123
[root@localhost test]# ls
a123 ab123 abc x12 xyz xyz123
[root@localhost test]# ls a*
a123 ab123 abc
[root@localhost test]# ls a*3
a123 ab123
[root@localhost test]# ls *y*
xyz xyz123
[root@localhost test]# touch helloy123
[root@localhost test]# ls *y*
helloy123 xyz xyz123
[root@localhost test]# touch y123
[root@localhost test]# ls *y*
helloy123 xyz xyz123 y123
[root@localhost test]# ls ?y*
xyz xyz123
[root@localhost test]# touch 123
[root@localhost test]# ls [a-zA-Z]*[0-9]
a123 ab123 helloy123 x12 xyz123 y123
[root@localhost test]# ls [^0-9]*
a123 ab123 abc helloy123 x12 xyz xyz123 y123
[:punct:] :所有 标点符号
[:lower:] : 小写字母
[:upper:] : 大写字母
[:alpha:] :大小写字母
[:digit:] : 数字
[:alnum:] : 数字和大小写字母
[root@localhost test]# man 7 glob //查看
[root@localhost test]# ls [[:alpha:]]*[[:space:]]*[[:alpha:]] //<span style="font-size: 13.3333px;">匹配文件名中有空白字符的文件</span>
a b
[root@localhost test]# ls [[:alpha:]]*[^[:alpha:]] //字母开头,非字母结尾
a123 ab123 helloy123 x12 xyz123 y123