服务器学习心得


rpm

<h2>简介</h2> <ul> <li>RPM Package Manager(RPM软件包管理器),又叫二进制包</li> <li>这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的, <ul> <li>现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。</li> </ul></li> <li>二进制包经过编译,机器可以识别的二进制,由0和1组成的包。 <ul> <li>二进制源代码编译后,就不能看到原来的代码了。</li> </ul></li> <li>Linux操作系统CentOS版本,为系统默认安装的软件包,格式为RPM。</li> </ul> <h2>rpm包命名原则</h2> <ul> <li> <p>查看一些RPM安装包</p> <ul> <li>如CentOS的镜像文件,用压缩软件打开,进入到Packages中</li> </ul> </li> <li> <p>包的组成</p> <ul> <li> <p>软件包名-软件版本-软件发布的次数.适合的Linux平台.适合的硬件平台.扩展名</p> </li> <li>如:httpd-2.2.15-15.el6.centos.i686.rpm</li> </ul> <pre><code class="language-shell">httpd 软件包名 2.2.15 软件版本 15 软件发布的次数 el6.centos 适合的Linux平台 i686 适合的硬件平台 rpm rpm包扩展名</code></pre> </li> <li> <p>包名与包全名</p> <ul> <li>操作的对象是未安装包,那么必须使用包全名,而且要使用绝对路径</li> <li>操作的对象是已经安装的包,那么必须使用包名,但是任何路径都可以执行</li> </ul> </li> </ul> <h2>rpm包依赖性</h2> <ul> <li>rpm命令手工安装出现的问题 <ul> <li>是PRM包依赖性</li> <li>树形依赖</li> <li>a-&gt;b-&gt;c</li> <li>环形依赖</li> <li>a-&gt;b-&gt;c-&gt;a</li> <li>模块依赖</li> <li>模块依赖查询网站:www.rpmfind.net</li> <li>如果电脑不能上网,只能去猜PRM包依赖于哪个包了,猜不出来,就不能安装 </li> </ul></li> <li>rpm命令手工安装出现的依赖性解决方法,是yum在线安装</li> </ul> <h2>rpm命令</h2> <h4>安装</h4> <pre><code class="language-shell">rpm -ivh 包全名(绝对路径) # 如:rpm -ivh httpd-2.2.3-43.el5.centos.i386.rpm # -i(install) 安装 # -v(verbose) 显示详细信息 # -h(hash) 显示进度 # --nodeps 不检测依赖性,安装时禁止使用此选项,否则安装的包不能使用</code></pre> <h4>升级</h4> <pre><code class="language-shell">rpm -Uvh 包全名 # -U(upgrade)</code></pre> <ul> <li>升级过程和安装过程一样,甚至用升级过程取代安装过程,也是没有问题的</li> </ul> <h4>卸载</h4> <pre><code class="language-shell">rpm -e 包名 # 如:rpm -e httpd # -e(erase) 包名 # --nodeps 不检查依赖性</code></pre> <ul> <li> <p>执行卸载时,不需要在安装的目录下执行了</p> <ul> <li>输入包名即可,相关安装数据,以经写入数据库中,卸载时会自动从数据库中查询</li> <li>卸载完成,没有卸载成功提示</li> </ul> </li> <li> <p>Apache全部卸载完成的原因</p> <ul> <li> <p>树形依赖 a-&gt;b-&gt;c</p> </li> <li> <p>正常要先卸载a包,再卸载b包,再卸载c包的顺序</p> </li> <li> <p>没有包依赖于Apache,Apache只依赖于其它包</p> </li> <li>Apache属于树形依赖的最顶层,a包</li> </ul> </li> </ul> <h4>查询</h4> <ul> <li> <p>查询是否安装</p> <pre><code class="language-shell"># -q 查询(query) rpm -q 包名 # =-a 所有(all) rpm -qa # 管道方式查询 rpm -qa | grep httpd </code></pre> </li> <li> <p>查询软件包详细信息</p> <ul> <li>-i 查询软件信息(information)</li> <li>-p 查询未安装包信息(package)</li> <li>rpm -qi 包名</li> <li>前提是生产包的时候,经以把信息写入包中了</li> </ul> </li> <li> <p>查询包中文件安装位置</p> <ul> <li>-l 列表(list)</li> <li>rpm -ql 包名</li> <li>rpm安装位置也可以手工指定</li> <li>但会出现相关问题,很多功能搜索位置都是固定</li> <li>不建议手工指定rpm文件安装位置</li> </ul> </li> <li> <p>查询系统文件属于哪个rpm包</p> <ul> <li>-f 查询系统文件属于哪个软件包(file)</li> <li>rpm -qf 系统文件名</li> <li>如:rpm -qf /etc/yum.conf</li> </ul> </li> <li> <p>查询软件包的依赖性</p> <ul> <li> <p>-R 查询软件包的依赖性(require)</p> </li> <li>rpm -qR 包名</li> </ul> </li> </ul> <h4>校验</h4> <ul> <li>判断系统文件是否被人更改</li> <li>rpm -V 已安装的包名</li> <li>-V 校验指定RPM包中的文件(verify)</li> <li>如果没有被改动过,执行完没有提示信息</li> <li>文件改动提示 <ul> <li>S.5....T. c /etc/httpd/conf/httpd.conf</li> <li>验证内容中的信息,默认8个字符</li> <li>S 文件内容大小是否改变</li> <li>M 文件的类型或文件的权限(rwx)是否被改变</li> <li>5 文件MD5校验和是否改变(可以看成文件内容是否改变)</li> <li>D 设备的中,从代码是否改变</li> <li>L 文件路径是否改变</li> <li>U 文件的属主(所有者)是否改变</li> <li>G 文件的属组是否改变</li> <li>T 文件的修改时间是否改变</li> </ul></li> <li>如果出现用&quot;.&quot;点代表,表示没有修改</li> <li>文件类型 <ul> <li>c 配置文件(config file)</li> <li>d 普通文件(documentation)</li> <li>g &quot;鬼&quot;文件(ghost file),很少风,就是该文件不应该被这个RPM包包含</li> <li>l 授权文件(license file)</li> <li>r 描述文件(read me)</li> </ul></li> </ul> <h2>提取</h2> <ul> <li> <p>误删除linux系统中的某个文件,知道此文件属于哪个软件包</p> <ul> <li>从此包提取出指定文件,进行覆盖,即可修复错误,而不用重新安装linux系统</li> </ul> </li> <li> <p>进行修复,最常见就是误删除操作,删除了某个命令</p> </li> <li> <p>rpm2cpio 包全名 | \ cpio -idv .文件绝对路径 </p> <ul> <li> <p>rpm2cpio 将rpm包转换为cpio格式命令</p> </li> <li> <p>cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件</p> </li> <li> <p>2 由于2是英文two的意思,而two又和to发音一样</p> </li> <li> <p>cpio命令格式</p> </li> <li>-i copy-in模式,还原</li> <li>-d 还原时自动新建目录</li> <li>-v 显示还原过程</li> <li> <p>cpio 选项 &lt;文件|设备&gt;</p> </li> <li>\ 反斜杠代表,一条命令没有输入完,进行换行</li> <li>cpio -idv 代表当前目录</li> <li>. 点代表,把指定文件提取到当前位置下 <ul> <li>一般情况,.文件绝对路径,都要放在当前位置当中,作为标准格式记录下来</li> </ul></li> </ul> </li> <li> <p>实例</p> <pre><code class="language-shell">rpm -qf /bin/ls # 查询ls命令属于哪个软件包 # 查询所属包为coreutils-8.4-31.el6.i686 mv /bin/ls /tmp # 造成ls命令误删除假象 # 此时再输入ls命令出现提示 -bash: ls: command not found rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-31.el6.i686.rpm | cpio -idv ./bin/ls # 提取RPM包中ls命令到当前目录的/bin/ls下 # 成功会出现提示信息 # ./bin/ls # 24819 块 # 输入ls命令,测试ls命令是否能够使用 # 如果ls命令不能使用,输入dir命令 # dir /tmp 可以看到tmp目录下有ls文件 cp /tmp/ls /bin/ # 把ls命令复制到/bin/目录,修复丢失的文件 # 再次测试ls命令,输入ls命令,如果ls命令可以使用,提取成功</code></pre> </li> </ul> <h2>rpm安装实例</h2> <ul> <li> <p>使用mount命令,查看光盘是否挂载</p> <ul> <li>如果光盘没有挂载,请挂载</li> <li>进入到挂载的目录</li> <li>如之前光盘挂载为/mnt/cdrom</li> </ul> </li> <li> <p>进入到当前目录Packages</p> <ul> <li> <p>如果不进入到此目录下进行安装包的话</p> </li> <li>安装路径需要写绝对路径,包全名</li> <li> <p>进入此目录后,安装写相对路径就行,包名即可</p> </li> <li> <p>安装时,建议进入到要安装的目录中</p> </li> <li>安装方便,使用相对路径,包名即可</li> <li> <p>支持包名自动补全功能</p> <ul> <li>输入包名的前几个字符</li> <li>按Tab键,会列出含有输出字符的包名</li> </ul> </li> <li> <p>如果使用Tab键自动补全功能,拿安装包名举例</p> </li> <li> <p>rpm -ivh http</p> </li> <li> <p>按一下Tab键,会提示显示软件包名</p> <pre><code class="language-shell">rpm -ivh httpd-</code></pre> </li> <li> <p>所然后再两下Tab键,会提示显示软件包名和所有包含输入字符的包名</p> <pre><code class="language-shell">rpm -ivh httpd- httpd-2.2.15-29.el6.centos.i686.rpm httpd-devel-2.2.15-29.el6.centos.i686.rpm httpd-manual-2.2.15-29.el6.centos.noarch.rpm httpd-tools-2.2.15-29.el6.centos.i686.rpm</code></pre> </li> <li> <p>安装时,一般先安装主包,再安装附加包</p> <ul> <li> <p>先安装httpd-2.2.15-29.el6.centos.i686.rpm主包</p> </li> <li>再安装</li> </ul> <pre><code class="language-shell">httpd-devel-2.2.15-29.el6.centos.i686.rpm httpd-manual-2.2.15-29.el6.centos.noarch.rpm httpd-tools-2.2.15-29.el6.centos.i686.rpm</code></pre> </li> </ul> </li> </ul>

页面列表

ITEM_HTML