一、虚拟机的简单介绍
   1、重启:ctrl+shift+insert ,然后按F2,进入bios
      Boot -调整启动次序!
   2、CPU--(运算器、控制器、寄存器)、存储器、I/O设备
      CPU监视i/o设备:poll轮询、interrupt中断、可编程中断控制器来控制每个设备!
   3、北桥(距离cpu比较近):高速总线控制器
      南桥:慢速总线控制器(硬盘、鼠标等)通过一根总线连接南桥,然后通过南桥传递给CPU
   4、API:应用编程接口
      5、linux的基本原则:
           1、由目的单一的小程序组成:组合小程序完成复杂任务。
           2、一切皆文件
           3、尽量避免捕获用户接口
           4、配置文件保存为纯文本格式
     6、CLI接口:
            sh、bash、csh、zsh、ksh、tcsh
        命令提示符,prompt
              #:root
             $:普通用户
        命令:
             命令格式:命令 选项 参数
     7、
           选项:
          短选项:-
            多个短选项可以组合: -a -l = -ab
         长选项: --
            长选项不能组合
         参数:命令的作用对象
            使用凭证:root-work
        虚拟终端(terminal):
            命令:startx &(后台运行字符界面)
   su - 转换用户、切换用户
   su 【-l】 用户名   其中的【】内代表可以省略,退出是exit
   图形界面:进入以后不能在利用startx了,利用Ctrl+alt+F7进入图形界面
   passwd 下面输入两次密码即可修改当前帐号密码
   密码复杂性:足够长大于7位、使用4类别字符中至少三种、使用随机字符串、定期更换、循环周期足够大。
     8、图形界面(GUI):
                  Gnome:C
          KDE:C++
          XFace
     9、linux命令安装:
                 linux ip=172.16.36.1 netmask=255.255.0.0 gateway=172.16.0.1 dns=172.16.0.1 ks=http://172.16.0.1/class.cfg
二、部分命令用法简介
     1、关于文件目录的命令
       (1)、list:ls   列出,列表  (列出指定路径下的文件)   列出的为蓝色代表文件    绿色代表对该文件有读写权限
            目录:路径映射文件   文件系统:file system  (文件名是不是文件的数据?????)
            路径:从指定起始点到目的地所经过的位置
                 绝对路径:相当于从最上边开始一级一级的往下找的路径
                 相对路径:相对于当时所处的路径   
   -l: 长格式
       文件类型:
              -:普通文件(f)
              d:目录文件
              b:块设备文件(block)
              c:字符设备文件(character)
              l:符号链接文件(sysbolic link file)
              p:命令灵管道文件(pipe)
              s:替接子文件(socket)
       文件权限:9位,每3位一组,每一组:rwx(读、写、执行),r--
       文件硬链接的次数
       文件的属主(owner)   
       文件的属组(group) 
       文件大小(size),单位是字节   
       时间戳(timestamp):最近一次被修改的时间
            访问:access
            修改:modify  文件内容发生了改变
            改变:change,metadata, 元数据  
   -h:做单位转换
   -a:显示以.开头的隐藏文件     .表示当前目录   ..表示当前目录的上一级目录
   -A:显示以.开头的隐藏文件   但不显示./..        
   -d:显示目录自身属性
   -i:index node,inode 显示文件的缩影接点号码
   -r:逆序显示
   -R:递归(recursive)显示
       (2)、pwd:Printing Working directory 显示当前目录
       (3)、cd:change directory (切换目录)
              家目录,主目录,home directory
          cd ~USERNAME:进入指定用户的家目录
          cd -:在当前目录和前一次所在的目录之间来回切换
     2、查看一些命令用法所用的命令
         (1)、type:显示指定属于哪种类型
         (2)、获得命令的使用帮助:
              内部命令:
                help COMMAND
              外部命令:
                COMMAND --help 获得简要帮助信息
     命令手册:manual
         man  COMMAND (几乎支持所有命令)一般不查看内部命令
   whatis COMMAND:显示此命令在man帮助的那个章节内
            man:   
     1、分章节:1章节:用户命令(位于/bin,/usr/bin/,/usr/local/bin)、
               2章节:系统调用、
               3章节:库调用、
               4章节:特殊文件(设备文件)、
               5章节:文件格式(解释配置文件的语法)、
               6章节:游戏、
               7章节:杂项(miscellaneous)、
               8章节:管理命令(位于/sbin,/usr/sbin/usr/local/sbin)F(列入):(man 2 ls):显示第二章节。                  
     2、符号:     <>:必选的,         【】:可选的,           ...:可以重复多次、          |:多选一、      {}:多组,没有特殊                                                       
     3、NAME:命令名称及简要的说明
         SYNOPSIS:用法说明,包括可用的选项
         DESCRIPTION:命令的选项详细说明,包括每一个选项的意义
         OPTIONS:说明每一个选项的意义
         FILES:此命令的相关的配置文件
         BUGS:bug上报
         Exaples:使用示列
                SEE ALSO:另外参照
     4、翻页:
       向后翻一屏:空格
              向前翻一屏:b
              向后翻一行:ENTER
              向前翻一行:k
 查找:
      /KEYWORD: 向后
      ?KEYWORD:向前
      n:下一个
             q:退出
      N:前一个
