7.1-7.9 软件包的安装与卸载

7.1 软件包安装和卸载

7.1 安装软件包的三种方法

rpm工具

rpm(Redhat Package Manager)RPM软件包管理器,是以一种数据库记录的方式来将我们所需要的套件安装到Linux主机的一套管理程序。rpm包是预先在Linux机器上编译好并打包好的文件,安装起来非常快捷。但是有一个缺点:安装环境必须与编译时的一致或相当;包与包之间存在着相互依赖的情况,安装或卸载包时需要先把依赖的包安装/卸载,如果依赖的包时系统所必须的,那就不能卸载这个包。

yum工具

yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

源码包

Linux软件的源代码分发是指提供了该软件所有程序源代码的发布形式,需要用户自己编译成可执行的二进制码并进行安装。其优点是配置灵活,可以随意去掉或保留某些功能/模块,适应多种硬件/操作系统平台及编译环境;缺点是难度较大。


7.2-7.3 rpm工具

rpm包介绍(准备工作)

挂载系统安装盘镜像(挂载到一个空目录,此处/mnt/目录未使用,所以直接挂载到/mnt/目录下)

[root@gaohanwei ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        28G  1.3G   27G    5% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  6.8M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M  109M   88M   56% /boot
tmpfs            99M     0   99M    0% /run/user/0
[root@gaohanwei ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@gaohanwei mnt]# ls
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL
[root@gaohanwei Packages]# ls
yum-plugin-changelog-1.1.31-40.el7.noarch.rpm
yum-plugin-fastestmirror-1.1.31-40.el7.noarch.rpm
yum-plugin-tmprepo-1.1.31-40.el7.noarch.rpm
yum-plugin-verify-1.1.31-40.el7.noarch.rpm
yum-plugin-versionlock-1.1.31-40.el7.noarch.rpm
……
(rpm包格式:包名、版本号、发布版本号、平台)

rpm包存放在Packages该文件下!

rpm工具用法

安装rpm包

  • 语法: rpm [options] [参数]
  • Options:

    -i:=install,安装

    -v:可视化

    -h:显示安装进度

    在安装一个rpm包时常用附带选项:
    --force:强制安装

    --nodeps:=no dependent 无依赖安装(忽视与其他包之间的依赖关系)

实例
  1. 安装一个rpm包(无依赖包)
[root@gaohanwei Packages]# rpm -ivh x86info-1.30-6.el7.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
   1:x86info-1:1.30-6.el7             ################################# [100%]
  1. 安装一个rpm包(有依赖包)
[root@gaohanwei Packages]# rpm -ivh yp-tools-2.14-3.el7.x86_64.rpm
错误:依赖检测失败:
    ypbind 被 yp-tools-2.14-3.el7.x86_64 需要
## 即,两个包之间存在依赖关系
## 解决办法:
①:
[root@gaohanwei Packages]# rpm -ivh yp-tools-2.14-3.el7.x86_64.rpm yp-tools-2.14-3.el7.x86_64
②:
[root@adai002 Packages]# rpm -ivh --force yp-tools-2.14-3.el7.x86_64.rpm
(添加--force或--nodeps选项即可安装)

说明: 安装有依赖关系的包时,可以先安装其所依赖的包再安装目标包(同时安装存在依赖关系的包),或者使用--force或--nodeps选项进行强行安装(不建议使用)。

升级rpm包
  • 语法: rpm [-U] [包名]
[root@gaohanwei Packages]# rpm -Uvh x86info-1.30-6.el7.x86_64.rpm
Preparing...                          ################################# [100%]
    package x86info-1:1.30-6.el7.x86_64 is already installed

说明: 如果升级一个已经安装的最新版本的包,执行该命令后无任何操作。

卸载一个rpm包
  • 语法: rpm [-e] [包名]
[root@gaohanwei Packages]# rpm -e x86info-1.30-6.el7.x86_64.rpm
error: package x86info-1.30-6.el7.x86_64.rpm is not installed
[root@gaohanwei Packages]# rpm -e x86info

注: 卸载时直接跟报名,无需跟该包的信息;当包之间存在依赖关系时也需要先卸载其依赖包。

查询rpm包
查询已安装的包
  • 语法:

    rpm [-q] [包名] 查询指定包

    rpm [-qa] 查询所有已安装包

实例:

[root@gaohanwei Packages]# rpm -q kmod
kmod-20-9.el7.x86_64
#########################################
[root@gaohanwei Packages]# rpm -qa |head -5
trousers-0.3.13-1.el7.x86_64
filesystem-3.2-21.el7.x86_64
net-tools-2.0-0.17.20131004git.el7.x86_64
bind-license-9.9.4-37.el7.noarch
fxload-2002_04_11-16.el7.x86_64
查询已安装包的相关信息
  • 语法: rpm [-qi] [包名]

    i=information

[root@gaohanwei Packages]# rpm -qi filesystem
Name        : filesystem
Version     : 3.2
Release     : 21.el7
Architecture: x86_64
Install Date: Mon May 22 01:19:49 2017
Group       : System Environment/Base
Size        : 0
……
查询某包所安装的文件
  • 语法: rpm [-ql] [包名]

    l=list

[root@gaohanwei Packages]# rpm -ql vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
查看某文件的安装包
  • 语法: rpm [-qf] [文件绝对路径]
[root@gaohanwei Packages]# rpm -qf /usr/bin/vim
vim-enhanced-7.4.160-1.el7_3.1.x86_64

即,通过其绝对路径查询到其安装包,当不知道其绝对路径时,使用which命令查询。

反引号命令

反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。即,在命令行上把Linux命令放在反引号中,这个命令会首先被执行,然后将其结果作为为该命令行的一个参数。

[root@gaohanwei Packages]# rpm -qf `which cd`
bash-4.2.46-20.el7_2.x86_64

说明: 先执行“which cd”命令,其次将“which cd”的结果作为“rpm -qf”的参数执行该命令。


7.4 yum工具用法

列出所有rpm包
  • 语法: yum list
[root@gaohanwei Packages]# yum list 
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * extras: mirrors.aliyun.com
 * updates: mirrors.tuna.tsinghua.edu.cn
Installed Packages
NetworkManager-libnm.x86_64                1:1.4.0-12.el7              @anaconda
NetworkManager-team.x86_64                 1:1.4.0-12.el7              @anaconda
zsh.x86_64                                        5.0.2-25.el7_3.1                    updates  
zsh-html.x86_64                                   5.0.2-25.el7_3.1                    updates  
zziplib.i686                                      0.13.62-5.el7                       base     
zziplib.x86_64                                    0.13.62-5.el7                       base   
……
Exiting on Broken Pipe

说明: 第一列是包名,第二列是版本号,第三列是库,库所在位置有“@”表示已安装;“updates”表示已安装,有新版本,需要升级;其他的表示可安装但还未安装的rpm包。

  • yum配置文件
[root@gaohanwei Packages]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Sources.repo  CentOS-fasttrack.repo
CentOS-CR.repo    CentOS-Media.repo      CentOS-Vault.repo
  • 配置文件base的信息
[root@gaohanwei Packages]# cat /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
……
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
……

说明: 该文件下有rpm包所在库base的镜像地址信息!

搜索rpm包
  • 语法: yum search [关键词]
[root@gaohanwei Packages]# yum search vim
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * extras: mirrors.aliyun.com
 * updates: mirrors.tuna.tsinghua.edu.cn
====================================== N/S matched: vim =============================
golang-vim.noarch : Vim plugins for Go
protobuf-vim.x86_64 : Vim syntax highlighting 
vim-minimal.x86_64 : A minimal version of the VIM editor

  Name and summary matches only, use "search all" for everything.

说明: 使用该命令搜索时会列出所有包含‘vim’(关键词)的信息,不精确,为了只搜索相关rpm包,可用如下方法:

[root@gaohanwei Packages]# yum list |grep vim
Failed to set locale, defaulting to C
vim-common.x86_64                          2:7.4.160-1.el7_3.1         @updates 
vim-enhanced.x86_64                        2:7.4.160-1.el7_3.1         @updates 
vim-filesystem.x86_64                      2:7.4.160-1.el7_3.1         @updates 
vim-minimal.x86_64                         2:7.4.160-1.el7             @anaconda

说明: grep表示过滤。

列出rpm包组
  • 语法: yum grouplist
[root@gaohanwei Packages]# yum grouplist
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * extras: mirrors.aliyun.com
 * updates: mirrors.tuna.tsinghua.edu.cn
Available Environment Groups:
   Minimal Install
   Compute Node
……
Available Groups:
   Compatibility Libraries
   Console Internet Tools
……
Done
安装rpm包
  • 语法: yum install [-y] [包名]
  • 说明: 如果不加‘-y’选项,则会以与用户交互的方式安装。首先是列出需要安装的rpm包,然后会问用户是否需要安装,输入‘y’则安装,输入‘n’则不安装,这样太麻烦,所以直接加上‘-y’选项,省略与用户之间的交互。
    安装rpm包组

    语法: yum groupinstall [-y] [包的组名]
    如果不知道组名,可用yum grouplist查看(注:进行安装时只能用英文名)。

卸载rpm包
  • 语法: yum remove [-y] [包名]
  • 说明: ‘-y’选项同install的用法,需要注意的是,在使用该命令进行卸载时会将目标文件所依赖的所有包同时删除,所以要谨慎使用!
升级rpm包
  • 语法: yum update [-y] [包名]
  • 说明: 如果不加包名,则会升级系统内所有包以及系统本身(慎用,一般只在刚安装完系统时使用)。
yum provides(该命令的作用是通过已知命令名称来搜索其rpm包名。)

用法:

[root@gaohanwei Packages]# yum provides “/*/vim”

说明: 因为该命令位置不确定,所以进行搜索时使用‘*’(通配符)来代表其路径。


7.5 yum搭建本地仓库

有时候Linux系统无法联网,此时无法使用网上的yum源,需要我们利用Linux系统光盘制作一个yum源。

步骤
挂载光盘——删除/etc/yum.repos.d/目录所有repo文件——创建新文件dvd.repo——清除原有缓存‘yum clean all’。

[root@gaohanwei ~]# cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
备份原.repo文件
[root@gaohanwei ~]# cd /etc/yum.repos.d 切换目录
[root@gaohanwei yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo
[root@gaohanwei yum.repos.d]# rm -rf ./*
删除原有repo文件
[root@gaohanwei yum.repos.d]# vim dvd.repo

[dvd]
name=install dvd
baseurl=file:///mnt
enable=1
gpgcheck=0

此部分内容除baseurl目录根据个人实际操作更改外,其余内容固定。

[root@adai002 yum.repos.d]# yum clean all
清除系统原有缓存
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Cleaning repos: dvd
Cleaning up everything
Cleaning up list of fastest mirrors
[root@gaohanwei ~]# yum list
……
Available Packages 还未安装的可安装rpm包的库都变成dvd
ypserv.x86_64 2.31-8.el7 dvd
yum-langpacks.noarch 0.4.2-7.el7 dvd
yum-plugin-aliases.noarch 1.1.31-40.el7 dvd
yum-plugin-changelog.noarch 1.1.31-40.el7 dvd
yum-plugin-tmprepo.noarch 1.1.31-40.el7 dvd
……

配置完成后便可直接使用yum安装所需要的rpm包。如果不想使用本地yum源,需要删除/etc/yum.repos.d/dvd.repo文件,然后恢复原来的配置文件。


扩展1:yum保留已经安装过的包

可以设置使yum保留已经下载的rpm包,供以后升级或重新安装时使用。
修改/etc/yum/conf即可:
[main]
cachedir=/home/soft1/yumcache
keepcache=1
debuglevel=2

cachedir是放置下载的包的地方,可以修改成自己想放置的位置。
keepcache为1时表示保存已经下载的rpm包。

扩展2:yum局域网软件源搭建

搭建Apache服务器或ftp服务器

yum安装或二进制包安装.

准备RPM包

把CentOS的DVD1和DVD2.iso都下载下来,把DVD1.iso里的所有内容解压出来,放到/var/www/html/centos-6目录下,然后把DVD2.iso解压出来的Packages目录下的rpm包复制到/var/html/centos-6/Packages目录下,这样/var/html/centos-6/Packages里面就有了6000多个rpm包。

创建yum仓库

准备createrepo:yum -y install createrepo
创建repository:createrepo /var/www/html/centos-6/
创建完成之后,会在/var/www/html/centos-6/repodata下生成一些文件。
使用软件源
在其他centos机器上试试软件源能不能用。

  • 首先修改机器上软件源配置文件:
    7.1-7.9 软件包的安装与卸载_第1张图片
    CentOS-Base.repo文件修改之后如下:
    7.1-7.9 软件包的安装与卸载_第2张图片
    保存之后,就可以使用局域网的软件源了:
    # yum update

7.6 yum更换国内源

  • 恢复系统默认yum源配置:
[root@gaohanwei Packages]# cd /etc/yum.repos.d
[root@gaohanwei yum.repos.d]# ls
dvd.repo
[root@gaohanwei yum.repos.d]# rm -f dvd.repo
[root@gaohanwei yum.repos.d]# ls
[root@gaohanwei yum.repos.d]# cp ../yum.repos.d.bak/* .
[root@gaohanwei yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
  • 自定义yum源:
[root@gaohanwei yum.repos.d]# rm -f CentOS-Base.repo

先删除默认yum源,然后使用wget命令建立新yum源:

[root@gaohanwei yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
-bash: wget: 未找到命令

此时wget命令未安装,同时删除了yum源文件,无法安装wget包。
所以用下面的方法:“curl命令”

[root@gaohanwei yum.repos.d]# curl -O http://mirrors.163.com/.help/CentOS7-Base-163.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1572  100  1572    0     0   8959      0 --:--:-- --:--:-- --:--:--  8982
[root@gaohanwei yum.repos.d]# ls
CentOS7-Base-163.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo         CentOS-fasttrack.repo  CentOS-Sources.repo

说明: 执行完curl命令后,原有yum源文件CentOS-Base.repo被替换成CentOS7-Base-163.repo。查看该yum源文件:

[root@gaohanwei yum.repos.d]# vim CentOS7-Base-163.repo
#
#  CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - 163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - 163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
 "CentOS7-Base-163.repo" 41L, 1572C        

其镜像文件地址更换为:“baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/”。

注: 该过程中使用的yum源需要事先下载。


7.7 yum下载rpm包

安装扩展源epel

安装一个扩展源文件(epel-release)即可:

[root@gaohanwei yum.repos.d]# ls
CentOS7-Base-163.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo         CentOS-fasttrack.repo  CentOS-Sources.repo
[root@gaohanwei yum.repos.d]# yum install -y epel-release
……
已安装:
  epel-release.noarch 0:7-9 

完毕!
[root@gaohanwei yum.repos.d]# ls
CentOS7-Base-163.repo  CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      epel.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    epel-testing.repo

安装完成后,yum.repos.d/下增加“epel.repo”、“epel-testing.repo”两个文件:

[root@gaohanwei yum.repos.d]# cat epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
……

查看:

[root@gaohanwei yum.repos.d]# yum list
……
zulucrypt-doc.noarch                             5.0.1-1.el7                          epel     
zulucrypt-libs.x86_64                            5.0.1-1.el7                          epel     
zvbi.x86_64                                      0.2.35-1.el7                         epel     ……

增加了很多来自epel库的rpm包。


7.8下载rpm包

下载

命令:yum install -y [包名] --downloadonly

[root@gaohanwei yum.repos.d]# yum install -y  zsh --downloadonly
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
……
zsh-5.0.2-25.el7_3.1.x86_64.rpm                                         | 2.4 MB  00:00:02     
exiting because "Download Only" specified
[root@gaohanwei yum.repos.d]# rpm -q zsh
未安装软件包 zsh 

即,该命令的含义就是只下载不安装。
下载的包默认保存位置为:

[root@gaohanwei yum.repos.d]# ls /var/cache/yum/x86_64/7/updates/packages
zsh-5.0.2-25.el7_3.1.x86_64.rpm

自定义下载目录
命令:

yum install -y [包名] --downloadonly --downloaddir=/tmp/(自定义目录)

[root@gaohanwei yum.repos.d]# yum install -y  zsh --downloadonly --downloaddir=/tmp/
[root@gaohanwei yum.repos.d]# ls /tmp/
zsh-5.0.2-25.el7_3.1.x86_64.rpm

下载一个已经安装过的包:

[root@gaohanwei yum.repos.d]# yum install -y  vim-enhanced --downloadonly --downloaddir=/tmp/
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * epel: mirror01.idc.hinet.net
软件包 2:vim-enhanced-7.4.160-1.el7_3.1.x86_64 已安装并且是最新版本
无须任何处理
[root@gaohanwei yum.repos.d]# yum reinstall -y  vim-enhanced --downloadonly --downloaddir=/tmp/
已加载插件:fastestmirror
……
[root@gaohanwei yum.repos.d]# ls /tmp/
vim-enhanced-7.4.160-1.el7_3.1.x86_64.rpm
zsh-5.0.2-25.el7_3.1.x86_64.rpm

说明: 当下一个已经安装过的包时系统不会执行任何操作,此时可以使用“reinstall”来下该包。


7.8-7.9 源码包安装

先下载一个源码包!

注: 今后所有源码包放到目录“/usr/local/src/”!!!

[root@gaohanwei src]# wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.32.tar.gz  
下载Apache!该地址来自于“阿铭码市”。
下载完后解压该文件:
[root@gaohanwei src]# tar zxvf httpd-2.2.32.tar.gz
[root@gaohanwei src]# ls
httpd-2.2.32  httpd-2.2.32.tar.gz

查看文件httpd-2.2.32的内容:

[root@gaohanwei src]# cd httpd-2.2.32
[root@gaohanwei httpd-2.2.32]# ls
ABOUT_APACHE  CHANGES        httpd.dsp       libhttpd.dep  NOTICE            server
acinclude.m4  config.layout  httpd.mak       libhttpd.dsp  NWGNUmakefile     srclib
Apache.dsw    configure      httpd.spec      libhttpd.mak  os                support
build         configure.in   include         LICENSE       README            test
BuildAll.dsp  docs           INSTALL         Makefile.in   README.platforms  VERSIONING
BuildBin.dsp  emacs-style    InstallBin.dsp  Makefile.win  README-win32.txt
buildconf     httpd.dep      LAYOUT          modules       ROADMAP

安装Apache:

① 
[root@gaohanwei httpd-2.2.32]# ./configure --prefix=/usr/local/apache2
checking for chosen layout... Apache
checking for working mkdir -p... yes
……
checking for chosen layout... apr
checking for gcc... no
checking for cc... no

当某命令运行结束后,使用"echo $?"检验其是否正确:

[root@gaohanwei httpd-2.2.32]# echo $?
1
当该值为0时表示上一条命令正确,如果值为1则错误。
此处值为1,即上面命令错误,查看其安装过程发现“checking for gcc... no”——表示“gcc”编译器不存在,所以需要先安装gcc编译器:
[root@gaohanwei httpd-2.2.32]# yum install -y gcc
…………
完毕!
[root@gaohanwei httpd-2.2.32]# ./configure --prefix=/usr/local/apache2
再次安装。
[root@gaohanwei httpd-2.2.32]# echo $?
0
检测,正确。
②
[root@gaohanwei httpd-2.2.32]# make   编译!
……
[root@gaohanwei httpd-2.2.32]# echo $?
0

③
[root@gaohanwei httpd-2.2.32]# make install
……
[root@gaohanwei httpd-2.2.32]# echo $?
0
每次命令执行完后用“echo $?”进行检测,确保其正确。
安装完成!
查看其安装目录的内容:
[root@gaohanwei httpd-2.2.32]# ls /usr/local/apache2/
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules

注: 下载源码包要到官方网站或可信任站点——安全!

转载于:https://blog.51cto.com/13530586/2121903

你可能感兴趣的:(运维,开发工具,操作系统)