Linux包管理命令与Ubuntu下安装nginx的方法
rpm包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道。rpm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上,deb包主要应用于Debian系列包括现在比较流行的Ubuntu等发行版上。 二者对应的安装命令分别为rpm与dpkg。
sudo apt-get install alien #安装alien
sudo alien xxxx.rpm #将rpm转换位deb,完成后会生成一个同名的xxxx.deb
sudo dpkg -i xxxx.deb #安装deb包
以往在Cent OS下可以使用rpm命令安装、卸载、升级和管理软件或检查是否安装了某个软件非常方便。常用命令:
rpm -q:查询系统是否已安装某软件包(-q就是--query)
rpm -qpl:列出.rpm软件包文件列表
rpm -i:安装指定的软件包到当前linux系统
rpm -ivh:安装指定的软件包时显示详细的安装信息
rpm -Uvh file.rpm 升级指定的软件包时显示详细的安装信息
rpm --force:强制安装软件包,将覆盖属于其他包的同名文件
rpm --nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
rpm -e:卸载指定的软件包
rpm -U:升级指定的软件包(系统中未安装则进行安装)
rpm -a:查询所有已安装的软件包
rpm -f:查询包含有某文件的软件包
rpm -p:查询软件包文件为package file的软件包
rpm -s:显示软件包中文件的状态 states (暗含了 -l)。每个文件的状态是 normal, not installed, 或 replaced 其中之一。
rpm -v:输出冗余信息
rpm -ql gcc 列出所有已安装的rpm包中的文件列表 (等同于rpmquery -ql gcc或rpm -qa |grep gcc)
rpm -qi 查询所安装的rpm包详细信息(information)
rpm -qc 列出配置文件(/etc下的文件)
rpm -qd 列出帮助文件(man)
rpm -qf /bin/ls 查询一个已经安装的文件属于哪个软件包(需要存在已安装文件/bin/ls 才能查到)
rpm -qp 根据rpm包查询.rpm 文件,可以接其他参数(如i查详细信息,l查文件列表 等)
rpm -qR 列出需要的依赖套件
但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。所以很多情况下我们出于方便,选择使用yum包管理器来进行安装。Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器(例如淘宝镜像、腾讯云、网易镜像等,可自己配置)自动下载RPM包并且安装,可以自动处理软件包的依赖关系,一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
Yum安装适用于RHEL/CentOS系列。YUM安装步骤:
1).使用vi命令创建nginx仓库描述信息文件: vi /etc/yum.repos.d/nginx.repo
在文件中增加如下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
根据你安装的系统不同,替换OS为你的系统名称,如:“rhel” 或 “centos”,
替换OSRELEASE为你的系统版本,如:“5” 或 “6”。
2).执行命令: yum install nginx 即可安装。
公司大部分服务器用的都是Linux Cent OS,使用rpm和yum比较熟练。但是yum安装只适用于RHEL/CentOS系列。今天遇到一个特殊的需求,网站代码要求部署到CP提供的Ubuntu系统服务器上。所以有必要再说一下deb的安装命令。
dpkg是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包(.deb文件)。常用命令如下:
dpkg -i <.deb file name> 安装软件示例:dpkg -i avg71flm_r28-1_i386.deb
dpkg -R /usr/local/src 安装一个目录下面所有的软件包
dpkg -unpack package_file 释放.deb软件包,但不进行配置,如果和-R一起使用,参数可以是一个目录
dpkg -configure package_file 重新配置和释放软件包,如果和-a一起使用,将配置所有没有配置的软件包
dpkg -r 删除软件包(保留其配置信息)
dpkg -update-avail <Packages-file> 替代软件包的信息
dpkg -merge-avail <Packages-file> 合并软件包信息
dpkg -A package_file 从软件包里面读取软件的信息
dpkg -P 删除一个包(包括配置信息)
dpkg -forget-old-unavail 丢失所有的Uninstall的软件包信息
dpkg -clear-avail 删除软件包的Avaliable信息
dpkg -C 查找只有部分安装的软件包信息
dpkg -compare-versions ver1 op ver2 比较同一个包的不同版本之间的差别
dpkg -help 显示帮助信息
dpkg -licence/license 显示dpkg的Licence
dpkg -version 显示dpkg的版本号
dpkg -b directory [debfilename] 建立一个deb文件
dpkg -c filename 显示一个deb包的文件目录
dpkg -I filename [control-file] 显示一个deb的说明
dpkg -l package-name-pattern 搜索deb包,如:dpkg -I vim
dpkg -L 列出与该包先关联的文件
dpkg -l 显示所有已经安装的Deb包,同时显示版本号以及简短说明
dpkg -s package-name 报告指定包的状态信息
dpkg -L package-Name 显示一个包安装到系统里面的文件目录信息
dpkg -S filename-search-pattern 搜索指定包里面的文件(模糊查询)
dpkg -p package-name 显示包的具体信息
dpkg命令安装会绕过apt包管理数据库直接操作.deb软件包,所以用dpkg安装的软件包用apt再安装时,系统无法识别,将会覆盖之前dpkg方式安装的软件包。
dpkg用来安装.deb文件,一般用于安装本地的deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件。
apt工具自己会从软件源服务器上下载.deb包,下载完后自动安装。apt可以解决.deb安装包的依赖问题,并会咨询软件仓库, 但不会安装本地的.deb文件, 可以说apt是建立在dpkg之上的软件包管理工具。
Apt安装适用于debian系统。apt安装步骤:
1.使用vi命令增加nginx仓库描述信息: vi /etc/apt/sources.list
在文件中增加如下内容:
deb http://nginx.org/packages/debian/ codename nginx
deb-src http://nginx.org/packages/debian/ codename nginx
(以上ubuntu更新源source.list可自己更新,参考http://www.cnblogs.com/nexiyi/archive/2013/01/06/2847166.html)
如果是debian 6.x系统,替换codename为squeeze
如果是ubuntu系统,根据系统版本替换codename为下边的对应值:
支持的版本
Version Codename
10.04 lucid
11.10 oneiric
12.04 precise
12.10 quantal
2.执行命令:
apt-get update #启用新的更新源
apt-get install nginx
常用的APT命令参数
apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
apt-cache depends package 了解使用依赖
apt-cache rdepends package 查看该包被哪些包依赖
sudo apt-get install package 安装包,apt会自动下载安装,若有依赖性软件包,apt也会自动下载安装
sudo apt-get install package --reinstall 重新安装包
sudo apt-get -f install 修复安装"-f = --fix-missing"
sudo apt-get remove package 删除包,如有依赖的软件包,则会一并移除
sudo apt-get remove package --purge 删除包,包括删除配置文件等
sudo apt-get update 更新源(该指令是用来取得记录在 /etc/apt/sources.list 内的远端服务器的软件包清单,在使用apt-get dist-upgrade指令升级软件前,一定要记得先用此指令将软件包清单更新)
sudo apt-get upgrade 更新已安装的软件包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
sudo apt-get build-dep package 安装相关的编译环境
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包(当使用 apt-get install 指令安装后,下载的软件包会放置在 /var/cache/apt/archives,使用apt-get clean指令可将其删除)
sudo apt-get check 检查是否有损坏的依赖
aptitude与 apt-get 一样,是 Debian 及其衍生系统性能极其强大的包管理工具。基于APT机制, 整合了dselect和apt-get的所有功能,并具有更灵活的特性,特别是在依赖关系的处理上。比如,aptitude在删除一个包时,会同时删除自身所依赖的包,使得系统中不会残留大量无用的软件包。
关于aptitude的用法
安装软件包
dpkg -i package_name.deb #安装本地软件包,不解决依赖关系
apt-get install package #在线安装软件包,自动解决依赖关系
aptitude install pattern #同上
apt-get install package --reinstall #重新安装软件包
apitude reinstall package #同上
卸载软件包
dpkg -r package #卸载软件包
apt-get remove package #同上
aptitude remove package #同上
dpkg -P #卸载软件包及配置文件
apt-get remove package --purge #卸载软件包及配置文件
apitude purge pattern #同上
自动移除软件包
apt-get autoremove #删除不再需要的软件包
注:aptitude无须命令,卸载时它会自动删除无用的软件包
清除下载的软件包
apt-get clean #清除 /var/cache/apt/archives 目录
aptitude clean #同上
apt-get autoclean #清除 /var/cache/apt/archives 目录,不过只清理过时的包
aptitude autoclean #同上
编译相关 apt-get source package #获取源码
apt-get build-dep package #解决编译源码 package 的依赖关系
aptitude build-dep pattern #解决编译源码 pattern 的依赖关系
平台相关
apt-cross --arch ARCH --show package 显示属于 ARCH 构架的 package 软件包信息
apt-cross --arch ARCH --get package #下载属于 ARCH 构架的 package 软件包
apt-cross --arch ARCH --install package #安装属于 ARCH 构架的 package 软件包
apt-cross --arch ARCH --remove package #移除属于 ARCH 构架的 package 软件包
apt-cross --arch ARCH --purge package #移除属于 ARCH 构架的 package 软件包
apt-cross --arch ARCH --update #升级属于 ARCH 构架的 package 软件包
注:慎重考虑要不要用这种方法来安装不同构架的软件包,这样会破坏系统。对于 amd64 的用户可能需要强制安装某些 i386 的包,千万不要把原来 amd64 本身的文件给 replace 了。最好只是安装一些 lib 到 /usr/lib32 目录下。同样地,可以用 apt-file 看某个其它构架的软件包包含哪些文件,或者是文件属于哪个包,不过记得最先要用 apt-file --architecture ARCH update 来升级 apt-file 的数据库,在 search 或 show 时也要指定 ARCH。
更新源
apt-get update #更新源
aptitude update #同上
更新系统
apt-get upgrade #更新已经安装的软件包,如果依赖性改变(如需要新的依赖包),则保留原安装包,放弃升级。
aptitude safe-upgrade #同上
apt-get dist-upgrade #升级系统,升级的同时会为了解决依赖性而安装新套件
aptitude full-upgrade #同上
以上安装方式基本可满足大部用户的需求,若需要更为灵活的安装可选择源码编译方式安装。
正式开始前,编译环境需要提前安装好开发库gcc和g++(gcc-c++)。安装方式如下:
ububtu平台:
apt-get install build-essential
apt-get install libtool
centos平台:
安装make:
yum -y install gcc automake autoconf libtool make
安装gcc g++:
yum install gcc gcc-c++
1.确保你的系统已安装好了PCRE库(URL rewrite依赖此),zlib库(gzip压缩依赖此),OpenSSL库(开启HTTPS,数据传输加密、认证)。
假如源码的下载目录选定为/usr/local/src,具体的安装命令如下:
安装PCRE:
cd /usr/local/src
wget http://219.239.26.13/files/31370000064D0A62/jaist.dl.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
tar -zxvf pcre-8.37.tar.gz
cd pcre-8.37
./configure或者
./configure --prefix=/usr/local/pcre --enable-utf8 --enable-unicode-properties --enable-pcregrep-libz --enable-pcregrep-libbz2
make
make install
安装zlib:
cd /usr/local/src
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install
安装openSSL:
apt-get purge openssl #卸载旧版本OpenSSL
rm -rf /etc/ssl #删除配置文件
cd /usr/local/src
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
tar -zxvf openssl-1.0.1c.tar.gz
cd openssl-1.0.1c/
./config --prefix=/usr/local --openssldir=/usr/local/ssl(或./configure)
make && make install
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make && make install
说明:prefix 是安装目录,openssldir 是配置文件目录(解压目录),另外建议安装两次,shared 作用是生成动态连接库。
2.下载nginx-*.tar.gz包。解压到你指定的目录,进入解压的目录。
3.设定配置参数,指定安装方式,附加模块等信息,具体请参考模块对应的说明文档。下边的命令只指定了安装目录。
./configure --prefix = /usr/local/nginx
或者:
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre=/usr/local/src/pcre-8.37
4.编译安装。
make
make install
若终端未提示错误消息即表明安装成功。
参考文章
rpm 中文man页面 http://os.51cto.com/art/201108/285804.htm
rpm常用命令及rpm参数介绍 http://www.cnblogs.com/luwikes/archive/2011/09/14/2176575.html
Debian 的source.list解读 http://www.2cto.com/os/201111/110066.html
Ubuntu下apt-get命令详解 http://jingyan.baidu.com/article/22a299b51648e09e19376ae7.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。