RPM包常用参数,rpm -qc 显示nginx配置文件的打包方法探索。,%config(noreplace)   /usr/local/nginx/conf/nginx.conf。

jackxiang 2008-7-17 16:32 | |
背景:经blockips实践%config(noreplace) /usr/local/nginx/conf/blockips.conf,在安装时有/usr/local/nginx/conf/blockips.conf,不会覆盖原来的,而是新起文件名:/usr/local/nginx/conf/blockips.conf.rpmnew ,在删这个rpm包时,rpm -e blockips 会将原来的没有被覆盖的文件/usr/local/nginx/conf/blockips.conf挪动为:/usr/local/nginx/conf/blockips.conf.rpmsave 。也就是说安装时不覆盖,生成新文件.rpmnew,卸载时那个安装时没有覆盖的文件挪动为.rpmsave。
[实践OK]blockips打包里实践得出来的。还发现如果和即将安装的一样的时候,是不会作上述重命名的,直接就安装上了,也就是说安装前做了比对操作!
实践也证明了上面的一个情况,一是noreplace会比对不一样给生成新的.rpmnew,卸载RPM包时会将原来没覆盖的文件给挪为.rpmsave,如果相同则直接覆盖,不做前面这些操作。
#rpm -ihv blockips-1.0.0-220622153009.el7.x86_64.rpm
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:blockips-1.0.0-220622153009.el7  ################################# [100%]
警告:/usr/local/nginx/conf/blockips.conf 已建立为 /usr/local/nginx/conf/blockips.conf.rpmnew
警告:/usr/local/nginx/conf/vhosts/blockipsvc.conf 已建立为 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmnew

rpm -e blockips
警告:/usr/local/nginx/conf/vhosts/blockipsvc.conf 已另存为 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmsave
警告:/usr/local/nginx/conf/blockips.conf 已另存为 /usr/local/nginx/conf/blockips.conf.rpmsave

ls -1 /usr/local/nginx/conf/blockips.conf.rpm*
/usr/local/nginx/conf/blockips.conf.rpmnew   #rpm包安装时发现同名配置,给安装包里的重新命名为.rpmnew
/usr/local/nginx/conf/blockips.conf.rpmsave   #卸载rpm包前因文件名内容不一样没有被覆盖的文件给重新命令为.rpmsave

ls -1 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpm*
/usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmnew
/usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmsave


上面的实践来源:https://jackxiang.com/post/11406/  

