CLI(Command Line Interface)接口 : 命令行接口
    命令提示符 : 提醒用户已经可以进行输入
        # : root用户
        $ : 普通用户
---------------------------------------------------------------------------------------------------------------------------------------
命令的基本格式 : 
    Command [+Options] Args
    Options : 修正命令的执行方式,也即虽然一个命令其大致内容或者方向类似,但其具体执行方式,却可能存在很大差别,如ls命令,ls命令的作用是列出当前或者指定目录的所有内容,但执行方式有很多种,
              如都是列出当前或指定目录的所有内容,但既可以只列出文件或目录的名称,也可以把文件或目录的所有元数据都列出来;既可以只列出当前或指定目录下的内容,但也可以当前或指定目录的目录中
              的内容也一并列出来.因此,可见即使只是一个命令,但因为我们的需求不同,照样可以有诸多执行方式或延展;
        选项的分类 : 
            短选项 : -char,短选项通常可组合使用,如-a -b = -ab
            长选项 : --word,不可以组合使用
    Args : 命令的执行对象;
---------------------------------------------------------------------------------------------------------------------------------------
使用凭证(用户登录) : 识别用户身份或者用户可以调用的资源;
---------------------------------------------------------------------------------------------------------------------------------------
终端 : 用户和主机交互必然要用到的一些设备;
    物理终端 : 直接接入主机的显示器,键盘等设备;
    虚拟终端 : 模拟多用户环境,而且有多个显示器.在计算机还并不是很普遍的时候,往往是在一台主机上提供多个接口,用户仅需一个显示器,外设等,即可实现与主机的通信,进而实现多个用户共同使用一个主机,
        而虚拟终端就是在模拟这样的一个过程;
        设备路径 : /dev/tty[1~6]
           虚拟终端的切换 : ^Alt + [F1~F6]
    模拟终端 : 在图形界面打开的终端即输入模拟终端;
               设备路径 : /dev/pts[0~inf]
    图形终端 : 附加在物理设备上以软件方式模拟的终端,但额外提供了桌面环境;
    查看当前终端设备 : tty
    交互式接口 : 启动终端后,在终端上附加的一个交互式程序;
---------------------------------------------------------------------------------------------------------------------------------------
GUI ; 图像界面
    1,Gnome : C开发的
    2,KDE : C++开发的
    3,XFace : 便捷的,适用于嵌套式平台上的,轻量级的桌面系统
---------------------------------------------------------------------------------------------------------------------------------------
CLI ; 命令行界面
    1,bash
    2,Csh
    3,Zsh
    4,Ksh
    5,tcsh
