歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Shilpa Nair 分享的 RedHat 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