In addition to the marked directories, the standard Linux documentation directories, such as /usr/share/man, are automatically assumed to be documentation directories.
Similar to the %doc directive, the %config directive marks a file as configuration. For example:
%files
/sbin/ypbind
%config /etc/rc.d/init.d/*
%config /etc/yp.conf
%doc README NEWS
A special option to the %config directive, noreplace, tells RPM not to overwrite, or replace a configuration file. For example:
%files
/sbin/ypbind
%config /etc/rc.d/init.d/*
%config(noreplace) /etc/yp.conf
%doc README NEWS
Use this option to help protect local modifications. If you use %config(noreplace), the file will not overwrite an existing file that has been modified. If the file has not been modified on disk, the rpm command will overwrite the file. But, if the file has been modified on disk, the rpm command will copy the new file with an extra file-name extension of .rpmnew.
Similarly, %config(missingok) means that the file does not have to exist on disk. You can use this modifier for files or links that are created during the %post scripts but will need to be removed if the package is removed.
Another special modifier, %ghost, tells the rpm command that the file should not be included in the package. You can use this to name the needed attributes for a file that the program, when installed, will create. For example, you may want to ensure that a program’s log file has certain attributes.

From:https://docs.fedoraproject.org/ro/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s05s03.html



强制删除所有rpm包:
rpm -qa|awk '{print "rpm -e " $0 " --allmatches --nodeps"}'|sh

RPM包常用参数 (备忘用)

1.安装一个包
# rpm -ivh

2.升级一个包
# rpm -Uvh

3.移走一个包
# rpm -e

4.安装参数
--force 即使覆盖属于其它包的文件也强迫安装
--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。

5.查询一个包是否被安装
# rpm -q < rpm package name>

6.得到被安装的包的信息
# rpm -qi < rpm package name>

7.列出该包中有哪些文件
# rpm -ql < rpm package name>

8.列出服务器上的一个文件属于哪一个RPM包
#rpm -qf

9.可综合好几个参数一起用
# rpm -qil < rpm package name>

10.列出所有被安装的rpm package
# rpm -qa

11.列出一个未被安装进系统的RPM包文件中包含有哪些文件?
# rpm -qilp < rpm package name>


一些比较生僻的rpm命令- -
                                      
--percent
使用参考:
rpm -i --percent nmap-3.00-4.i386.rpm
用途:
将显示安装的百分比

-h or --hash
使用参考:
rpm -i --hash nmap-3.00-4.i386.rpm
用途:
在大文件安装比较友好,你可以不用怀疑是否机器出毛病了,可知道具体做到哪里.

-vv [for -i option]
使用参考:
rpm -i -vv nmap-3.00-4.i386.rpm
用途:
可以在安装的过程获得更多的信息

--excludedocs
使用参考:
rpm -i --excludedocs nmap-3.00-4.i386.rpm
用途:
将不安装DOC文档, 也就是说你在/usr/share/doc/目下下将没有 nmap-3.00的文档目录. 这在需要斤斤计较安装包所需要的空间比较有用,比如说你在做路由器?

--includedocs
使用参考:
rpm -i --includedocs nmap-3.00-4.i386.rpm
用途:
指定必需安装随包发送的文档

--replacepkgs
使用参考:
rpm -i --replacepkgs nmap-3.00-4.i386.rpm
用途:
即使该包已经安装了,还是强制再次安装一遍 .

--replacefiles
使用参考:
rpm -i --replacefiles nmap-3.00-4.i386.rpm
用途:
即使该包会覆盖一些别的包的文件,也继续安装

--force
使用参考:
rpm -i --force nmap-3.00-4.i386.rpm
用途:
忽略包和文件的冲突,强制安装

--noscripts
使用参考:
rpm -i --noscripts vsftpd
用途:
不执行vsftpd.spec 文件内的 %pre 和 % post脚本
例如: [%pre]
%prep
%setup -q -n %{name}-%{version}
%patch1 -p1 -b .rh
%patch2 -p1 -b .mok
cp %{SOURCE1} .
例如 : [%post]
%post
/sbin/chkconfig --add vsftpd
/usr/sbin/usermod -d /var/ftp ftp >/dev/null 2>&1 || :

--prefix <path>
使用参考:
rpm -i --prefix /tmp/local nmap-3.00-4.i386.rpm
用途:
使该包不安装到默认目录,而是安装到你指定的目录

--ftpproxy
使用参考:
rpm -i --ftpproxy <Proxy IP address> ftp://ftp.gnomovision.com/pub/rpms/...-1.0-1.i386.rpm

用途:
当你需要通过INTERNET 的FTP直接安装该包的时候,公司的局域网有限制,需要用FTP代理才能访问FTP,那么就应该使用该参数

--ftpport <port>
使用参考:
rpm -i --ftpport <port> ftp://ftp.gnomovision.com/pub/rpms/...-1.0-1.i386.rpm
用途:
当你需要指定特定的端口号时需要使用

如何查询Red Hat 提供的包信息?
先安装一个RPM 包:
rpm -ivh rpmdb-redhat-version.i386.rpm

这个包是redhat的系统生产时附带的rpm包. 你可以通过这个数据包来查看某个特定的文件是由哪个包来提供的,这样可以解决一些包倚赖的问题.

举例说, 当你安装某个包时,出错,说缺少了libX11.so.6, 而你不知道哪个包提供这个文件的,那么可这样做:
rpm --redhatprovides libX11.so.6

--oldpackage
使用参考:
rpm -U --oldpackage packagename-oldversion.rpm
用途:
安装了一个包的更高版本,然后发现该版本有问题? 你更愿意回到低的版本? 没问题,可以"升级"到低的版本.

在RPM中查询更多的游泳信息? 那么应该充分挖掘更多的参数. IT's very powerfull!

--whatprovides
使用参考:
rpm -q --whatprovides /etc/httpd
用途:
查询系统中某个文件,某个目录,某个模块是由哪个包提供的.

--whatrequires
使用参考:
rpm -q --whatrequires module-info

用途:
查询系统中某个文件,某个目录,某个模块是哪个包需要的

-g
使用参考:
rpm -qg Base
用途:
查询属于某个组的包

-d
使用参考:
rpm -qdcf /sbin/dump
用途:
查询某个命令所属的包中相关联的所有已经被安装到系统的文档, 如果你碰到某个命令不知道是什么东西,想找它的参考文档,那么这个命令比较有用

--dump
使用参考:
rpm -ql --dump sendmail
用途:
想知道这个包安装完的所有情况? 包括所有的文件大小?目录位置?所有文件最后被修改的时间?所有文件的owner? group?....可以用这个参数.

--scripts
使用参考:
rpm -q --scripts XFree86
用途:
想看看RPM安装某个包前需要做什么? 安装完做什么? 用这个参数

某些特别的例子.关于查询

-qcf
使用参考:
rpm -qcf /bin/bash
用途:
用于获得某个包的配置文件及其具体位置

-qpil
使用参考:
rpm -qpil nmap-3.00-4.i386.rpm
用途:
查看某个未安装的RPM包的信息

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1148/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2022-6-22 16:00
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]