软件包管理

软件包分类

win的*.exe文件是不能在Linux里面直接使用的,所以win里面大量的病毒和木马到Linux里面就无效了,不可识别,对Linux来说win的软件包对他来说就是一堆文件而已。

  • 源码包(源代码直接开放给你的包,开源,绝大部分是C/C++写的)
    • 脚本安装包,一般是源码包经过二次开发的,类似于win里面软件安装包内的setup.exe,事先写好了安装引导程序,一步步的跟着点击按钮选择安装选项就ok了,在Linux里面就叫install.sh,其实其就是源码包。

    • 脚本安装使用的命令为:

      首先,有些脚本没有执行权限,需要添加权限chmod +x agentInstall.sh,再执行脚本程序==./agentInstall.sh install==,这里的./,一般含义中,. 表示当前文件夹,./edge/表示当前文件夹下的edge文件夹,但是 ./ 还有别的功能,就是执行脚本程序,格式为./脚本.sh,安装脚本程序就像上述一样操作即可。

  • 二进制包(RPM包、系统默认包无法看见源代码)

    二进制包和源代码包的区别在于,源代码包是C语言的直接写的,原汁原味,直接用源代码包安装有时会报错,二进制包则是经过编译之后的机器语言包(0101)为RPM格式,win里面的*.exe安装包也是二进制包,不过其和RPM的格式不一样,所以Linux系统无法安装*.exe,源码包与二进制包还有区别在于,二进制包无法看见源代码,而且,如果用源代码包安装系统要先编译源码包再安装,编译过程会耗费一段时间,所以一般都用二进制包,简单快捷,网上下载的安装包都是厂商编译完后的二进制包。

源码包

优点:

  • 开源,如果有足够的能力,可以修改源代码
  • 可以自由选择所需的功能
  • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高,相同版本系统,相同版本的软件,源码包安装的比二进制包安装的性能好5%左右;
  • 卸载方便,不会像win一样卸载会有垃圾文件产生,这是Linux系统比win系统稳定的主要原因

缺点:

  • 安装步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
  • 编译时间较长,安装比二进制安装时间长,安装源码包比相当大小的二进制包时间长几十倍,如果用源码包安装一个几个G的Linux系统大概需要大概3天时间,编译过程非常复杂,安装起来比较困难
  • 因为是编译安装,安装过程中一旦报错新手很难解决
RPM包

二进制包的优点

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
  • 安装速度比源码包安装快的多(厂商编译过,所以安装非常快)

缺点

  • 经过编译,不再可以看源代码
  • 功能选择不如源码包灵活
  • 依赖性(基本上所有的RPM包都有依赖性)

RPM软件包管理

RPM包命令管理

RPM包命名规则

httpd-2.2.15-15.el6.centos.1.i686.rpm

  • httpd 软件包名
  • 2.2.15 软件版本
  • 15 软件发布次数
  • el6.centos 适合的Linux平台,
  • i686 适合的硬件平台(如果写的是X64,那么只能安装在64位的cpu平台上)如果写的是noarch,意思是说适合所有平台。
  • rpm rpm包拓展名(所有rpm包都为rpm,所有的安装包都必须以rpm结尾为扩展名,Linux里面没有扩展名这一说,不像win里面每个文件都有规定一类的扩展名,Linux系统不会在意文件的扩展名,随便取,但是rpm包必须以rpm结尾为扩展名,因为这是给root用户看的,给管理员看的,不然不认识rpm包。)

注意:区分包名(httpd)和包全名(httpd-2.2.15-15.el6.centos.1.i686.rpm)是有区别的,在有些命令里两个是不一样的概念。

PRM包依赖性
  • 树形依赖:a->b->c(安装a需要先装b,安装b需要先装c,安装顺序为cba,卸载顺序为abc)
  • 环形依赖:a->b->c->a(解决方法是用一条命令一次性安装abc)
  • 模块依赖:模块依赖查询网站(www.rpmfind.net)
post:挂载

首先创建挂载点,一般选择/mnt/目录下创建挂载点

记住别犯傻,今天我看视频去找cd光盘的设备文件cdrom,居然去/etc/里面去找,简直是脑子抹了屎,没找到还去网上搜为什么,搞了好一会儿,是说怎么没看见设备文件啊,太蠢了,记住/etc/文件夹是存放系统的配置文件的文件夹,设备文件是存放在/dev/里面的。

