Shilpa Nair 刚于2015年毕业。她之后去了一家位于 Noida,Delhi 的国家新闻电视台,应聘实习生的岗位。在她去年毕业季的时候,常逛 Tecmint 寻求作业上的帮助。从那时开始,她就常去 Tecmint。

有关 RPM 方面的 Linux 面试题

所有的问题和回答都是 Shilpa Nair 根据回忆重写的。

“大家好!我是来自 Delhi 的Shilpa Nair。我不久前才顺利毕业,正寻找一个实习的机会。在大学早期的时候,我就对 UNIX 十分喜爱,所以我也希望这个机会能适合我,满足我的兴趣。我被提问了很多问题,大部分都是关于 RedHat 包管理的基础问题。”

下面就是我被问到的问题,和对应的回答。我仅贴出了与 RedHat GNU/Linux 包管理相关的,也是主要被提问的。

1,Linux 里如何查找一个包安装与否?假设你需要确认 ‘nano’ 有没有安装,你怎么做?

回答:为了确认 nano 软件包有没有安装,我们可以使用 rpm 命令,配合 -q 和 -a 选项来查询所有已安装的包

#rpm-qanano

#rpm-qa|grep-inano

nano-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-ivh peazip-1.11-1.el6.rf.x86_64.rpm

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

Updating/installing...

1:peazip-1.11-1.el6.rf################################# [100%]

如果要升级一个早期版本的包,应加上 -U 选项,选项 -v 和 -h 可以确保我们得到用 # 号表示的冗余输出,这增加了可读性。

3. 你已经安装了一个软件包(假设是 httpd),现在你想看看软件包创建并安装的所有文件和目录,你会怎么做?

回答:使用选项 -l(列出所有文件)和 -q(查询)列出 httpd 软件包安装的所有文件(Linux 哲学:所有的都是文件,包括目录)。

#rpm-ql httpd

/etc/httpd

/etc/httpd/conf

/etc/httpd/conf.d

...

4. 假如你要移除一个软件包,叫 postfix。你会怎么做?

回答:首先我们需要知道什么包安装了 postfix。查找安装 postfix 的包名后,使用 -e(擦除/卸载软件包)和 -v(冗余输出)两个选项来实现。

#rpm-qa postfix*

postfix-2.10.1-6.el7.x86_64

然后移除 postfix,如下:

#rpm-ev postfix-2.10.1-6.el7.x86_64

Preparingpackages...

postfix-2:3.0.1-2.fc22.x86_64

5. 获得一个已安装包的具体信息,如版本,发行号,安装日期,大小,总结和一个简短的描述。

回答:我们通过使用 rpm 的选项 -qi,后面接包名,可以获得关于一个已安装包的具体信息。

举个例子,为了获得 openssh 包的具体信息,我需要做的就是:

#rpm-qi openssh

[root@tecmint tecmint]#rpm-qi openssh

Name:openssh

Version:6.8p1

Release:5.fc22

Architecture:x86_64

InstallDate:Thursday28May201512:34:50PM IST

Group:Applications/Internet

Size:1542057

License:BSD

....

6. 假如你不确定一个指定包的配置文件在哪,比如 httpd。你如何找到所有 httpd 提供的配置文件列表和位置。

回答: 我们需要用选项 -c 接包名,这会列出所有配置文件的名字和他们的位置。

#rpm-qc httpd

/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-qd httpd

/usr/share/doc/httpd/ABOUT_APACHE

/usr/share/doc/httpd/CHANGES

/usr/share/doc/httpd/LICENSE

...

我们也可以列出所有相关的证书文件,如下:

#rpm-qL openssh

/usr/share/licenses/openssh/LICENCE

忘了说明上面的选项 -d 和 -L 分别表示 “文档” 和 “证书”,抱歉。

7. 你找到了一个配置文件,位于‘/usr/share/alsa/cards/AACI.conf’,现在你不确定该文件属于哪个包。你如何查找出包的名字?

回答:当一个包被安装后,相关的信息就存储在了数据库里。所以使用选项 -qf(-f 查询包拥有的文件)很容易追踪谁提供了上述的包。

#rpm-qf/usr/share/alsa/cards/AACI.conf

alsa-lib-1.0.28-2.el7.x86_64

类似地,我们可以查找(谁提供的)关于任何子包,文档和证书文件的信息。

8. 你如何使用 rpm 查找最近安装的软件列表?

