1.shell介绍
shell 是一个命令解释器,提供用户和机器之间的交互。它支持特定语法,逻辑判断、循环。比如,我们登陆的终端,它其实就是一个 shell,供我们和机器交互。
Linux 下面有很多 shell,每个用户都可以有自己特定的 shell。
CentOS7默认shell是bash(Bourne Agin Shell),还有 zsh ksh 等 shell。
2.命令历史
history记录命令历史
2.1 具体存放位置:
/root/.bash_history
默认1000条
2.2 查看当前 history 支持存储的数量:
echo $HISTSIZE
2.3 history记录的数量
vim /etc/profile修改HISTSIZE后面的数字即可source /etc/profile
更新系统变量或者重进终端
2.4 清空内存中的命令历史
内存中的历史命令只在退出终端时保存到.bash_history 中去history -c
2.5 设置命令历史中加入运行时间
[root@centos701~]#HISTTIMEFORMAT="%Y/%m/%d%H:%M:%S"##设置history的格式变量[root@centos701~]#echo$HISTTIMEFORMAT##查看变量是否生效%Y/%m/%d%H:%M:%S [root@centos701~]history##再次运行命令,发现多了时间信息,设置成功 10012017/11/1520:14:38HISTTIMEFORMAT="%Y/%m/%d%H:%M:%S" 10022017/11/1520:14:57echo$HISTTIMEFORMAT
永久生效:将HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
这条加入/etc/profile
文件,最好和HISTSIZE
放在一起,然后退出终端重进即可。
2.6 设置 history 记录防删除
通过设置隐藏权限(a权限),能让命令历史不被其他人删除,以便于以后排错和查找事件
[root@centos701~]#chattr+a~/.bash_history
这样设置后,所有用户的命令历史都会记录,其他用户只能追加,不能删除。
非正常退出终端,命令历史记录会不全
2.7 关于命令历史的技巧
命令 | 作用 |
---|---|
!! | 执行命令历史中最后一条命令(即上一次的命令) |
执行命令历史中指定条目的命令 | |
执行命令历史中离当前时间最近的,以 echo 开头的命令。 |
3.命令补全和别名
Liunx 系统中可以利用 tab 键来进行命令补全,也可以进行路径的补全。同时,在 CentOS7中可以做到参数的补全,比较实用!
3.1 命令和参数补全
命令补全
场景与效果 |
---|
不存在相同开头命令/文件,按1下就可以补齐 |
存在开头相同命令/文件,且大于2个时,需要按2下,才能出现待选例表, |
参数补全
从 CentOS7开始,tab 键支持命令和参数双重补全,在补全参数时,用法和补全命令一样,但前提需要安装一个软件
bash-completion
[root@centos701~]#yuminstall-ybash-completion [root@centos701~]#init6或者reboot
重启完成后,就可以体验参数的补全了!
3.2 别名
Linux中支持将一组命令+参数的组合通过
alias
设置成特定字符组合,通过执行组合字符来达到输入对应正常命令和参数的目的,提高使用人员的效率。
3.2.1 当前用户已有别名查看
alias
[root@centos701~]#alias aliascp='cp-i'aliasegrep='egrep--color=auto'aliasfgrep='fgrep--color=auto'aliasgrep='grep--color=auto'aliasl.='ls-d.*--color=auto'aliasll='ls-l--color=auto'aliasls='ls--color=auto'...................... ......................
3.2.2 设置alias的几个常见位置
3.2.3 设置和取消别名 alias
以重启网络
systemctl restart network.service
这条命令和参数来举例
设置别名
alias[自定义别名]=`正常执行命令+参数` [root@centos701~]#aliassysrenet=`systemctlrestartnetwork.service` [root@centos701~]#sysrenet##别名同样支持补全
取消别名
unalias[自定义别名] [root@centos701~]#unaliassysrenet[root@centos701~]#sysrenet-bash:sysrenet:未找到命令
4. 通配符
作用 | 举例 | 说明 |
---|---|---|
表示任意多个字符(0-多个) | ls test* | *表示后面不论接几个字符都接受(没有字符也匹配) |
表示任意单个字符 | ls test?;ls test??? | ?表示后面当且仅当接1个字符时才匹配;???表示一定要接3个字符 |
中间为范围和组合字符 | cp test[1~5] /tmp | test1,test2,test3,test4,test5若存在,则复制到/tmp目录下 |
中间表示一个或多个字符,多个时用“,”隔开 | ll {*.log,*.txt } |
查询以.log和.txt结尾的文件。 |
5.输入输出重定向
说明:预先在当前目录创建1.txt文件,并在其中输入两行随机字符。
命令在左 文件在右
输入重定向 | ||||
---|---|---|---|---|
右侧内容输入到左边 | wc -l < 1.txt | 将右侧1.txt的内容输入到左边供命令调用,即计算1.txt文本内容的行数 | ||
> | 正确输出重定向 | 覆盖原有内容 | cat 1.txt>2.txt | 将左侧正确的结果以覆盖的方式输出到2.txt中 |
正确输出追加重定向 | 保留原有内容 | cat 1.txt>>2.txt | 将左侧正确的结果以追加的方式输出到2.txt 中 | |
错误输出重定向 | lsaaa 2>2.txt | 将左侧错误的结果以覆盖的方式输出到2.txt 中 | ||
错误输出追加重定向 | lsaaa 2>>2.txt | 将左侧错误的结果以追加的方式输出到2.txt 中 | ||
正确和错误输出重定向 | ls [12].txt kkk.txt &>c.txt | 将左侧正确和错误的结果都输出到 c.txt 文件 | ||
正确和错误输出追加重定向 | ls [12].txt kkk.txt &>>c.txt | 将左侧正确和错误的结果都追加输出到 c.txt 文件 | ||
> 2> | ls [12].txt sasasa.txt>ab.txt 2>cd.txt | 将左侧正确的结果重定向输出到 ab.txt 中,将错误的结果重定向输出到 cd.txt 中 | ||
ls [12].txt sasasa.txt>>ab.txt 2>>cd.txt | 将左侧正确的结果以追加的方式输出到 ab.txt 中,将错误的结果以追加的方式输出到 cd.txt 中 |