[root@XYLJ dev]# ll
...
brw-rw----+ 1 root cdrom    11,   0 115 20:48 sr0
lrwxrwxrwx. 1 root root           3 115 20:48 cdrom -> sr0
...

cdrom是指向sr0的软链接

创建挂载点:

[root@XYLJ dev]# mkdir /mnt/cdrom   <--创建挂载目录
[root@XYLJ dev]# mount /dev/sr0 /mnt/cdrom/   <--将目标挂载到前面创建的挂载目录
[root@XYLJ dev]# ls -hld /mnt/cdrom/
drwxr-xr-x. 8 root root 2.0K 95 2017 /mnt/cdrom/
[root@XYLJ dev]# cd /mnt/cdrom/
[root@XYLJ cdrom]# ll
总用量 664
-rw-rw-r--. 3 root root     14 95 2017 CentOS_BuildTag
drwxr-xr-x. 3 root root   2048 95 2017 EFI
-rw-rw-r--. 3 root root    227 830 2017 EULA
-rw-rw-r--. 3 root root  18009 1210 2015 GPL
drwxr-xr-x. 3 root root   2048 95 2017 images
drwxr-xr-x. 2 root root   2048 95 2017 isolinux
drwxr-xr-x. 2 root root   2048 95 2017 LiveOS
drwxrwxr-x. 2 root root 641024 95 2017 Packages
drwxr-xr-x. 2 root root   4096 95 2017 repodata
-rw-rw-r--. 3 root root   1690 1210 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 3 root root   1690 1210 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root   2883 96 2017 TRANS.TBL
[root@XYLJ cdrom]# ls -dlh Packages/
drwxrwxr-x. 2 root root 626K 95 2017 Packages/
[root@XYLJ cdrom]# ll -hla Packages/
...
-rw-rw-r--. 2 root root  168K 1121 2016 poppler-utils-0.26.5-16.el7.x86_64.rpm
-rw-rw-r--. 3 root root   42K 74 2014 popt-1.13-16.el7.x86_64.rpm
-rw-rw-r--. 2 root root  337K 811 2017 pykickstart-1.99.66.12-1.el7.noarch.rpm
-rw-rw-r--. 2 root root   44K 811 2017 pyldb-1.1.29-1.el7.x86_64.rpm
-rw-rw-r--. 3 root root   47K 74 2014 pyliblzma-0.5.3-11.el7.x86_64.rpm
-rw-rw-r--. 2 root root  134K 74 2014 pyOpenSSL-0.13.1-3.el7.x86_64.rpm
-rw-rw-r--. 2 root root   51K 74 2014 pyorbit-2.24.0-15.el7.x86_64.rpm
-rw-rw-r--. 2 root root   26K 74 2014 PyPAM-0.5.0-19.el7.x86_64.rpm
...

可以看见,挂载文件夹的大小非常小而打开里面的文件却是比较多比较大的这点有待讨究。

[root@XYLJ Packages]# rpm -ivh mysql-connector-odbc-5.2.5-6.el7.x86_64.rpm
错误:依赖检测失败:libodbc.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-6.el7.x86_64 需要libodbcinst.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-6.el7.x86_64 需要
[root@XYLJ Packages]#

上面安装出现错误,显示安装的包有依赖,其中有一个依赖的包为libodbc.so.2()(64bit)这种以.so.2结尾的包都是库依赖,是不会在 Packages内的,这种库依赖包不是单独独立的包,它是某一个软件包中的软件,也就是说我只要把这个软件所在的包装上,那么这个软件就会装上,就解决了依赖性。

安装升级与卸载

包全名和包名
  • 包全名:操作的包是没安装的软件包时,使用包全名。而且要注意路径,因为没有装过,系统没有记录软件包和其路径位置,安装后,包名会被记录在资料数据库内

  • 包名:操作已经安装的软件包时,使用包名。这个时候包已经装过了,系统就会直接去搜索包名,是搜索/var/lib/rpm/中的数据库。(这个库中的文件都是二进制文件,不能用vim直接打开,只能用相应的指令打开,在数据库中搜索,所有不需要绝对路径,直接用命令搜索包即可)

RPM安装

rpm -ivh [包全名]

