人生最重要的不是努力,而是方向

0%

前情提要

首先你需要先拥有公钥和私钥文件,或者密钥字符串,如果没有请看我写的使用openssl生成普通RSA密钥对.

上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101


<?php





$private_key = '-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDeAtc1uTng7nJd
HfKRMFPBRrvYtxAKViYrONkkCFW5cit9HgPlX5NwWDv7+8yZ4b7UgCPn7pqzAL8g
+9omtFj5DaXQP0onr8z1b7KJ0zxfiKL2PaFqUhNwiQLu8NPdeCtPVtabsPvF5fqh
thdm0+7Ryi90o60sLO4573baqpP4WHp7PGhPbvrsHS6tNwRvs25+aUCddPxQrv40
7MysjeJG60c+9YZrcP6C/hY/p5pNcTV2uFg3Szu4s5OIsa3qxk1CYjSFSKyMoOLW
L3hDPznm0LH9ZFEb6yxWCGF7owVMUV9UJBs6wT/9KNREKrb040vzPP7spdNEtrgQ
SsMczqlHAgMBAAECggEBAItTyw3bLZic7EbF6Zn2c0mjg3XxBO8Hu7J6XcOAO5RD
M0m1EYrcnWHu7c4o6vFTu/gOZvpCQvG9sTUY+YI6wm+iggIcBgS8Dmulaq2WVJg7
3tGcQfXAhpSkV6PunXeq17tV6x8QRiGfP9hGt47/yCv+sCOKKL7Ff8f6IWP/kxdR
+7LJOH92hBH1UccTOyZRbSQ5TT/HKebtZWy5fA/ykLU1bjAzFPtUMrFtEn8bcj9V
ie41TC2aVaKoBZsdhpYj9HhAFkcb3EF9c09MPsamAb/r3FP0LrD/S1frcwwLjNaO
MADsyPaTINjgYNfmqtdS9IRHCfOAj+fTiiEf+lqzXxECgYEA/2sJoXf+TFT7qer2
gF3joaTEMfE7twDyXuq6/w/folFhTY9/hwSdc5dLVQbDCGlcqsrdoH2Scu09evWu
88bEKL1GbxEy1LUGHWvOzxdjx7PTh8e67/qghyjFFt5sP0XOQWsvnWEFyKY88koH
k+ZYBYbgw8stxZZ2nB1quC04a7kCgYEA3oRR2lztQ785vsq5J3xTLI0exvMNy75l
qPr3O9EvY072gAVcbun762/0PC66mNt5LMEPJ7hi+XNIlQdWDDXbOXN4taR46dDb
90YeEpZILrWXCnqseAjPuap6kEk7UwFu1zttt5XGTNI5SKue2mToYSL427osVpo0
kc7sPuE8PP8CgYAJtkw7c5Cb3m9jWqfc4bUSJG3BaGbY4pRUv6A0qqnaRjXo+Rfk
TmyeRJZ8uTEZVMhNRkF/JMc4z4SS9FyesGQtGGVhO8ovBGMjI0JN5ZnJsjDM7O9S
yLjp6sbzw6liDol1O1ooJdROeOPAYsg++3dFXoeValhnNv1zmjrAnheTIQKBgQCZ
ncfUdGroZk+7Q8DnXZEeJJ6mwo03p04PhpLAHP4WFSFf6FOTzr04IKYAFlKDzKCv
IOkRht3tUIU/PT1OWK/rzaf73nwLD0GMSD/inRVgCcUoWuBOTeb6SpMqoSPvfgHD
XSe1ohSwXEFnxfN42kkDJl2fc7vAXd0E/FFkZ6JqiQKBgHLybFQaIMTLziRHcCDS
0YA3knGS3x6dRDMaYyqocj2AdtItcAHg5TExVOqlIVBuyT38GBWXy8i53f2nCqMM
NMfdsl6Ewf5nMASkY3wOtMKLNB/0f+LEb/pJS62woNNH8mpf0FGeNeiDtDNddgTn
Hte7WLZGB3uXfoMBbM0E4qTo
-----END PRIVATE KEY-----
';
$public_key = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3gLXNbk54O5yXR3ykTBT
wUa72LcQClYmKzjZJAhVuXIrfR4D5V+TcFg7+/vMmeG+1IAj5+6aswC/IPvaJrRY
+Q2l0D9KJ6/M9W+yidM8X4ii9j2halITcIkC7vDT3XgrT1bWm7D7xeX6obYXZtPu
0covdKOtLCzuOe922qqT+Fh6ezxoT2767B0urTcEb7NufmlAnXT8UK7+NOzMrI3i
RutHPvWGa3D+gv4WP6eaTXE1drhYN0s7uLOTiLGt6sZNQmI0hUisjKDi1i94Qz85
5tCx/WRRG+ssVghhe6MFTFFfVCQbOsE//SjURCq29ONL8zz+7KXTRLa4EErDHM6p
RwIDAQAB
-----END PUBLIC KEY-----
';



