Linux 软件包管理

Ø  简介

本文主要介绍 Linux 软件包的管理,包括如下内容:

目录

1.       wget 命令的使用... 1

2.       RedHat 系使用 RPM 二进制软件包管理... 1

3.       RedHat 系使用 YUM 二进制软件包管理... 5

4.       RedHat 系源代码包安装... 6

5.       RedHat 系脚本安装(Shell 或 Java 脚本)... 8

6.       Debian 系 Linux 软件包管理介绍(APT 包管理). 10

 

 

1.   wget 命令的使用

功能描述

wgetLinux下下载文件的最常用命令。wget支持HTTPHTTPSFTP协议,支持自动下载,即可以在用户退出系统后在后台执行,直到下载结束。

语法

wget [选项] [URL]

    -P 指定下载存储路径;

-b 启动后转入后台;

-N 只获取比本地文件新的文件;

    -c 断点续传下载文件。

    -S 打印服务器响应,不下载任何文件

    --spider 模拟下载,不下载任何文件;

--no-check-certificate 不验证HTTPS服务器的证书

示例:

#下载nginx

wget -P /opt/soft https://nginx.org/download/nginx-1.18.0.tar.gz

wget --spider http://test.ms.zxsxdd.com     #模拟下载(检查网站是否正常)

 

wget 介绍:

wget 可以跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,这又常被称作递归下载

wget 非常稳定,它在带宽很窄的情况下,或者网络不稳定的情况下有很强的适应性。如果是由于网络的原因下载失败,wget 会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

更多使用方法:https://www.cnblogs.com/ftl1012/p/9265699.html

 

2.   RedHat 系使用 RPM 二进制软件包管理

n  RPM 的优缺点

1)   rpm 在查询上很好的弥补了 yum 的不足,查询速度要比 yum 快很多;

2)   rpm 不足的地方是,在解决软件包的依赖关系上,不如 yum 方便。

 

n  RPM 软件包的一个例子:

sudo.1.7.2pl-5.e15.i386.rpm 各部分分别表:

l  sudo    表示软件名;

l  1.7.2p1 版本号

l  5.e15   发行号

l  i386    硬件平台

l  rpm     后缀,表示为RPM

 

1)   卸载

# rpm -e sudo       #sudo 表示要卸载的软件名称

注意:如果其他软件包有依赖关系,卸载是会产生提示信息,可以使用 –nodeps 选项进行强制卸载,例如:# rpm -e –nodeps samba

 

2)   安装

# rpm -ivh sudo-1.7.2pl-5.e15.i386.rpm

选项:-i 安装;-v 显示安装时的详细信息;-h 显示安装进度(#)

 

1.   Linux 系统光盘中安装

挂载光盘:

# mkdir /mnt/cdrom                 #创建挂载点目录

# mount /dev/cdrom /mnt/cdrom       # /dev/cdrom 挂载到 /mnt/cdrom

说明:现在访问 /mnt/cdrom 这个目录,就相当于访问光盘上的 /dev/cdrom

 

# ls -l | grep sudo #/mnt/cdrom/Packages 目录下查找 sudo 软件包

# rpm -ivh sudo-1.8.23-3.el7.x86_64.rpm     #安装 sudo 软件包

 

[root@localhost Packages]# rpm -q sudo      #查看软件包是否安装

[root@localhost Packages]# rpm -qa | grep samba     #查看所有安装的软件包中指定的软件包

 

2.   其他安装选项

1)   不安装文档文件

[root@localhost Packages]# rpm -ivh --excludedocs sudo-1.8.23-3.el7.x86_64.rpm    #不安装软件包中的文档文件(说明文档、帮助文档等)

2)   指定安装目录

[root@localhost Packages]# rpm -ivh --prefix=/usr/local/sudo  sudo-1.8.23-3.el7.x86_64.rpm    #指定安装包的安装目录

注意:

1.   Linux 中,大多数 RPM 包都不允许指定安装目录,因为在很多 rpm 包的作者在生成 rpm 包时,都已经规定好 rpm 软件包的存放位置;

2.   这样会不会管理很麻烦,或者卸载不干净?是不会的,安装后并不会向 Windows 一样会有注册表、或存储在其他位置,导致卸载不不干净。Linux 卸载时也会卸载对应的安装目录,这个不用担心。

 

3)   测试安装

[root@localhost Packages]# rpm -ivh --test sudo-1.8.23-3.el7.x86_64.rpm    #只对安装进行测试,并不是实际安装

说明:比如测试是否已经安装、是否会冲突、是否存在依赖等。

 

4)   软件包已被安装

[root@localhost Packages]# rpm -ivh --replacepkgs sudo-1.8.23-3.el7.x86_64.rpm    #覆盖安装该软件包

 

5)   文件冲突