一般都是-ivh 固定使用

  • -i (install) 安装
  • -v(verbose) 显示详细信息
  • -h (hash) 显示进度
  • –nodeps 不检测依赖性(一般不用,依赖性是一定存在的,实验是可以用,可以忽略这个指令)

查看挂载信息

[root@XYLJ mnt]# mount   <-- 查看挂载信息,/dev/sr0 on /mnt/cdrom 这里说明光盘sr0挂入了/mnt/crom里
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=915956k,nr_inodes=228989,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/sda2 on / type ext4 (rw,relatime,seclabel,data=ordered)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=36,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=12657)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
vmhgfs-fuse on /mnt/hgfs type fuse.vmhgfs-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=186304k,mode=700)
gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/sr0 on /run/media/root/CentOS 7 x86_64 type iso9660 (ro,nosuid,nodev,relatime,uid=0,gid=0,iocharset=utf8,dmode=0500,mode=0400,uhelper=udisks2)
/dev/sr0 on /mnt/cdrom type iso9660 (ro,relatime,uid=0,gid=0,iocharset=utf8,dmode=0500,mode=0400)
[root@XYLJ mnt]#
[root@XYLJ Packages]# rpm -ivh httpd-tools-2.4.6-95.el7.centos.x86_64.rpm
警告:httpd-tools-2.4.6-95.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...1:httpd-tools-2.4.6-95.el7.centos  ################################# [100%]
RPM包升级

rpm -Uvh [包全名]

  • -U (upgrade) 升级

你需要升级某个软件,则你必须在电脑里面有比当前安装的软件更加高级的包,包全名就是这个更高级的包的路径以及包全名。其过程与安装过程完全一样。

卸载

rpm -e [包名]

  • -e (erase) 卸载
  • –nodeps 不检查依赖性

因为卸载时,软件包已经被安装,包名已经被记录在了资料数据库内,所以不需要包全名只需要包名即可,而且也不需要绝对路径,在任何路径下,直接卸载包名即可卸载软件。

查询

查询是否安装
rpm -q [包名]
  • -q 查询 (query)
  • -qa 所有 (all)查询所有包
  • qi 查询软件信息 (information)
  • -p 查询未安装包信息 (package),意思是安装包已经在你的系统里了,你也知道他在哪里,看得见它,不过你想看它的信息资料,包的信息都是已经写好打包在包内的,为安装我也可以查看它的信息,用这个命令需要用包全名,加包全名的地方只有安装和升级,以及这里,加包全名是因为未安装,包名信息不会录入资料数据库,无法直接用包名。
  • ql 列表(list) 查询已包安装位置以及其安装文件列表
  • rpm包安装位置在开发者写包的时候就已经指定好了,所以一般都是默认安装到原本指定的安装路径,虽然我们可以指定安装位置,但是不推荐,因为很多系统服务或者软件服务都是依赖默认路径的,人为更改安装路径会导致服务无法进行,查询已包安装位置用rpm -ql [包名],查询未安装包打算要安装的路径位置用rpm -qlp [包全名]

比如指令rpm-qa查询所有已经安装的RPM包 ,这里也不需要注意绝对路径,不管在哪都可以查询

[root@XYLJ Packages]# rpm -q P
PackageKit                    PackageKit-gstreamer-plugin   PyYAML
PackageKit-command-not-found  PackageKit-gtk3-module
PackageKit-glib               PackageKit-yum
[root@XYLJ Packages]# rpm -q PackageKit-g
PackageKit-glib              PackageKit-gstreamer-plugin  PackageKit-gtk3-module
[root@XYLJ Packages]# rpm -q PackageKit-gtk3-module
PackageKit-gtk3-module-1.1.10-2.el7.centos.x86_64
[root@XYLJ Packages]# rpm -q sdsdf
未安装软件包 sdsdf

rpm -qa | grep [包名]

加上管道符联合grep指令,可以查询所有含包名的软件包。

查询系统文件属于哪个RPM包
rpm -qf [系统文件名]
  • -f 查询系统文件属于哪个软件包(file)这里的系统文件名必须是系统的文件,而不能是自己建的文件,因为只有经过系统包装过的文件才能追溯它属于哪个包,没有包装过的无法追溯。,系统文件名是用绝对路径,要文件的具体位置。/etc/目录下的配置文件大部分都是包安装出来的。
