1 2 3 4

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
  • ,所用的时间越长
posted @ 2019-06-05 00:25  多走多看  阅读(622)  评论(0编辑  收藏  举报