三、关于文件方面的命令
      1、文件系统:(FHS:规定linux系统创建时默认文件)    touch:建立文件
            rootfs:根文件系统
   /boot:系统启动相关的文件:内核、initrd、grub(bootloader系统引导加载器)
   /dev:设备文件(块设备、字符设备),块设备:随机访问的设备,数据块,无大小,只是设备的入口,显示一个主设备号。
   设备号:主设备号(major)和次设备号(minor)。      字符设备:线性设备,安字符为单位。
   /etc:配置文件
   /home:用户的家目录,每个用户的家目录默认为/home/USERNAME
   /root:root用户的家目录,直接放在根目录下!
   /lib:库文件(静态库和动态库)
               静态库:.a,直接连接到程序内利用
      动态库:windows的.dll, linux的.so(shared object)-储存到内存内利用
        内核模块文件(lib/modules)
     库文件只能被调用,不能单独利用,没有运行接口
   /lost+found:
   /media:挂载点目录,用于挂载移动设备
   /mnt:用于挂载额外的临时文件系统
   /misc:杂项
   /opt:可选目录,早期用于安装第三方软件目录
   /proc:伪文件系统,内核映射文件,用于系统调优!
   /sys:伪文件系统,跟硬件设备相关的属性映射,用于硬件设备管理,也由于系统调优!
   /tmp:临时文件(公共的临时文件),每个一个月未动的文件自动被清除!另外的一个/var/tmp临时文件
   /var:可变化的文件,
   /bin:可执行命令,用户的命令-用于系统启动时候
   /sbin:管理员命令-用于系统启动时候
   /usr:shared,read-only,用于存放只读文件,
        /usr/bin--用于系统启动后的命令
     /usr/sbin--用于系统启动后的命令
     /usr/lib--为上面两个shell提供库
   /usr/local:第三方软件安装文档
        /usr/local/bin
     /usr/local/sbin
     /usr/local/lib
      2、文件命名规则:
            1、文件名不能超过255个字符
            2、不能使用/当文件名   
            3、严格区分大小写
             相对路径:从所处目录找目标
             绝对路径:从根开始查找目标文件
             使用系统大致工作内容:文件管理、目录管理、运行程序、设备管理、软件管理、进程管理、网络管理
             目录管理:ls、cd、pwd、
                        mkdir(创建空目录)mkdir -p(递归创建) -v(显示创建过程)、tree(查看目录树)
    在mnt/test下创建x/m,y:mkdir -pv /mnt/test/x /mnt/test/y 或者mkidr -pv /mnt/text/{/x/m,y}。
    命令行展开:
    在mnt/test2下创建a_b,a_c,d_b,d_c 
                     (a+b)(c+d)=ab+bc+cd+ad
         mkdir -pv /mnt/test2/{a,b}_{b,c}。
   rmdir:删除目录(空目录)
   rm:删除文件,
   rm -i:交互式=rm,是rm的别名,不使用别名的命令:\rm
   rm -f:暴力删除
   rm -r:递归删除目录。
   rm -rf /:删除根目录,系统报废!
    文件和目录不能重名
    touch:创建文件,修改文件的时间戳!
         touch -c 文件名:文件不存在的时候不创建文件。
      -a:只改变访问时间
      -m:只改变修改时间
      -t:自己设定时间(年月日时分.秒)--于a、m配合使用!
    stat:显示文件的时间戳 
      3、ASCII:
             128不同的字符:
                      2的6次方=0-63
                      2^7=0-127
                      000 00 - 111 1111  
            标准:GB18030 GBK GB2312  Unicode 
       4、cp:copy 只复制文件(法则:只有最后一个为目标)复制一个文件到一个文件 或者 多个文件到一个目录
       cp /etc/passwd/tmp   复制到目录下并保存原文件名
    cp /etc/passwd/tmp/test  看test是文件还是目录, 目录:负责到目录内,文件则替换
    cp -r(R) 递归复制目录
    cp -i  交互式显示
    cp -f  强制覆盖
    cp -p  保留原文件的属性、时间戳
    cp复制连接文件的时候,默认复制的是链接所指的文件
    cp -P 负责连接文件,直接复制成链接
    cp -d 保持链接
       cp -a 归档复制,常用于备份
 mv:move  移动文件
    install:复制文件并改动其属性
            -d DIRECOTRY。。。: 创建目录
            -m 指定权限
