玩玩linux
1.Linux软件部署及应用
在Linux中,软件包分为
- 源码包安装 提供了该软件所有程序源代码的发布形式,需要用户自己编译成可执行的二进制代码并进行安装,优点是配置灵活,可以随意去掉或保留某些功能或者模块,适应多种硬件/操作系统平台及编译环境,缺点就是难度比较大,一般不适合初学者使用。
- 二进制包安装 事先已经编译好的二进制形式的软件包,有点事安装方便,缺点是灵活性差,如果该软件包是为特定的硬件/操作系统平台编译的,那它就不能再另外的平台或者环境下正确执行
注意,在不同linux发行版上软件安装机制不同
- DPKG Debian(ubuntu) 命令rpm 在线升级 yum
- RPM (Centos Fedora) 命令dpkg 在线apt(apt-get)
源码包安装
软件发布者将源代码先以tar打包,再进行压缩(如gzip,bzip2,xz)得到所谓Tarball 文件.
解压该文件可以得到
- 源代码文件
- 检测程序文件(configure或config文件)
- 本软件的建议安装说明(install或readme)
通常的安装流程
- 在厂商网站下载一个Tarball文件
- 将Tarball文件解开,产生很多源代码文件
- 利用gcc或make(与makefile)结合,产生目标文件
- 以gcc进行函数库与主,子程序进行链接,形成主要的二进制文件
- 将上述文件以及相关配置文件安装在主机上(install)
大概步骤
下载源代码软件包1
wget url
或者直接在一些网站上下载得到一个压缩包 wget功能下载url上的文件
解压缩1
2tar -jxvf xx.tar.bz2
tar -zxvf xx.tar.gz
进入压缩目录1
./configure. #编译环境检查以及安装配置
1
--prefix == 安装路径
编译源代码1
make #再修改configure后会有一个makefile。 make利用该文件(文件中有相关的配置条件)进行编译
当然之前也可以make clean一下,目的是清除.o目标文件
安装到本机器1
make install
注意:查看安装说明,提前处理软件包依赖
实例
之前我在虚拟机上装了一个bochs(开源IA-32(x86)电脑模拟器) 符合源代码安装,把这个过程记录下
在官网下载软件包,会得到一个压缩包. tar.gz或类似后缀文件
解压该文件。tar -zxvf nasm.tar.gz
得到一个文件夹
前两步其实很简单,现在是源码安装的重点:配置
在得到的文件中有许多程序文件,通常有configure,我们可以通过 ./configure -参数 来进行相关配置
进行编译设置
当然,我门很可能根本不知道有哪些参数,可以在解压得到文件中找到相关配置说明(一定会有的,不过是英文)
配置好后会有makefile(或类似的东西),然后直接make根据这个配置文件进行配置,配置好后就能直接安装了
因为我已经装好的,这里显示就会不一样
- 安装。make install
二进制安装
我们需要做的只是将从网络上下载的二进制包解压后放到合适的目录,然后将包含可执行的主程序文件的目录添加进PATH
环境变量即可
优点:安装过程简单快速
缺点:无法查看源代码、选择功能不灵活、有依赖性(需要提前一些前置依赖包)
这就设计到刚才说的rpm与dpkg了. 注意srpm里面是源码,rpm与dpkg下载的是经过编译的二进制文件,不可修改参数
我认为二进制安装难点是安装的路径以及相关的东西,它都给你默认了,灵活性小,但安装简单.
dpkg与rpm只是用在不同linux发行平台,因为我用的ubuntu,只写一下dpkg就行了.道理类似.
dpkg本身是一个底层工具,上层的工具如apt,用于远程获取安装包
参数 | 说明 | |
---|---|---|
-i | 安装指定deb包 | |
-R | 加上目录,安装目录下的所有deb包 | |
-r | remove 移除安装的软件包 | |
-s | 显示已安装包的信息 | |
-L | 显示已安装的软件包的目录信息 | |
-l | 列出已安装的所有软件包 |
大概步骤
- 下载(不安装)一个二进制文件(如何知道是否是一个二进制文件呢,要么自己甄别,要么利用apt或yum)一般 .rpm .deb 是二进制
- 利用dpkg(ubuntu)或rpm(Centos)安装,参数见上,列举不全,自行搜索
- 这样文件就在对应的目录
过程确实比源码包安装简单
注意: apt-get install安装目录是包的维护者确定的,不是用户
实例
我安装一个Emacs试一试
涉及到apt 后面会说
利用apt在线下载一个软件
1
2sudo apt update #更新软件列表
sudo apt -d install -y emacs #只下载不安装 且回应安装选项时一律yes.利用dpkg安装
可以把安装包移动到一个路径下安装在那
我们发现不止下载了一个包,说有依赖关系,要一起安装
如果出现一些依赖关系,安装时就要提前或一起安装
这是可以利用apt的 -f参数修复依赖关系,相当于将没安装的都装上了
补充
在线下载
apt与yum
我们用到了apt下载,这个东西其实很常用.yum是其他发行版的,同理
一般有人常用apt-get,事实上apt更常用,也更好(至少我认为)
apt可以自动下载,配置安装二进制或源代码格式的软件包.
当执行安装时,会在本地的数据库中搜索关于软件的相关信息,根据信息在相关服务器上下载(你也许最好要换源).需要执行sudo apt update 使本地软件包列表与服务器保持一致.
好消息:apt可以很好的处理依赖关系
工具 | 说明 | |
---|---|---|
install | 安装软件包 | |
update | 从服务器上更新用于更新本地软件的列表 | |
upgrade | 升级本地软件 | |
remove | 移除已安装的软件包与与其有关系的软件包(株连) | |
clean | 移除下载到本地的软件包 路径 /var/cache/apt/archives/ |
参数 | 说明 | |
---|---|---|
-d | 只下载不安装 | |
-y | 自动回应是否安装软件包的选项 yes | |
-f | 修复依赖关系 |
可以使用sudo-cache search搜索本地有没有该软件
软件卸载 更新
根据不同的安装方式进行
源码卸载 更新
我们已经知道源码安装比较麻烦了,卸载的话也有点小麻烦1
make uninstall #可以卸载
事实上有些源码包并未提供这样的卸载方式
可以在安装时指定安装路径 —prefix==路径
卸载时把那个目录删除就行1
rm -rf 目录
更新的话,如果是从网站上下载编译的只有重新下载再走一遍流程
二进制卸载 更新
二进制代码如果在一个目录(比如是解压到一个目录的情况),直接1
rm -rf 目录
我试一下,卸载源码安装的bochs,试一试 make uninstall
成功了,我好不容易安装的软件没了
可以看出,安装的软件的路径不太好确定
更新的话同理,事实上如果从网站上下载的,不管是源码还是二进制,只能重新走一遍开始的流程了
但是
如果用apt或类似的软件管理就不一样了
更新软件包1
apt update # 更新安装源(Source)apt upgrade # 更新已安装的软件包apt dist-upgrade # 更新已安装的软件包(识别并处理依赖关系的改变)
卸载软件包1
apt remove PackageName # 删除软件包, 保留配置文件apt purge PackageName # 删除软件包, 同时删除配置文件apt autoremove PackageName # 移除之前被其他软件依赖但不再被使用的软件
安装软件包1
apt install PackageName # 普通安装apt install PackageName=VersionName # 安装指定包的指定版本apt --reinstall install PackageName #重新安装apt build-dep PackageName # 安装源码包所需要的编译环境apt -f install # 修复依赖关系
注意 如果出现一些问题需要重新安装软件, —reinstall install很有用,
同时dpkg也可以处理软件的卸载
- dpkg -r package-name删除软件包(保留配置信息)
- dpkg —configure package-name 配置软件包,如果加上
-a
表示配置所有未配置的软件包
实例
1.更新软件列表
2.更新本地软件
这样就更新了
卸载的话1
sudo apt remove
就不示范了,懒得再装
帮助命令
因为Linux命令太多了,学会使用帮助很重要
- 在只记得部分命令关键字的场合,我们可通过man -k来搜索;
- 需要知道某个命令的简要说明,可以使用whatis;而更详细的介绍,则可用info命令;
- 查看命令在哪个位置,我们需要使用which;
- 而对于命令的具体参数及使用方法,我们需要用到强大的man
- help也可以查看内置命令(help不在zsh中,且ls不是内置命令)
简要说明命令的作用(显示命令所处的man分类页面):1
$whatis command
查看程序的binary文件所在路径:1
$which command
详细的说明文档:1
$info command
eg:查找make程序安装路径:1
$which make/opt/app/openav/soft/bin/make install
查看程序的搜索路径:1
$whereis command
当系统中安装了同一软件的多个版本时,不确定使用的是哪个版本时,这个命令就能派上用场