$pi_key = openssl_pkey_get_private($private_key); #判断私钥是否是可用的,可用返回资源id Resource id

$pu_key = openssl_pkey_get_public($public_key); #判断公钥是否是可用的,可用返回资源id Resource id

#使用公钥和私钥文件写法(可使用相对或者绝对路径)

#$private_key = "private_key.pem";
#$public_key = "rsa_public_key.pem";
#$pi_key = openssl_pkey_get_private(file_get_contents($private_key)); #判断私钥是否是可用的,可用返回资源id Resource id
#$pu_key = openssl_pkey_get_public(file_get_contents($public_key)); #判断公钥是否是可用的,可用返回资源id Resource id


#使用公钥和私钥文件写法结束


echo "资源id\n";
print_r($pi_key);
echo "\n";
echo "资源id\n";
print_r($pu_key);
echo "\n";


$data = "123"; //原始数据
$encrypted = "";
$decrypted = "";
echo "---------------------------------------\n";
echo "待加密数据:", $data, "\n";

echo "---------------------------------------\n";
echo "私钥加密元数据:\n";

openssl_private_encrypt($data, $encrypted, $pi_key); #私钥加密
$encrypted = base64_encode($encrypted); #由于加密后的内容通常含有特殊字符,需要base64转换下,在http请求时要注意urlencode问题
echo $encrypted, "\n";

echo "公钥解密得到元数据:\n";

openssl_public_decrypt(base64_decode($encrypted), $decrypted, $pu_key); #私钥加密的内容通过公钥可用解密出来
echo $decrypted, "\n";

echo "---------------------------------------\n";
echo "公钥加密元数据:\n";

openssl_public_encrypt($data, $encrypted, $pu_key); //公钥加密
$encrypted = base64_encode($encrypted);
echo $encrypted, "\n";

echo "私钥解密得到元数据:\n";
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $pi_key); //私钥解密
echo $decrypted, "\n";

最后保存成php文件哈,我这里保存为index.php.

执行

在linux控制台输入如下命令:

1
2

php index.php #cd到index.php所在的目录

当然如果搭建了web访问php的方式,可以通过web访问.

输出结果如下:

