您的位置:首页 > 数码常识数码常识

Linux软件包管理(linux软件包安装命令)

2025-05-10人已围观

Linux软件包管理(linux软件包安装命令)
  软件包的安装与管理

  linux软件包安装命令

  一. rpm包

  有哪几种软件包?

  .rpm .deb(ubuntu,debian等操作系统使用的软件包)

  .src.rpm

  源码包(一般都是压缩的,tar.gz,tar.bz2,tgz)

  源码包--> .src.rpm --> .rpm

  包名-发布版本-支持平台.包类型后缀

  yum-3.2.22-20.el5.noarch.rpm

  yum-metadata-parser-1.1.2-16.el6.x86_64.rpm

  xsane-0.991-5.el5.i386.rpm --上面这三个都是rpm包

  nginx-0.8.4.tar.gz --这种包需要解压,一般是源码包

  cacti-0.8.7b-1.fc8.src.rpm --源rpm包

  i386 支持386平台,386都是支持后在的586,686的平台,但是反过来686不一定支持386,因为686rpm包它有对平台做优化,那386就不一定支持

  noarch 支持任意平台

  x86_64 64位平台

  .rpm 红帽包管理 redhat packages management

  一般开发都开发出来的软件发布为源码包,因为源码包的安装比较麻烦。redhat公司自己发明了rpm包的格式,用一种很复杂方式去源码包做成rpm包,这样的话在redhat的linux上安装比较方便。

  其它的linux发行版也有其它的包格式,还有一种用得比较广泛的包格式叫.deb(用于ubuntu和debian等linux发行版)

  32位的软件是可以安装到64位的

  64位是不能安装到32位平台

  # mkdir /yum

  # mount /soft/rhel-server-6.3-x86_64-dvd.iso /yum/ -o loop

  rhel6下的iso镜像里的目录简单介绍(不同版本会有少许差异)

  Packages --所有的软件包全在此目录(3654)

  isolinux

  images --这两目录跟系统启动有关

  Packages里的软件包分成五大类:

  (32位和64位的软件都有)

  HighAvailability --高可用

  LoadBalancer --负载均衡

  ResilientStorage --存储

  ScalableFileSystem --文件系统

  Server --服务器

  --这些目录名其实就是软件包的一个分类.目录里存放的是不同分类软件的信息(我们也叫软件仓库repository)

  RPM-GPG-KEY-redhat-release --这是所有的软件包里gpg签名名字

  rpm包管理

  # rpm -ivh zsh-4.3.10-5.el6.x86_64.rpm

  warning: zsh-4.3.10-5.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

  Preparing... ########################################### [100%]

  1:zsh ########################################### [100%]

  --这是成功安装

  # rpm -ivh zsh-4.3.10-5.el6.x86_64.rpm

  warning: zsh-4.3.10-5.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

  Preparing... ########################################### [100%]

  package zsh-4.3.10-5.el6.x86_64 is already installed

  --这是已经安装过了

  关于上面的警告信息,其实就是在说操作系统没有这个软件包相关的签名信息;你用rpm命令来安装,有没有此警告无所谓。但如果你用yum来安装,yum里一个参数为gpgcheck=0的话,则表示没签名没问题,gpgcheck=1的话,则没签名就安装不了。

  解决这问题:

  # cd /yum/

  # rpm --import RPM-GPG-KEY-redhat-release

  依赖性的问题

  # rpm -ivh scsi-target-utils-1.0.24-2.el6.x86_64.rpm

  error: Failed dependencies:

  libibverbs.so.1()(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64

  libibverbs.so.1(IBVERBS_1.0)(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64

  libibverbs.so.1(IBVERBS_1.1)(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64

  librdmacm.so.1()(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64

  librdmacm.so.1(RDMACM_1.0)(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64

  perl(Config::General) is needed by scsi-target-utils-1.0.24-2.el6.x86_64

  sg3_utils is needed by scsi-target-utils-1.0.24-2.el6.x86_64

  --这些依赖性怎么解决,如果你安装的是rhel的iso里的包,那么它的依赖包也一定在iso里(如果你是安装一个第三方的包,那么依赖性就不能保证全在iso里)

  解决的过程很艰辛,具体查找的过程就不写了,下面这是安装顺序,并且最后一句比较特殊,它是A依赖B,B又同时依赖A,要两个一起安装的一个典型例子

  例子:安装rpm -ivh xfig-plain-3.2.5-23.a.el6.x86_64.rpm这个软件的过程

  # rpm -ivh Xaw3d-1.5E-15.1.el6.x86_64.rpm

  # rpm -ivh xfig-3.2.5-23.a.el6.x86_64.rpm xfig-common-3.2.5-23.a.el6.x86_64.rpm

  # rpm -ivh xfig-plain-3.2.5-23.a.el6.x86_64.rpm

  冲突

  如果已经安装了A包的老版本,再安装A包的新版本

  报错里有conflict关键字的时候,就是冲突了,

  解决方法:

  方法一:一般来说要先干掉冲突的包,再安装新包

  方法二: rpm -ivh --force xxx.rpm来强制安装

  # rpm -ivh sg3_utils-libs-1.28-5.el6.x86_64.rpm

  file /usr/lib64/libsgutils2.so.2.0.0 from install of sg3_utils-libs-1.28-5.el6.x86_64 conflicts with file from package sg3_utils-libs-1.28-4.el6.x86_64

  但是也有特殊情况,比如我已经安装了A包,然后安装B包时,报两个包的其中一个文件冲突,怎么解决?

  方法一:把这个文件mv走,然后安装

  方法二: rpm -ivh --force xxxx.rpm 强制安装,那么这个冲突的文件会被覆盖

  方法三: rpm -ivh --nodocs xxxx.rpm 这个nodocs的参数表示不安装它的文档文件(如果你冲突的文件是一个文档的话。如果不是文档文件,则要用其它相关参数

  rpm -ivh --nodeps 脱离依赖性 但是包不一定能用,因为你少了一些依赖包的功能

  rpm -ivh --nomd5 不检验md5值

  rpm -ivh --noscripts 不想启用或者自动执行某些命令

  rpm -ivh --replacefiles 某个文件已经安装在系统上,或者冲突,可以用此参数覆盖 注意:此操作无法复原

  rpm -ivh --replacepkgs 重新安装某个已经安装过的包,比如说一个包你修改过,但不知道改在哪里,可以这样重新安装

  rpm -ivh --force 相当是强制安装,是--replacefiles和--replacepkgs

  rpm -ivh --test 测试是否能安装到此linux系统中

  rpm -qa --查看你系统上已经安装的rpm包(注意,只限于rpm包)

  # rpm -qa |grep mysql

  rpm -ql

  # rpm -ql mysql-5.1.61-4.el6.x86_64 --查看一个软件包都安装了哪些文件,从这里也可以了解到linux安装软件是把文件按功能分散到各个目录,后面的包名不用写全

  # rpm -qpl mysql-5.1.61-4.el6.x86_64.rpm --如果你一个软件包还没有安装,但你要查看一下安装会产生哪些文件分布,可以加个p参数,但后面的包名要写全

  rpm -qi mysql-5.1.61-4.el6.x86_64 --查看软件包有关信息和说明

  # rpm -qf `which mount` --查看一个文件属于哪个软件包,rpm源码包查不到

  util-linux-ng-2.17.2-12.7.el6.x86_64

  # rpm -qc postfix --查配置文件

  # rpm -e mysql-5.1.61-4.el6.x86_64 --删除一个rpm包的安装,但是删除也有依赖性.erase

  问题:使用firefox &后打开firefox失败,报错为command not found,如何解决?

  思路:

  1,报命令找不到,一般马上会想到是软件包没安装,去安装软件

  2,如果安装时报already installed,那说明,软件已经安装,但可能少了命令文件和其它一些文件

  3,最好的解决方法 rpm -ivh firefox-10.0.5-1.el6_2.x86_64.rpm --force

  二. src.rpm包

  xxx.src.rpm

  这种包是需要重编译

  rpm 源码包,根据你的硬件情况编译成适合你的系统的rpm安装包

  # rpm -qpi acl-2.2.49-6.el6.x86_64.rpm

  ......

  Source RPM: acl-2.2.49-6.el6.src.rpm --用rpm -qi查看任何rpm包都会有类似这样的一句,表示它的src.rpm包的名字

  ......

  你可以这样来理解,rpm包由src.rpm包产生,src.rpm包由源码包+.spec宏文件产生

  源码+spec --> src.rpm -- > rpm

  你现在的iso里的rpm包对应的src.rpm包都可以到redhat的ftp服务器上找到,路径为

  ftp://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS

  # ls /root/rpmbuild --此目录不存在

  # rpm -ivh zlib-1.2.3-27.el6.src.rpm

  # ls /root/rpmbuild/

  SOURCES --这个目录里就有zlib的源码包

  SPECS --这个目录里的文件就是宏文件

  编译方法一:

  # rpmbuild --ba zlib.spec --对宏文件编译成rpm包(需要源码的支持)

  Wrote: /root/rpmbuild/SRPMS/zlib-1.2.3-27.el6.src.rpm

  Wrote: /root/rpmbuild/RPMS/x86_64/zlib-1.2.3-27.el6.x86_64.rpm

  Wrote: /root/rpmbuild/RPMS/x86_64/zlib-devel-1.2.3-27.el6.x86_64.rpm

  Wrote: /root/rpmbuild/RPMS/x86_64/zlib-static-1.2.3-27.el6.x86_64.rpm

  Wrote: /root/rpmbuild/RPMS/x86_64/minizip-1.2.3-27.el6.x86_64.rpm

  Wrote: /root/rpmbuild/RPMS/x86_64/minizip-devel-1.2.3-27.el6.x86_64.rpm

  Wrote: /root/rpmbuild/RPMS/x86_64/zlib-debuginfo-1.2.3-27.el6.x86_64.rpm

  --编译完后,在倒数几行那都有类似上面的信息,可以看到已经编译成了rpm包了

  编译方法二:

  # rpmbuild --rebuild zlib-1.2.3-27.el6.src.rpm --直接对src.rpm包编译出rpm包,结果与上面方法一样

  两种方法对较:

  第二种就是不需要对宏文件进行修改,直接编就可以

  第一种就是你可以按自己的需求对宏文件进行修改,再编

  问题:

  如果你要在你的linux上安装一个第三方的软件,你希望下载一个rpm包来安装,如果你在http:///opensource/ntfs-3g_ntfsprogs-2014.2.15.tgz

  fuse-2.7.1.tar.gz -- file system in user space,就是一个文件系统的挂载模块

  ntfs-3g_ntfsprogs-2014.2.15.tgz --让linux支持ntfs格式挂载的一个软件包

  问题:

  linux支持ntfs吗?

  linux内核是支持的,只不过rhel内核没有加上这个功能,因为rhel没有必要去支持ntfs这种文件系统,实际环境里面也不可能有这种需求。但学习环境还是可能用到,因为有人要用ntfs格式的移动硬盘与linux拷数据

  解决方法:

  第一:编译内核

  第二:找第三方软件,安装上来支持

  一般安装一个源码的步骤

  1,最好先看readme或install文件找到它的安装说明

  2,http://sjzlt.cn/shuma/configure --这个命令后可接各种不同的参数,这些参数就代表了你要加哪些功能。今天不讨论其它参数,只讨论一个 --prefix=/path ,指定安装路径

  3,make --这个命令的执行时间比较长(以软件大小而异),它就相当于是按照你定义好参数的把这个软件做出来

  4,make install --是把做好的软件安装到你指定的目录(这个指定参数也是在http://sjzlt.cn/shuma/configure里可以去改的)

  tar xf fuse-2.7.1.tar.gz -C /usr/src/ --这条命令是把这个源码包解压到/usr/src

  # cd /usr/src/fuse-2.7.1/

  # http://sjzlt.cn/shuma/configure

  # make

  # make install

  # modprobe fuse --把安装好的模块加载 在rhel6.3下测试的是自带了fuse模块,也就是说你可以不用装这个软件,直接去装下面的软件就可以支持ntfs了

  # tar xf /soft/ntfs-3g_ntfsprogs-2014.2.15.tgz -C /usr/src/

  # cd /usr/src/ntfs-3g_ntfsprogs-2014.2.15/

  # http://sjzlt.cn/shuma/configure

  # make

  # make install

  # which mount.ntfs-3g --安装完后,有此命令就表示成功了

  /sbin/mount.ntfs-3g

  用此命令去挂载ntfs文件系统的用法

  # mount.ntfs-3g /dev/sdxx /mnt

  对ldconfig的讨论

  在fuse源码里的readme文件里有这么一句

  You may also need to add '/usr/local/lib' to '/etc/ld.so.conf' and/or

  run ldconfig.

  先理解什么是库文件

  # ldd /bin/ls --库可以理解成运行程序需要的功能(类似windows里的.dll文件),此命令就是查看ls命令需要使用哪些库,这些库缺一不可

  linux-vdso.so.1=> (0x00007fffc79ff000)

  libselinux.so.1=> /lib64/libselinux.so.1 (0x0000003d12200000)

  librt.so.1=> /lib64/librt.so.1 (0x0000003d11600000)

  libcap.so.2=> /lib64/libcap.so.2 (0x0000003d14200000)

  libacl.so.1=> /lib64/libacl.so.1 (0x0000003511800000)

  libc.so.6=> /lib64/libc.so.6 (0x0000003d10a00000)

  libdl.so.2=> /lib64/libdl.so.2 (0x0000003d10600000)

  /lib64/ld-linux-x86-64.so.2 (0x0000003d10200000)

  libpthread.so.0=> /lib64/libpthread.so.0 (0x0000003d10e00000)

  libattr.so.1=> /lib64/libattr.so.1 (0x0000003d1f200000)

  我安装fuse这个软件,它的库文件默认会安装到 $PREFIX/lib,所以它会安装到/usr/local/lib.

  但如果另一个软件要用到fuse相关的库,那么它能否找到/usr/local/lib下的库文件呢?

  默认系统只会找/lib/,/lib64/,/usr/lib/,/usr/lib64这几个目录,所以/usr/local/lib你可以加到ldconfig里,让别人要使用你的库的时候能够找到你的位置

  # vim /etc/ld.so.conf.d/fuse.conf --在此子目录里建立一个自定义的名,只要以.conf结尾就可以,加上你的库的目录路径

  /usr/local/lib

  # ldconfig --保存后,使用此命令让它生效

  源版包的删除,直接rm -rf 删除它所有的相关文件就行了

  上面就是小居数码小编今天给大家介绍的关于(linux软件包安装命令)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。

  94%的朋友还想知道的:

  操作简单1行命令1秒搞定(如何批量修改文件名称后缀格式)

  excel中整数取整函数是什么命令(excel取整函数怎么用)

  autocad怎么标注尺寸快捷键(cad尺寸标注的快捷命令)

  word快捷键命令大全表(word快捷键有哪些)



  152412
 

很赞哦! ()

随机图文