3. Shell基础知识
    3.1 Shell的由来
        3.1.1 Bourne Agin Shell
        3.1.2 其他的shell, 有 zsh, ksh等
    3.2 查看有没有shell
        3.2.1 yum list | grep zsh
        3.2.2 ls /root/.bash_history
        3.2.3 echo $HISTSIZE -> vi /etc/profile 修改HISTSIZE的值 -> source /etc/profile
        3.2.4 history -c //清空命令历史(内存中的)
        3.2.5 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"
        3.2.6 vi /etc/profile
        3.2.7 chattr +a ~/.bash_history  //只能被追加,不会被删除
        3.2.8 !!  //最后一条命令;  !n  //     !words //
    3.3 安装参数补全源
        3.3.1 yum install -y bash-completion //安装参数补全源后需要重启电脑(reboot)才生效
        3.3.2 systemctl restart network.service //重启网络服务
        3.3.3 rpm -qa bash-completion 
    3.4 alias 配置文件
        3.4.1 vi .bashre //alias的配置文件(一部分)
        3.4.2 cd /etc/profile.d/  //alias其他的一部分配置文件
        3.4.3 Tab键: 
            3.4.3.1 按一下匹配命令和参数
            3.4.3.2 按两下显示匹配信息供选择
    3.5 通配符
        3.5.1 * 匹配所有字符 ls *.txt
        3.5.2 ? 匹配一个字符 ls ?.txt
        3.5.3 ls [0-9].txt
        3.5.4 ls {1,2}.txt
        3.5.5 重定向 cat 1.txt > 2.txt
        3.5.6 追加重定向 cat 1.txt >> 2.txt
        3.5.7 错误重定向 lsaaa 2> a.txt 
        3.5.8 追加错误重定向 lsaaa 2>> a.txt
        3.5.9 wc -l < 1.txt //输入重定向,wc -l查看文本行数;左边需要是命令
        3.5.10 ls [12].txt aaa.txt &> a.txt  //&> 为正确错误重定向
        3.5.11 ls [12].txt aaa.txt >1.txt 2>a.txt  //将正确的和错误的区分开
    3.6 管道符和作业控制
        3.6.1 cat 1.txt | wc -l
        3.6.2 cat 1.txt | grep 'aaa'
        3.6.3 ctrl + z //暂停一个任务
        3.6.4 df -h //查看磁盘使用量
        3.6.5 fg //前台frontGround
            3.6.5.1 fg IDNumber
        3.6.6 jobs //查看后台或已停止的任务
        3.6.7 bg //后台background
            3.6.7.1 bg IDNumber
        3.6.8 vmstate 1  //动态的显示系统状态
        3.6.9 sleep 100 //暂停100秒
            3.6.9.1 sleep 100 & //把命令放到后台运行
            3.6.9.2 ps aux| grep sleep   //查看进程
    
    3.7 shell变量
        3.7.1 env //查看系统的环境变量
        3.7.2 set 命令
            3.7.2.1 set |grep 111  //查找111
            3.7.2.2 set 命令包含了很多变量,并且包含用户自定义的变量
            3.7.2.3 a=111  //自定义变量
            3.7.2.4 set 用来显示本地变量,env 用来显示环境变量, export 用来显示和设置环境变量
        3.7.3 export 全局变量
            3.7.3.1 export aming=linux
            3.7.3.2 echo $aming
            3.7.3.3 bash  //进入子bash
            3.7.3.4 echo $aming 
            3.7.3.5 unset aming //取消环境变量
    
    3.8 环境变量的配置文件
        3.8.1 系统层次的
            3.8.1.1 /etc/profile  用户环境变量,交互,登录时才执行
            3.8.1.2 /etc/bashrc  用户不用登录,执行shell就失效
        3.8.2 系统层次的
            3.8.2.1 ~/.bashrc
            3.8.2.2 ~/.bash_profile
            3.8.2.3 ~/.bash_history 
            3.8.2.4 ~/.bash_logout
        3.8.3 PS1变量
            3.8.3.1 PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'
            3.8.3.2 a='a$bc'
            3.8.3.3 a=a"$b"c
            3.8.3.4 . .bash_profile  和  source .bash_profile,  此处.和source都是加载使生效的作用
            3.8.3.5 [登录的用户@主机名-所在的目录(最后的层级)]
            3.8.3.6 PS1='' //修改PS1
            3.8.3.7 echo $PS1  //打印PS1的值
       3.8.4 登录的用户@主机名-所在的目录(最后的层级)
       3.8.5 特殊字符
           3.8.5.1 *  //任意个任意字符
           3.8.5.2 ? //任意一个字符
           3.8.5.3 #  //注释
           3.8.5.4 \  //脱义字符   e.g.  c=\$a\$b  ehco c
           3.8.5.5 |  //管道字符 
            
    3.9 cut 和 sort命令
        3.9.1 cat /etc/passwd |head -2 |cut -d ":" -f 1-3  //-d表示分割;-f表示段
        3.9.2 cut -d//分隔符; -f//指定段号; -c//指定第几个字符
        3.9.3 sort -n//以数字排序(字母认为是0); -r//反序; -t//分隔符 -kn1/-kn1,n2
    
    3.10 wc ,uniq, split 和 tee 命令
        3.10.1 wc -l //统计行数; wc -m//统计字符数; wc -w//统计词
        3.10.2 cat -A 1.txt  //输出行中假设为123$, 其中$代表换行符
        3.10.3 uniq 去重(需要先排序) uniq -c//统计行数
            3.10.3.1 sort 1.txt |uniq -c
        3.10.4 split -b//按字节为单位进行切割   split -l//按行数进行切割
        3.10.5 LC_ALL=C  //为了去除所有本地化的设置,让命令正确的执行
        3.10.6 tee 重定向,并把之前的结果打印在屏幕上
            3.10.6.1 sort 1.txt |uniq -c |tee a.txt 
            3.10.6.2 tee -a //表示追加 
            3.10.6.3 >a.txt  //清空a.txt
        3.10.7 tr替换字符
            3.10.7.1 echo "aminglinux" |tr '[al]' '[AL]'
        3.11 一些特殊字符
            3.11.1 $ 变量前缀   !$ 表示取前一次执行的命令
            3.11.2 ;多条命令写到一行,用分号分割
            3.11.3 ~ 用户家目录,正则中表示匹配符
            3.11.4 &放到命令后面,会把命令丢到后台
            3.11.5 >重定向   >>追加重定向   2>错误重定向   2>>追加错误重定向   &>将错误的和正确的全部重定向到一个文件中
            3.11.6 [] 指定一个字符中的一个
            3.11.7 || 或者  && 并且
            3.11.8 [-d aminglinux] || mkdir aminglinux    //-d判断是否是一个目录且是否存在