BASH十大基础特性:
 1,保存命令历史
 2,支持命令补全
 3,支持路径补全
 4,支持命令行展开
 5,命令执行结果状态
 6,支持命令别名
 7,支持文件名通配
 8,支持快捷键操作
 9,支持I/O重定向
 10,支持管道

1,命令历史:shell进程会话中保存当前用户执行过的命令
 history:查看或设置命令历史相关参数
 HISTSIZE:命令历史记录的条数
 HISTFILE:~/.bash_history 命令历史保存的文件
 HISTFILESIZE:命令历史文件记录历史的条数

 history常用选项:
   -d:删除指定的命令历史
   -c:删除所有的命令历史
   -r:从命令历史文件中读取命令历史到内存中
   -w:向命令历史文件中写入内存中的命令历史
   -n:显示命令历史中最近的n条记录
   -s COMMAND:伪造命令历史

 调用历史命令:
  !#:再次调用第#命令
  !!或上方向键:再次调用上一条命令
  !string:再次执行以string开头的命令
 
 调用上一条命令的最后一个参数:
  !$
  ESC,.:物理机、终端都可以使用
  ALT+.:只限物理机使用

 控制命令历史的记录方式:
  环境变量:HISTCONTROL(在/etc/profile中控制)
  HISTCONTROL=ignoredups 忽略重复的命令
  HISTCONTROL=ignorespace 忽略空格开头的命令
  HISTCONTROL=ignoreboth 上述两项之和

 HISTTIMEFORMAT="+%F %T " 给命令历史加上日期及时间记录
  添加到配置文件:
  所有用户:/etc/profile
  当前用户:~./bash_profile
 
2,命令补全:
 命令查找机制:
  1,查找内部命令
  2,根据path环境变量中设定的目录,从左向右搜索目录下的文件名
 用户给定的字符串对应的只有一条能匹配的命令时,击一次TAB键,直接补全
 用户给定的字符串对应的能匹配的命令不唯一时,再击一次TAB键,会给出一个列表供用户选择

3,路径补全:
 把用户给定的字符串当作路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名
 如果匹配唯一击一次TAB键,直接补全
 如果匹配不唯一,再击一次TAB键,会给出一个列表供用户选择

4,命令行展开:
 {}:可以承载一个以逗号分隔的列表,并将其展开为多个路径
 如:/tmp/{a,b}=/tmp/a,/tmp/b

5,命令执行结果状态
 命令执行结果状态:
  成功:0
  失败:1-255
 bash使用$?保存最近一条命令的执行结果状态
  查看命令:echo $?
 区分命令返回值和执行结果状态
  命令返回值为真时,执行结果状态一定为真
  命令返回值为假时,执行结果状态不一定为假

6,命令别名
 将一个命令用其它名字来代替
 定义别名:alias NAME="COMMAND [OPTION] [ARGUMNET]"
 撤消别名:unalias NAME
 另外定义配置文件:
 当前用户:~/.bashrc
 所有用户:/etc/bashrc

7,文件名通配:显示指定条件的文件
 元字符:具有特殊意义的专用字符,可以用来规定其前导字符在目标对象的出现模式
   *:匹配任意长度的任意字符
   ?:匹配任意单个字符
   []:匹配指定范围内的任意单个字符
   [^]:匹配指定范围外的任意单个字符
   [[:upper:]]:所有大写字母
   [[:lower:]]:所有小写字母
   [[:alpha:]]:所有字母
   [[:digit:]]:所有数字
   [[:alnum:]]:所有的字母和数字
   [[:space:]]:所有空白字符
   [[:punct:]]:所有标点符号

8,bash快捷键
 Ctrl+l:清屏,相当于clear
 Ctrl+c:取消命令的执行
 Ctrl+a:跳转至命令行行首
 Ctrl+e:跳转至命令行行尾
 Ctrl+u:删除光标所在处至行首的所有字符
 Ctrl+k:删除光标所在处至行尾的所有字符

9,I/O重定向
  可用于输入的设备:文件、键盘设备、文件系统上的常规文件、网卡等;
     可用于输出的设备:文件、显示器、文件系统上的常规文件、网卡等;
     标准输入:0
  标准输出:1
  错误输出:2

  <:标准输入重定向
  如:cat -n

  >:标准输出重定向(覆盖方式)
  >>:标准输出重定向(追加方式)
 
  2>:错误输出重定向(覆盖方式)
  2>>:错误输出重定向(追加方式)

  &>:标准输出+错误输出(覆盖方式)等同于 COMMAND > /path/to/output.txt 2>&1
  &>>:标准输出+错误输出(追加方式)等同于 COMMAND > /path/to/output.txt 2>>&1

  标准输出和错误输出各自定向到不同文件写法:
  覆盖方式:COMMAND > /path/to/output1.txt 2> /path/to/output2.txt
  追加方式:COMMAND >> /path/to/output1.txt 2>> /path/to/output2.txt


10,管道:把前一个命令的输出作为后一个命令的输入
    组合简章小程序,完成复杂大任务————符合linux哲学思想
    COMMAND1 | COMMAND2 COMMAND3
    注意:最后一个命令会在当前shell进程的子shell进程中执行

 tee:标准输入到屏幕+重定向到文件
  echo "hello world" | tee /tmp/hello.out

目录管理类命令:
 cd,pwd,ls,mkdir,rmdir,tree

mkdir:make directory创建目录
  mkdir [OPTION]... DIRECTORY...
      -p: parent,自动按需创建父目录(父目录不存在时也不用担心报错了)
      -v: verbose,显示创建的详细过程
      -m:mode,创建目录时指定权限
      引用当前日期时间精确值创建一个目录:
      mkdir $(date +%Y%m%d%H%M%S)

      bash命令引用:
      强引用:'COMMAND'
      弱引用:"COMMAND"
      命令引用:`COMMAND`
         $(COMMAND)

rmdir:remove empty directory删除空目录
 rmdir [option]...DIRECTORY...
   -p:删除非空目录后,如果父目录为空,则一并删除
   -v:显示删除的详细过程

命令行展开:
 如何创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b
  mkdir -pv /tmp/x/{y1/{a,b},y2}

 如何创建a-c,a-d,b-c,b-d
  mkdir -v {a,b}-{c-d}

tree:以树状结构显示目录层级结构
 tree [option] DIRECTORY
 -L #:level指定要显示的层级数
 直接使用时显示当前目录下的所有目录层级结构

文件查看类命令:cat,tac,head,tail,more,less
 分屏查看命令:more,less
 more:more file
  特点:翻屏至文件尾部时自动退出

 less:less file
  man调用的就是less命令,用法同man一样

 head:查看文件的前几行(默认10行)
  head [option] FILE
  head -n #:指定查看行数,可简写为:-#

 tail:查看文件的后几行(默认10行)
  tail [option] FILE
  tail -n #:指定查看行数,可简写为:-#
     -f:查看文件尾部内容结束后不退出
      跟随显示新增的行,监控日志文件增长时非常有用