回答:如刚刚说的,每一样被安装的文件都记录在了数据库里。所以这并不难,通过查询 rpm 的数据库,找到最近安装软件的列表。

我们通过运行下面的命令,使用选项 -last(打印出最近安装的软件)达到目的。

#rpm-qa--last

上面的命令会打印出所有安装的软件,最近安装的软件在列表的顶部。

如果我们关心的是找出特定的包,我们可以使用 grep 命令从列表中匹配包(假设是 sqlite ),简单如下:

#rpm-qa--last|grep-i sqlite

sqlite-3.8.10.2-1.fc22.x86_64Thursday18June201505:05:43PM IST

我们也可以获得10个最近安装的软件列表,简单如下:

#rpm-qa--last|head

我们可以重定义一下,输出想要的结果,简单如下:

#rpm-qa--last|head-n2

上面的命令中,-n 代表数目,后面接一个常数值。该命令是打印2个最近安装的软件的列表。

9. 安装一个包之前,你如果要检查其依赖。你会怎么做?

回答:检查一个 rpm 包(XYZ.rpm)的依赖,我们可以使用选项 -q(查询包),-p(指定包名)和 -R(查询/列出该包依赖的包,嗯,就是依赖)。

#rpm-qpR gedit-3.16.1-1.fc22.i686.rpm

/bin/sh

/usr/bin/env

glib2(x86-32)>=2.40.0

gsettings-desktop-schemas

gtk3(x86-32)>=3.16

gtksourceview3(x86-32)>=3.16

gvfs

libX11.so.6

...

10. rpm 是不是一个前端的包管理工具呢?

回答:不是!rpm 是一个后端管理工具,适用于基于 Linux 发行版的 RPM (此处指 Redhat Package Management)。

YUM,全称 Yellowdog Updater Modified,是一个 RPM 的前端工具。YUM 命令自动完成所有工作,包括解决依赖和其他一切事务。

最近,DNF(YUM命令升级版)在Fedora 22发行版中取代了 YUM。尽管 YUM 仍然可以在 RHEL 和 CentOS 平台使用,我们也可以安装 dnf,与 YUM 命令共存使用。据说 DNF 较于 YUM 有很多提高。

知道更多总是好的,保持自我更新。现在我们移步到前端部分来谈谈。

11. 你如何列出一个系统上面所有可用的仓库列表。

回答:简单地使用下面的命令,我们就可以列出一个系统上所有可用的仓库列表。

#yumrepolist

#dnf repolist

Lastmetadata expiration check performed0:30:03ago onMonJun2216:50:002015.

repoidrepo name status

*fedoraFedora22-x86_6444,762

ozonosRepositoryforOzonOS61

*updatesFedora22-x86_64-Updates

上面的命令仅会列出可用的仓库。如果你需要列出所有的仓库,不管可用与否,可以这样做。

#yumrepolist all

#dnf repolist all

Lastmetadata expiration check performed0:29:45ago onMonJun2216:50:002015.

repoidrepo name status

*fedoraFedora22-x86_64 enabled:44,762

fedora-debuginfoFedora22-x86_64-Debugdisabled

fedora-sourceFedora22-Sourcedisabled

ozonosRepositoryforOzonOS enabled:61

*updatesFedora22-x86_64-Updatesenabled:5,018

updates-debuginfoFedora22-x86_64-Updates-Debug

12. 你如何列出一个系统上所有可用并且安装了的包?

回答:列出一个系统上所有可用的包,我们可以这样做:

#yumlistavailable

#dnflistavailable

ast metadata expiration check performed0:34:09ago onMonJun2216:50:002015.

AvailablePackages

0ad.x86_640.0.18-1.fc22fedora

0ad-data.noarch0.0.18-1.fc22fedora

0install.x86_642.6.1-2.fc21fedora

0xFFFF.x86_640.3.9-11.fc22fedora

2048-cli.x86_640.9-4.git20141214.723738c.fc22 fedora

2048-cli-nocurses.x86_640.9-4.git20141214.723738c.fc22 fedora

....

而列出一个系统上所有已安装的包,我们可以这样做。

#yumlistinstalled

#dnflistinstalled

Lastmetadata expiration check performed0:34:30ago onMonJun2216:50:002015.

InstalledPackages

GeoIP.x86_641.6.5-1.fc22@System

GeoIP-GeoLite-data.noarch2015.05-1.fc22@System

NetworkManager.x86_641:1.0.2-1.fc22@System