[root@XYLJ Packages]# rpm -ql http
httpd-tools  http-parser
[root@XYLJ Packages]# rpm -ql httpd
未安装软件包 httpd
[root@XYLJ Packages]# rpm -ql httpd-tools
/usr/bin/ab
/usr/bin/htdbm
/usr/bin/htdigest
/usr/bin/htpasswd
/usr/bin/httxt2dbm
/usr/bin/logresolve
/usr/share/doc/httpd-tools-2.4.6
/usr/share/doc/httpd-tools-2.4.6/LICENSE
/usr/share/doc/httpd-tools-2.4.6/NOTICE
/usr/share/man/man1/ab.1.gz
/usr/share/man/man1/htdbm.1.gz
/usr/share/man/man1/htdigest.1.gz
/usr/share/man/man1/htpasswd.1.gz
/usr/share/man/man1/httxt2dbm.1.gz
/usr/share/man/man1/logresolve.1.gz
[root@XYLJ Packages]# rpm -qf /usr/share/man/man1/htpasswd.1.gz
httpd-tools-2.4.6-95.el7.centos.x86_64
[root@XYLJ Packages]#
查询软件包的依赖性

rpm -qR [包名]

  • -R 查询软件包的依赖性 (requires)
  • -p 查询未安装包信息包全名,包括路径也要注意(package)即rpm -qRp
校验和文件提取
校验

rpm -V [包名]

  • -V 检测安装的软件是否被更改过

如果软件未被修改,那么就不会有输出,说明软件还是原来安装的样子,没有改变

如果输出了内容,说明软件内部文件被修改过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TDoRc3Nc-1636293958686)(C:\Users\17180\AppData\Roaming\Typora\typora-user-images\image-20211106145600268.png)]

前面八个字符表示验证内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZ9VUJoA-1636293958688)(C:\Users\17180\AppData\Roaming\Typora\typora-user-images\image-20211106145424359.png)]

后面的字母表示后面发现不同的路径文件的类型,后面的路径表示验证不不同的文件路径。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D04uoune-1636293958689)(C:\Users\17180\AppData\Roaming\Typora\typora-user-images\image-20211106145500133.png)]

文件提取

rpm2cpio [包全名包含路径] | cpio -idv .文件绝对路径

rpm2cpio的意思是把rpm格式转化为(2->to的意思)cpio格式,cpio是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

cpio [选项] <[文件或设备]

  • -i ,copy-in模式,还原
  • -d ,还原时自动新建目录
  • -v ,显示还原过程

上边的目录将<号换为 . 号,这里 ‘ . ’号表示当前文件夹的意思

这句话的意思是将包(包全名那里)先转化为cpio,接着用cpio目录从包中提取出指定文件,即后面的文件要有绝对路径来写(在包里面的绝对路径),然后复制到当前目录下,整个的意思就是说,如果你误操作把系统的一个软件比如ls命令删除了,无法使用ls命令了,那么如何修复呢,就是首先要知道ls是属于哪个软件包的,然后从这个包当中提取ls这条命令的文件,然后再把这条命令复制到它原本应该存在的文件路径下。

