Wednesday, July 10, 2013

yum相關實用技巧

yum是Redhat/CentOS/Fedora系用的, rpm的一個前端介面.
他可以管理repository (套件庫), 並且做更新及搜尋等動作.

yum會與網路上的套件庫同步, 做出一個套件清單
以下稍微介紹一下工作中常見的用法.

1. 安裝
yum install (套件名稱)
一點也不意外. (笑)

2. 搜尋
yum search (關鍵字)
這個關鍵字可以是套件名稱, 或是套件說明裡面的字眼.

3. 搜尋含有特定檔案的套件
yum provides (檔案名稱)
這個功能非常好用, 最常用在出現command not found或是shared library not found的場合.
假設我要用一個叫updatedb的指令, command not found, 但卻不知道有這個指令的套件是哪一個
就可以用這個功能.
要注意的是, 後面的搜尋要用該檔案或指令的絕對路徑
所以, 在絕對路徑也不明的情形下, 請愛用*符號.
以上面的例子:
yum provides */updatedb
就會吐出來是mlocate這個套件有updatedb指令, 再用yum install mlocate就可以裝了.

4. 更新套件資料庫
yum makecache
注意, 這只會更新套件清單, 不會安裝套件.

5. 更新套件
yum update (套件名稱)
不寫名稱就是全部更新的意思.

6. 移除套件
yum remove (套件名稱)
可以用*符號, 但是為避免誤殺忠良, 記得看一下吐出來的清單再確認.

7. 重新安裝套件
yum reinstall (套件名稱)
不會真的移除套件, 而是抓下來之後再裝一次, 但保留套件的設定.
相對的, 用remove會把套件跟設定一起移除, 所以reinstall不等於remove + install.

8. 列出套件
yum list (套件名稱)
可以用*符號. 列出符合條件的套件及狀態 (在哪個套件庫, 目前有沒有安裝)
名稱不寫就是全部.
所以可以搭配grep指令過濾出感興趣的套件資訊.
例如: yum list |grep gcc

9. 套件資訊
yum info (套件名稱)
可以用*符號, 但是不能不寫名稱XD
會列出名稱, 版本, 套件描述等.

9. 套件群組操作
yum grouplist
yum groupinstall (群組名稱)
yum groupremove (群組名稱)
yum groupinfo (群組名稱)
用法一樣... 但是群組名稱中間帶有空白或特殊符號的話, 要用引號括起來.
沒有groupreinstall的指令.

後面是進階但實用的技巧.
1. 重建rpm資料庫
有時候會亂掉.....
rpm --rebuilddb

2. 搜尋重複的套件
package-cleanup --dupes
(這個指令是 package-cleanup, 包含在yum-utils這個套件中, 建議裝起來)
大部分的套件在OS中都應該只有一個版本, 只有少數(如kernel)除外.
但有時候會產生一個套件被裝了兩個版本, 就可以用這個指令找出來.
最常見的原因是做update到一半中斷, 新的裝上去舊的還沒移除...

3. 清除重複的套件
package-cleanup --cleandupes
類似上一個, 但是會移除重複套件中比較舊的那一個.

4. 搜尋套件庫的問題.
package-cleanup --problems

5. 清除舊版本的kernel
package-cleanup --oldkernels --count=(保留版本數)
如前面講到, kernel可以同時裝好幾個版本.
所以一台機器用久了, 做過幾次update, 裡面可能會有很多個kernel.
這時可以用這個指令清掉舊的, 如果指定--count=1的話, 就只會保留最新的那一個版本
而且移除時會自動更新開機選單 (/boot/grub/menu.lst)

6. 安裝本機.rpm檔案
yum localinstall (rpm檔名)
對啦, 是可以直接rpm -ivh.
但是這樣如果有dependency問題, rpm只會列出來, 不會幫你解決.
用yum localinstall的話, 遇到dependency問題, yum會試著從套件庫裡找符合條件的幫你裝上去, 輕鬆愉快得多.

No comments: