7. Linux中软件管理

97 阅读2分钟

本系列都是是基于RedHat体系的,所以CentOS也可以用,但是Debian系列的可能会有些命令上的出入。

1. Fedora/CentOS/RHEL

1.1 RPM包

RPM(原来指Ret Hat Package Manager),现在是(RPM Package Manager),Red Hat公司提出,被众多Linux发行版所采用。

rpm包也称二进制包,无需编译,可以直接使用,但无法设定个人设置、开关功能,不能调试。

示例:软件包名-版本号-enterprise linux发布版本-系统平台.rpm

  • mysql-community-common-5.7.12-1.el7.x86_64.rpm
  • zip-3.0-11.el7.x86_64.rpm

1.2 YUM包管理器

1.2.1 YUM

YUM,全称是Yellow Dog Updater, Modified,用于在Fedora、CentOS和RedHat中的Shell前端软件包管理器。

  • 基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装;
  • 可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需繁琐地一次次下载、安装。
  1. YUM本地源

    1. 核心YUM配置目录:/etc/yum.repos.d/,系统默认源在国外,下载安装慢;

    2. 换成清华源或者阿里源,还需要一个EPEL库,下面给出的是清华源,具体替换可以看文件自述。

      $ sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
               -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
               -i.bak \
               /etc/yum.repos.d/CentOS-*.repo
      $ sudo yum clean all
      $ sudo yum makecache
      
  2. 使用YUM管理RPM包

    # 安装
    # yum install 自动确认    包名
    # 
    # 全新安装
    $ yum -y install httpd vsftpd
    # 重新安装,可能缺少文件时需要
    $ yum -y reinstall httpd
    $ systemctl start httpd
    $ systemctl stop firewalld
    $ systemctl disable firewalld
    $ systemctl stop httpd
    
    # 升级软件
    $ yum -y update httpd
    # 升级源和所有软件
    $ yum update && yum upgrade
    
    # 查询
    # 不写包名会显示所有的可用包,写包名则只会列出已经安装的包
    $ yum list [package-name]
    
    # 卸载
    $ yum -y remove httpd
    $ yum autoremove
    

1.2.2 RPM

RPM,全称是RPM Packet Manager,安装的时候需要先找到包

# -i:install
# -v:verbose,安装过程
# -h:百分比
$ rpm -ivh wget-1.14-15.el7.x86_64.rpm

# -q:查询,可以用于安装后验证
$ rpm -q wget-1.14-15.el7.x86_64.rpm

# 删除
$ rpm -evh wget-1.14-15.el7.x86_64.rpm

相比于YUM,RPM无法自动处理包之间的依赖关系。

2. Ubuntu

2.1 apt

$ apt install pkg-name
$ apt remove pkg-name
$ apt update pkg-name

2.2 dpkg

3. 源码包管理

用户需要自己编译包。可以调试并设置、打开关闭功能,配置比较复杂,但是如果RPM包管理器没有的话只能自己编译。例如:nginx-1.8.1.tar.gztengine-2.3.2.tar.gztengine是nginx的变体,由淘宝技术团队做的。

  1. 准备环境

  2. 解压、配置、编译、安装

    $ useradd www
    $ tar -xvf tengine-2.3.2.tar.gz
    $ cd tengine-2.3.2
    $ ./configure --user=www --group=www --prefix=/user/local/nginx
    $ make
    $ make install
    
  3. 启动测试

    # 启动之前确保80端口未被占用,前面有httpd,可能冲突,请关闭
    $ /usr/local/nginx/sbin/nginx
    $ systemctl stop firewalld
    # 浏览器查看http://127.0.0.1