四、文本方面命令
     1:查看文本:
       cat、more、tac、less、head、tail
    (1)cat:连接并显示 
              -E 显示每一行的行节数    所以Linnux中文本的行结束命令是$
              -v 显示其他的非显示符
              -n 显示编号
          Ctrl+c:清除不想执行的命令
    分屏显示:more、less
          more:只能向后翻
    less:
      less+文件      b:向前翻
           head:查看前n行    head -(n)2+文件     查看文件前2行
     tail:产看后n行   
               tail -f:查看文件尾部,不退出,等待显示后续追加至此文件的新内容
     2:文本处理:cut(文本剪切)、join、sed、awk  
           database:数据库
          关系型数据库:
         表:二维表
    文本文件:
                     Tom:23:male:2013/05/06
                     cut:用于剪切数据内容
                         -d:指定字段分隔符,默认是空格
                         -f:指定要显示的字段(-f 1,3、   -f 1-3)
                文本排序:sort
              -n:数值排序
        -r:降序
        -t:字段分隔符
        -k:以哪个字段为关键字进行排序
        -u:排序后相同的行只显示一次
        -f:排序时忽略字符大小写
         uniq:
                          -c:显示文件中行重复的次数
                          -d:只显示重复的行
                文本统计:wc(word count) 
                          -l:只显示行数
                          -L:最长一行包含多少字符  
                          -w:只显示单词数
                          -c:只显示字节数 
                字符处理命令:tr:转换或删除字符
              -d:删除出现在字符集中的所有字符
       文本查找的需要:
   grep:根据模式去全面的搜索文本,并将符合模式的文本行显示出来   (grep 'root' /etc/passwd)
   Pattern:文本字符和正则表达式元字符组合而成匹配条件
      grep [options] PATTERN [FILE...]
   -i 忽略大小写
   --colour/color 颜色显示
   -v 反向查找,显示没有被模式匹配的行
   -o 只显示被模式匹配到的字符串
    :任意长度的任意字符
    ?:任意单个字符
  正则表达式:REGular EXPression,REGEXP
  元字符:
          .:匹配任意单的字符
    []:匹配指定范围内的任意单个字符
    [^]:匹配指定范围外的任意单个字符
    字符集合:[:digit:],[:lower:],[:upper:],[:punct:],[:space:]
  匹配次数(贪婪模式):
       *:匹配其前面的字符任意次  a,b,ab,aab,adb,amnb    (grep 'a*b' /etc/、、)
    。*:任意长度的任意字符
    \?:匹配其前面的字符1次或0次
             \{m,n\}:匹配其前面的字符至少m次,至多n次
         \{1,\}:最少一次  多了不限
     位置锚定:
     ^:锚定行首,此字符后面的任意内容必须出现在行首  grep '^ro' /file
           $:锚定行尾,此字符前面的任意内容必须出现在行尾  grep 'ro$' /file
     ^$:空白行
     \<:其后面的任意字符必须作为单词首部出现
     \>:其前面的任意字符必须作为单词的尾部出现
     \<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
     \>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现
  分组:
      \(\)
      \(ab\)*:ab整体可以出现1次或2次,后向引用,被前面括号括起来的内容在后面用一个符号可以重新引用
                 \1:引用第一个左括号与之对应的右括号所括起来的所有内容
