5周第3次课 shell介绍 命令历史 命令补全和别名 通配符 输入输出重定向

前端之家收集整理的这篇文章主要介绍了5周第3次课 shell介绍 命令历史 命令补全和别名 通配符 输入输出重定向前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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 关于命令历史的技巧

!n!word 如:!echo
命令 作用
!! 执行命令历史中最后一条命令(即上一次的命令)
执行命令历史中指定条目的命令
执行命令历史中离当前时间最近的,以 echo 开头的命令。

3.命令补全和别名

Liunx 系统中可以利用 tab 键来进行命令补全,也可以进行路径的补全。同时,在 CentOS7中可以做到参数的补全,比较实用!

3.1 命令和参数补全

命令补全

次数12
场景与效果
不存在相同开头命令/文件,按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的几个常见位置
  1. 每个用户家目录的.bashrc文件

  2. 目录/etc/porfile.d/中也有很多特定 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文件,并在其中输入两行随机字符。
命令在左 文件在右

特点<单个输出重定向>>2>2>>合并输出重定向&>=>+2>&>>=>>+2>>拆分输出重定向>> 2>>
输入重定向

右侧内容输入到左边 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 中

猜你在找的Bash相关文章