Shilpa Nair 分享的 RedHat Linux 包管理方面的面试经验

简介:

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

有关 RPM 方面的 Linux 面试题

有关 RPM 方面的 Linux 面试题

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

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

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

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

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


 
 
  1. # rpm -qa nano
  2. # rpm -qa | grep -i nano
  3. nano-2.3.1-10.el7.x86_64

同时包的名字必须是完整的,不完整的包名会返回到提示符,不打印任何东西,就是说这包(包名字不全)未安装。下面的例子会更好理解些:

我们通常使用 vim 替代 vi 命令。当时如果我们查找安装包 vi/vim 的时候,我们就会看到标准输出上没有任何结果。


 
 
  1. # vi
  2. # vim

尽管如此,我们仍然可以像上面一样运行 vi/vim 命令来清楚地知道包有没有安装。只是因为我们不知道它的完整包名才不能找到的。如果我们不确切知道完整的文件名,我们可以使用通配符:


 
 
  1. # rpm -qa vim*
  2. vim-minimal-7.4.160-1.el7.x86_64

通过这种方式,我们可以获得任何软件包的信息,安装与否。

2. 你如何使用 rpm 命令安装 XYZ 软件包?

回答:我们可以使用 rpm 命令安装任何的软件包(*.rpm),像下面这样,选项 -i(安装),-v(冗余或者显示额外的信息)和 -h(在安装过程中,打印#号显示进度)。


 
 
  1. # rpm -ivh peazip-1.11-1.el6.rf.x86_64.rpm
  2. Preparing... ################################# [100%]
  3. Updating / installing...
  4. 1:peazip-1.11-1.el6.rf ################################# [100%]

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

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

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


 
 
  1. # rpm -ql httpd
  2. /etc/httpd
  3. /etc/httpd/conf
  4. /etc/httpd/conf.d
  5. ...

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

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


 
 
  1. # rpm -qa postfix*
  2. postfix-2.10.1-6.el7.x86_64

然后移除 postfix,如下:


 
 
  1. # rpm -ev postfix-2.10.1-6.el7.x86_64
  2. Preparing packages...
  3. postfix-2:3.0.1-2.fc22.x86_64

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

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

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


 
 
  1. # rpm -qi openssh
  2. [root@tecmint tecmint]# rpm -qi openssh
  3. Name : openssh
  4. Version : 6.8p1
  5. Release : 5.fc22
  6. Architecture: x86_64
  7. Install Date: Thursday 28 May 2015 12:34:50 PM IST
  8. Group : Applications/Internet
  9. Size : 1542057
  10. License : BSD
  11. ....

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

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


 
 
  1. # rpm -qc httpd
  2. /etc/httpd/conf.d/autoindex.conf
  3. /etc/httpd/conf.d/userdir.conf
  4. /etc/httpd/conf.d/welcome.conf
  5. /etc/httpd/conf.modules.d/00-base.conf
  6. /etc/httpd/conf/httpd.conf
  7. /etc/sysconfig/httpd

相似地,我们可以列出所有相关的文档文件,如下:


 
 
  1. # rpm -qd httpd
  2. /usr/share/doc/httpd/ABOUT_APACHE
  3. /usr/share/doc/httpd/CHANGES
  4. /usr/share/doc/httpd/LICENSE
  5. ...

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


 
 
  1. # rpm -qL openssh
  2. /usr/share/licenses/openssh/LICENCE

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

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

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


 
 
  1. # rpm -qf /usr/share/alsa/cards/AACI.conf
  2. alsa-lib-1.0.28-2.el7.x86_64

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

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

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

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


 
 
  1. # rpm -qa --last

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

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


 
 
  1. # rpm -qa --last | grep -i sqlite
  2. sqlite-3.8.10.2-1.fc22.x86_64 Thursday 18 June 2015 05:05:43 PM IST

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


 
 
  1. # rpm -qa --last | head

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


 
 
  1. # rpm -qa --last | head -n 2

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

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

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


 
 
  1. # rpm -qpR gedit-3.16.1-1.fc22.i686.rpm
  2. /bin/sh
  3. /usr/bin/env
  4. glib2(x86-32) >= 2.40.0
  5. gsettings-desktop-schemas
  6. gtk3(x86-32) >= 3.16
  7. gtksourceview3(x86-32) >= 3.16
  8. gvfs
  9. libX11.so.6
  10. ...

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. 你如何列出一个系统上面所有可用的仓库列表。

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


 
 
  1. # yum repolist
  2. # dnf repolist
  3. Last metadata expiration check performed 0:30:03 ago on Mon Jun 22 16:50:00 2015.
  4. repo id repo name status
  5. *fedora Fedora 22 - x86_64 44,762
  6. ozonos Repository for Ozon OS 61
  7. *updates Fedora 22 - x86_64 - Updates

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


 
 
  1. # yum repolist all
  2. # dnf repolist all
  3. Last metadata expiration check performed 0:29:45 ago on Mon Jun 22 16:50:00 2015.
  4. repo id repo name status
  5. *fedora Fedora 22 - x86_64 enabled: 44,762
  6. fedora-debuginfo Fedora 22 - x86_64 - Debug disabled
  7. fedora-source Fedora 22 - Source disabled
  8. ozonos Repository for Ozon OS enabled: 61
  9. *updates Fedora 22 - x86_64 - Updates enabled: 5,018
  10. updates-debuginfo Fedora 22 - x86_64 - Updates - Debug

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

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


 
 
  1. # yum list available
  2. # dnf list available
  3. ast metadata expiration check performed 0:34:09 ago on Mon Jun 22 16:50:00 2015.
  4. Available Packages
  5. 0ad.x86_64 0.0.18-1.fc22 fedora
  6. 0ad-data.noarch 0.0.18-1.fc22 fedora
  7. 0install.x86_64 2.6.1-2.fc21 fedora
  8. 0xFFFF.x86_64 0.3.9-11.fc22 fedora
  9. 2048-cli.x86_64 0.9-4.git20141214.723738c.fc22 fedora
  10. 2048-cli-nocurses.x86_64 0.9-4.git20141214.723738c.fc22 fedora
  11. ....

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


 
 
  1. # yum list installed
  2. # dnf list installed
  3. Last metadata expiration check performed 0:34:30 ago on Mon Jun 22 16:50:00 2015.
  4. Installed Packages
  5. GeoIP.x86_64 1.6.5-1.fc22 @System
  6. GeoIP-GeoLite-data.noarch 2015.05-1.fc22 @System
  7. NetworkManager.x86_64 1:1.0.2-1.fc22 @System
  8. NetworkManager-libnm.x86_64 1:1.0.2-1.fc22 @System
  9. aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
  10. ....

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


 
 
  1. # yum list
  2. # dnf list
  3. Last metadata expiration check performed 0:32:56 ago on Mon Jun 22 16:50:00 2015.
  4. Installed Packages
  5. GeoIP.x86_64 1.6.5-1.fc22 @System
  6. GeoIP-GeoLite-data.noarch 2015.05-1.fc22 @System
  7. NetworkManager.x86_64 1:1.0.2-1.fc22 @System
  8. NetworkManager-libnm.x86_64 1:1.0.2-1.fc22 @System
  9. aajohan-comfortaa-fonts.noarch 2.004-4.fc22 @System
  10. acl.x86_64 2.2.52-7.fc22 @System
  11. ....

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

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


 
 
  1. # yum install nano

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


 
 
  1. # yum groupinstall 'haskell'

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


 
 
  1. # yum update nano

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


 
 
  1. # yum groupupdate 'haskell'

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

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


 
 
  1. # yum distro-sync [在 CentOS/ RHEL]
  2. # dnf distro-sync [在 Fedora 20之后版本]

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

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

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

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


 
 
  1. # yum install deltarpm python-deltarpm createrepo

2、 新建一个目录(假设 /home/$USER/rpm),然后复制 RedHat/CentOS DVD 上的 RPM 包到这个文件夹下


 
 
  1. # mkdir /home/$USER/rpm
  2. # cp /path/to/rpm/on/DVD/*.rpm /home/$USER/rpm

3、 新建基本的库头文件如下。


 
 
  1. # createrepo -v /home/$USER/rpm

4、 在路径 /etc/yum.repo.d 下创建一个 .repo 文件(如 abc.repo):


 
 
  1. cd /etc/yum.repos.d && cat << EOF abc.repo
  2. [local-installation]name=yum-local
  3. baseurl=file:///home/$USER/rpm
  4. enabled=1
  5. gpgcheck=0
  6. EOF

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

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


本文来自云栖社区合作伙伴“Linux中国”,原文发布日期:2015-09-13  

目录
相关文章
|
13天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
35 2
|
14天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
24 3
|
3月前
|
算法 Ubuntu Linux
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?
|
3月前
|
Linux 数据安全/隐私保护 Perl
解锁Linux高手秘籍:文件操作+命令解析大揭秘,面试场上让你光芒万丈,技术实力惊艳四座!
【8月更文挑战第5天】Linux作为服务器与嵌入式系统的基石,其文件管理和命令行操作是技术人员必备技能。本文从文件操作和基础命令两大方面,深入浅出地解析Linux核心要义,助你在面试中脱颖而出。首先探索文件系统的树状结构及操作,包括使用`ls -la`浏览文件详情、`touch`创建文件、`rm -r`慎删目录、`cp`与`mv`复制移动文件、以及利用`find`搜索文件。接着掌握命令行技巧,如用`cat`、`more`和`less`查看文件内容;借助`grep`、`sed`与`awk`处理文本;运用`ps`、`top`和`kill`管理进程;并通过`chmod`和`chown`管理文件权限。
76 8
|
3月前
|
监控 Linux 数据安全/隐私保护
Linux大神养成记:掌握这些逆天命令与快捷方式,面试秒变MVP,让你的技术实力燃爆全场!
【8月更文挑战第5天】Linux作为开源领域的核心,熟悉其基本命令对系统管理员和技术人员至关重要。本文精选了面试中常考的Linux命令,覆盖文件管理、文本处理、进程监控及权限调整等关键领域,并介绍了提高效率的快捷方式。通过掌握如`ls -l`、`grep &quot;error&quot;`、`top`、`chmod 755`等实用命令,以及Tab自动补全、历史命令浏览等功能,不仅能显著提升日常工作效能,还能在求职面试时展现出扎实的技术功底。
64 4
|
3月前
|
Ubuntu Linux 测试技术
下载ISO镜像的方法 Debian、Red Hat 、CentOS、Ubuntu、Kali Linux🌐
Debian、Red Hat、CentOS、Ubuntu与Kali Linux均为知名Linux发行版。下载Debian须访问官网并按计算机架构选ISO文件。Red Hat下载通常需订阅账户,可从官网登录后获取。CentOS可从官网或镜像站点下载,注意CentOS 8已停更。Ubuntu下载简便,官网直接选取版本及架构即可。Kali Linux专为安全测试设计,官网提供直接下载ISO镜像服务。
656 0
|
5月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
578 15
|
4月前
|
Linux 编译器 Shell
拼多多面试 Linux下一个应用程序开始执行到main被调用之间经历了什么?
在Linux中,程序启动到`main`调用涉及加载器、内核、动态链接器和C运行时。`execve`系统调用加载ELF文件,内核创建进程,加载段,设置栈和调用动态链接器。动态链接器解析符号,重定位,执行初始化。C运行时初始化堆栈,调用`main`。从`_start`到`main`的流程包括环境设置和函数调用。
69 0
|
5月前
|
消息中间件 Unix Linux
[高频]Linux中常见的命令及常见面试题
[高频]Linux中常见的命令及常见面试题
|
4月前
|
存储 Java Linux
Java面试之Linux和docker
Java面试之Linux和docker
43 0
下一篇
无影云桌面