众所周知,操作系统(简称OS)是最靠近硬件的一层系统软件,它把硬件裸机改造成为功能完善的一台虚拟机,使得计算机系统的使用和管理更加方便,计算机资源的利用效率更高,上层的应用程序可以获得比硬件提供的功能更多的支持。其中kernal作为操作系统最底层的结构,将底层的硬件资源虚拟化成更加容易访问的资源,如人机交互界面上的图标等。kernal上一层为library(库),它们为用户对计算机的操作提供了接口。用户可以通过操作系统接口调用library库中的函数也可以直接通过kernal调用库中函数,两者之上都有操作系统接口。

  [root@localhost ~]#

  在xshell中通过用户登录界面,连接到Linux系统后就可以直接启动shell接口程序。上述字符串就是我们在shell接口程序中所使用的命令提示符。所有的命令都是在这个提示符后面完成的。

  root:当前登录的用户账户名称。

  localhost:当前主机的非完整格式的主机名,一般是截取自第一个'.'之前;

  ~:shell程序所在的非完整格式路径的路径的基名,其实是一个目录名称,这个目录我们又称为叫shell的工作目录;而默认情况下,这个shell的工作目录就是登录用户自己的家。

  #:命令提示符号。

  其中当命令提示符号为#时则为超级用户root,为$时则为普通用户,即非root用户;不具有管理权限,不能执行管理类操作;

  程序一般包含四类文件:

  二进制文件(可执行文件,应用程序文件):可以直接运行的文件 ,windows:exe,msi,linux:ELF。

  头文件/库文件:

  windows:dll(dynamic:linked library动态链接库);

  Linux:so(Share Object)供应用使用的库,共享库;

       ko(kernal Object)供内核使用的库;

  帮助文件:是整个程序的使用说明书。

  


  接下来说一下Linux命令的通用格式:

  COMMAND OPTIONS ARGUMENTS[PARAMENTERS](三者之间必须用空格分隔)

  

  COMMAND(命令):想要执行的具体操作,进程;

  命令分为内部命令与外部命令。内部命令是内建于shell中的命令,外部命令是通过安装应用程序而得到的命令。

  这样,在使用命令时,我们需要去区分当前使用的命令是哪一种命令,怎么去区分内外命令呢?

  # type COMMAND;

  使用type命令

  这个命令的结果可以有如下几种情况:

  1. 如果被检测的命令是外部命令,则type会显示一条具体的路径,而这个路径正是通过PATH变量中存放的路径查找得到的;

  2. 如果被检测的命令是内部命令,则type命令会显示"COMMAND is shell buildin"的信息

  3. 当然还有可能是第三种情况,那就是为了方便用户的使用,可能把某个命令及其常用选择放在一起构建了一个别名命令,因此如果是这种情况的话,type命令会将别名命令以及原始的命令、选项以及参数的组合显示出来。


  OPTIONS:此次命令执行过程中所使用的特性。

  OPTIONS可分为短选项与长选项。

  短选项:

        -CHAR

        一次可以写多个, -a -l -d(分开写的话,选项间必须空格),-ald(合起来写必须要有空格)

  长选项:

        --WORD,--help,--list,--human-readable长选项不能和合并书写,只能一个一个书写。

  注意:

       1.有些选项需要额外的参数。

       2.有些选项可以不用短横线,有些命令的选项一定不能用短横线。

       3.有些命令的长选项只使用一个短横线。

 

  ARGUMENTS[PARAMENTERS](参数):此次命令换行的操作对象有些命令可以同时拥有多个参数,但是参数之间必须用空格分隔。

   

  注意:

       1.命令在书写的时候,COMMAND,OPTIONS,ARGUMENTS[PARAMENTERS]一定要用空白字符分割。

       2.有些命令在书写时选项和参数的位置是可以调换的。

       3.命令中的所有组成部分,严格区分大小写。

  获取命令的使用帮助:

  获取命令的使用帮助可以分为两种,一即为内部命令时,二即为外部命令时。

  内部命令时:

  # help COMMAND;直接使用help命令进行操作。

  外部命令时:

  1.使用--help选项

  # COMMAND --help

  2.使用man帮助手册(manual)

  默认情况下,我们使用软件包管理工具直接将已经编译好的应用程序的软件包安装到Linux系统中,

  在安装应用程序软件的时候,会同时安装这个软件所需要用到的帮助文件,默认的存储位置:/usr/share/man/。

  man帮助手册中有九章内容,简称man九章:

  1.用户命令(所有用户可以执行的普通命令)

  2.系统调用

  3.c库函数

  4.设备和特殊文件

  5.配置文件格式

  6.游戏相关的配置信息

  7.杂项

  8.管理类命令(只有root能够执行的管理命令)

  9.内核相关

  每个man手册中都有很多字段;

  NAME:程序的名称和功能简介

  SYNOPSIS:命令使用的语法格式

  DESCRIPTION:程序的详细描述信息

  OPTIONS:选项的用法及含义的详细说明

  AUTHON:程序的作者信息

  REFORTING BUGS:报告程序中所包含的BUG格式

  EXAMPLES:命令的使用范例

  SEE ALSO:额外的参考内容

  FILES:与该程序相关的其他文件,如配置文件等

  其中的SYNOPSIS,明确的说明了概命令的使用格式和选项组合方式,我们通常能看到下述这几类特殊符号,他们的意义介绍如下:

        []:可以省略不写,也可以根据需要填写

        <>:必须书写

        ...:有更多的

        a丨b丨c:多选一  

  看完帮助了,就按q进行退出。


  那么,在这样的Linux的环境下,Linux的哲学思想又是什么呢?

  1.一切皆文件

  Linux把几乎所有的资源都抽象成文件的形式,甚至连硬件,网络通信使用的套接字以及管道皆如此。文件:一组由边界的位于存储设备中的流式数据。


  2.又众多功能单一的小程序组成,却可以实现复杂任务;

  功能单一:每个小程序只做一件事,并且要做好;

  复杂任务:尽可能完美的组成多个小程序,让其功能发挥到极致。

         

  3.尽量避免与用户直接交互,易于以编程的方式实现自动化任务实施。

          

  4.使用纯文本格式来保存配置信息。

 

  Linux系统中,所有文件都从属于唯一一个原初结点“/”,系统中的文件与“/”形成一个倒置的树形文件,文件都从根起始逐级逐层的寻找到目标文件加以操作。其中由根开始的寻找路径被称为绝对路径,即一切从“/”开始查找的路径,而从当前文件起始出发逐层查找目标文件的路径称为相对路径。

  例

  touch /abc(属于根下建立一个文件,绝对路径)

  touch abc(当前文件下,用相对路径)

  任何一个路径都可以分为两部分:

  文件基名(即路径末尾):

       命令basename(取出路径中的基名)

  文件目录名(即除路径末尾之外的其与路径的组合):

       命令dirname(取出路径中的目录名)

  注意:如果顺路就用相对路径,如果不顺路就用绝对路径。

  

  文件的命名格式:

  在文件系统中,基于文件名引用文件,按名来进行存取,在文件系统中对文件名有一系列规定

           1.文件名不能包含有"/"斜线字,"/"可表示根文件系统, "/"也可表示路径分隔符。

           2.文件名的长度不能超过255个字符

           3.在同一位置中文件名不能重复

           4.文件名要求严格区分大小写


  在这里简单描述了下关于Linux命令行操作CLI的一些基本操作和如何获取帮助信息,并没有过多阐述,最后列举一些关于HFS的层级标准了解一下在CLI界面“/”下的一些文件具体执行的功能

          /:

             bin:普通用户可以执行的普通操作命令

             boot:引导操作系统启动的静态文件,包括引导程序,Linux内核,initramfs等

             dev:device,设备(ls /dev)

             块设备:凡是能够实现数据存放的设备都是块设备(U盘等)

             字符设备:能够实现数据传输和数据处理的设备,顺序访问(鼠标键盘等)

             etc:存放着主机专用的系统配置文件

             home:普通用户的家目录的根

             lib,lib64,存放共享库文件目录,内核的模块

             media:可移动设备的挂载点

             mnt:临时的文件系统的挂载点

             opt:以前是非常流行的第三方应用程序的安装目录(默认情况下是空的)

             root:超级用户root的家目录

             sbin:存放那些只有超级用户root能够执行的管理类命令

             srv:存放由系统提供的各种服务数据(默认情况下是空的)

             tmp:temperate,临时文件目录,每隔30天自动清除该目录中没有访问的数据

             usr:对于现在的Linux而言非常重要,可以说是Linux的第二个根,所有的

             第三方的应用程序默认都会装到这个目录下。

             /usr/local第三根,主要用于编译第三方的应用程序。

             /usr/src:存放应用程序的源代码

             var:可变化的数据