文章目录
-
- 一、linux安装软件的方式
- 二、linux下软件管理于安装的要点认识
- 三、linux下的丰富的软件包
-
-
- Linux软件包分为两种形式
- RPM和DEB软件包
-
- 四、linux下查看文件详细信息
- 六、linux下的源码(Tarball)安装步骤
- 七、Linux中的apt-get的相关操作及原理
一、linux安装软件的方式
1、手动方式(源码安装):需要用户手动配置、编译、安装,稍微麻烦些,但是最灵活;
ps:通过源码方式安装软件,可以同一个软件安装多个不同版本,而不会互相干扰,并且由于源码根据当前环境重新编译,运行性能会比二进制安装相对优化一点!
二、linux下软件管理于安装的要点认识
1、套件管理,即package manager,指的就是软件包管理; 如window的软件管家,具有下载、完整性校验、安装、升级、卸载、查询等基本功能,在Linux下的常见工具有半自动的rpm、dpkg;全自动的apt-get、yum;
2、所谓二进制,就是厂家根据特定的硬件、系统编译源码得到的linux可运行文件,因此使用二进制安装,要根据当前平台找到适用的二进制文件安装包;
3、如果要用到套件管理工具去安装软件,需要特定的软件包格式,主要有以下两种软件包格式,有以下对应关系:
a、rpm工具:管理.rpm后缀的软件包;
b、dpkg工具:管理.dep后缀的软件包;
这两种类型软件包通常是将所有相关文件(源码包、二进制包)打包成为一个特殊格式的文件,这个软件安装文件还包含预先检测系统与依赖软件的脚本,记录该软件的所有信息,用作建立数据库进行管理(升级、删除)等;
4、傳統的 Linux 使用 rpm , dpkg 來管理套件,但使用者需要手動管理套件之間的相依性(所谓依赖,指的是一个软件安装依赖于另一个或多个软件组件的安装),為解決套件的相依性,目前漸漸都改成為 yum (RedHat、SUSE、CentOS) 或是 apt-get (Ubuntu、Debian) . 使用apt-get / yum 会自动判断.dep / .rpm包的依赖,然后一次性把所有需要安装的N个.dep / .rpm统一下载安装,其实原理和使用tpm,dpkg手动一个个的安装没有什么本质区别。
因此:apt-get / yum分别为 dpkg、rpm的升级版;
三、linux下的丰富的软件包
Linux软件包分为两种形式
1、二进制包(binary code):是編好的 binary ,安裝就可用,一般以rpm/dep格式给出;
2、源代码包(source code):還沒編好的 source 源码,需要用户配置安裝;一般以tar打包,gz压缩,编译时间一般会很长~;
3、例子:
a、rpm格式: libjpeg-devel-6b-33.x86_64.rpm #rpm格式很好区分;
a、tar.gz格式:
①、二进制包: mysql-3.23.58-pc-linux-i686.tar.gz #二进制格式的包名字很长,会有版本 、适应平台、适应的硬件类型等;
②、源码包:php-5.2.14.tar.gz #而源码格式仅仅就是一个版本 的tar包。一般安装步骤:解压、./config、make、make install;
RPM和DEB软件包
要用到套件管理工具去安装软件,需要特定的包格式,应用到包管理工具的主要有以下两种源码包格式,不同格式要用不同的套管理工具,主要介绍RPM:
1、RPM和DEB
rpm包主要用于redhat及suse,centos,Fedora等 rpm(redhat package manager)
而deb包主要用于debian及ubuntu、BSD等。 deb(debian)
2、RPM(Red Hat Package Manager)
是基于Red hat的Linux Distribution的包管理系统,同时也指rpm包本身,RPM用于rpm包的管理(诸如安装、卸载、升级等),像Mandrake和SuSE这些基于RPM的发行版通常有自己特定的rpm包,如果混合安装可能不会正常工作,而对于第三方发行的rpm包一般都能在基于RPM的系统上正常安装。
对于基于Debian的系统使用deb格式的包,有包转换工具使rpm与deb及其他文件之间互相转换(Alien Package Converter),其安装和升级可用dpkg,不过它不能很方便地处理包的依赖关系,比较省事的有dselect和apt-get, Ubunut是debian的变种, 其软件以deb包或者源文件的形式出现.
3、注意RPM包分兩種:binary rpm 跟 source rpm
使用rpm包管理工具命令执行安装rpm包和源码包,rpm包以.rpm结尾,而源码包以.src.rpm结尾,可以理解为rpm包 = 二进制文件 + rpm管理需要的文件,.src.rpm包 = 源码文件 + rpm管理需要的文件,使用.src.rpm源码包一般步骤,用户配置(也可以采用默认配置),然后执行编译(编译命令rpmbuild),生成rpm包,再进行rpm安装, 嗯~,就是多一个编译步骤;
四、linux下查看文件详细信息
Linux下有个命令叫file,因为Linux并不是按照后缀名来判断文件类型的。所以一般在不清楚文件到底是什么类型的时候,就用file这个命令去判断。
file php-5.2.14.tar.gz
php-5.2.14.tar.gz: gzip compressed data, was “php-5.2.14.tar”, from Unix, last modified: Wed Jul 21 22:32:34 2010, max compression
这个php-5.2.14.tar.gz 明显是个gzip的压缩包,这样的文件一般都是用tar zxvf 命令去解包然后去配置编译安装的,通常情况把这种安装方法叫做源码编译安装。
file libjpeg-devel-6b-33.x86_64.rpm
libjpeg-devel-6b-33.x86_64.rpm: RPM v3 bin i386 libjpeg-devel-6b-33
这个libjpeg-devel-6b-33.x86_64.rpm 文件,就是个标准的redhat系列发行版本所用的RPM格式软件包。一般在RHEL、CentOS、SUSE、OracleLinux下都可以安装类似的RPM包。标准的安装方法是rpm -ivh。
1、各类镜像 站,软件的集中营,拥有绝大多数的软件包,如清华镜像、阿里云镜像 站等等;
2、官 就不必多说了,下载源码一般都去官 ;
3、还可以去github等下载别人开发好的一些小工具;
小结
一般在官 上下载的源码包都是以:tar.gz tar.bz2结尾的,经过编译的一般是以.rpm/.dep来结尾的,linux下的文件扩展名没有实际的意义,这样做只是为了方便你去查看是什么类型的包然后采取什么样的方式去安装和配置,当然有时候并不能从文件的扩展名去查看什么类型的包,因为文件名可以随意的去修改可以使用 “file” 这个命令去查看文件的详细类型.
六、linux下的源码(Tarball)安装步骤
在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的 可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包,不同的最终用户经过编译就可以正确运行,这也是非常符合c语言的设计哲学的,一次编写,到处编译么,而常见的二进制包,比如rpm和deb,软件开发者必须为每种特定的平台定制好专门的软件包,这个通过rpm文件的后缀名就可以初见端倪,比如ppc,sparc,i386之类,在这里不做过多的陈述,其实源码安装软件远没有很多朋友想象的那么复杂,下面我在这里尽可能详细的做一些陈述,如有谬误,欢迎朋友们拍砖!
安装的具体步骤:
- $ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
- $ cd XXXX
- $ ./configure
- $ make
- # make install
复制代码
- $ make clean
复制代码
安装完成后用来清理临时文件
- # make uninstall
复制代码
用来卸载软件
解压:
最常见源码包的就两种(XXXX.tar.gz or XXXX.tar.bz2),其实这些源码包都是由2个工具压缩而成的,tar.gz结尾的文件用到的工具是tar和gunzip,而tar.bz2结尾的文件所使用的工具是tar和bzip2,之所以这样做是因为,tar仅仅能够打包多个文件但是没有压缩的功能,而gz和bz2却刚好相反,仅能够压缩单个文件,这样我们常见的源码包实际上是通过tar先将不同的源文件打包,然后再通过gunzip或者bzip2压缩后发布的,当然这两个步骤可以通过一条命令实现:
- $ tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)
复制代码
解压的相关命令如下:
- $ tar zxvf XXXX.tar.gz
- $ tar jxvf XXXX.tar.bz2
复制代码
- $ ./configure –prefix=/opt/XXX
复制代码
它用来设置软件的安装目录.
make:
如果configure过程正确完成,那么在源码目录,会生成相应的Makefile文件,Makefile文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是make所做的,make只是一个通用的工具,一般情况下,make会根据Makefile中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序:
- $ make
复制代码
make install:
当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,”install”只是Makefile文件中的一个标 ,“make install”代表着make工具执行Makefile文件中”install”标 下的所有相关操作,如果在configure阶段没有使用”–prefix=/opt/XXX”指定应用程序的安装目录,那么应用程序一般会被默认安装到/usr/local/bin,如果/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:
- #make install
复制代码
make clean:
make uninstall:
这两个步骤只是安装的后续操作,有一点必须注意,”clean”和”uninstall”也是Makefile文件中相应的两个标 ,执行这两个步骤的时候Makefile文件必要保留,”make clean”用来清除编译连接过程中的一些临时文件,“make uninstall”是卸载相关应用程序,与make install类似,make uninstall也需要切换到root执行,不过”uninstall”标 在好多Makefile中都被省略掉了,朋友们完全可以自己在相应的Makefile文件一探究竟.
Why/strong>
在这里我尝试着解释一下上面这些步骤存在的理由,从C语言的角度来说,一个程序从源码到正确生成相关的可执行文件,下面这些部分必不可少:源文件,编译器,汇编器,连接器,依赖库,通过上面几个步骤,朋友们应该已经知道,真正执行编译链接操作的步骤只有一个(make),那其他步骤存在的理由何在br> 有一点是肯定的,我在自己的电脑上使用C语言写一些自娱自乐的小程序,也没有用到”configure or make install”之类的命令,顶多自己写个Makefile管理源文件的依赖关系,可是软件开发者不同,他必须考虑到软件的可移植性,他开发的软件不能仅仅就在他自己的pc上跑吧同的平台可能连硬件体系结构都不同,这样就导致了Makefile的不可移植性,为了解决这个问题,开发者通常使用autoconf之类的工具生成相应的configure脚本,而configure脚本就是用来屏蔽相应的平台差异,从而正确生成Makefile文件,然后make再根据configure的劳动成果(Makefile)完成编译链接工作.
至于”install or clean or uninstall”,也只是对应着Makefile文件中不同的规则,关于Makefile的详细信息,朋友们可以自行查阅相关的文档.
小结:
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure –help输出详细的选项列表。
其中–prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。
如果配置–prefix,如:
./configure –prefix=/usr/local/test
可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。
用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。
当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall。
七、Linux中的apt-get的相关操作及原理
Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的Ubuntu用户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源(Reposity)。
然而,由于每位用户所处的 络环境不同,不可能随意地访问各镜像站点。为了能够有选择地访问,在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最合适访问的镜像站点地址。
即使这样,软件源配置文件只是告知Ubuntu系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。
apt-get install 下载的软件存放到 /var/cache/apt/archives/下。
同时,APT能够检查Ubuntu Linux系统中的软件包依赖关系,大大简化了Ubuntu用户安装和卸载软件包的过程。
apt-get是linux下的一种简便的安装和更新软件的方法,在装软件的时候常用的命令就是
Linux下的apt-get指令与相关文件夹
下面介绍apt-get装软件的基本原理,首先,在本地有如下几个文件夹:
/var/cache/apt/archives
这个是利用apt-get install命令安装软件的临时存放软件包的位置
/etc/apt/source.list
这个用来存放软件源站点目录,当我们执行apt-get install 的时候,实际上就是去这些站点下载的软件包。而且,这个文件的内容我们可以自己修改,因为有些源站点可能会被墙,所以可以修改为国内的一些镜像源。上面的那个lists文件里面放的那些软件列表,就是从source.list中给出的站点上找到的。
apt-get install 等命令的基本原理
在下载软件的时候,我们通常先要进行软件列表的更新:
这个指令执行的是从source.list中按照里面的软件源的地址对lists中的软件列表进行更新。这样可以使得本机上的列表和服务器上的一样,以便可以成功的安装。
更新完成以后我们使用 install 命令进行安装,首先,会对lists中的软件列表进行扫描,找到最新版本的软件包,然后检查依赖项,找到支持该软件运行的依赖软件包,然后从source.list指定的镜像站点中下载所需软件包,并解压,自动完成配置。
apt-get install小结:
使用“apt-get install”下载软件包大体分为4步:第一步,扫描本地存放的软件包更新列表(由“apt-get update”命令刷新更新列表,也就是/var/lib/apt/lists/),找到最新版本的软件包;第二步,进行软件包依赖关系检查,找到支持该软件正常运行的所有软件包;第三步,从软件源所指 的镜像站点中,下载相关软件包;第四步,解压软件包,并自动完成应用程序的安装和配置。
如果想要卸载某个已经安装的软件,有
在软件名后面加一个连接符,这样可以同时执行安装和卸载
还有其他一些命令:
上面这个可以用来安装,和install后面带减 对应,remove后面带加 表示安装。
上面是查找部分包含关键字的软件包。
上面是下载软件包的源码。
上面这个也是一个很实用的命令,可以用来将系统中所有的软件包一次性升级到最新版本。它会列出所需升级的包,然后进行升级。和update不同,update仅仅是通过软件源来更新本地列表,而upgrade是对软件包进行升级。
它可以很方便的完成在相同版本 的发行版中更新软件包。在依赖关系检查后,命令列出了目前所有需要升级的软件包,在得到用户确认后,便开始更新软件包的下载和安装。当然,apt- get upgrade命令会在最后以合理的次序,安装本次更新的软件包。系统更新需要用户等待一段时间。
然后 main restricted 等是软件的不同类别,一般来说,有以下四种:
- main:完全的自由软件。
- restricted:不完全的自由软件。
- universe:ubuntu官方不提供支持与补丁,全靠 区支持。
- muitiverse:非自由软件,完全不提供支持和补丁。
上面这个展示的是清华大学软件源的sources.list配置,还有其他可供选择的:
这是阿里云的源。
中科大的。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!