NetworkManager-libnm.x86_641:1.0.2-1.fc22@System

aajohan-comfortaa-fonts.noarch2.004-4.fc22@System

....

而要同时满足两个要求的时候,我们可以这样做。

#yumlist

#dnflist

Lastmetadata expiration check performed0:32:56ago onMonJun2216:50:002015.

InstalledPackages

GeoIP.x86_641.6.5-1.fc22@System

GeoIP-GeoLite-data.noarch2015.05-1.fc22@System

NetworkManager.x86_641:1.0.2-1.fc22@System

NetworkManager-libnm.x86_641:1.0.2-1.fc22@System

aajohan-comfortaa-fonts.noarch2.004-4.fc22@System

acl.x86_642.2.52-7.fc22@System

....

13. 你会怎么在一个系统上面使用 YUM 或 DNF 分别安装和升级一个包与一组包?

回答:安装一个包(假设是 nano),我们可以这样做,

#yuminstallnano

而安装一组包(假设是 Haskell),我们可以这样做,

#yumgroupinstall'haskell'

升级一个包(还是 nano),我们可以这样做,

#yumupdatenano

而为了升级一组包(还是 haskell),我们可以这样做,

#yumgroupupdate'haskell'

14. 你会如何同步一个系统上面的所有安装软件到稳定发行版?

回答:我们可以一个系统上(假设是 CentOS 或者 Fedora)的所有包到稳定发行版,如下,

#yumdistro-sync[在CentOS/RHEL]

#dnf distro-sync[在Fedora20之后版本]

似乎来面试之前你做了相当不多的功课,很好!在进一步交谈前,我还想问一两个问题。

15. 你对 YUM 本地仓库熟悉吗?你尝试过建立一个本地 YUM 仓库吗?让我们简单看看你会怎么建立一个本地 YUM 仓库。

回答:首先,感谢你的夸奖。回到问题,我必须承认我对本地 YUM 仓库十分熟悉,并且在我的本地主机上也部署过,作为测试用。

1、 为了建立本地 YUM 仓库,我们需要安装下面三个包:

#yuminstall deltarpm python-deltarpm createrepo

2、 新建一个目录(假设 /home/$USER/rpm),然后复制 RedHat/CentOS DVD 上的 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<

[local-installation]name=yum-local

baseurl=file:///home/$USER/rpm

enabled=1

gpgcheck=0

EOF

重要:用你的用户名替换掉 $USER。

以上就是创建一个本地 YUM 仓库所要做的全部工作。我们现在可以从这里安装软件了,相对快一些,安全一些,并且最重要的是不需要 Internet 连接。

好了!面试过程很愉快。我已经问完了。我会将你推荐给 HR。你是一个年轻且十分聪明的候选者,我们很愿意你加入进来。如果你有任何问题,你可以问我。

我:谢谢,这确实是一次愉快的面试,我感到今天非常幸运,可以搞定这次面试...

显然,不会在这里结束。我问了很多问题,比如他们正在做的项目。我会担任什么角色,负责什么,,,balabalabala

小伙伴们,这之后的 3 天会经过 HR 轮,到时候所有问题到时候也会被写成文档。希望我当时表现不错。感谢你们所有的祝福。

谢谢伙伴们和 Tecmint,花时间来编辑我的面试经历。我相信 Tecmint 好伙伴们做了很大的努力,必要要赞一个。当我们与他人分享我们的经历的时候,其他人从我们这里知道了更多,而我们自己则发现了自己的不足。

这增加了我们的信心。如果你最近也有任何类似的面试经历,别自己蔵着。分享出来!让我们所有人都知道。你可以使用如下的表单来与我们分享你的经历。

本文由 LCTT 原创翻译,Linux中国 荣誉推出