[root@XYLJ Packages]# cp /bin/ls
ls        lsblk     lscpu     lsinitrd  lslocks   lsmcli    lsmem     lsscsi    lsusb
lsattr    lscgroup  lsdiff    lsipc     lslogins  lsmd      lsns      lssubsys  lsusb.py
[root@XYLJ Packages]# cp /bin/ls /tmp/study/ls
[root@XYLJ Packages]# cd /tmp/study/
[root@XYLJ study]# ll
总用量 25392
drwxrwxrwx. 3 root root     4096 112 18:40 a
drwxr-xr-x. 4 root root     4096 112 15:14 jiaojian
-rwxr-xr-x. 1 root root   117672 116 15:23 ls
-rw-r--r--. 1 root root   711892 115 16:20 services.test
-rw-r--r--. 1 root root        0 113 16:27 text002.txt
-rwxrw-r--. 2 root root 12571502 112 15:36 xiaoshuo.hard
drwxr-xr-x. 3 root root     4096 114 12:16 ysb001
-rwxrw-r--. 2 root root 12571502 112 15:36 林动成长记.txt
drwxr-xr-x. 2 root root     4096 112 15:34 小说
drwxr-xr-x. 2 root root     4096 112 13:32 兄弟连
[root@XYLJ study]# ls -hl /bin/ls
-rwxr-xr-x. 1 root root 115K 411 2018 /bin/ls
[root@XYLJ study]# mv /bin/ls /tmp/bin/ls
mv: 无法将"/bin/ls" 移动至"/tmp/bin/ls": 没有那个文件或目录
[root@XYLJ study]# mv /bin/ls /tmp/
[root@XYLJ study]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
[root@XYLJ study]# cd /tmp/
[root@XYLJ tmp]# ll
-bash: /usr/bin/ls: 没有那个文件或目录
[root@XYLJ tmp]# cd study/
[root@XYLJ study]# rpm -qf ls
文件 /tmp/study/ls 不属于任何软件包
[root@XYLJ study]# cp ls /bin/
[root@XYLJ study]# ls
a  jiaojian  ls  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64
[root@XYLJ study]# rm /bin/ls
rm:是否删除普通文件 "/bin/ls"?y
[root@XYLJ study]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | \cpio
cpio: 你必须指定 -oipt 选项中的一个。
尝试 `cpio --help' 或者 `cpio --usage' 来寻找更多信息。[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | \
bash:  : 未找到命令...
[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | cpio -ivd . /bin/ls
28595[root@XYLJ study]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
[root@XYLJ study]# dir
a  jiaojian  ls  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | cpio -ivd ./bin/ls
28595[root@XYLJ study]# dir
a  jiaojian  ls  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# cd bin
-bash: cd: bin: 没有那个文件或目录
[root@XYLJ study]# rpm -qpl /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm
...
/usr/bin/fold
/usr/bin/groups
/usr/bin/head
/usr/bin/hostid
/usr/bin/id
/usr/bin/install
/usr/bin/join
/usr/bin/link
/usr/bin/ln
/usr/bin/logname
/usr/bin/ls
...
[root@XYLJ study]# cp ls /bin/ls
[root@XYLJ study]# ls
a  jiaojian  ls  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# ls -a
.  ..  a  jiaojian  ls  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | cpio -ivd ./bin/ls
28595[root@XYLJ study]# ls
a  jiaojian  ls  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# rm ls
rm:是否删除普通文件 "ls"?y
[root@XYLJ study]# ls
a  jiaojian  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | cpio -ivd ./bin/ls
28595[root@XYLJ study]# ls
a  jiaojian  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | cpio -idv ./bin/ls
28595[root@XYLJ study]# ls
a  jiaojian  services.test  text002.txt  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-18.el7.x86_64.rpm | cpio -idv ./usr/bin/ls
./usr/bin/ls
28595[root@XYLJ study]# ls
a  jiaojian  services.test  text002.txt  usr  xiaoshuo.hard  ysb001  林动成长记.txt  小说  兄弟连
[root@XYLJ study]# cd usr/
[root@XYLJ usr]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 116 15:38 bin
[root@XYLJ usr]# cd bin/
[root@XYLJ bin]# ll
总用量 116
-rwxr-xr-x. 1 root root 117656 116 15:38 ls
[root@XYLJ bin]#

这里先查询ls命令文件所在的安装包,接着查询包安装的文件路径是怎么样的,再从包中提取指定文件到文件夹里。

yum在线管理

yum安装也是安装RPM包,其与前面的区别为,前面是手动安装的rmp命令安装,这yum是一个在线工具命令,是在线安装,解决了手动安装的依赖性的问题,不需要考虑这个问题,yum也不一定非要联网,而是可以用光盘作为yum源来安装。

网络yum源

网络yum源一般都是已经配好的。这里是查看yum源配置文件和yum源容器网络地址。==/etc/yum.repos.d/==yum源的配置文件都在这个文件夹下。下面有很多yum源容器,里面写着yum源的地址,yum容器的后缀默认为*.repo,系统也是只认后缀。

[root@XYLJ bin]# cd /etc/yum.repos.d/
[root@XYLJ yum.repos.d]# ll
总用量 36
-rw-r--r--. 1 root root 1664 429 2018 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 429 2018 CentOS-CR.repo
-rw-r--r--. 1 root root  649 429 2018 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 429 2018 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 429 2018 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 429 2018 CentOS-Sources.repo
-rw-r--r--. 1 root root 4768 429 2018 CentOS-Vault.repo
-rw-r--r--. 1 root root  174 1031 15:34 google-chrome.repo
[root@XYLJ yum.repos.d]# vim CentOS-Base.repo
[root@XYLJ yum.repos.d]# vim CentOS-Base.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
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#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

每个配置文件里面地址有一个关键字,enable=1或者0,1代表可用,0代表不可用,没写默认为1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P5zCpnGR-1636293958691)(C:\Users\17180\AppData\Roaming\Typora\typora-user-images\image-20211106160357062.png)]