五、用户,组,权限
     用户:获取资源和服务的凭证
             安全上下文(secure context) 
    权限:r,w,x
         r:可读,可以实用类似cat等命令查看文件内容
      w:可写,可以编辑或删除此文件
      x:可执行。eXacutable,可以命令提示符下的当作命令提交给内核运行
      000---:无权限
      001--x:执行
      010-w-:写
      011-wx:写和执行
      100r--:只读
      101r-x:读和执行
      110rw-:读写
      111rwx:读写执行
     用户:UID, /etc/passwd
     组:GID, /etc/group
     用户类别:
          管理员:0
       普通用户:1-65535
             系统用户:1-499
       一般用户:500-60000
      
     用户组类别:   
              管理员组:
                    普通组:     
                 系统组:
        一般组:
     用户组类别:
            私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
      基本组:用户的默认组
      附加组,额外组:默认组以外的其他组
     进程:tom tom
     对象:rwxrw-r--  jerry tom a。txt
     account:登录名
     password:命令
     UID:用户ID
     comment:注释
     HOME DIR:家目录
     SHELL:用户的默认shell
     加密方法;
              对称加密:加密和解密实用同一个密码
              公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
              单向加密,散列加密:提取数据特征码,常用于数据完整性校验
                       1、雪崩(蝴蝶)效应:初始条件的微小改变就会引起结构的巨大改变
                       2、定长输出
                          算法:MD5:Message Digest,128位定长输出
                                SHA1:Secure Hash Algotithm,160位定长输出
    用户管理:
                     useradd,userdel,usermod,passwd,chsh,chfn,finger,id,chage
                  组管理:
                     groupadd,groupdel,groupmod,gpasswd
                权限管理:chown,chgrp      
    /etc/passwd:
          用户名:密码:UID:GID:注释:家目录:默认shell
    /etc/gtoup:
          组名:密码:GID:以此组为附加组的用户列表
    /etc/shadow:
          用户名:密码:最近一次修改密码的时间:最短实用期限:最长实用期限:警告
 useradd [optios] USEERNAME
          -u UID
          -g GID(基本组)
          -G GID,...  (附加组)
          -c "COMMENT"
          -d /path/to/directory
          -s SHELL
    -m  -k强制为文件创建家目录
    -M 不为文件创建家目录
   
     /etc/shells:指定了当前系统 可用的安全shell  
  环境变量:
         PATH
   HISTSIZE
   SHELL:用以保存当前年系统可用的安全
   
    切换用户:su -USERNAME
    退出用户:exit
1、useradd命令:增加用户
        useradd [optios] USEERNAME
          -u UID
          -g GID(基本组)
          -G GID,...  (附加组)
          -c "COMMENT" 指定注释信息
          -d /path/to/directory 指定用户的家目录,不用的时候默认在home下面建立一个和用户同名的目录
          -s SHELL 路径最后是/etc/shells文件内规定的shell路径
    -m  -k强制为文件创建家目录
    -M 不为文件创建家目录
    -r 添加系统用户(通常不能进入系统   也没有家目录
    )
    userdel [option] USERNAME
       -r 同时删除用户的家目录
     userdel
 id命令:查看当前用户的帐号属性信息
       -u USERNAME
    -g USERNAME
    -G
    -n
 finger:查看用户帐号信息  
     finger USERNAME