资源id
Resource id #6
资源id
Resource id #8
---------------------------------------
待加密数据:123
---------------------------------------
私钥加密元数据:
kDNIsmsqw0/JReqOL8J0QRb+/MPInk0XPbWfreL2+anLinDuHHvSEehca4WhvCtRRU5DySlNpgXmUOd7xF4z9EfQEH4KE2TYD5km3O5h1+aPz6AUbmbNDDcqOhob4Ldmbaw5O9m1cdYNXRLyT3CD1773CriSrcuWsQtxyxwa6jzBO8ZP3Ry5bKKAANbCLamwZ0thioIO3PnOoVGsFr6JsM+/kyIKOKBqhJR071cnl3liNt8GwkOIkmj3PWp+tb3+wxEO9ClLH6SNMvE9c2zbTZ+L3BfLWW4EmusNIIcfq9ifi9yFfiJPeNZhilMXH01B4gcRnsBS8vOfiK6NXBLEJw==
公钥解密得到元数据:
123
---------------------------------------
公钥加密元数据:
WVIdFhmNcdk5VcDm0IfkcWqA1oCdrYCZ/E25Mn7Ku/eLfe8AHm4TzQEzGFyrGdT/NlO3mw7ghqoDC+tvGAhUmuOoxXvCTBwGD4+qSYLQ3dpvqt/F0Q8bwNdbZtciczAR4U9lnwyqQ6AlLZcus3ULfMaBtFPaLQqyWVYSM2vNJ4t3zlcDtZMH/gCUMTasSrFVjND6YgA13SReKlX67TJR1KzjrT14QWgSiQaW3Bw4GY/Db7MGocsj0TnYgXoXg47remzgpll1U7l2TpLgq9WEUqs5YMWS3VQ+MAFBN2ghrSzy91npUReQNZdglSmWAna8Dg+/WgjVzj4waugMqLOzGw==
私钥解密得到元数据:
123

生成私钥

1
openssl genrsa -out rsa_private_key.pem 2048  #生成私钥  这里的2048要与php中的openssl.cnf配置文件中的一致,否则在php中使用会出错

将私钥转换为pkcs8格式

1
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem

生成公钥

1
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* get请求
*
* @param string $url 请求地址
* @param array $data get参数数据
* @return array 返回接口json数据
*/
function geturl($url, $data = array())
{


$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if (1 == strpos("$" . $url, "https://")) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
$param = '';

if ($data) {
foreach ($data as $k => $v) {

$param .= '&' . $k . '=' . $v;
}
$param = substr_replace($param, '?', 0, 1);
}

$url .= $param;

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0); //不输出请求头信息
$data = curl_exec($curl);


//执行命令
curl_close($curl); //关闭URL请求
return json_decode($data, true); //显示获得的数据

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* post请求
*
* @param string $url 请求接口地址
* @param array $data post参数数据
* @return array 返回接口json数据
*/
function posturl($url, $data = array())
{
//初始化
$curl = curl_init();
//设置抓取的url

curl_setopt($curl, CURLOPT_URL, $url);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if (1 == strpos("$" . $url, "https://")) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
//设置post方式提交
if (!is_array($data)) {

$headers = array("Content-Type: application/json");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}

curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);//不输出头信息
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

//执行命令
$res = curl_exec($curl);


//关闭URL请求
curl_close($curl);
//显示获得的数据

return json_decode($res, true);
}

1.创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。

1
dd if=/dev/zero of=/root/swapfile bs=1M count=1024

2.格式化为交换分区文件:

1
mkswap /root/swapfile #建立swap的文件系统

3.启用交换分区文件:

1
swapon /root/swapfile #启用swap文件

4.使系统开机时自启用,在文件/etc/fstab中添加一行:

/root/swapfile swap swap defaults 0 0

设定

要在系统上启用IUS存储库,请安装ius-release 软件包。该软件包包含IUS存储库配置和公共软件包签名密钥。许多IUS软件包都具有EPEL存储库中的依赖项 ,因此也请安装epel-release软件包。

RHEL / CentOS 7

1
2
yum install https://repo.ius.io/ius-release-el7.rpm 
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm #如果你事先已经安装过了,无需重复安装

配置ius为阿里云的源站地址

进入配置目录

1
cd /etc/yum.repos.d

使用'll'命令可以看到有三个ius源的配置

-rw-r--r--. 1 root root  669 5月   2 2019 ius-archive.repo
-rw-r--r--. 1 root root  591 5月   2 2019 ius.repo
-rw-r--r--. 1 root root  669 5月   2 2019 ius-testing.repo

执行如下命令:

sed 's/repo.ius.io/mirrors.aliyun.com\/ius/g' ./ius.repo -i
sed 's/repo.ius.io/mirrors.aliyun.com\/ius/g' ./ius-archive.repo -i
sed 's/repo.ius.io/mirrors.aliyun.com\/ius/g' ./ius-testing.repo -i

到此,ius源安装配置已完成

阿里云也有epel,如果想更换成阿里云的源站,配置类似

附阿里云镜像站地址:https://opsx.alibaba.com/mirror?lang=zh-CN

上面有详细的配置过程,如您已使用,请忽略本提示

停掉防火墙

因为是在虚拟机中测试,为了省去繁琐的端口开放步骤,直接将firewall停掉,执行代码

1
systemctl stop firewalld

安装apache

apache其实是基金会的名字,我们其实要装的是httpd,httpd是apache基金会的一个开源项目.

执行安装命令

1
yum install httpd

安装完成以后,先别着急启动,首先将apache的端口号改成8080(这个随意,目的是为了防止和nginx的80端口冲突),执行命令:

1
vi /etc/httpd/conf/httpd.conf

大约在42

42  Listen 8080

完事以后'wq'保存

安装php

在centos7中自带的php版本(5.4)较低,下面介绍使用ius源安装最新的php,具体怎么配置ius源,请看我的另一篇关于'centos7下使用ius源'.

配置好源站以后我们安装最新的php7.3,这里只介绍安装最基本的php扩展支持,执行命令:

1
yum list | grep php73

输出结果如下:

php73-cli.x86_64                        7.3.11-1.el7.ius               @ius
php73-common.x86_64                     7.3.11-1.el7.ius               @ius
php73-fpm.x86_64                        7.3.11-1.el7.ius               @ius
php73-fpm-httpd.noarch                  7.3.11-1.el7.ius               @ius
php73-fpm-nginx.noarch                  7.3.11-1.el7.ius               @ius
mod_php73.x86_64                        7.3.11-1.el7.ius               ius
php73-bcmath.x86_64                     7.3.11-1.el7.ius               ius
php73-dba.x86_64                        7.3.11-1.el7.ius               ius
php73-dbg.x86_64                        7.3.11-1.el7.ius               ius
php73-devel.x86_64                      7.3.11-1.el7.ius               ius
php73-embedded.x86_64                   7.3.11-1.el7.ius               ius
php73-enchant.x86_64                    7.3.11-1.el7.ius               ius
php73-gd.x86_64                         7.3.11-1.el7.ius               ius
php73-gmp.x86_64                        7.3.11-1.el7.ius               ius
php73-imap.x86_64                       7.3.11-1.el7.ius               ius
php73-interbase.x86_64                  7.3.11-1.el7.ius               ius
php73-intl.x86_64                       7.3.11-1.el7.ius               ius
php73-json.x86_64                       7.3.11-1.el7.ius               ius
php73-ldap.x86_64                       7.3.11-1.el7.ius               ius
php73-mbstring.x86_64                   7.3.11-1.el7.ius               ius
php73-mysqlnd.x86_64                    7.3.11-1.el7.ius               ius
php73-odbc.x86_64                       7.3.11-1.el7.ius               ius
php73-opcache.x86_64                    7.3.11-1.el7.ius               ius
php73-pdo.x86_64                        7.3.11-1.el7.ius               ius
php73-pdo-dblib.x86_64                  7.3.11-1.el7.ius               ius
php73-pecl-amqp.x86_64                  1.9.4-3.el7.ius                ius
php73-pecl-apcu.x86_64                  5.1.18-1.el7.ius               ius
php73-pecl-apcu-devel.x86_64            5.1.18-1.el7.ius               ius
php73-pecl-apcu-panel.noarch            5.1.18-1.el7.ius               ius
php73-pecl-geoip.x86_64                 1.1.1-10.el7.ius               ius
php73-pecl-igbinary.x86_64              3.0.1-1.el7.ius                ius
php73-pecl-igbinary-devel.x86_64        3.0.1-1.el7.ius                ius
php73-pecl-imagick.x86_64               3.4.4-2.el7.ius                ius
php73-pecl-imagick-devel.x86_64         3.4.4-2.el7.ius                ius
php73-pecl-lzf.x86_64                   1.6.7-2.el7.ius                ius
php73-pecl-memcached.x86_64             3.1.4-1.el7.ius                ius
php73-pecl-mongodb.x86_64               1.6.0-1.el7.ius                ius
php73-pecl-msgpack.x86_64               2.0.3-3.el7.ius                ius
php73-pecl-msgpack-devel.x86_64         2.0.3-3.el7.ius                ius
php73-pecl-redis.x86_64                 5.0.2-1.el7.ius                ius
php73-pecl-smbclient.x86_64             1.0.0-3.el7.ius                ius
php73-pecl-xdebug.x86_64                2.7.2-2.el7.ius                ius
php73-pecl-yaml.x86_64                  2.0.4-3.el7.ius                ius
php73-pgsql.x86_64                      7.3.11-1.el7.ius               ius
php73-process.x86_64                    7.3.11-1.el7.ius               ius
php73-pspell.x86_64                     7.3.11-1.el7.ius               ius
php73-recode.x86_64                     7.3.11-1.el7.ius               ius
php73-snmp.x86_64                       7.3.11-1.el7.ius               ius
php73-soap.x86_64                       7.3.11-1.el7.ius               ius
php73-sodium.x86_64                     7.3.11-1.el7.ius               ius
php73-tidy.x86_64                       7.3.11-1.el7.ius               ius
php73-xml.x86_64                        7.3.11-1.el7.ius               ius
php73-xmlrpc.x86_64                     7.3.11-1.el7.ius               ius

