shell: 是系统的用户界面,提供了用户与内核进行交互操作的一种接口,分以下两大类。  
  GUI:Gnome, KDE, Xfce    
  CLI: sh, csh, ksh, bash, tcsh, zsh
   
程序和进程

  进程:在每个进程看来,当前主机上只存在内核和当前进程||进程是程序的副本,进程是程序执行实例

用户工作环境:      
 bash:    
    # 超级管理员 root    
    $ 普通用户  tom, jerry….    
 shell,子shell

 bash--bash

bash特性:    
  1、命令历史、命令补全      
  2、管道、重定向      
  3、命令别名      
  4、命令行编辑      
  5、命令行展开      
  6、文件名通配      
  7、变量      
  8、编程

命令行编辑:    
  光标跳转:    
    Ctrl+a:跳到命令行首    
    Ctrl+e:跳到命令行尾    
    Ctrl+u: 删除光标至命令行首的内容    
    Ctrl+k: 删除光标至命令行尾的内容    
    Ctrl+l: 清屏  
    
命令历史:    
  查看命令历史:history    
    -c:清空命令历史    
    -d OFFSET [n]: 删除指定位置的命令    
    -w:保存命令历史至历史文件中  默认保存在/root/.bash_history中
   
环境变量    
  PATH:命令搜索路径 

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin    

HISTSIZE: 命令历史缓冲区大小 

echo $HISTSIZE 默认为缓冲1000条命令历史

  命令历史的使用技巧:    
   !n:执行命令历史中的第n条命令;    
   !-n:执行命令历史中的倒数第n条命令;    
   !!: 执行上一条命令;    
   !string:执行命令历史中最近一个以指定字符串开头的命令    
   !$:引用前一个命令的最后一个参数;    
   Esc 松开然后按 .    
   Alt+.   

命令补全,路径补全:    

PATH:

搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则将直接补全;

路径补全:    
打头路径下:搜索我们给出的起始路径下的每个文件名,并试图补全;

文本相关的命令    
  查看:cat, tac, more, less, head, tail    
  统计:wc    
  处理:tr, cut, join    
  排序:sort  uniq

命令别名:    
  alias CMDALIAS='COMMAND [options] [arguments]'    
  在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;

  ualias CMDALIAS 取消命令别名

  \CMD  可以使用命令本身的意义。转义字符 \

命令替换:

  $(COMMAND), 反引号:`COMMAND`    
  把命令中某个子命令替换为其执行结果的过程    
  file-2013-02-28-14-53-31.txt    date "+%F-%H-%M-%S"
 bash支持的引号:    
  反引号``: 命令替换    
  双引号"": 弱引用,可以实现变量替换    
  单引号'': 强引用,不完成变量替换

文件名通配, globbing    
  *: 任意长度的任意字符    
  ?:任意单个字符    
 []:匹配指定范围内的任意单个字符    
    [abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]    
    [:space:]:空白字符    
    [:punct:]:标点符号    
    [:lower:]:小写字母    
    [:upper:]: 大写字母    
    [:alpha:]: 大小写字母    
    [:digit:]: 数字    
    [:alnum:]: 数字和大小写字母    
   
 # man 7 glob    
 [^]: 匹配指定范围之外的任意单个字符

eg1:创建a123, cd6, c78m, c1 my, m.z, k 67, 8yu,注意,以上文件是以逗号隔开的,其它符号都是文件名的组成部分

1、显示所有以a或m开头的文件;

[root@JustinWang test]# ls [am]*

a123  m.z

2、显示所有文件名中包含了数字的文件;

ls *[0-9]* 或 ls *[[:digit:]]*

8yu  a123  c1 my  c78m  cd6  k 67

3、显示所有以数字结尾且文件名中不包含空白的文件;

ls *[^[:space:]]*[0-9]   ?????????

4、显示文件名中包含了非字母或数字的特殊符号的文件;

ls *[^[:alnum:]]*

c1 my  k 67  m.z