当前位置: 首页 > 科技观察

【分享】RedHatLinux包管理面试心得

时间:2023-03-12 10:36:36 科技观察

Linux面试题关于RPM《大家好!我是来自德里的ShilpaNair,刚毕业不久,正在找实习机会。大学初期一直很喜欢“我从小就接触UNIX,所以我希望这次面试机会适合我,满足我的兴趣。我被问了很多问题,其中大部分是关于RedHat包管理的基础知识。”本文中的所有问题和答案均由ShilpaNair根据记忆重写。以下是我被问到的问题和相应的答案。我只贴了RedHatGNU/Linux包管理相关的,问的最多。1、Linux下如何查看某个包是否安装?假设您需要确保安装了“nano”,您该怎么做?答:为了确认是否安装了nano包,我们可以使用带有-q和-a选项的rpm命令来查询所有已安装的包#rpm-qanano或#rpm-qa|grep-inanonano-2.3.1-10.el7.x86_64同时包名必须是完整的,不完整的包名会返回提示不打印任何东西,也就是说包(不完整的包名称)未安装。下面的例子会更容易理解:我们通常使用vim而不是vi命令。那时候如果我们搜索安装包vi/vim,在标准输出上是看不到任何结果的。#vi#vim尽管如此,我们还是可以像上面那样运行vi/vim命令,就可以清楚的知道包是否安装了。我们找不到它只是因为我们不知道它的完整包名。如果我们不知道完整的文件名,我们可以使用通配符:#rpm-qavim*vim-minimal-7.4.160-1.el7.x86_64这样我们可以得到任何包的信息,安装没有。2.如何使用rpm命令安装XYZ软件包?答:我们可以使用rpm命令来安装任何包(*.rpm),如下,选项-i(安装)、-v(详细或显示附加信息)和-h(安装过程中,打印#显示进度).#rpm-ivhpeazip-1.11-1.el6.rf.x86_64.rpmPreparing...##################################[100%]正在更新/安装...1:peazip-1.11-1.el6.rf##################################[100%]如果你想升级一个早期版本的包,你应该添加-U选项,选项-v和-h可以确保我们得到由#表示的冗余输出标志,这增加了可靠性的可读性。3.你已经安装了一个包(比如说httpd),现在你想查看这个包创建和安装的所有文件和目录,你会怎么做?答:使用选项-l(列出所有文件)和-q(查询)列出httpd包安装的所有文件(Linux哲学:都是文件,包括目录)。#rpm-qlhttpd/etc/httpd/etc/httpd/conf/etc/httpd/conf.d...4.如果要删除一个名为postfix的包。你会怎么做?答:首先我们需要知道postfix安装了什么包。找到安装postfix的包名后,使用-e(擦除/卸载包)和-v(详细输出)这两个选项。#rpm-qapostfix*postfix-2.10.1-6.el7.x86_64然后删除postfix,如下:#rpm-evpostfix-2.10.1-6.el7.x86_64Preparingpackages...postfix-2:3.0.1-2.fc22.x86_645。获取有关已安装包的特定信息,例如版本、发行号、安装日期、大小、摘要和简短描述。答:我们可以使用rpm选项-qi后跟包名来获取有关已安装包的特定信息。例如,为了得到openssh包的具体信息,我需要做的就是:#rpm-qiopenssh[root@tecminttecmint]#rpm-qiopensshName:opensshVersion:6.8p1Release:5.fc22Architecture:x86_64InstallDate:2015年5月28日星期四下午12:34:50IST组:应用程序/Internet大小:1542057许可证:BSD...6。如果不确定某个包的配置文件在哪里,比如httpd.你如何找到所有httpd提供的配置文件的列表和位置。答:我们需要通过选项-c传递包名,这将列出所有配置文件名及其位置。#rpm-qchttpd/etc/httpd/conf.d/autoindex.conf/etc/httpd/conf.d/userdir.conf/etc/httpd/conf.d/welcome.conf/etc/httpd/conf.modules。d/00-base.conf/etc/httpd/conf/httpd.conf/etc/sysconfig/httpd同样,我们可以列出所有相关的文档文件如下:#rpm-qdhttpd/usr/share/doc/httpd/ABOUT_APACHE/usr/share/doc/httpd/CHANGES/usr/share/doc/httpd/LICENSE...我们还可以列出所有相关的证书文件如下:#rpm-qLopenssh/usr/share/licenses/openssh/LICENCE忘记了指定上面的选项-d和-L分别表示“文档”和“证书”,抱歉。#p#7。你在'/usr/share/alsa/cards/AACI.conf'找到了一个配置文件,现在你不确定这个文件属于哪个包。你如何查找包名称?答:安装包时,相关信息存储在数据库中。所以使用选项-qf(-f查询包所拥有的文件)很容易追踪到谁提供了上述包。#rpm-qf/usr/share/alsa/cards/AACI.confalsa-lib-1.0.28-2.el7.x86_64同样我们可以查找(谁提供的)关于任何子包、文档和证书文件的信息。8.如何使用rpm查找最近安装的软件列表?答:正如刚才所说,每个安装的文件都记录在数据库中。因此,通过查询rpm数据库找到最近安装的软件列表并不难。我们通过运行下面带有选项-last的命令(打印出最近安装的软件)来做到这一点。#rpm-qa--last上面的命令将打印出所有已安装的软件,最近安装的软件位于列表的顶部。如果我们想找到一个特定的包,我们可以使用grep命令从列表中匹配包(假设是sqlite),就像这样简单:#rpm-qa--last|grep-isqlitesqlite-3.8.10.2-1.fc22.x86_64Thursday18June201505:05:43PMIST我们还可以获得最近安装的10个软件的列表,就像:#rpm-qa--last|head我们可以重新定义它,输出想要的结果,简单如下:#rpm-qa--last|head-n2上面命令中,-n代表数字,后面跟一个常数值。此命令用于打印最近安装的2个软件的列表。9.在安装一个包之前,如果你想检查它的依赖关系。你会怎么做?答:要检查rpm包(XYZ.rpm)的依赖关系,我们可以使用选项-q(查询包)、-p(指定包名称)和-R(查询/列出包所依赖的包,好吧,这是依赖关系)。#rpm-qpRgedit-3.16.1-1.fc22.i686.rpm/bin/sh/usr/bin/envglib2(x86-32)>=2.40.0gsettings-desktop-schemasgtk3(x86-32)>=3.16gtksourceview3(x86-32)>=3.16gvfslibX11.so.6...10.rpm是前端包管理工具吗?答:不!rpm是基于RPM的Linux发行版的后端管理工具(此处为RedhatPackageManagement)。YUM是YellowdogUpdaterModified的缩写,是RPM的前端工具。YUM命令会自动执行所有操作,包括解决依赖关系和其他所有操作。最近,DNF(YUM命令升级)在Fedora22版本中取代了YUM。虽然YUM仍然可以在RHEL和CentOS平台上使用,但我们也可以安装dnf来与YUM命令共存。据说DNF比YUM有很多改进。了解更多总是好的,让自己保持更新。现在我们转到前端部分来谈谈。11.如何列出系统中所有可用的仓库。答:只需使用以下命令,我们就可以列出系统上所有可用的存储库。#yumrepolist或#dnfrepolist最后一次元数据过期检查执行时间为0:30:03前,2015年6月22日星期一16:50:00.repoid回购名称status*fedoraFedora22-x86_6444,762ozonosOzonOS61*update2sFedora存储库2-x86_64-更新上面的命令只会列出可用的存储库。如果您需要列出所有可用或不可用的存储库,请这样做。#yumrepolistall或#dnfrepolistallLastmetadataexpirationcheckperformed0:29:45agoonMonJun2216:50:002015.repoidreponamestatus*fedoraFedora22-x86_64enabled:44,762fedora-debuginfoFedora22-x86_64-调试disabledfedora-sourceFedora22-启用OzonOS的源disabledozonos存储库:61*更新Fedora22-x86_64-启用更新:5,018updates-debuginfoFedora22-x86_64-更新-Debug12。您如何列出系统上所有可用的和已安装的软件包?回答:要列出系统上所有可用的包,我们可以这样做:#yumlistavailable或#dnflistavailablelastmetadataexpirationcheckperformed0:34:09agoonMonJun2216:50:002015.AvailablePackages0ad.x86_640.0.18-1.fc22软呢帽0ad-data.noarch0.0.18-1.fc22软呢帽0install.x86_642.6.1-2.fc21软呢帽0xFFFF.x86_640.3.9-11.fc22fedora2048-cli.x86_640.9-4.git20141214.723738c.fc22fedora2048-cli-nocurses.x86_640.9-4.git20141214.723738c.fc22fedora....并列出所有已安装的包,我们可以做#yumlistinstalledor#dnflistinstalledLastmetadataexpirationcheckperformed0:34:30agoonMonJun2216:50:002015.InstalledPackagesGeoIP.x86_641.6.5-1.fc22@SystemGeoIP-GeoLite-data.noarch2015.05已安装-1.fc22@SystemNetworkManager.x86_641:1.0.2-1.fc22@SystemNetworkManager-libnm.x86_641:1.0.2-1.fc22@Systemaajohan-comfortaa-fonts.noarch2.004-4。fc22@System....#p#当我们想同时满足两个需求时,可以这样做。#yumlistor#dnflistLastmetadataexpirationcheckperformed0:32:56agoonMonJun2216:50:002015.InstalledPackagesGeoIP.x86_641.6.5-1.fc22@SystemGeoIP-GeoLite-data.noarch2015.05-1.fc22@SystemNetworkManager.x86_641:1.0.2-1.fc22@SystemNetworkManager-libnm.x86_641:1.0.2-1.fc22@Systemaajohan-comfortaa-fonts.noarch2.004-4.fc22@Systemacl.x86_642.2.52-7.fc22@系统....13。您将如何使用YUM或DNF在系统上分别安装和升级一个软件包和一组软件包?答:要安装一个包(假设是nano),我们可以这样做,#yuminstallnano而要安装一组包(假设是Haskell),我们可以这样做,#yumgroupinstall'haskell'升级一个包(或nano),我们可以这样做,#yumupdatenano并更新一组软件包(仍然是haskell),我们可以这样做,#yumgroupupdate'haskell'14.你如何将系统上所有已安装的软件同步到稳定版?答:我们可以按如下方式将系统(假设是CentOS或Fedora)上的所有软件包发布到稳定版本,#yumdistro-sync[onCentOS/RHEL]或#dnfdistro-sync[onFedora20之后的版本]似乎来吧你在面试前做了相当多的功课,干得好!在进一步讨论之前,我想问一两个问题。15.你熟悉YUM本地仓库吗?您是否尝试过设置本地YUM存储库?让我们简要看看如何设置本地YUM存储库。答:首先感谢您的夸奖。回到问题,我必须承认我对本地YUM存储库非常熟悉,并且出于测试目的将它们部署在我的本地主机上。(1)为了搭建本地YUM仓库,我们需要安装以下三个包:#yuminstalldeltarpmpython-deltarpmcreaterepo(2)新建目录(假设为/home/$USER/rpm),然后复制将RedHat/CentOSDVD上的RPM包放到这个文件夹下#mkdir/home/$USER/rpm#cp/path/to/rpm/on/DVD/*.rpm/home/$USER/rpm(3)新建一个基本库头文件如下。#createrepo-v/home/$USER/rpm(4)在/etc/yum.repo.d路径下创建.repo文件(如abc.repo):cd/etc/yum.repos.d&&cat<