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      ##再次运行命令,发现多了时间信息,设置成功
 1001  2017/11/15 20:14:38HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
 1002  2017/11/15 20: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 命令和参数补全

命令补全

次数场景与效果
1不存在相同开头命令/文件,按1下就可以补齐
2存在开头相同命令/文件,且大于2个时,需要按2下,才能出现待选例表,

参数补全

从 CentOS7开始,tab 键支持命令和参数双重补全,在补全参数时,用法和补全命令一样,但前提需要安装一个软件bash-completion

[root@centos701 ~]# yum install -y bash-completion
[root@centos701 ~]# init 6  或者 reboot

重启完成后,就可以体验参数的补全了!

3.2 别名

Linux中支持将一组命令+参数的组合通过 alias设置成特定字符组合,通过执行组合字符来达到输入对应正常命令和参数的目的,提高使用人员的效率。

3.2.1 当前用户已有别名查看

alias

[root@centos701 ~]# alias
alias cp='cp -i'alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --color=auto'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias ls='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 ~]#alias sysrenet=`systemctl restart network.service`
[root@centos701 ~]#sysrenet        ##别名同样支持补全

取消别名

unalias [自定义别名]

[root@centos701 ~]# unalias sysrenet[root@centos701 ~]# sysrenet-bash: sysrenet: 未找到命令

4. 通配符

符号作用举例说明
*表示任意多个字符(0-多个)ls test**表示后面不论接几个字符都接受(没有字符也匹配)
?表示任意单个字符ls test?;ls test????表示后面当且仅当接1个字符时才匹配;???表示一定要接3个字符
[ ]中间为范围和组合字符cp test[1~5] /tmptest1, 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 中
2>错误输出重定向覆盖原有内容lsaaa 2>2.txt将左侧错误的结果以覆盖的方式输出到2.txt 中
2>>错误输出追加重定向保留原有内容lsaaa 2>>2.txt将左侧错误的结果以追加的方式输出到2.txt 中
合并输出重定向



&>=>+2>正确和错误输出重定向覆盖原有内容ls [12].txt kkk.txt &>c.txt将左侧正确和错误的结果都输出到 c.txt 文件
&>>=>>+2>>正确和错误输出追加重定向保留原有内容ls [12].txt kkk.txt &>>c.txt将左侧正确和错误的结果都追加输出到 c.txt 文件
拆分输出重定向



> 2>正确和错误输出重定向覆盖原有内容ls [12].txt sasasa.txt>ab.txt 2>cd.txt将左侧正确的结果重定向输出到 ab.txt 中,将错误的结果重定向输出到 cd.txt 中
>> 2>>正确和错误输出追加重定向保留原有内容ls [12].txt sasasa.txt>>ab.txt 2>>cd.txt将左侧正确的结果以追加的方式输出到 ab.txt 中,将错误的结果以追加的方式输出到 cd.txt 中