[root@localhost Packages]# rpm -ivh --replacepkgs --replacefiles sudo-1.8.23-3.el7.x86_64.rpm     #如果要安装的软件包中有一个文件以及在安装其它软件包是安装,解决文件冲突时可以使用 --replacefiles 选项,可以忽略该错误信息。

 

6)   未解决依赖关系

RPM 软件包可能依赖于其他软件包,在安装了特定的软件包之后才能安装该软件包。

[root@localhost Packages]# rpm -ivh --replacepkgs --nodeps sudo-1.8.23-3.el7.x86_64.rpm

说明:如果不考虑依赖关系,强行安装可以使用 --nodeps 选项,但是安装后该软件包可能不能正常运行。

 

3)   升级

[root@localhost Packages]# rpm -Uvh sudo-1.8.23-3.el7.x86_64.rpm

注意:

1.   首先需要将新版本的软件包下载下来;

2.   指定升级的软件包应该比当前的软件包版本更高。

 

4)   查询【选项】

1.   -p 查询软件包

# rpm -q sudo

注意:只能查询二进制软包,不能查询源代码包和脚本安装的软件。

 

2.   -a 查询所有已安装的软件包

# rpm -qa

 

3.   -f 查询文件(文件、命令、配置文件等)所属的软件包

# rpm -qf /etc/services     #查看配置文件软件包

# rpm -qf /bin/ls          #查看命令所属软件包

 

4.   -i 查询已安装的软件包信息

# rpm -qi sudo

 

5.   -p 查询未安装的软件包信息

# rpm -qip sudo-1.8.23-3.el7.x86_64.rpm     #因为还未安装,所以需要写上软件包的全称

 

6.   -l 查询软件包中的文件列表

# rpm -ql sudo      #查询已安装软件包的安装目录和文件

# rpm -qlp sudo-1.8.23-3.el7.x86_64.rpm     #查询未安装软件包的安装目录和文件

 

提示:Linux 相同类型的文件都存放在同一目录下,例如:

/etc/                      一般用于存放配置文件

/usr/bin/ 或者 /usr/sbin/   一般用于存放命令文件

/usr/libexec/               一般用于存放库文件

/usr/share/doc/             一般用于存放文档文件

/usr/share/man/            一般用于存放帮助文件

/var/                      一般用于存放临时文件

 

7.   -d 查询被标注为文档的文件列表(与 -l 相比,可以看做是分类查询)

# rpm -qd sudo      #查询已安装的

# rpm -qdp sudo-1.8.23-3.el7.x86_64.rpm     #查询未安装的

 

8.   -c 查询被标注为配置文件的文件列表(与 -l 相比,可以看做是分类查询)

# rpm -qc sudo      #查询已安装的

# rpm -qcp sudo-1.8.23-3.el7.x86_64.rpm     #查询未安装的

 

示例1查看一个服务的软件包信息

# ls /etc/rc.d/init.d

functions  msg.script  netconsole  network  README

# rpm -qf /etc/rc.d/init.d/functions

initscripts-9.49.46-1.el7.x86_64

# rpm -qip /etc/rc.d/init.d/functions

 

示例2查看 vim 软件包的示例文件(寻找 ~/.vimrc 文件注释问题)

# rpm -qa | grep vim                   #查找 vim 的安装包

# rpm -ql vim-common | grep example     #查找 vim 的示例文件

# more /usr/share/vim/vim74/vimrc_example.vim   #查看 vim 示例文件内容

clip_image001[4]

可以看到,示例文件中并不是以 # 号注释,而是使用"(双引号)

 

5)   校验

校验的作用:解决比如黑客侵入系统,获取其他人将软件文件修改,删除,导致软件运行不了。这时就需要使用到校验功能。

语法:# rpm -V 软件名称

示例:

# rpm -V sudo                  #首先校验 sudo 软件包(无返回内容)

说明:在无任何改动的情况下,是不没有返回内容的(这是正常的)

 

# vi /etc/pam.d/sudo           #模拟将 sudo 的配置文件进行修改

# rpm -V sudo                  #再次校验 sudo 软件包

S.5....T.  c /etc/pam.d/sudo    #返回内容

n  以上值分别代表的改变项:

1.   5 文件的 md5 校验值

2.   S 文件的大小

3.   L 链接文件

4.   T 文件的创建或修改时间

5.   D 设备文件

6.   U 文件的用户

7.   G 文件的用户组

8.   M 文件的权限

 

说明:为什么 RPM 软件包可以校验?是因为 rpm 软件包安装到系统后,会自动生成一个 rpm 库,校验时会与 rpm 库进行比较,得出校验的值。

 

6)   软件包文件提取

如果不小心把系统中的配置文件或命令删除掉了,可以通过软件包文件提取的方式,恢复丢失的文件。

