歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Shilpa Nair 分享的 RedHat Linux 包管理方面的面試經驗

Shilpa Nair 分享的 RedHat Linux 包管理方面的面試經驗

日期:2017/2/28 13:57:56   编辑:Linux教程

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 選項來查詢所有已安裝的包

  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. InstallDate:Thursday28May201512: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 Thursday18June201505: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 MonJun2216:50:002015.
  4. repo id repo name status
  5. *fedora Fedora22- x86_64 44,762
  6. ozonos RepositoryforOzon OS 61
  7. *updates Fedora22- x86_64 -Updates

上面的命令僅會列出可用的倉庫。如果你需要列出所有的倉庫,不管可用與否,可以這樣做。

  1. #yum repolist all
  2. # dnf repolist all
  3. Last metadata expiration check performed 0:29:45 ago on MonJun2216:50:002015.
  4. repo id repo name status
  5. *fedora Fedora22- x86_64 enabled:44,762
  6. fedora-debuginfo Fedora22- x86_64 -Debug disabled
  7. fedora-source Fedora22-Source disabled
  8. ozonos RepositoryforOzon OS enabled:61
  9. *updates Fedora22- x86_64 -Updates enabled:5,018
  10. updates-debuginfo Fedora22- x86_64 -Updates-Debug

12. 你如何列出一個系統上所有可用並且安裝了的包?

回答:列出一個系統上所有可用的包,我們可以這樣做:

  1. #yumlist available
  2. # dnf list available
  3. ast metadata expiration check performed 0:34:09 ago on MonJun2216:50:002015.
  4. AvailablePackages
  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. #yumlist installed
  2. # dnf list installed
  3. Last metadata expiration check performed 0:34:30 ago on MonJun2216:50:002015.
  4. InstalledPackages
  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. #yumlist
  2. # dnf list
  3. Last metadata expiration check performed 0:32:56 ago on MonJun2216:50:002015.
  4. InstalledPackages
  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[在Fedora20之後版本]

似乎來面試之前你做了相當不多的功課,很好!在進一步交談前,我還想問一兩個問題。

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 連接。

好了!面試過程很愉快。我已經問完了。我會將你推薦給 HR。你是一個年輕且十分聰明的候選者,我們很願意你加入進來。如果你有任何問題,你可以問我。

:謝謝,這確實是一次愉快的面試,我感到今天非常幸運,可以搞定這次面試...

顯然,不會在這裡結束。我問了很多問題,比如他們正在做的項目。我會擔任什麼角色,負責什麼,,,balabalabala

小伙伴們,這之後的 3 天會經過 HR 輪,到時候所有問題到時候也會被寫成文檔。希望我當時表現不錯。感謝你們所有的祝福。

謝謝伙伴們和 Tecmint,花時間來編輯我的面試經歷。我相信 Tecmint 好伙伴們做了很大的努力,必要要贊一個。當我們與他人分享我們的經歷的時候,其他人從我們這裡知道了更多,而我們自己則發現了自己的不足。

這增加了我們的信心。如果你最近也有任何類似的面試經歷,別自己蔵著。分享出來!讓我們所有人都知道。你可以使用如下的表單來與我們分享你的經歷。

更多RedHat相關信息見RedHat 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=10


via: http://www.tecmint.com/linux-rpm-package-management-interview-questions/

作者:Avishek Kumar 譯者:wi-cuckoo 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

Copyright © Linux教程網 All Rights Reserved