yum指令

查询

yum list

查询列出所有可用软件包列表

yum search 关键字

搜索服务器上所有和关键字相关的包

[root@XYLJ yum.repos.d]# yum search httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile* base: mirrors.cqu.edu.cn* extras: mirrors.cqu.edu.cn* updates: mirrors.cqu.edu.cn
========================================================================================================== N/S matched: httpd ==========================================================================================================
keycloak-httpd-client-install.noarch : Tools to configure Apache HTTPD as Keycloak client
libmicrohttpd-devel.i686 : Development files for libmicrohttpd
libmicrohttpd-devel.x86_64 : Development files for libmicrohttpd
libmicrohttpd-doc.noarch : Documentation for libmicrohttpd
python2-keycloak-httpd-client-install.noarch : Tools to configure Apache HTTPD as Keycloak client
httpd.x86_64 : Apache HTTP Server
httpd-devel.x86_64 : Development interfaces for the Apache HTTP server
httpd-manual.noarch : Documentation for the Apache HTTP server
httpd-tools.x86_64 : Tools for use with the Apache HTTP Server
libmicrohttpd.i686 : Lightweight library for embedding a webserver in applications
libmicrohttpd.x86_64 : Lightweight library for embedding a webserver in applications
mod_auth_mellon.x86_64 : A SAML 2.0 authentication module for the Apache Httpd Server
mod_dav_svn.x86_64 : Apache httpd module for Subversion server名称和简介匹配 only,使用“search all”试试。
[root@XYLJ yum.repos.d]#
安装

yum -y install [包名]

install 为安装。-y为自动回答yes,它每安装一个包都会问用户是否安装,-y就自动回答,不需要输入,直接等待即可。

升级

yum -y update [包名]

注意:yum -y update 不加包名,则为更新整个系统的文件和系统内核,这样会使系统进入升级,很多系统配置文件没经过整理是不能进行内核升级的,会导致宕机,谨慎。

卸载

yum -y remove [包名]

尽量不用yum卸载,因为不安全,因为yum卸载是全自动化的操作,它会卸载目标软件,以及目标软件的依赖软件,所有,其依赖软件要有可能也是系统依赖的软件,这样一来,系统就崩溃了,谨慎使用,或者不使用。

yum软件组管理命令

yum grouplist

列出所有可用的软件组列表

yum groupinstall 软件组名

安装指定软件组,组名可以由grouplist查询出来

yum groupremove 软件组名

卸载指定软件组

光盘yum源搭建

首先,挂载cd关盘到/mnt/cdrom/目录下。

[root@XYLJ ~]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@XYLJ ~]# ll /mnt/cdrom/
总用量 664
-rw-rw-r--. 3 root root     14 95 2017 CentOS_BuildTag
drwxr-xr-x. 3 root root   2048 95 2017 EFI
-rw-rw-r--. 3 root root    227 830 2017 EULA
-rw-rw-r--. 3 root root  18009 1210 2015 GPL
drwxr-xr-x. 3 root root   2048 95 2017 images
drwxr-xr-x. 2 root root   2048 95 2017 isolinux
drwxr-xr-x. 2 root root   2048 95 2017 LiveOS
drwxrwxr-x. 2 root root 641024 95 2017 Packages
drwxr-xr-x. 2 root root   4096 95 2017 repodata
-rw-rw-r--. 3 root root   1690 1210 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 3 root root   1690 1210 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root   2883 96 2017 TRANS.TBL
[root@XYLJ ~]#

查看yum源配置文件:

[root@XYLJ ~]# cd /etc/yum.repos.d/
[root@XYLJ yum.repos.d]# ll
总用量 36
-rw-r--r--. 1 root root 1664 429 2018 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 429 2018 CentOS-CR.repo
-rw-r--r--. 1 root root  649 429 2018 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 429 2018 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 429 2018 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 429 2018 CentOS-Sources.repo
-rw-r--r--. 1 root root 4768 429 2018 CentOS-Vault.repo
-rw-r--r--. 1 root root  174 1031 15:34 google-chrome.repo
[root@XYLJ yum.repos.d]#

