一、什么是Shell
Linux系统后台运行的特殊程序可以理解成特殊的软件,提供用户与内核进行交互操作的一种接口
用户使用应用程序发布指令(使用浏览器访问页面)
Shell通知操作系统需要进行什么样的操作(相当于解释层)
内核相当于操作系统去指挥硬件
Linux系统中运行的一种特殊程序 用户 接收用户输入的命令
在用户和内核之间充当“翻译官” Shell 解释命令
用户登录Linux系统时,自动加载一个Shell程序 内核 传递给系统内核执行
Bash是Linux系统中默认使用是Shell程序 硬件
文件位于/bin/bash
二、Linux命令的分类
Type先判断内部命令还是外部命令,内部命令直接运行,外部命令先看hash缓存表,
有命令执行,没有命令去硬盘找,有命令但是没找到直接报错
内部命令与外部命令的区别
内部命令 外部命令
集成于Shell解释器程序内的特殊指令, Linux系统中能完成特定功能的脚本文件或二进制程序
也称为内建(Built-in)指令
属于Shell的一部分 属于Shell解释器程序之外的命令
没有单独对应的系统文件 每个外部命令对应了系统中的一个文件
自动载入内存,可以直接使用 必须知道其对应的文件位置,由Shell加载后才能执行
三、源码包 VS RPM二进制包
源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,
Linux中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为Tarball
使用源码包安装软件具有以下好处
1、开源,经验丰富实力强劲的人可以修改源代码
2、可以自由选择所需的功能
3、软件是编译安装的,更加适合自己的系统,更加稳定,效率更高
4、卸载方便
但同时,使用源码包安装软件也有几点不足
5、安装过程步骤较多,尤其是在安装较大的软件合集时(LAMP环境搭建),容易出现拼写错误
6、编译时间较长,所以安装时间比二进制安装要长
7、软件是编译安装的,在安装过程中一旦报错,新手很难解决
用户安装软件较难,厂商直接将包做成二进制方便使用
四、源程序转化步骤
1、预处理(Pre-Processing)
(1)将所有的#define删除,并且展开所有的宏定义
(2)处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
(3)处理#include预编译指令,将被包含的文件插入到该预编译指令的位置
(4)删除所有注释“//”和“/* */”
(5)添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号
(6)保留所有的#pragma编译器指令,编译器需要使用
2、编译(Compiling)
就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后,生成相应的汇编代码
3、汇编(Assembling)
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令
汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可
4、链接(Linking)
通过调用链接器ID来链接程序运行需要的大量目标文件及依赖的其他库文件,最后生成可执行文件
五、编译安装
大部分是c语言开发的,更方便使用
1、软件版本比较新,新功能,修复bug
2、可以自行定义配置文件的路径
3、源码可能有100个功能,不需要自行处理,自行定制50
程序包编译安装
源代码>预处理>编译>汇编>链接>执行
多文件
文件中的代码之间,很可能存在跨文件依赖关系
大部分开源软件将软件打成包,但不是所有源代码都打成包,想使用开源软件,需要下载源码进行
编译安装,就算提供了包,因为某些特性,仍然需要编译安装,利用源码编译安装比较繁琐,相关
的项目管理工具可以简化复杂的编译过程
六、应用程序与系统命令的关系
对比系统命令和应用程序的不同
位置
Linux中一切皆为文件,演示内部命令和外部命令,位置,应用程序位置