Linux基础16 yum命令, 源码安装nginx, fpm工具打rpm包进yum仓库, ubuntu软件管理(dpkg, apt), snap工具
yum实战命令:
安装: yum install -y:不交互安装 # 选项[y/d/N]: d代表只下载不安装 没有-d参数 yum localinstall 安装本地的rpm包,并安装依赖(从其他源里下载安装) yum reinstall 重装 # 可用于修复 查询: yum list 查询所有的安装包 (包含安装的来源仓库, 还会列出伪装过的包) yum info 查看安装或未安装包的详细信息 # 例: yum info tree 更新: yum check-update 检查可以更新的包 yum update python -y 更新python包 !!!!!!!!! yum update -y ******注意 非常危险,更新所有包,包括内核(yum update -y会把所有包升级,升级内核把centos6升为7) 删除: yum remove : 删除rpm包(会把依赖也删除) 尽量少用,把依赖删除危险。重装直接yum reinstall,不要先删后装 rpm -e 只删除对应的包,比较安全 yum erase : 删除rpm包(和yum remove一样, 没区别) yum仓库相关命令: yum repolist :查看仓库中的所有rpm包数量 yum repolist all: 查看启用的和没启用的仓库 # 通过修改仓库配置文件enable # 阿里源仓库配置文件3个地址 http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ 自己的服务,走这个源 http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/ 购买的云主机,内网源(走阿里内网速度快) yum-config-manager --enable : 启用yum仓库(可以直接通过修改仓库配置文件实现) yum provides : 查询你想要敲的命令,属于哪个rpm包 # 例: yum provides ifconfig 或写命令路径 yum provides /sbin/ifconfig
# 注意:需要yum仓库有这个命令或包,改命令根据仓库地址去查的
yum缓存:(很少用,现在换源用不到) yum clean all # 清缓所有yum缓存, 企业里少用all, 用yum clean packages yum makecache # 加载当前源的缓存包 yum配置文件中 vim /etc/yum.conf 里面有个keepcache=0 # 缓存软件包, 0关闭, 1开启(缓存开启的情况下, 安装包后会在/var/cache/yum/x86_64/7有对应的包) find /var/cache/yum/x86_64/7 # 装一个服务,会把包放在对应的缓存下面 find /var/cache/yum/x86_64/7 -type f -name '*.rpm' 查缓存里的包
yum包组相关命令: (就是安装centos时包组选项页面(有最小安装), 左右两边都有) # 很少用到 yum groups list yum groups install Development tools (就是安装centos时选项页面(有最小安装)的 Development Tools) yum groups remove -y Base yum历史相关命令: yum history yum history info # 例: yum history info 38 yum history undo 43 # 取消43步的操作(没什么意义,还要查历史) yum配置文件了解 vim /etc/yum.conf keepcache # 缓存软件包, 1启动 0 关闭 (打包会用到) debuglevel # 调试级别 logfile # 日志记录位置 exactarch # 检查平台是否兼容 obsoletes # 检查包是否废弃 gpgcheck # 检查来源是否合法,需要有制作者的公钥信息 (自己安装没必要开启) plugins # 是否启用查询 # 不进行签名验证(如果碰到需要签名验证的,可以追加参数不验证) yum install httpd --nogpgcheck
源码包:
yum安装,优点:速度快,简单 缺点:rpm -ql 查看 命令目录,配置文件目录,站点目录... 源码包优缺点: 优点: 1.有了源码包,那我就可以自行修改代码,提供我们使用,传说中的二次开发 2.可以定制需要的相关功能 3.新版本优先更新源码 4.自动化规范,方便落地 缺点: 1.相对于yum安装,复杂 2.耗时比较长
源码包地址
mysql (官网选择, 源码包就是Source Code, 一般都是tar包, .tar.gz)
wget https://downloads.mysql.com/archives/get/file/mysql-5.6.42.tar.gz
nginx
wget http://nginx.org/download/nginx-1.16.0.tar.gz
安装源码包:
# 安装nginx所有依赖包 [root@db_rpm ~]# yum install -y gcc gcc-c++ glibc pcre-devel zlib-devel openssl-devel # 把需要安装的依赖包拷贝出来(用于下面fpm打rpm包) # 修改yum缓存,把安装的相关依赖包本地保存下来 sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf # 查找当前yum缓存下的安装包 find /var/cache/yum/ -name '*rpm' # 把下载的包拷贝出去 find /var/cache/yum/ -name '*rpm' |xargs cp -t /usr/local/src/ 1.解压(一定要装完c的环境后再进行解压,否则会少东西) [root@db_rpm ~]# tar xf nginx-1.16.0.tar.gz mkdir /app 2.生成 [root@db_rpm nginx-1.16.0]# ./configure --prefix=/app/nginx-1.16.0 # --prefix选择要安装的路径 # echo $? 可以看运行成功失败 3.编译(把c语言代码编译成linux可以识别的编码) [root@db_rpm nginx-1.16.0]# make # echo $? 可以看运行成功失败 4.安装 [root@db_rpm nginx-1.16.0]# make install # echo $? 可以看运行成功失败 # 在/app/nginx-1.16.0/下 conf配置文件,html站点目录,logs日志,sbin命令 5.启动nginx(/app/nginx-1.16.0下会生成很多文件,都是缓存,可以清理) [root@db_rpm nginx-1.16.0]# /app/nginx-1.16.0/sbin/nginx 6.关闭防火墙 [root@db_rpm nginx-1.16.0]# systemctl stop firewalld 7.打开浏览器,访问:http://10.0.0.60/
fpm工具打rpm包进yum仓库
优点: 安装路径和源码安装一致,企业统一管理
fpm工具安装:(打包需要工具,可以把源码安装的包通过fpm打包成rpm包) wget http://download.driverzeng.com/fpm-1.3.3.x86_64.tar.gz yum -y install ruby rubygems ruby-devel # 安装fpm依赖 解压:[root@db_rpm ~]# tar xf fpm-1.3.3.x86_64.tar.gz # 换gem源 删掉国外源,换成国内源(不换源也可以,速度慢些) gem sources --add https://mirrors.huaweicloud.com/repository/rubygems/ --remove https://rubygems.org/ # 安装fpm的包 [root@db_rpm ~]# gem install *.gem # 打包命令(会有黄字, 不影响) fpm -s dir -t rpm -n nginx -v 1.16.0 -d 'pcre-devel,openssl-devel' -f /app/nginx-1.16.0 # -s dir指定打包目录 -t rpm指定是rpm包 -n 指定包名 -v 指定版本 -d 指定依赖包 -f 指定要打包的目录 nginx-1.16.0-1.x86_64.rpm # 打包出的文件 nginx-版本-发布次数-架构
通过fpm打包做镜像
cp nginx-1.16.0-1.x86_64.rpm /usr/local/src/ 进入/usr/local/src/中,把所有文件打tar包 cd /usr/local/src/ tar zcf nginx.tar.gz ./* # 拷贝到仓库机器目录下 cd /data/zls/yum_repo/nginx # 解压 tar xf nginx.tar.gz # 把该路径变为yum仓库 createrepo /data/zls/yum_repo/nginx/ # 访问机操作 cd /etc/yum.repos.d/ # 编辑 vim nginx-zls.repo [app-nginx] name='xxx' baseurl=http://10.0.0.200/nginx/ enable=1 gpgcheck=0 # 参看yum是否生效 yum repolist # 查看是否安装nginx rpm -qa|grep nginx >> nginx-1.16.0-1.el7.ngx.x86_64 # 卸载 rpm -e nginx-1.16.0-1.el7.ngx.x86_64 # 安装 yum install -y nginx # 查看是否在/app目录下(conf文件也在路径下) ll /app
ubuntu软件管理
Debian 软件包通常为预编译的二进制格式的扩展名“.deb”,类似 rpm 文件,因此安装快速,无需编译 软件。包文件包括特定功能或软件所必需的文件、元数据和指令 dpkg:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可 以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项 apt:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基 于客户/服务器架构(c/s)
rhel 系列与 debian系列包管理对比
dpkg 包管理器
dpkg [<option> ...] <command>
#常用选项 -i|--install package.deb #安装包 --unpack package.deb #解包 -r|--remove packageName #删除包,不建议,不自动卸载依赖于它的包 -P|--purge packageName #删除包(包括配置文件) -V|--verify packageName #检查包是否安装 --get-selections pattern #根据正则筛选包,并打出列表 --set-selections #从标准输入里读出要选择的软件。 --clear-selections #取消选中所有不必要的软件包。 --update-avail packageFile #替换现有可安装的软件包信息。 --merge-avail packageFile #把文件中的信息合并到系统中。 --clear-avail #清除现有的软件包信息。 --forget-old-unavail #忘却已被卸载的不可安装的软件包。 -s|--status packageName #显示指定软件包的详细状态,类似于 rpm -qi -p|--print-avail packageName #显示当前机器上所有可安装的包 -L|--listfiles packageName #列出属于指定软件包的文件,类似于 rpm -ql -l|--list [pattern] #列出当前己安装的包,类似于rpm -qa -S|--search pattern #根据文件查询是来自于哪个包,类似于 rpm - qf -C|--audit [pattern] #检查是否有软件包残损 --yet-to-unpack #列出标记为待解压的软件包 --predep-package #列出待解压的预依赖 --compare-vesions v1 - b #比较版本号 --force-help #显示本强制选项的帮助信息 -Dh|--debug=help #显示有关出错调试的帮助信息 --info packageFile #列出包相关信息 -c packageFile #列出包内文件,类似于 rpm -qpl
#查询包是否安装 root@ubuntu22:~# dpkg -V vim root@ubuntu22:~# echo $? 0 root@ubuntu22:~# dpkg -V nginx dpkg: package 'nginx' is not installed root@ubuntu22:~# echo $? 1
dpkg 的软件安装分为解包和配置两部份 #安装 root@ubuntu22:~# dpkg -i /cdrom/pool/restricted/f/firmware-sof/firmware-sofsigned_2.0-1ubuntu2_all.deb Selecting previously unselected package firmware-sof-signed. (Reading database ... 108476 files and directories currently installed.) Preparing to unpack .../firmware-sof-signed_2.0-1ubuntu2_all.deb ... Unpacking firmware-sof-signed (2.0-1ubuntu2) ... Setting up firmware-sof-signed (2.0-1ubuntu2) ... #查询 root@ubuntu22:~# dpkg -l firmware-sof-signed Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===================-============-============- ================================= ii firmware-sof-signed 2.0-1ubuntu2 all Intel SOF firmware - signed #卸载 root@ubuntu22:~# dpkg -r firmware-sof-signed (Reading database ... 108702 files and directories currently installed.) Removing firmware-sof-signed (2.0-1ubuntu2) ...
#根据条件列出己安装的包 root@ubuntu22:~# dpkg --get-selections v* vim install vim-common install #显示所有可安装的包 root@ubuntu22:~# dpkg -p #显示指定包 root@ubuntu22:~# dpkg -p mawk #显示己安装的列表 mage@ubuntu22:~$ dpkg -l #通配符 mage@ubuntu22:~$ dpkg -l "vi*" #具体包名 mage@ubuntu22:~$ dpkg -l vim Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-======================-===================-==============- ================================= ii vim 2:8.2.3995-1ubuntu2 amd64 Vi IMproved - enhanced vi editor 该列表从左到右共七列 #Desired 期望状态 u Unknown #没有安装过 i Install #请求安装 r Remove #请求卸载 p Purge #请求卸载并清理 h Hold #保持 #Status 当前状态 n Not #软件没有安装 i Inst #安装完成并完成配置 c Conf-files #己卸载,但还有保留配置文件 u Unpacked #己解压缩,但没有配置 f halF-conf #配置时出错 h Half-inst #安装时出错 w trig-aWait #触发器等待 t Trig-pend #触发器是未决状态 #Err 错误状态 #正常情况下为空 h #被锁定,有其它包对此依赖,无法升级 r Reinst-required, #被损坏,需要重装才能正常使用 x #被损坏且被锁定 #Name 包名 #Version 版本 #Architecture 平台架构 #Description 包的描述信息 #前三列常见组合 ii #安装成功 pn #安装后卸载 un #没有安装过 iu #安装了但是没有配置 rc #己卸载,但还有配置文件
#查询文件来自于哪个包 root@ubuntu22:~# dpkg -S "/etc/ssh/ssh_config" openssh-client: /etc/ssh/ssh_config
apt 命令用法
apt [options] command #options -h|--help #显示帮助 -v|--version #显示版本 -y|--yes #自动回答yes -q|--quiet #安静模式 #command list #根据名称列出软件包 search #搜索软件包描述 show|info #显示软件包细节 install #安装软件包 remove #移除软件包 autoremove #卸载所有自动安装且不再使用的软件包(如果依赖刚好其他包也使用,还是会删除,有风险) update #更新可用软件包列表,只更新索引文件,不具体更新软 件 upgrade #通过 安装/升级 软件来更新系统 full-upgrade #通过 卸载/安装/升级 来更新系统 edit-sources #编辑软件源信息文件 #列出所有包 root@ubuntu22:~# apt list #列出所有己安装的包 root@ubuntu22:~# apt list --installed #列出所有可升级的包 root@ubuntu22:~# apt list --upgradeable #指定包名或通配符 root@ubuntu22:~# apt list redis* root@ubuntu22:~# apt list --installed redis* Listing... Done #搜索 #在包名和描述信息中搜索 root@ubuntu22:~# apt search nginx #使用正则匹配搜索条件 root@ubuntu22:~# apt search "^ngin*" #仅在包名中搜索 root@ubuntu22:~# apt search --names-only nginx #安装 root@ubuntu22:~# apt install nginx #同时安装多个包 root@ubuntu22:~# apt install nginx redis -y #安装指定版本的包,默认安装最新版 root@ubuntu22:~# apt install nginx=1.14.0-0ubuntu1 #安装nginx 包,如果己存在,则不升级 root@ubuntu22:~# apt install nginx --no-upgrade #只升级不安装 root@ubuntu22:~# apt install nginx --only-upgrade #卸载 仅卸载nginx包 root@ubuntu22:~# apt remove -y nginx #卸载所有依赖包 root@ubuntu22:~# apt autoremove nginx
yum install abc abc 在安装完成之后不会自动启动
apt install ab abc在安装完成之后会自动启动
#如果apt很长时间不用了,在操作前,先 apt update 下构建新缓存,把源同步下,否则有缓存,不是最新的
apt换源
/etc/apt/sources.list.d/
#把 http://cn.archive.ubuntu.com/ubuntu/ 替换成 https://mirrors.aliyun.com/ubuntu/ 即可 #这里可以参考阿里云,也可以自己手动换 root@ubuntu22:~# vim /etc/apt/sources.list #命令行输入(其他的可能不一样,也都换下) :%s/cn.archive.ubuntu.com/mirrors.aliyun.com/g #更新源 apt-get update 这样,apt的源就成功地更改为了新的源。请注意,在进行任何更改之前,最好备份原有的源文件,以防万一。
/etc/apt/sources.list.d/ 配置文件格式说明 deb URL section1 section2 #字段说明 deb #固定开头,表示是二进制包的仓库,如果deb-src开头,表示是源码库 URL #库所在的地址,可以是网络地址,也可以是本地镜像地址 section1 #Ubuntu版本的代号,可用 lsb_release -sc 命令查看,也可以用 cat /etc/os-release section2 #软件分类,main完全自由软件 restricted不完全自由的软件,universe社区支持 的软件,multiverse非自由软件 section1 #主仓 section1-backports #后备仓,该仓中的软件当前版本不一定支持 section1-security #修复仓,主要用来打补丁,有重大漏洞,需要在当前版本中修复 时,会放此仓 section1-updates #非安全性更新仓,不影响系统安全的小版本迭代放此仓 section1-proposed #预更新仓,可理解为新版软件的测试放在此仓,测试一段时间后 会移动到 updates仓或security仓,非专业人士勿用
在ubuntu库中,有两个重要目录,分别是dists和 pool dists (就像yum中的repodata元数据和rpm包)
目录中存放的是该源仓库中的元数据,包括软件包的名称,适用的架构平台,版本号,依赖关系等
pool 目录中存放的是具体包文件
snap 工具
Snap 包是 Ubuntu 16.04 LTS 发布时引入的新应用格式包。目前已流行在 Ubuntu 且在其他如Debian、Arch Linux、Fedora、Kaili Linux、openSUSE、Red Hat
等 Linux 发行版上通过 snapd 来安装使用 snap 应用。 当你在安装完 snap 后,你会发现在在根目录下会出现如 /dev/loop0 的挂载点,这些挂载点正是 snap 软件包的目录。Snap 使用了 squashFS 文件系统,
一种开源的压缩,只读文件系统,基于 GPL 协议发行。一旦 snap 被安装后,其就有一个只读的文件系统和一个可写入的区域。应用自身的执行文件、库、依赖包都被放在这个只读目录,
意味着该目录不能被随意篡改和写入。 默认 Snap 应用格式包,专为物联网设备、嵌入式平台设计的迷你 Ubuntu。it用不到,但会多出现几个loop的挂载点