上述中有8个yum源配置文件,他们的后缀都是*.repo,这是系统识别yum源的标准,所以要使本地yum源生效,那么就要屏蔽其他yum源配置文件,可以通过改后缀的形式来简单屏蔽(后面加.bak后缀)让他们都失效。

[root@XYLJ yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bar
[root@XYLJ yum.repos.d]# mv CentOS-CR.repo CentOS-CR.repo.bak
[root@XYLJ yum.repos.d]# mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
[root@XYLJ yum.repos.d]# mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
[root@XYLJ yum.repos.d]# mv CentOS-Sources.repo CentOS-Sources.repo.bak
[root@XYLJ yum.repos.d]# mc CentOS-Vault.repo CentOS-Vault.repo.bak
bash: mc: 未找到命令...
[root@XYLJ yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak
[root@XYLJ yum.repos.d]# mv google-chrome.repo google-chrome.repo.bak
[root@XYLJ yum.repos.d]# mv CentOS-Base.repo.bar CentOS-Base.repo.bak
[root@XYLJ yum.repos.d]# ll
总用量 36
-rw-r--r--. 1 root root 1664 429 2018 CentOS-Base.repo.bak
-rw-r--r--. 1 root root 1309 429 2018 CentOS-CR.repo.bak
-rw-r--r--. 1 root root  649 429 2018 CentOS-Debuginfo.repo.bak
-rw-r--r--. 1 root root  314 429 2018 CentOS-fasttrack.repo.bak
-rw-r--r--. 1 root root  630 429 2018 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 429 2018 CentOS-Sources.repo.bak
-rw-r--r--. 1 root root 4768 429 2018 CentOS-Vault.repo.bak
-rw-r--r--. 1 root root  174 1031 15:34 google-chrome.repo.bak
[root@XYLJ yum.repos.d]#

修改光盘yum源配置文件,注意不要乱改,要保证它的默认格式,不要自己加缩进和空格在每一句的前面和末尾。可能会破坏默认格式,导致报错。修改可以,但是要注意系统配置文件的默认格式,按照它的格式来修改可以,不可自己乱加注释和缩进、空格等。

[root@XYLJ yum.repos.d]# vim CentOS-Media.repo
# CentOS-Media.repo
#
#  This repo can be used with mounted DVD media, verify the mount point for
#  CentOS-7.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c7-media [command]
#
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c7-media [command][c7-media]   <---这是地址池的名字,也就是前面说的容器的名字,前面是Base
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom    <--加入光盘挂载地址,格式要与这里保持一致,注释其他地址
#       file:///media/CentOS/
#        file:///media/cdrom/
#        file:///media/cdrecorder/
gpgcheck=1
enabled=1    <---这里将0改为1 ,让光盘yum源生效,然后保存
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@XYLJ yum.repos.d]# yum list
mythes-sv.noarch                                      1.3-6.el7                                c7-media
mythes-uk.noarch                                      1.6.5-6.el7                              c7-media
nafees-web-naskh-fonts.noarch                         1.2-11.el7                               c7-media
nasm.x86_64                                           2.10.07-7.el7                            c7-media
navilu-fonts.noarch                                   1.2-3.el7                                c7-media
ncurses-devel.x86_64                                  5.9-13.20130511.el7                      c7-media
ncurses-term.noarch                                   5.9-13.20130511.el7                      c7-media
nepomuk-core.x86_64                                   4.10.5-5.el7                             c7-media
nepomuk-core-devel.x86_64                             4.10.5-5.el7                             c7-media

这里就以经为光盘yum源了,因为其地址池以经由Base改为了c7-media。

Linux学习02---软件包管理相关推荐

  1. Linux学习16 软件包和启动项管理

    Linux学习16 软件包和启动项管理 一.RedHat/CentOS包管理 1. 包管理工具RPM (1) 简介 (2) RPM包命名规则 (3) 常用操作 使用RPM安装软件 校验 升级 卸载 2 ...

  2. 大数据与云计算学习计划 (一) 云计算系统管理 6 Linux中RPM软件包管理操作 、 Yum软件包仓库操作(概念与实操)

    大数据与云计算学习计划 (一) 云计算系统管理 6 Linux中RPM软件包管理操作 . Yum软件包仓库操作(概念与实操) 一.RPM软件包管理 1.常见软件包类型 2.RPM包文件名特征 3.RP ...

  3. Linux Command dnf 软件包管理

    Linux Command dnf 软件包管理 tags: 软件包管理 文章目录 Linux Command dnf 软件包管理 1. 简介 2. 语法 3. 安装 4. 示例 4.1 查看DNF版本 ...

  4. Alpine Linux的apk软件包管理器

    Alpine Linux的apk软件包管理器 Alpine Linux简介 apk包管理器常用 刷新源apk update 搜索包apk search 安装软件包apk add 安装指定版本软件包 查 ...

  5. centos linux 包管理,Linux和CentOS软件包管理

    Linux和CentOS软件包管理 (此处以httpd-2.2.15-56.el6.centos.3.x86_64.rpm为例)安装:# rpm-ivhhttpd-2.2.15-56.el6.cent ...

  6. Linux基础命令-软件包管理

    Linux基础命令-软件包管理 软件包管理 一.软件包基础 1. 软件运行与编译 2. 静态链接和动态链接 3. 包和包管理器 4. 包命名和工具 5. 程序包的来源 二.rpm安装 1.rpm包管理 ...

  7. Linux系统下软件包管理四

    3.其它类型软件:1)基于perl 和python 的程序的安装:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com: ...

  8. Linux中deb软件包管理怎么看,Deb软件包管理

    一.流行的两种软件包管理机制 1.Debian Linux首先提出"软件包"的管理机制--Deb软件包 将应用程序的二进制文件.配置文档.man/info帮助页面等文件合并打包在一 ...

  9. Linux系统下软件包管理六

    3.移除软件包要用到remove参数:比如:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

  10. Linux基础_软件包管理

    一,软件包管理 # 使用rpm安装及移除软件RPM 1:rpm:Red-Hat Package Manager 2:rpm文件形式 yum-metadata-parser-1.1.2-16.el6.x ...

