1、簡述rpm與yum命令的常見選項,并舉例
CentOS系統上rpm命令管理程序包:
安裝、升級、卸載、查詢和校驗、數據庫維護
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i, –install
升級:-U, –update, -F, –freshen
卸載:-e, –erase
查詢:-q, –query
校驗:-V, –verify
數據庫維護:–builddb, –initdb
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE …
rpm -ivh PACKAGE_FILE …
GENERAL OPTIONS:
-v:verbose,詳細信息
-vv:更詳細的輸出
[install-options]:
-h:hash marks輸出進度條;每個#表示2%的進度;
–test:測試安裝,檢查并報告依賴關系及沖突消息等;
–nodeps:忽略依賴關系;不建議;
–replacepkgs:重新安裝
注意:rpm可以自帶腳本;
四類:–noscripts
preinstall:安裝過程開始之前運行的腳本,%pre , –nopre
postinstall:安裝過程完成之后運行的腳本,%post , –nopost
preuninstall:卸載過程真正開始執行之前運行的腳本,%preun, –nopreun
postuninstall:卸載過程完成之后運行的腳本,%postun , –nopostun
–nosignature:不檢查包簽名信息,不檢查來源合法性;
–nodigest:不檢查包完整性信息;
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
-U:升級或安裝;
-F:升級
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage:降級;
–force:強制升級;
注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,直接安裝新版本內核;
(2) 如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …
–allmatches:卸載所有匹配指定名稱的程序包的各版本;
–nodeps:忽略依賴關系
–test:測試卸載,dry run模式
查詢:
rpm {-q|–query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;
-a, –all:查詢所有已經安裝過的包;
-f FILE:查詢指定的文件由哪個程序包安裝生成;
-p, –package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作;
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供;
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
[query-options]
–changelog:查詢rpm包的changlog;
-l, –list:程序安裝生成的所有文件列表;
-i, –info:程序包相關的信息,版本號、大小、所屬的包組,等;
-c, –configfiles:查詢指定的程序包提供的配置文件;
-d, –docfiles:查詢指定的程序包提供的文檔;
–provides:列出指定的程序包提供的所有的CAPABILITY;
-R, –requires:查詢指定的程序包的依賴關系;
–scripts:查看程序包自帶的腳本片斷;
用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, …
校驗:
rpm {-V|–verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
包來源合法性驗正和完整性驗正:
來源合法性驗正:
完整性驗正:
獲取并導入信任的包制作者的密鑰:
對于CentOS發行版來說:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
驗正:
(1) 安裝此組織簽名的程序時,會自動執行驗正;
(2) 手動驗正:rpm -K PACKAGE_FILE
數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操作:通過此處的數據庫進行;
獲取幫助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {–initdb|–rebuilddb} [–dbpath DIRECTORY] [–root DIRECTORY]
–initdb:初始化數據庫,當前無任何數據庫可實始化創建一個新的;當前有時不執行任何操作;
–rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
yum命令的用法:
yum [options] [command] [package …]
command is one of:
* install package1 [package2] […]
* update [package1] [package2] […]
* update-to [package1] [package2] […]
* check-update
* upgrade [package1] [package2] […]
* upgrade-to [package1] [package2] […]
* distribution-synchronization [package1] [package2] […]
* remove | erase package1 [package2] […]
* list […]
* info […]
* provides | whatprovides feature1 [feature2] […]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache
* groupinstall group1 [group2] […]
* groupupdate group1 [group2] […]
* grouplist [hidden] [groupwildcard] […]
* groupremove group1 [group2] […]
* groupinfo group1 […]
* search string1 [string2] […]
* shell [filename]
* resolvedep dep1 [dep2] […]
* localinstall rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use install)
* localupdate rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use update)
* reinstall package1 [package2] […]
* downgrade package1 [package2] […]
* deplist package1 [package2] […]
* repolist [all|enabled|disabled]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* check
* help [command]
顯示倉庫列表:
repolist [all|enabled|disabled]
顯示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] […]
# yum list {available|installed|updates} [glob_exp1] […]
安裝程序包:
install package1 [package2] […]
reinstall package1 [package2] […] (重新安裝)
升級程序包:
update [package1] [package2] […]
downgrade package1 [package2] […] (降級)
檢查可用升級:
check-update
卸載程序包:
remove | erase package1 [package2] […]
查看程序包information:
info […]
查看指定的特性(可以是某文件)是由哪個程序包所提供:
provides | whatprovides feature1 [feature2] […]
清理本地緩存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:
makecache
搜索:
search string1 [string2] […]
以指定的關鍵字搜索程序包名及summary信息;
查看指定包所依賴的capabilities:
deplist package1 [package2] […]
查看yum事務歷史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
安裝及升級本地程序包:
* localinstall rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use install)
* localupdate rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use update)
包組管理的相關命令:
* groupinstall group1 [group2] […]
* groupupdate group1 [group2] […]
* grouplist [hidden] [groupwildcard] […]
* groupremove group1 [group2] […]
* groupinfo group1 […]
如何使用光盤當作本地yum倉庫:
(1) 掛載光盤至某目錄,例如/media/cdrom
# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 創建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
yum的命令行選項:
–nogpgcheck:禁止進行gpg check;
-y: 自動回答為“yes”;
-q:靜默模式;
–disablerepo=repoidglob:臨時禁用此處指定的repo;
–enablerepo=repoidglob:臨時啟用此處指定的repo;
–noplugins:禁用所有插件;
yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號;
$arch: 平臺;
$basearch:基礎平臺;
$YUM0-$YUM9
2、自建yum倉庫,分別為網絡源和本地源
Yum倉庫在單個RPM軟件包的基礎之上,進一步去解決依賴關系
Yum倉庫是簡化rpm軟件包的安裝以及管理的難度,可以解決rpm軟件包的相互依賴性解決軟件包之間的依賴關系。Yum倉庫的配置文件均需以.repo結尾并存放在/etc/yum.repos.d/目錄中的
格式說明
name=linuxprobe : yum倉庫的名稱描述,易于識別倉庫用處
baseurl=file:///media/cdrom :提供方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)
enabled=1 : 設置此源是否可用,1為可用,0為禁用
gpgcheck=1 : 設置此源是否校驗文件,1為校驗,0為不校驗
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release :若為校驗請指定公鑰文件地址
3、簡述at和crontab命令,制定 每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00
1、at:未來時間點執行一次任務
命令格式:at [option] TIME
TIME:定義出什么時候執行這項任務
時間格式:
HH:MM [YYYY-mm-dd];
HH:MM[am|pm] [Month] [Date];
noon(正午), midnight(午夜), teatime(下午4點),tomorrow(明天)
now+#{minutes—分鐘,hours—小時,days—天, OR weeks—周}
注:at 的作業有隊列,存放在/var/spool/at 中,用單個字母來表示,默認都使用 a 隊列;
選項:
常見選項:
-q QUEUE:指明隊列;
-l:列出指定隊列中等待運行的作業;相當于atq;
-d #:刪除指定作業號的作業;相當于atrm;
-c #:查看指定作業號的具體作業任務;
-v:可以使用較明顯的時間格式列出at中的工作列表;
-f /path/from/somefile:從指定的文件中讀取任務,不再交互式輸入;(# at -f /testdir/at.txt)
-m:強制at發送郵件,表示執行完畢
例:
at10:00//設定10點執行at> ls /etc//進入到at模式中,設置要執行的任務Ctrl+d//設置完成后用Ctrl+d結束設置at-l//查看已設置的任務
crontab:周期性運行某任務
命令格式:
crontab [-u user] [-l | -r | -e] [-i]
選項:
-e:打開編輯界面定義任務;
-l:列出所有任務(僅是當前用戶的所有任務);
-r:移除所有任務,即刪除/var/spool/cron/USERNAME文件;
如果,刪除單個任務應該通過編輯界面刪除行實現;
-i:在使用-r選項移除所有任務時提示用戶確認;
-u user:root用戶可為指定用戶管理cron任務(即為某個用戶編輯計劃任務)
ancorn 命令可以執行之前因故障未能執行的任務
例:
crontab -e //設置定時任務?103,5?* * 3?/root/test.sh && date +’%F%T
4、簡述sed常用操作命令,并舉例
1、命令使用
基本語法
sed ‘地址命令’文件
這時的地址(address)指對哪些行作處理,地址與命令之間不必空格,最后的文件可以有多個。這條命令的意思是對文件中地址指定范圍內的行執行編輯命令。
2、地址表示方式
a、起始行到結束行(StartLine,EndLine),之間用,號隔開
如:1,100表示第1到100行;
b、使用模式:/RegExp/ //里要用正則表達的格式?如:/^root/
3、/pattern1/,/pattern2/ 從第一次被模式1匹配到的行開始,至第一次被模式2匹配到的行結束中間的所有行
4、linenumber 精確指定的行,只給行號
5、startline, +N 從startline開始向后N行,一共是N+1行,從指定行開始向后N行
3、選項:
-n:靜默模式,不再顯示模式空間中的內容
-i:直接修改原文件
-e SCRIPT -e SCRIPT…:可同時執行多個腳本,sed‘’號中的地址命令被稱為腳本
-f /PATH/TO/SED_SCRIPT:可以把多個腳本寫在一個文件里,用-f讀取這個文件,也能執行多個腳本(把每一個SCRIPT保存至?SED_SCRIPT文件中),最后處理file文件像這樣:sed -f /path/to/scripts file
-r:表示使用擴展正則
4、命令:
d:刪除符合條件的行
例:
sed ‘1,2d’ /etc/inittab //刪除文件1-2行后顯示,如果有變量替換sed后就要用雙引號?sed ‘/oot/d’ /etc/fstab //刪除有oot的行,要作模式匹配要用//括起來?sed ‘1,+2d’ /etc/fstab //刪除第一行加兩行共三行?sed ‘1d’ /etc/fstab //只刪除第一行?sed ‘/^\//d’ /etc/fstab //刪除/開頭的行,用\轉意
p:顯示符合條件的行
例:
sed ‘/^\//p’ /etc/fstab //這會顯示兩次/開頭的行,因為被匹配到的要顯示一次,默認情況下模式空間中的內容也要全部顯示,如只想顯示一次,要用選項-n:靜默模式,不再顯示模式空間中的內容:?sed –n ‘/^\//p’ /etc/fstab
a \string:在指定的行后面追加新行,內容為string
例:
sed ‘/^\//a \#?hello world’ /etc/fstab //顯示以/開頭的行后面加入# hello world?sed ‘/^\//a \#?hello world\n#?hello,linux’ /etc/fstab //找到以/開頭的行后面加入# hello world,在后面加入兩行,\n:換行
i \string:在指定的行前面添加新行,內容為string
r FILE:表示將指定的文件的內容添加至符合條件的行
例:
sed ‘2r /etc/issue’ /etc/fstab //將issue的內容顯示在fstab文件的第二行后面顯示一次?sed ‘1,2r /etc/issue’ /etc/fstab //在第一第二行后都顯示一次?w FILE:將地址指定範圍內的內容另存至指定的文件中?例: sed ‘/oot/w /tmp/oot.txt’ /etc/fstab //將fstab中包含oot的行,保存到oot.txt中?s/pattern(要查找的內容)/string/修飾符:查找並替換,把符合pattern匹配范圍的行換成string,pattern可以是正則,默認替換每行中第一次被模式匹配到的串?例:
sed ‘s/oot/OOT/’ /etc/fstab
sed ‘s/^\//#/’ /etc/fstab
//只替換了第一次匹配到的/,如果要全部替換就要加修飾符
修飾符
g:全局替換
i:忽略字符大小寫
s///:s###,s@@@ 可用#或@及其他字符作分隔符,也可以用后項引用
例:
sed?‘s#l..e#&r#g’ sed.txt?或?sed?‘s#\(l..e\)#\1r#g’ sed.txt//將l..e:查找到的like替換成liker,love替換成lover。sed?‘s#l\(..e\)#L\1#g’ sed.txt//l..e:like替換Liker,love替換Lover。此處只能用后項引用history?| sed?‘s#^[[:space:]]*##g’ //把history結果前的空格去掉,^[[:space:]]***表示一個或多個空格
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90823