linux软件管理
Posted inmeditation
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux软件管理相关的知识,希望对你有一定的参考价值。
软件管理
通常而言,可以通过后缀区别源码包和二进制包
- 以.rpm .deb结尾的软件包称之为二进制包,已经通过GCC编译后的
- 以.tar .tar.gz .zip .rar 结尾称为源码包,需要编译
目录
二进制包
rom包管理
yum包管理
源码包
tar包管理
文件的管理和归档
1二进制包
1.1rpm软件包管理
centos操作系统中有一款默认软件管理的工具,即红帽包管理工具(red hat package manager , RPM)
rpm使用时,什么情况下使用软件包全名,什么时候使用软件包名?
- 包全名:对安装和更新升级时使用
- 包名:对已经安装过的软件包进行操作时,比如查找已经安装的某个包,卸载包等,使用包名(默认是去目录/var/lib/rpm下进行搜索.当一个rpm包安装到系统上之后,安装信息通畅会保存到本地)
安装
选项
- -i install的意思,安装软件包
- -v 显示附加信息,提供更多详细信息
- -h 安装时输出######标记
1,挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt
2,安装
[root@localhost ~]# rpm -ivh /mnt/Packages/zsh-5.0.2-31.el7.x86_64.rpm
3,查看是否安装成功
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/zsh
查询
rpm -q 查询. 常与下面参数组合使用.
- -a 查询所有已经安装的软件包
- -f 查询 文件所属哪个软件包,反向查询
- -i 显示已经安装的rpm软件包信息,后面直接跟包名
- -l 查询软件包中,文件安装的位置
- -p 查询未安装软件包的相关信息,后面要跟软件的命名
- -R 查询软件包的依赖性
-q 查询指定的包是否安装
[root@localhost ~]# rpm -q zsh
zsh-5.0.2-31.el7.x86_64
-qa 查询所有已经安装包
[root@localhost ~]# rpm -qa | grep vi
vim-minimal-7.4.160-5.el7.x86_64
-qf 查询文件或命令属于哪个安装包
[root@localhost ~]# which ifconfig
/usr/sbin/ifconfig
[root@localhost ~]# rpm -qf /usr/sbin/ifconfig
net-tools-2.0-0.24.20131004git.el7.x86_64
-qpi 查询软件包的信息
# 对于未安装的包
[root@localhost ~]# rpm -qpi /mnt/Packages/php-mysql-5.4.16-46.el7.x86_64.rpm
Name : php-mysql
Version : 5.4.16
对于已经安装的包
[root@localhost ~]# rpm -qi net-tools
Name : net-tools
Version : 2.0
Release : 0.24.20131004git.el7
-qpl 查询软件包要安装的位置
对于未安装的包
[root@localhost ~]# rpm -qpl /mnt/Packages/net-tools-2.0-0.24.20131004git.el7.x86_64.rpm
/bin/netstat
/sbin/arp
/sbin/ether-wake
/sbin/ifconfig
/sbin/ipmaddr
/sbin/iptunnel
对于已经安装的包
[root@localhost ~]# rpm -ql net-tools
/bin/netstat
/sbin/arp
/sbin/ether-wake
/sbin/ifconfig
校验
-qf 查看软件包内容是否被修改,用于检验命令没有被黑客修改
[root@localhost ~]# which find
/usr/bin/find
[root@localhost ~]# rpm -qf /usr/bin/find
findutils-4.5.11-6.el7.x86_64
[root@localhost ~]# rpm -V findutils #检查包,没有输出结果就是没有被修改
[root@localhost ~]# rpm -Vf /usr/bin/find #检查具体文件,没有输出结果就是没有被修改
如何查看系统中所有的rpm包及安装的文件有没有被黑客修改?
[root@localhost ~]# rpm -Va
.M....... g /boot/initramfs-3.10.0-957.el7.x86_64.img
S.5....T. c /etc/sysconfig/authconfig
校验时候参考了/var/lib/rpm目录下的rpm数据库信息
卸载和升级
卸载
[root@localhost ~]# rpm -e zsh
[root@localhost ~]# rpm -qa | grep zsh
[root@localhost ~]#
强制卸载
不建议使用.有依赖关系是建议使用yum来卸载
[root@localhost ~]# rpm -e --nodeps zsh
升级
因为升级时候会有一些依赖包要解决,所以一般我们使用(yum update 包),来升级
rpm -Uvh
1.2 yum软件管理程序
- yellow dog updater,Modified
- 基于RPm包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有以来的软件包.基于c/s架构
- yum提供了查找,安装,删除某一个,一组甚至全部软件包的命令
1本地yum源
1挂载光盘
mount /dev/cdrom /mnt
2备份配置文件
[root@localhost ~]# mv /etc/yum.repos.d/ /etc/yum.repo.d
[root@localhost ~]# mkdir /etc/yum.repos.d
3创建yum本地源
[root@localhost ~]# vim /etc/yum.repos.d/centos7.repo #名称任意,但是一定要.repo结尾
[centos7] #yum源名称,在本服务器上是惟一的
name=centos7 #yum源描述信息
baseurl=file:///mnt #yum源的路径(ftp://... HTTP://... file:///...)
enabled=1 #1启用yum源 , 0为禁用
gpgcheck=0 #1使用公钥校验rpm包的正确性,0为不校验
4清除yum缓存
[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: centos7
2配置网络源
1下载阿里yum源并保存到指定路径
wget 下载. -O指定保存位置
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS.Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2清除yum缓存
[root@localhost ~]# yum clean all
3当centos推出新版本的系统后,yum源不能用了该怎么办呢?
cat /etc/yum.repos.d/CentOS.Base.repo
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
其中$releasever代表的是系统版本
[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
自动识别本地系统版本,和网站中的最新的版本对应.所以应该更改配置文件中的版本信息
1 查看
发现网站中http://mirrors.aliyun.com/centos/ centos版本最新的是7.6.1810
2 替换
[root@localhost ~]# sed -i 's/$releasever/7.6.1810/g' /etc/yum.repos.d/CentOS.Base.repo
3更新
[root@localhost ~]# yum clean all
yum常用操作
安装和升级
yum install -y httpd #安装软件包
yum update httpd #升级软件包,改变软件设置和系统设置,系统版本内核都升级
yum upgrade httpd #升级软件包,不改变软件设置和系统设置,系统版本升级,内核不改变
yum -y update #系统内能升级的软件都会升级
检索
yum info net-tools #查询rpm包的作用
yum provides /usr/sbin/ifconfig #查询文件是哪一个软件安装的,同rpm -qf
yum search vim #按照关键字搜索软件包
卸载
yum remove zsh #卸载包
yum安装开发工具软件包组
查看有哪些软件包组
[root@localhost ~]# yum grouplist
安装开发工具组
[root@localhost ~]# yum groupinstall "Development Tools"
源码包
源码安装nginx
安装
1安装依赖
[root@localhost ~]# yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel
2解压
[root@localhost ~]# tar zxvf nginx-1.16.0.tar.gz
3安装软件
[root@localhost ~]# cd nginx-1.16.0
[root@localhost nginx-1.16.0]# ./configure --prefix=/usr/local/nginx
[root@localhost nginx-1.16.0]# make -j 4
[root@localhost nginx-1.16.0]# make install
详解
./configure
- 可以指定安装路径,例如 --prefix=/usr/local/nginx
- 启用或者禁用某项功能
- 检查安装环境
- 最终生成:Makefile
make -j 4
- 按Makefile文件编译
- 通过4核心CPU来完成
make install
- 按Makefile定义的文件路径安装
make clean
- 当我们想指定安装路径,这时就需要删除上次生成的Makefile. 或者可以删除源码包,重新解压.
删除源码包
make uninstall
但是很多时候删除不干净
所以一般安装时指定路径--prefix=/usr/local/nginx
这样进行操作时,可以直接对这个路径进行操作
错误解决方法
can't find ext2fs library
根据提示,安装ext2fs库
一般我们可以RPM安装,通过按tab键补齐.不行的话可以查找关键字
[root@localhost ~]# rpm -ivh /mnt/Packages/ext2fs
[root@localhost ~]# ls /mnt/Packages/*ext2fs*
[root@localhost ~]# ls /mnt/Packages/*2fs*
/mnt/Packages/e2fsprogs-libs-1.42.9-13.el7.i686.rpm
/mnt/Packages/e2fsprogs-libs-1.42.9-13.el7.x86_64.rpm
还可以通过yum search ext2fs来检索
[root@localhost ~]# yum search ext2fs
当我们把库已经安装,但是configure时又说找不到,怎么办
我们还需要安装该库的头文件
/mnt/Packages/e2fsprogs-devel-1.42.9-13.el7.x86_64.rpm
总结
- rpm+yum:方便,软件版本低,稳定性好,管理方便
- 源码编译:麻烦,软件版本新,可以定制,稳定性和管理稍差,但是性能好
一般LAMP或LNMP架构时,我们会用源码
文件的归档和压缩
好处:节约硬盘的资源,加快文件传输速率
tar命令:打包文件
选项
- -c 创建压缩包
- -x 解压还原文件
- -v 显示执行详细过程
- -f 指定文件
- -t 不解包,查看包中的内容
- -C 指定解压位置
把/boot/grub/打包到指定路径
[root@localhost ~]# tar -cvf /home/harry1/grub.tar /boot/grub/
/boot/grub/
/boot/grub/splash.xpm.gz
解包grub.tar到指定路径
[root@localhost ~]# tar xvf grub.tar
boot/grub/
boot/grub/splash.xpm.gz
将多个目录和文件打包成一个软件包
[root@localhost ~]# tar -cvf /home/harry1/back.tar /etc/passwd /etc/group /home/harry1/
/etc/passwd
/etc/group
/home/harry1/
不解包,只查看包中的内容
[root@localhost ~]# tar -tvf /home/harry1/back.tar
-rw-r--r-- root/root 941 2019-06-05 05:17 etc/passwd
-rw-r--r-- root/root 519 2019-06-05 05:17 etc/group
...
在使用绝对路径名归档文件时,默认从文件名中删除该路径前面的/符号,这样解压时,会直接解压到当前目录.不然会覆盖原路径中的文件
归档+压缩
参数
- -z 以gzip方式压缩 扩展名tar.gz
- -j 以bz2方式压缩 扩展名tar.bz2
- -J 以xzx方式压缩 扩展名tar.xz
tar.gzip
压缩
[root@localhost ~]# tar zcvf /home/harry1/etc.tar.gz /etc
解压缩
[root@localhost ~]# tar zxvf /home/harry1/etc.tar.gz -C /opt/
tar.bz2
压缩
[root@localhost ~]# tar jcvf /home/harry1/etc.tar.bz2 /etc
解压缩
[root@localhost ~]# tar jxvf /home/harry1/etc.tar.bz2 -C /opt/
tar.xz
压缩
[root@localhost ~]# tar Jcvf /home/harry1/etc.tar.xz /etc
解压缩
[root@localhost ~]# tar Jxvf /home/harry1/etc.tar.xz -C /opt/
经过测试,解压缩时如果存在相同文件,会直接覆盖,不会询问
效果
- r < tar.gzip < tar.bz2 < tar.xz
- ,所用的时间越长
以上是关于linux软件管理的主要内容,如果未能解决你的问题,请参考以下文章