clip_image003[4]

示例:将 sudo 中的 sudo-i 配置文件删除后,再从软件包中恢复。

# rpm -ql sudo | grep etc       #查找 etc 下的配置文件

/etc/pam.d/sudo-i              # sudo-i 为例

# rm -f /etc/pam.d/sudo-i      #删除 sudo-i

 

# rpm -q sudo                  #确定 sudo 属于哪个软件包

sudo-1.8.23-3.el7.x86_64

[root@localhost /]# mkdir backup    #创建解压目录

[root@localhost backup]# rpm2cpio /mnt/cdrom/Packages/sudo-1.8.23-3.el7.x86_64.rpm | cpio -idv ./etc/pam.d/sudo-i     #解压到当前目录(/backup/etc/pam.d)

[root@localhost backup]# cp etc/pam.d/sudo-i /etc/pam.d/sudo-i  #拷贝恢复文件

[root@localhost /]# rm -rf backup   #删除临时目录

 

3.   RedHat 系使用 YUM 二进制软件包管理

n  YUM 的优缺点

1)   自动解决软件包的依赖关系;

2)   方便软件包的升级(不需要手动下载软件包,可以自动在 yum 源中下载);

3)   安装的软件包是 yum 源官方的,是可以信赖的。如果自己去网站中下载,软件包中可能植入木马,是不安全的。

4)   缺点是,yum 在查询软件包信息时比较慢,这是可以采用 RPM 来弥补。

 

1)   安装

# yum install sudo      #自动安装 sudo 软件包

# yum -y install tree   #当安装过程提示选择全部为"yes"

注意:因为 yum 是在互联网寻找软件包的源,所以必须是联网的。

 

2)   检测升级

# yum check-update sudo     #指定检测 sudo 软件包是否升级,如果不指定将检测所有软件包。如果有可用的新软件包将会显示,否则不会显示

说明:为什么要升级软件包呢?因为软件包可能存在一些漏洞或BUG,这些漏洞可能照成黑客的侵入,所以有必要升级为最新的软件包。

 

3)   升级

# yum update sudo   #升级 sudo 软件包

# yum -y update    #升级所有包同时也升级软件和系统内核

# yum -y upgrade    #只升级所有包,不升级软件和系统内核

 

4)   查询软件包

# yum list | more       #查询 yum 源中所有的软件包

# yum list | grep sudo  #查询 yum 源中 sudo 软件包的安装信息

或者

# yum list sudo         #查询 yum 源中 sudo 软件包的安装信息

sudo.x86_64         1.8.23-4.el7_7.2          @updates

@updates 处可能包含的值(带有@表示已更新或已安装):

l  updates: 未安装

l  installed: 已安装

l  @updates: 已更新

l  base: Linux 自带的软件包(已安装)

l  extras: Linux 自带的软件包(未安装)?

l  @anacond: Linux 自带的软件包(已更新)?

 

5)   查看软件包

yum info sudo                      #查看软件包信息

yum list | grep libgdiplus          #查看软件包安装位置

rpm -ql libgdiplus-devel.x86_64

 

6)   卸载

yum remove sudo

 

7)   帮助

yum -help

man yum

 

4.   RedHat 系源代码包安装

n  源代码包的特点

1)   二进制包在安装和使用比较简单,但是二进制包并没有提供给使用者提供更多的空间,导致使用者很难去配置,或指定安装目录。

2)   而源代码包可以指定很多的设置和选项,或者去修改源代码,在很多知名软件中都是直接提供源代码包的,灵活度和定制型非常高,使用者可以自己去增加或去掉一些功能。

3)   因为是源代码包,是在安装时才进行编译安装,与二进制包相比,它可以支持更多的 CPU 和操作系统。

 

1)   安装示例(proftpd)

1.   第一步:下载源代码包

下载地址:http://www.proftpd.org/

 

2.   第二步:下载后上传至系统 /home/abream/learn 目录下

/home/abream/learn/proftpd-1.3.6c.tar.gz

分别表示:proftpd 软件名称;1.3.6c 版本号;tar.gz 压缩格式

 

3.   第三步:解压缩到当前目录

[root@localhost learn]# tar -xzvf proftpd-1.3.6c.tar.gz

 

4.   第四步:进入到解压目录(proftpd-1.3.6c)

[root@localhost proftpd-1.3.6c]# ls

clip_image005[4]

标准的源代码包中都会有一个 configure 的可执行脚本。

 

5.   第五步:配置

rpm 二进制包不一样,源代码包没有专门的卸载命令,所以安装前建议指定安装目录。通常情况下,源代码包建议安装在 /usr/local 目录下,然后再加一个以软件名命名的目录,例如:/usr/local/proftpd