最新文章

  1. js高级教程阅读笔记 第五章-引用类型(5.6)
  2. 黑金花大理石_黑金花 , 经典就是经典 ! 美 !
  3. 搜狗拼音输入法5.0_如何用搜狗拼音输入法输入生僻字?
  4. 少走弯路:Mac+python+opencv
  5. 在DLL Project中定义配置文件
  6. 在Qt 中如何使用OpenCV库
  7. Focal Loss 分类问题 pytorch实现代码(简单实现)
  8. EXCEL同列多个重复数值去重保留一个
  9. python处理分组_Python中的groupby分组功能的实例代码
  10. 【莫队算法】URAL - 2080 - Wallet
  11. 蝉联四年VOT冠军、发表数十篇顶会论文,卢湖川与IIAU实验室的成功之路
  12. LaTeX中插入文本框并且设置文本框底色(填充色)的方法
  13. python 64式: 第28式、分布式锁与群组管理__3、tooz应用之分布式锁
  14. chart metadata is missing these dependencies
  15. 教你利用阿里云服务器搭建一个随时随地的Web IDE
  16. 【学习记录】图片行列切割与子图行列拼接之中央裁剪法
  17. c语言解一元二次方程虚根oj,请问怎么用C语言求一元二次方程的虚根
  18. 计算机考研专业课科目834,2018考研华中科技大学834计算机专业基础综合考试大纲...
  19. 洛谷p2404 自然数的拆分
  20. 夺命雷公狗—玩转SEO---44---外链群发原理

热门文章

  1. 微信小程序 Cannot read property ‘globalData‘ of undefined
  2. E-mail营销历史
  3. Essential reading: My top 10 books (zz)
  4. gitlab卡住问题
  5. 【NIFI】1.11插入/迁移数据爬坑问题记录
  6. matlab求重心几种方法,怎么用matlab找图像的重心
  7. tlwr886n发挥最大网速_我们体验了和 5G 一样重要的 WiFi 6 技术,发现不止网速快...
  8. python用8g还是16g内存好_请问电脑内存是买8g的好还是16g的好
  9. 微观经济学与宏观经济学的区别
  10. matlab常用函数randperm——随机整数生成和随机打乱矩阵顺序