2、修改用户帐号属性:
    usermod
       -u 修改UID
    -g 修改GID(此组必须是事先存在的组)
    -G 修改附加的GID (直接覆盖此前的附加组)
    -a -G GID:不实用-a选项,会覆盖此前的附加组
    -c 注释信息
    -d  -m 为用户指定新的家目录且移动此前的文件到新的家目录中去
    -s 修改shell
    -l 修改用户名
    -L 锁定帐号
    -U 解锁帐号
    chsh:修改用户的默认shell
    chfn:修改用户的注释信息
3、密码管理:
     passwd [USERNAME]
      --stdin 从标注输入(键盘等)修改密码
         -l 锁定用户帐号
         -U 解锁用户帐号
         -d 删除用户密码
   -n 密码最短使用期限
   -x 密码最长使用期限
    pwck:检查用户帐号完整性
4、组管理:
      创建组:groupadd
         -g 组建GID
   -r 添加为系统组
   组属性:groupmod
      -g 组建GID
   -n GRPNAME
      删除组:groupdel
   组加密码:gpasswd
   neegrp GRPNAME > < 》《
    5、权限管理:
      r:
   w:
   x:
 三类用户:file(某目录下的某文件)
      u:属主
      g:属组
      o:其他用户
     chown:改变文件属主(只有管理员可以使用此命令)(#chown USERNAME file,、、、只改变目录本身) 
          -R 递归修改(修改目录及其内部文件的属主)
          --reference=/path/to/somefile file,、、、把file的属主(组)设定为与somefile的数主(组)一样  
     chgrp:改变文件属组(只有管理员可以使用此命令)(#chgrp GROUPNAME file,、、、)   
       -R 递归修改 (修改目录及其内部文件的属组)
     chmod:修改文件权限
     修改三类用户的权限:
   chmod MODE file,、、、
    -R 递归修改
  修改某类用户或某些类用户权限:
     u,g,o,a
     chmod 用户类别=MODE file,、、、如:chmod g=rw,o= /etc/、、    
  修改某类的用户某位或某些位权限:
     u,g,o,a
     chmod 用户类别+(—)MODE file,、、、 如:chmod u-x /tmp/abc
      6、站在用户登录的角度来说,shell的类型:
     登录式shell:
         正常通过某终端登录
   su-USERNAME
   su -l USERNAME
  非登录式shell:
         su USERNAME
   图形终端下打开命令窗口
   自动执行的shelljiaoben
   bash的配置文件:
      全局配置
         /etc/profile, /etc/profile.d/*.sh, /ec/bashrc
   个人配置
         ~/ .bash_profile, ~/ .bashrc
   profile类的文件:
       设定环境变量
    运行命令或脚本
   bashrc类的文件:
       设定本地变量
    定义命令别名
   登录式shell如何读取配置文件?
      /etc/profile --> /ec/profile.d/*.sh --> ~/.bash_profile --> ~/ .bashrc --> /etc/bashrc
   非登录式shell如何配置文件?
     ~/ .bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
六、管道和定方向
     运算器、控制器:CPU; 存储器:RAM; 输入设备/输出设备:I/O;  程序:指令和数据;  控制器:指令
    地址总线:内存寻址;  数据总线:传输数据;    控制总线:控制指令
       寄存器:CPU暂时存储器      I/O:硬盘,键盘,鼠标
       程序:
    系统设定:
             默认输出设备:标准输出,Stdout,用1表示
    默认输入设备:标准输入,Stdin,用0表示
    标准错误输出:Stderr,描述图是2
      标准输入:键盘       标准输入和错误输出:显示器
     I/O重定向:改变了输入和输出设备的来源操作  
     输出重定向:>,覆盖输出,会覆盖原文件的内容
                             >>:追加输出,(不覆盖原文件内容,并重新输出新内容)
        set -C:禁止对已经存在的文件使用覆盖重定向;
                强制覆盖输出,则使用>|
        set +C:关闭上述功能
        2>:重定向错误输出
        2>>:追加方式
        &>:重定向标准输出或错误输出至同一个文件
        &>>:追加方式
     输入重定向:<
                            <<: 此处生成文档 
                             cat << END:输入信息,直至输入END时结束。(EOF或者END代表输入结束)
        管道:前一个命令的输出,作为后一个命令的输入
                  命令1 | 命令2 | 命令3
                 fq:
              tee:输出至屏幕信息,并保存到文档一份 
七、bash及其特性:
       shell:     shell、子shell(子shell并不主动知道自己是shell的子系统)
    当前的shell版本:GUI:Gnome,KDE,Xfce
                        CLI:sh,csh,ksh,bash(遵循开源协定),tcsh,ksh(开源版), zsh
  程序:进程
        进程:在每个进程看来,当前主机上只存在内核和当前进程
           进程是程序的副本,进程是程序执行实例 
        用户工作环境:
        #
     $
    
     支持用户定义自由环境
    
  bash:
            1、命令历史、命令补全:命令历史默认储存在bash-history
                   history:查看命令历史
                     -c:清空命令历史
                     -d:删除指定位置命令历史
                     -w:保持命令历史至历史文件中
                   PATH:命令你搜索路径
                           HISTSIZE:命令历史缓冲区大小
                     命令历史的实用技巧:
             !n:表示执行命令历史中的第n条命令
          !-n:执行命令历史中的倒数第n条命令
          !!:执行上一条命令
                         !string:指令命令历史总最近的一个以string执行的命令
       !$:引用前一个命令的最后一个参数
       Esc,。:引用前一个命令的最后一个参数
       Alt+。:引用前一个命令的最后一个参数
      命令补全:搜索PATH环境变量所指定的每个路径下所我们给出的字符串开头的可执行文件,如果多余一个,两次Tab,可以给出列表;否则将直接补全
      路径补全:搜索我们给出的其实路径下的每个文件名,并试图补全
                                    
            2、管道、重定向
            3、命令别名:
            alias CMDALIAS='COMMAND [options] [arguments]'
         在shell中命令的别名只在当前shell进程的生命周期内有效;别名的有效范围仅为当前shell进程
         unalias CMDALIAS:撤销别名
      命令替换:把命令中某个子命令替换为其执行结果的过程    $(COMMAND),反引号:‘COMMAND’
                file-2013-02-28-14-53-31.txt   touch ./file-$(date +%F-%H-%M-%S).txt
       base支持的引号:
              '':命令替换
           "":弱引用,可以实现变量替换
           ’‘:强引用,不完全变量替换
            4、命令行编辑:
         光标跳转:
        Ctrl+a:跳到命令行首
        Ctrl+e:跳到命令行尾
        Ctrl+d:删除字母
        Ctrl+u:删除光标至命令行首的内容
        Ctrl+k:删除光标至命令行尾的内容
        Ctrl+l:清屏
        Ctrl+左右箭头:一次跳一个单词
            5、命令行展开
            6、文件名通配:
            *:匹配任意长度任意字符
         ?:只匹配任意单个字符
      []:匹配指定范围内的任意单个字符   [abc],[a-m],[a-z],[A-Z],[0-9],包含大小写[a-zA-Z],
          空白字符:[[:space:]]
                         标点符号:[:punct:]
                         小写字母:[:lower:]
                         大写字母:[:upper:]
                         大小写字母:[:alpha:]
                         数字和大小写字:[:alnum:]
                         数字:[:digit:]      
      [^]:匹配指定范围之外的任意单个字符
 练习:1、创建a123,cd6,c78m,c1 my,m.z,k 67,8yu,789等文件
       2、显示所有以a或m开头的文件(ls [am]*)
    3、显示所有文件名中包含了数字的文件(ls *[0-9]*)或(*[[:digit:]]*)
    4、显示所有以数字结尾且文件名中不包含空白的文件
    5、显示文件名中包含了非字母或数字的特殊符号的文件ls *[^[:alnum:]]*
            7、支持变量
            8、支持编程