[root@localhost proftpd-1.3.6c]# ./configure --prefix=/usr/local/proftpd

clip_image007[4]

以上提示错误信息:表示在系统的 $PATH (缺省路径)中,没有找到 C 的编译器,配置终止了。如果存在其他错误,注意看提示信息!如果存在缺少的软件包,安装上即可。

 

C 编译器广泛采用的是 gcc,下面就安装下 gcc 的编译器。而 gcc 依赖于很多库文件,所以建议采用 yum 来进行安装。

[root@localhost proftpd-1.3.6c]# yum install gcc

提示:

1)   因为源代码是 C 语言写的,所以必须有一个 C 的编译器才能安装;

2)   C 编译器装 cc 或者其他的都是可以的,只是 gcc 用的比较广泛。

 

gcc 安装完成后,再次执行配置

[root@localhost proftpd-1.3.6c]# ./configure --prefix=/usr/local/proftpd

clip_image008[4]

显示以上提示,表示配置这个步骤已经完成了。

 

6.   第六步:编译

[root@localhost proftpd-1.3.6c]# make

编译成功后,会在当前目录中生成对应的可执行文件,提供按安装。

clip_image009[4]

 

7.   第七步:编译安装

[root@localhost proftpd-1.3.6c]# make install

安装完成后,可以在安装目录下查看到安装目录和文件:

clip_image010[4]

提示:

1)   直到这一步才真正将源代码包安装完成;

2)   最后一步(安装),其实就是将编译好的文件,拷贝到对应的目录中。

 

2)   卸载示例(proftpd)

# kill `pgrep proftpd`         #关闭 proftpd 的进程

# rm -rf /usr/local/proftpd     #删除安装的目录即可

 

5.   RedHat 系脚本安装(Shell Java 脚本)

因为源代码包安装比较复杂,所以有些公司推出脚本安装的方式(比如:webmin,这种方式与 Windows 安装软件没多大区别。脚本安装分为两种,一种是 Shell 脚本(webmin),另一种是 Java 脚本(如:OpenOffice(Java 脚本采用图形安装)

 

1)   安装示例(webminShell 脚本安装示例))

远程管理 Linux 除了使用命令行工具(如:XshellSecureCRTputty,和图形管理工具(如:WinSCPXManager)。

webmin 是一个介于两则之间的远程管理工具,采用浏览器来远程管理操作系统,它是一种图形化的操作。在业界是比较有名的,强大的远程管理工具。

1.   第一步:下载软件包

下载地址:http://webmin.com/

 

2.   第二步:下载后上传至系统 /home/abream/learn 目录下

/home/abream/learn/webmin-1.941.tar.gz

 

3.   第三步:解压缩到当前目录

[root@localhost learn]# tar -xzvf webmin-1.941.tar.gz

 

4.   第四步:查看安装说明文件

[root@localhost webmin-1.941]# ls -l | grep README

-rw-rw-r--.   1 3001 wheel   3801 1  15 08:06 README.md

[root@localhost webmin-1.941]# cat README.md

clip_image012[4]

Linux 中,如果不是标准的源代码安装方式,那么一定有一个说明文档,比如:README(请先读我)、INSTALL(安装说明)

 

5.   开始安装

[root@localhost webmin-1.941]# ./setup.sh       #执行安装脚本

clip_image013[4]

说明:确定配置文件目录,不改直接回车,如果要改则输入指定的目录。

clip_image014[4]

说明:因为 webmin 是使用 perl 语言写的,安装会检查是否 perl 语言,如果没有安装将会终止。

clip_image015[4]

说明:指定 webmin 的端口,例如:web service:80ftp:2021ssh:22

clip_image016[4]

安装过程中,会生成卸载 webmin 的脚本,后续需要卸载直接执行该脚本即可。

注意:当完成以上设置后,后续的编译安装过程都是自动完成的。

clip_image018[4]

安装完成!用户名:admin,密码:admin

 

6.   访问 webmin

本机访问:http://localhost.localdomain:10000/

局域网访问:http://192.168.1.150:10000/

局域网如果无法访问,需要打开防火墙:

1)   进入 /etc/sysconfig/ 目录

2)   将端口加入信任规则中,执行命令:

iptables -I INPUT -p TCP –dport 10000 -j ACCEPT

 

2)   卸载示例(webmin

# /etc/webmin/uninstall.sh     #执行卸载脚本

 

6.   Debian Linux 软件包管理介绍(APT 包管理)

1.   搜索软包 apt-cache search

2.   软件包信息 apt-cache show

3.   安装 apt-get install(reinstall-f)

4.   删除 apt-get remove(autoremove--purge)

5.   更新软件源 apt-get update

6.   更新已安装包 apt-get upgrade

原文地址:https://www.cnblogs.com/abeam/p/15415603.html