---------------------------------------------------------------------------------------------------------------------------------------
基础命令 :
    用户切换 : su : switch user
        命令格式 : su USRNAME
    ---------------------------------------------------------------------------------------------------------------------------------------
    修改管理员用户密码 : passwd
        密码复杂性原则 : 
            1,数字,小写字母,大写字母,特殊字符四类字符中至少要使用其中三种;
            2,足够长(>7位)
            3,最好使用随机字符串
            4,定期更换
            5,循环周期要足够长,即再次启动以前用过的密码之间的时间间隔要足够长,即一般而言,不同密码再次使用之间要相隔24个不同的密码
       ---------------------------------------------------------------------------------------------------------------------------------------
       pwd(printing working directory) : 显示当前工作目录
           注 : 相关环境变量
               $PWD : 保存了工作路径或当前路径
               $OLDPWD : 保存了上一次所在路径;
       ---------------------------------------------------------------------------------------------------------------------------------------
       ls(list) : 列出当前或指定目录下的所有文件及相关信息;
           注 : 文件的组成部分 : 文件内容(content) + 文件的元数据(metadata);
           -l(long) : 显示当前目录或指定目录下的文件或文件夹的详细信息
               属性一 : 共有十列
                   第一列 : 文件类型
                       - : 普通文件
                       b(block) : 块设备文件
                       c(char) : 字符设备文件
                       l(link) : 符号链接文件(软链接文件)
                       d(directory) : 文件夹
                       p(pipe) : 命令管道文件
                       s(socket) : 套接字文件
                   后九列,每三列为一组,为文件的管理权限,r(readable) : 可读;w(writable) : 可写; x : 可执行;
               属性二 : 文件硬链接的次数
               属性三 : 文件的属主(owner)
               属性四 : 文件的属组(group)
               属性五 : 文件的大小(默认单位为字节)
               属性六 : 文件最近一次被修改的时间
                   time stamps : 时间戳
                       atime : access time,访问时间,即文件最近一次被访问的时间
                       mtime : modify time,修改时间,即文件内容最近一次被修改的时间
                       ctime : change time,改变时间,即文件元数据最近一次被改变的时间
                       注 : 属性六之所以是文件的修改时间,因为其相对而言相对较为稳定,只有文件内容发生改变时,才会改变;而改变时间,因为记录的是文件的元数据的改变时间,
                            哪怕只是访问了一次文件,其元数据也会发生改变,所以,其是及其不稳定的,会频繁发生改变.
               属性七 : 文件名或文件夹名
             -h(human readable) : 以人类已读的方式显示,其实就是对长格式下的属性五文件的大小进行单位换算;
             -a(all) : 显示所有文件,包括linux中以"."开头的隐藏文件;
                 注 :  在所显示的文件当中,"." : 表示当前目录;".." : 表示当前目录的上一级目录
             -A(almost) : 显示所有的文件,但包括"."和".."
             -d(directory) : 显示目录自身的属性信息(元数据)
             -i(index node) : 显示文件的索引节点号;
                 索引节点号 : 人类依靠文件名识别文件,而计算机则是依靠索引节点号即数字,识别文件,且效率更高,因此每一个文件都有一个自己的唯一的索引节点号
             -r(reverse) : 按照字母表逆序显示文件
             -R(recursion) : 递归显示文件,也即如果在当前目录下存在文件夹,将文件夹里的内容也显示出来,依次递推,直至叶子节点,也即文件
      ---------------------------------------------------------------------------------------------------------------------------------------
      cd(change directory) : 切换目录
          无参数 : 自动切换至当前活跃用户的家目录(主目录 : home directory)
        ~USERNAME : 切换至指定用户的家目录(管路员操作)
        - : 在前一次所在目录和当前目录之间来回进行切换   
      ---------------------------------------------------------------------------------------------------------------------------------------
      命令的分类 : 
          内建命令(builtin) : shell自带,并以命令形式提供;
          外部命令 : 在当前系统的某文件目录下,对应的可执行程序文件(which,whereis : 可查看命令所在文件路径)
          查看命令类型 : type ARGS
      查看当前所使用的shell : echo $SHELL
      取消命令的执行 : ^C
      环境变量 : 定义用户当前工作环境,如 : 当在shell中调用某一个命令时,shell首先回到shell自建的命令中查找该命令,如果找不到,再到$PATH中保存的路径(这些路径以":"进行分隔)
                 从左往右依此进行查找,一旦找到,则停止查找过程;
      ---------------------------------------------------------------------------------------------------------------------------------------
      hash : 查看已经缓存的命令,shell会在启动伊始,自动分配一块内存空间,专门记录执行过了的命令以及命令所在的路径,因此当调用某一个命令时,会先到该内存中,查找是否存在该命令,如果
             存在,则直接找到该命令所在路径,然后执行;如果没有,则按照$PATH中保存的路径依次进行查找;
      ---------------------------------------------------------------------------------------------------------------------------------------
      clear : 清空shell页面内容
      ---------------------------------------------------------------------------------------------------------------------------------------
      Linux的时间实现方式 : 
          晶体振荡器 : 按照完全相同的频率进行震荡,由于晶体振荡器必须要有电才能够进行震荡,因此在主板上,专门有一块电池为其供电;
      rtc(real time clock) : 实时时钟,硬件时钟,每次开机的时候,操作系统就会自动从晶体振荡器处读取时间,设置为系统时间,然后以软件方式模拟振荡器,而不再使用硬件时钟,这个时钟被称为
                             系统时钟.系统时钟仅仅是以软件的方式的进行模拟,因此,当系统比较繁忙,顾不上系统时钟时,可能会导致以硬件时钟不一致
      clock/hwclock : 查看或管理硬件时钟
          -s : 设置系统时间,也即读取硬件时钟,设置为系统时钟
          -w : 设置硬件时钟,也即读取系统时钟,设置为硬件时钟
      date : 显示当前系统时间或用于管理时间
      ---------------------------------------------------------------------------------------------------------------------------------------
      获取命令帮助 : 
          1,内部命令 : help COMMAND
            外部命令 : COMMAND --help
          2,通用的命令帮助 : man(manual命令手册) : 显示详细的帮助信息,命令手册目录位置 : /usr/share/man
            man命令帮助手册是分章节 :
                章节一 : 所有用户都可以调用的命令(目录位置 : /bin,/usr/bin,/usr/local/bin)
                章节二 : 系统调用
                章节三 : 库调用
                章节四 : 特殊文件(设备文件),其本身并不存储任何数据,仅作为一个设备的访问入口
                章节五 : 文件格式,某一个程序的执行可能需要大量选项配合使用,而文件格式中记录的就是这些选项
                章节六 : 游戏
                章节七 : 杂项
                章节八 : 管理类命令(只有管理员才可以调用)(目录位置 : /sbin,/usr/sbin,/usr/local/sbin)
            whatis COMMAND : 查看命令都有在那些章节中出现
            man NUM COMMAND : 看到指定章节的命令帮助文件
            man -M /PATH/TO/SOMEWHERE COMMAND : 到指定路径下查找指定命令的帮助文件
            命令帮助文件中特殊符号的含义 : "[]" : 表可省略;"|" : 表多选一;"<>" : 表在执行该命令时,必须给出;"..." : 表该位置可填入多项;"{}" : 表分组,列出该位置可填入的所有内容
            man中帮助信息的具体说明 :
                NAME : 命令名称
                SYNOPSIS : 命令的基本使用格式
                DESCRIPTION : 命令功能的详细说明以及每一个选项的含义
                OPTIONS : 说明每一个选项的意义
                FILES : 与此命令相关的配置文件
                EXAMPLES : 使用示例
                SEE ALSO : 另外参见
            man命令帮助文件的操作 :
                翻屏 : 向后翻一屏 : SPACE
                       向前翻一屏 : b
                       向后翻一行 : ENTER
                       向前翻一行 : k
                       向后翻半屏 : d
                       向前翻半屏 : u
                       快速跳转文件第N行 : N + ENTER
                       回到文件首部 : G
                查找 : 
                    / keyword : 从当前位置向下查找关键字
                    ? keyword : 从当前位置向上查找关键字
                    n : 跳转至下一个关键字所在位置
                    N : 跳转至上一个关键字所在位置
                q : 退出帮助文档
           3,查看命令在线帮助文档 : info COMMAND
             注 : /usr/share/doc : 存有大多数命令的使用手册和说明的相关文档
           4,程序自身的帮助文档
           5,程序的官方文档 : Documentation
           6,发行版的官方文档
           7,Google
           ---------------------------------------------------------------------------------------------------------------------------------------
           cal(Calender) : 显示日历
           ---------------------------------------------------------------------------------------------------------------------------------------
           echo : 打印一行文本,相当于print函数
               "" : 弱引用,即如果文本中有变量,会将变量的值输出来
               '' : 强引用,即如果文本中有变量,不会取出变量值,也即输入即输出
               -n : 在输出文本后,不自动换行
               -e : 在文本中使用"\"转义符,否则在文本中,\t(水平制表符),\b(退格符),\n(换行符),\v(垂直制表符)
           ---------------------------------------------------------------------------------------------------------------------------------------
           history : 显示或管理历史命令,登入shell时,会将历史命令保存在缓存中,一旦登出,将之追加至~/.bash_history历史命令文件中
               -a : 将缓存中的命令历史手动追加至命令历史文件中
               -d offset : 删除命令历史中指定索引的历史命令\
               -c : 清空缓存中的历史命令
               参数 : 
                   history_size : 指定缓存中能够缓存的历史命令的条数上限
                   history_file_size : 指定命令历史文件中能够缓存的历史命令的条数上限
               快捷操作 : 
                   !! : 再次调用上次调用的命令
                   !index : 调用命令历史中指定索引的命令
                   !string : 调用命令历史中最近一次以string开头的命令
          ---------------------------------------------------------------------------------------------------------------------------------------
          文件查看命令 : 
              cat(concatenate) : 连接(当有多个参数时)并显示文件
              tac : 连接并逆序显示文件
                  -E : 在行的末尾显示行结束符
                  -T : 显示TAB为^I
                  -v : 显示非打印字符,即空白字符
                  -n : 为显示的每一行文本编号
              注 : cat的特殊用法 : 当cat后不跟有任何内容时,cat会获取用户输入,并进行输出,^C结束输入;
          ---------------------------------------------------------------------------------------------------------------------------------------
          文件类型查看命令 :
              file /PATH/TO/SOMEWHERE
          ---------------------------------------------------------------------------------------------------------------------------------------
          显示命令对应的程序文件位置 :
              which COMMAND
                  显示命令对应的程序文件位置
                  注 : --skip-alias 不予显示别名
              whereis COMMAND
                  显示的信息会更为详细,会显示该命令出现的所有目录位置
           ---------------------------------------------------------------------------------------------------------------------------------------
           查看命令在man帮助手册中的哪些章节中出现 :
               whatis COMMAND
                   注 : mkwhatis可将当前系统下的所欲帮助手册以及与之对应的关键字(包括该命令功能的简要说明)创建一个数据库
           ---------------------------------------------------------------------------------------------------------------------------------------
           系统管理类命令 : 
               关机类命令 : 
                   halt,poweroff,shutdown,init 0 :  
                       -f : 强制关机
                       -p : 切断电源
               重启类命令 :
                   reboot,shutdown,init 6 
                   shutdown : 
                       -r : reboot
                       -h : halt
                       -c : cancel 取消关机或重启操作
                       参数 : TIME : 
                                now : 立刻
                                +m : m分钟后执行操作
                                hh:mm : 指定具体执行操作时间
                              WALL : 在执行操作前发布警告信息
               跟用户登陆相关命令 :
                   who : 显示当前系统的所有的登陆会话
                   whoami : 显示当前登陆的有效(活跃)用户
                   w : 显示系统上的所有登陆会话以及正在执行的操作
            ------------------------------------------------------------------------------------------------------------------------------------------