下面说下我们必须安装的几个

1
yum install php73-fpm-httpd  php73-common php73-cli php73-fpm

其中php73-fpm-httpd在安装的时候默认会将后面的php73-common php73-fpm依赖一起安装,安装php73-fpm-httpd这个东西,就省去了我们配置php和apache环境的麻烦.

到此时,我们已经可以启动apache和php了,执行命令:

1
2
systemctl start php-fpm
systemctl start httpd

此时 ,在目录 /var/www/html/ (注:该目录不是nginx的项目默认目录,后面做负载均衡以后代码路径要按照nginx默认路径,或者在nginx中配置你希望的目录) 下创建index.php,已经可以通过虚拟机地址–http://192.168.0.134:8080/index.php ,正常访问php站点了

安装nginx配置负载均衡

执行命令安装nginx

1
yum install nginx #请注意,该命令需要'epel'源的支持,请保证预先配置完毕

同样是先不要启动nginx,执行如下命令对nginx进行配置

1
cd /etc/nginx/conf.d

创建php.conf,文件

1
vi php.conf

输入一下内容:

upstream backend {
    server 127.0.0.1:8080;
}

最后'wq'保存

然后配置nginx.conf

vi /etc/nginx/nginx.conf

server块添加如下内容:

location ~ \.php$ {
    proxy_pass http://backend;   
}

最后wq保存退出

然后启动nginx

1
systemctl start nginx

/usr/share/nginx/html(nginx默认路径,可自定义)中创建index.php文件

然后使用http://虚拟机ip/index.php就可以访问了,至此,负载均衡配置完毕.

如果你想安装php的其他扩展,比如gd,你可以执行命令

1
yum install  php73-gd

其他类似

最后说明一下,在Centos及redhat中,由于selinux的策略问题,nginx反向代理apache会出现502的错误,查看日志会有Permission denied的提示,解决方式有两种:

第一就是关闭selinux策略,这个太常见,自行百度

第二就是执行如下命令:

/usr/sbin/setsebool httpd_can_network_connect true