中国软件linux面试,Shilpa Nair 分享的 RedHat Linux 包管理方面的面试经验相关推荐

  1. linux不清楚软件包名字,技术|Shilpa Nair 分享的 RedHat Linux 包管理方面的面试经验...

    Shilpa Nair 刚于2015年毕业.她之后去了一家位于 Noida,Delhi 的国家新闻电视台,应聘实习生的岗位.在她去年毕业季的时候,常逛 Tecmint 寻求作业上的帮助.从那时开始,她 ...

  2. 程序linux培训,马哥-51CTO-Linux培训-0910-程序包管理

    (注:此博文源于夜归人的博客) 程序包管理,rpm.yum的使用 程序包管理的相关概念: <<=============================================== ...

  3. 优盘安装红帽linux系统,从U盘安装 redhat linux 6.0及centos 6.4

    从U盘安装 redhat linux 6.0及centos 6.4 (2013-09-20 19:17:05) 标签: 从u盘安装linux 以前我使用linuxlive usb creator.Ut ...

  4. Linux程序内存跟踪,分享一款Linux进程和内存活动监视神器

    原标题:分享一款Linux进程和内存活动监视神器 像"top "之类的命令行工具使得监视CPU使用率和内存使用率有些困难.这就是我们今天向您介绍vtop的原因, vtop是一个用N ...

  5. linux git文件图标,分享|三款 Linux 下的 Git 图形客户端

    了解这三个 Git 图形客户端工具如何增强你的开发流程. 在 Linux 下工作的人们对 Git 非常熟悉.一个理所当然的原因是,Git 是我们这个星球上最广为人知也是使用最广泛的版本控制工具.不过大 ...

  6. linux版车机安装步骤,RedHat Linux 9.0的安装(详细图解安装过程)

    RedHat Linux版本:" b, t) b) b# }, t# z- f C& S$ x0 }) GRedHat Linux是目前世界上使用最多的Linux操作系统.因为它具备 ...

  7. linux终端贪吃蛇,分享|nSnake: 在Linux的终端上玩经典的贪食蛇游戏

    你知道20世纪末的那些古老的诺基亚手机上最棒的东西是什么吗? 贪食蛇! 我以前在这个看似无聊但却让人上瘾的游戏上花费了大把的时间.在古老的诺基亚手机被智能手机取代的同时,贪食蛇也被另外的无聊但却令人上 ...

  8. linux如何发现内存卡,分享|如何在 Linux 上查找硬件规格

    在 Linux 系统上有许多工具可用于查找硬件规格.在这里,我列出了四种最常用的工具,可以获取 Linux 系统的几乎所有硬件(和软件)细节.好在是这些工具在某些 Linux 发行版上默认预装.我在 ...

  9. linux命令 upower -e,分享|如何在 Linux 终端下检查笔记本电池状态

    在图形界面下查看你的笔记本电池状态是很容易的,只需将鼠标指向任务栏中的电池图标上,你便可以很容易地知道电池的电量.但如果我们想要从命令行中获得这些信息呢?并不是所有人都知道如何做到这点.前几天我的一个 ...

最新文章

  1. RHEL 6.5 rpm包安装mplyer
  2. 电梯管理php,写字楼物业电梯管理规定
  3. 【转】win7与ubuntu双系统,删除ubuntu后,启动错误error:no such partition grub rescue的修复--不错...
  4. [leetcode]143. Reorder List
  5. 连接mysql的各种方式
  6. 使用ZbarSDK实现扫描二维码以及条形码功能(iOS)
  7. 图灵机:计算机世界的理论基石
  8. python爬取网易云评论_Python - 网易云热门评论爬取
  9. 人工智能学习路线,文末赠书活动(深度学习Spark机器学习)
  10. 2019年东北四省赛感想
  11. 用JQuery或JS改变div的id的五种方法
  12. unity实现游戏中拍照功能(自动生成小照片)
  13. html根据ip和mac地址,关于怎么通过IE浏览器获取客户端的IP地址和Mac地址
  14. UWB定位系统在展馆中的应用
  15. 术语FXO和FXS的含义是什么
  16. 百度地图最新版本sdk使用系列(六)-搜索周边美食,加油站等,并使用infoWindow展示
  17. [SWPUCTF 2018]SimplePHP
  18. 数据分析实战之数据可视化
  19. Gauss-Jordan消去法中完全选主元法求解线性方程组
  20. hfai images | 自建镜像,环境配置的最后绝招

热门文章

  1. python版我的世界怎么去天堂_我的世界怎么去天堂 天堂门合成攻略
  2. 递归实现格雷码GrayCode
  3. 英伟达最新旗舰显卡K20及K10,可达5TFlops
  4. 前端051_单点登录SSO_注册功能实现
  5. Hololens入门之凝视
  6. 用php创建数据库代码,php创建数据库_PHP MySQL 创建数据库与表示例
  7. 乳牛咳嗽声与呼吸系统疾病的关系(译全文)
  8. 2023有了残疾证,这三个补贴一定记得申请
  9. Metricbeat和Filebeat的安装及配置
  10. 基于微信小程序实现警务活动管理系统设计演示【附项目源码+论文说明】分享