8.1 shell介绍
什么是shell
- shell是一个命令解释器,提供用户和机器之间的交互(命令行终端)
- 脚本shell是一种表现形式
- passwd中最后一段即是用户的shell
- shell支持特定语法,比如逻辑判断、循环
- 每个用户都可以有自己特定的shell
- CentOS7默认shell为bash(Bourne Again Shell)
- 还有zsh ksh等。大体一样,细节有差异。
- 默认没有安装
[root@lixiang01 ~]# yum list |grep zshautojump-zsh.noarch 22.3.0-3.el7 epel zsh.x86_64 5.0.2-25.el7_3.1 updates zsh-html.x86_64 5.0.2-25.el7_3.1 updates zsh-lovers.noarch 0.9.0-1.el7 epel [root@lixiang01 ~]# yum list |grep kshksh.x86_64 20120801-26.el7 base mksh.x86_64 46-5.el7 base
8.2 命令历史
[root@ax-01 ~]# history
- history命令,记录历史命令
- 用户的家目录下的.bash_history,记录上一次正常退出后的命令历史
- 非正常退出保存不完整
修改命令历史保存数量
[root@ax-01 ~]# echo $HISTSIZE //默认命令历史最大1000条1000[root@ax-01 ~]# vim /etc/profile //可以在此调整环境变量
[root@ax-01 ~]# source !$source /etc/profile[root@ax-01 ~]# echo $HISTSIZE5000
- 由环境变量控制$HISTSIZE保存最大保存命令。运行时内存可以保存多于1000条
- history -c 可以清空内存中的命令历史
- 退出终端后保存至.bash_history
修改命令历史显示格式
[root@ax-01 ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"[root@ax-01 ~]# history 2 2017/08/30 09:51:25echo $HISTSIZE 3 2017/08/30 09:51:44vim /etc/profile 4 2017/08/30 09:53:37echo $HISTSIZE[root@ax-01 ~]# !vimvim /etc/profile
[root@ax-01 ~]# source /etc/profile[root@ax-01 ~]# !echoecho $HISTTIMEFORMAT%Y/%m/%d %H:%M:%S
- HISTTIMEFORMAT="%Y/%m/%d % H:%M:%S" //需要注意大小写 修改profile永久生效
命令历史永久保存
[root@ax-01 ~]# chattr +a .bash_history [root@ax-01 ~]# lsattr .bash_history -----a-------e-- .bash_history
- 不受环境变量 HISTSIZE影响
叹号常见用法
[root@ax-01 etc]# cd /etc/yum.repos.d/[root@ax-01 yum.repos.d]# cd ..[root@ax-01 etc]# !! 再次执行上一条命令cd ..[root@ax-01 /]#[root@ax-01 /]# cd[root@ax-01 ~]# history | tail -n4 1051 cd /etc/yum.repos.d/ 1052 cd .. 1053 cd 1054 history | tail -n4[root@ax-01 ~]# !1051 //照history编号运行cd /etc/yum.repos.d/
- !! // 最后一条命令
- !n // n是数字 按照history编号运行
- !xx //执行最近一次以xx字符开头的命令
8.3 命令补全和别名
- tab键命令补全,
- 敲一下如果后续字符唯一则自动补全
- 如果不唯一,敲两下看可选后续字符
参数补全,
[root@ax-01 ~]# yum install -y bash-completion //安装参数补全包,需要重启[root@ax-01 ~]# reboot[root@ax-01 ~]# systemctl restart networknetwork-online.target network.service
- CentOS7新加入的支持参数补全。很实用
alias别名
[root@ax-01 ~]# alias renet='systemctl restart network'[root@ax-01 ~]# echo "alias renet='systemctl restart network'" >> .bashrc[root@ax-01 ~]# unalias renet 取消[root@ax-01 ~]# vim .bashrc 删除定义别名
- 部分系统别名在/etc/profile.d/目录下的文件里
- 每个用户都有自己的别名配置文件
8.4 通配符
- ls *.txt //表示任意
- ls ?.txt //表示任意1个
- ls [0-9].txt //表示范围中任意1个
- ls {1,3}.txt //同上
实验
[root@lixiang01 ~]# ls *txt*1_heard.txt.bak 1.txt 22.txt 2.txt.bak test.txt word1.txt 记录.txt[root@lixiang01 ~]# ls 1*123.tar.bz2 1_heard.txt.bak 1.txt111:22.txt[root@lixiang01 ~]# ls ?.txt1.txt[root@lixiang01 ~]# touch 2.txt[root@lixiang01 ~]# touch 3.txt[root@lixiang01 ~]# ls ?.txt1.txt 2.txt 3.txt[root@lixiang01 ~]# ls [0-3].txt1.txt 2.txt 3.txt[root@lixiang01 ~]# ls [123].txt1.txt 2.txt 3.txt[root@lixiang01 ~]# ls [0-9].txt1.txt 2.txt 3.txt[root@lixiang01 ~]# ls [0-9a-zA-Z].txt1.txt 2.txt 3.txt[root@lixiang01 ~]# touch d.txt[root@lixiang01 ~]# ls [0-9a-zA-Z].txt1.txt 2.txt 3.txt d.txt[root@lixiang01 ~]# ls {1,3,d}.txt1.txt 3.txt d.txt
8.5 输入输出重定向
> 输出重定向>> 追加2> 错误重定向,支持追加2>>&> 全部重定向,支持追加&>>
区分输出正确与错误信息
[root@ax-01 ~]# cat /etc/passwd nosuchthing.txt > right.log 2> err.log[root@ax-01 ~]# cat err.log cat: nosuchthing.txt: No such file or directory