假设您要在Fedora或CentOS上安装特定的RPM软件包,但是要在安装前检查软件包的内容。当您尝试在系统中安装任何丢失的二进制文件或库文件时,可能会出现这种情况。

在本教程中,我将描述如何列出CentOS,Fedora或RHEL上RPM软件包中包含的所有文件。

方法一

有一个称为repoquery的命令行工具,可以查询YUM存储库的信息。该工具使您无需安装RPM软件包即可查看其内容。

要在CentOS,Fedora或RHEL上安装repoquery

sudo yum install yum-utils

要使用repoquery检查包含在特定软件包(例如nginx)中的文件的列表:

repoquery -l nginx

如下:

/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/CHANGES
/usr/share/doc/nginx-1.16.1/README
/usr/share/doc/nginx-1.16.1/README.dynamic
/usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10
/usr/share/licenses/nginx-1.16.1
/usr/share/licenses/nginx-1.16.1/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/en-US
/usr/share/nginx/html/icons
/usr/share/nginx/html/icons/poweredby.png
/usr/share/nginx/html/img
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx

*注意:该命令只能列出源仓库中的软件包,也就是说,我们使用 yum list ,能够列出软件名称的rpm包*

方法二

第二种查看软件包中所有文件而不安装的方法是通过rpm命令。但是,在这种情况下,您需要在本地下载RPM软件包,以便使用rpm命令查询该软件包。

您可以使用yum命令下载RPM软件包。由于不想安装它,因此必须使用“ --downloadonly”选项。

yum install yum-plugin-downloadonly

要下载特定的RPM软件包下载到指定路径“ --downloaddir”命令选项

现在,您可以使用yum命令下载RPM软件包。

yum install nginx -y --downloadonly --downloaddir=/tmp

使用’reinstall’选项,即使当前在系统上安装了RPM软件包,上述命令也将下载该软件包,当然也可以用’install’。下载的软件包将根据要求存储在/tmp目录中。

要列出下载的RPM软件包的文件,请运行以下命令。

[root@localhost tmp]# rpm -qpl /tmp/nginx-1.16.1-1.el7.x86_64.rpm
警告:/tmp/nginx-1.16.1-1.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/CHANGES
/usr/share/doc/nginx-1.16.1/README
/usr/share/doc/nginx-1.16.1/README.dynamic
/usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10
/usr/share/licenses/nginx-1.16.1
/usr/share/licenses/nginx-1.16.1/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/en-US
/usr/share/nginx/html/icons
/usr/share/nginx/html/icons/poweredby.png
/usr/share/nginx/html/img
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx

从某个地方下载了一个 RPM 文件(epel-release-latest-8.noarch.rpm),我想从 RPM 软件包中手动提取文件。有没有一种无需安装就可以从 RPM 软件包中提取文件的简便方法?

RPM 软件包包含一组文件,通常是编译后的软件二进制文件,库及其开发源文件。这些文件以 cpio 存档格式打包,最后与所有必需的特定于包的元数据一起包装在 RPM 文件中。

您可以使用rpm或repoquery命令查看RPM软件包的内容

如果要从 RPM 软件包中提取文件而不安装它,请按以下步骤操作:首先从 RPM 文件中获取 cpio 归档文件,然后从 cpio 归档文件中提取实际文件。

下面介绍如何从 Linux 命令行实现此目的。

安装必要的工具

首先,安装必要的命令行工具。

UbuntuDebianLinux Mint上:

sudo apt-get install rpm2cpio

CentOSFedoraRHEL上:

yum install rpm

从RPM包中提取文件

安装必要的工具后,请按照以下步骤操作。这会将epel-release-latest-8.noarch.rpm中的所有文件提取到当前目录中。

rpm2cpio foo.rpm | cpio -idmv

rpm2cpio命令从一个RPM文件cpio归档和的cpio从cpio归档命令提取文件。

cpio命令使用的选项描述如下。

  • -i:解压缩文件
  • -d:创建目录
  • -m:保留修改时间
  • -v:详细