簡述rpm與yum命令的常見選項(xiàng),并舉例
rpm命令
rpm命令用來手動(dòng)安裝rpm格式的程序包,使用格式為
- rpm [option] path/to/rpmfile
- -i安裝選項(xiàng)
- 使用格式rpm -i[installopition] path/to/rpmfile
- -h選項(xiàng) : 使用#來顯示安裝進(jìn)度
- -v選項(xiàng) : 顯示安裝過程
- -vv選項(xiàng) : 顯示更詳細(xì)的安裝過程比-v更詳細(xì),按需求使用
- --test選項(xiàng) : 不進(jìn)行實(shí)際安裝操作,而是進(jìn)行安裝環(huán)境的測(cè)試,可以查看安裝是否可以成功
- --nodeps選項(xiàng) : 忽略依賴關(guān)系,這樣即使安裝成功,也可能由于依賴關(guān)系造成運(yùn)行問題
- --replacepkgs選項(xiàng) : 覆蓋安裝
- --force選項(xiàng) : 強(qiáng)制安裝
- 對(duì)于新安裝程序包,常用的操作是rpm -ivh path/to/rpmfile
- 升級(jí)選項(xiàng)
- -U : 升級(jí)安裝或全新安裝
- -F : 升級(jí)安裝
- 同安裝選項(xiàng)一樣,常用組合有-Uvh -Fvh
- 同安裝選項(xiàng)一樣,也可以使用--test --nodeps選項(xiàng)
- --oldpackage選項(xiàng) : 降級(jí)安裝舊版本程序包 rpm -U --oldpackage path/to/rpmfile
- 卸載
- -e : 卸載已安裝的rpm程序,使用 rpm -e packagename
- 使用-e進(jìn)行卸載時(shí)也可以使用--test --nodeps選項(xiàng)
- --allmatches選項(xiàng) : 卸載所有匹配的安裝,例如一個(gè)rpm程序的多個(gè)版本
- 對(duì)于卸載,需要注意的是如果程序包的配置文件在安裝后被修改過,則卸載時(shí)并不會(huì)刪除這些文件,而是將它們重命名(加后綴 .rpmsave)
- 查詢
- 使用格式rpm -q[queryoption] [packagename] [file]
- 直接使用rpm -q packagename... : 查詢某程序包是否安裝,包名可以是多個(gè)
- -i選項(xiàng) : info顯示程序包簡要信息 rpm -qi packagename
- -a選項(xiàng) : 顯示已安裝的程序包列表 rpm -qa
- -f選項(xiàng) : 后跟一個(gè)文件,查詢此文件是由哪個(gè)程序包生成的 rpm -qf filename
- -p選項(xiàng) : 查詢某個(gè)未安裝的程序包,可與i選項(xiàng)連用 rpm -qpi packagename 查詢r(jià)pm倉庫中指定的未安裝程序包的簡要信息
- -l選項(xiàng) : 顯示某個(gè)程序包生成的文件列表 rpm -ql packagename
- -c選項(xiàng) : 顯示某程序包生成的配置文件 rpm -qc packagename
- -d選項(xiàng) : 顯示某程序包生成的幫助文件 rpm -qd packagename
- --provides選項(xiàng) : 顯示程序包提供的capabilities
- --requires選項(xiàng) : 顯示程序包所依賴的capabilities
- --scripts選項(xiàng) : 查詢程序包安裝或卸載時(shí)執(zhí)行的腳本,這些腳本可以分為以下4類:
- preinstall : 程序包安裝之前執(zhí)行的腳本
- postinstall : 程序包安裝完成之后執(zhí)行的腳本
- preuninstall : 程序包卸載之前執(zhí)行的腳本
- postuninstall : 程序包卸載之后執(zhí)行的腳本
- 校驗(yàn)
- rpm -V packagename : 驗(yàn)證程序包安裝之后生成的文件是否發(fā)生了改變
- 程序包合法性驗(yàn)證
- 先導(dǎo)入驗(yàn)證密匙文件 rpm --import path/to/key-file
- 再使用命令驗(yàn)證程序包 rpm -K path/to/packagefile
- 創(chuàng)建rpm包管理數(shù)據(jù)庫,創(chuàng)建的數(shù)據(jù)庫文件保存路徑為/var/lib/rpm下
- --initdb : 初始化數(shù)據(jù)庫,當(dāng)rpm包管理數(shù)據(jù)庫不存在時(shí)新建它
- --rebuilddb : 重建數(shù)據(jù)庫,無論之前數(shù)據(jù)庫是否存在
- --dbpath DIRECTORY : 可以指明建立的數(shù)據(jù)庫文件保存路徑,即改變默認(rèn)的/var/lib/rpm,例如 rpm --rebuilddb --dbpath /var/rpmdb
yum命令
yum命令可以更智能的管理和安裝rpm程序包,它可以自動(dòng)處理程序包之前的依賴關(guān)系,使用起來更加方便。
- yum的配置文件
- 全局配置文件/etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
// yum 緩存的目錄,yum 在此存儲(chǔ)下載的rpm 包和數(shù)據(jù)庫,定義配置
文件中出現(xiàn)的$basearch表示系統(tǒng)的平臺(tái)(如i386,x86_64這種),
$releasever表示OS發(fā)行版的主版本號(hào)(例如CentOS7.4的主版本號(hào)
就是7)
keepcache=0
// 安裝完成后是否保留軟件包,0為不保留(默認(rèn)為0),1為保留
debuglevel=2
// Debug 信息輸出等級(jí),范圍為0-10,默認(rèn)為2
logfile=/var/log/yum.log
// yum 生成的日志所在
pkgpolicy=newest
// 包的策略。一共有兩個(gè)選項(xiàng),newest和last,這個(gè)作用是如果你
設(shè)置了多個(gè)repository,而同一軟件在不同的repository 中同時(shí)存
在,yum 應(yīng)該安裝哪一個(gè),如果是newest,則yum會(huì)安裝最新版本。
如果是last,則yum 會(huì)將服務(wù)器id 以默認(rèn)方式排序,并選擇最后的
那個(gè)服務(wù)器上的軟件安裝。一般都是選newest
tolerant=0
// 有1和0兩個(gè)選項(xiàng),表示yum 是否容忍命令行發(fā)生與軟件包有關(guān)的
錯(cuò)誤,比如你要安裝1,2,3三個(gè)包,而其中3此前已經(jīng)安裝了,如果你
設(shè)為1,則yum 不會(huì)出現(xiàn)錯(cuò)誤信息。默認(rèn)是0
exactarch=1
// 有1和0兩個(gè)選項(xiàng),設(shè)置為1,則yum 只會(huì)安裝和系統(tǒng)平臺(tái)匹配的軟件
包,例如,yum 不會(huì)將x64的軟件包安裝在適合i386的系統(tǒng)中。默認(rèn)為1
retries=6
// 網(wǎng)絡(luò)連接發(fā)生錯(cuò)誤后的重試次數(shù),如果設(shè)為0,則會(huì)無限重試。默認(rèn)
值為6
obsoletes=1
// 這是一個(gè)update 的參數(shù),具體可參閱yum(8),簡單的說就是相當(dāng)
于upgrade,允許更新舊的RPM包
gpgcheck=1
// 是否檢查gpgkey,1為檢查,0為不檢查
plugins=1
// 是否啟用插件,默認(rèn)1為允許,0表示不允許
installonly_limit=5
// 允許同時(shí)安裝的程序包個(gè)數(shù),這里設(shè)置為5個(gè)
exclude=selinux*
// 排除某些軟件在升級(jí)名單之外,不讓它們升級(jí),可以用通配符,列表
中各個(gè)項(xiàng)目要用空格隔開
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
- 各repository的配置文件
文件為/etc/yum.d/*.repo
[base]
// []中表示此repository的ID,必須唯一不能重復(fù)
name=
// repository的名字
baseurl=
// repository的路徑,支持ftp:// http:// file://
gpgcheck=1
// 是否進(jìn)行g(shù)pgkey的檢查,1為檢查,0為不檢查
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
// gpgkey的路徑
enabled=
// 是否啟用此repository,1為啟用,0為不啟用??墒÷裕÷詴r(shí)表示啟用
cost=
// 指明repository的開銷,默認(rèn)為1000,可省略
- yum命令的使用
- yum install package1 [package2]... 從倉庫源安裝安裝程序包
根據(jù)配置文件的默認(rèn)設(shè)置,如果某程序包存在多個(gè)版本,可能會(huì)默認(rèn)安裝最新的版本,如果需要安裝指定版本需要指明package的版本 - -y選項(xiàng) 安裝卸載時(shí)可以使用該選項(xiàng),例如yum install -y packagename 安裝時(shí)就不需要在交互時(shí)手動(dòng)回答yes了
- --disablerepo= 安裝時(shí)禁用某repository
- --enablerepo= 安裝時(shí)啟用某repository
- --nogpgcheck 安裝時(shí)禁止gpgkey校驗(yàn)
- yum reinstall package1 [package2]... 重新安裝程序包(可以覆蓋安裝)
- yum update package1 [package2]... 升級(jí)安裝程序包
- yum downgrade package1 [package2]... 降級(jí)安裝程序包
- yum check-update 檢查有哪些升級(jí)程序包可用
- yum {remove | erase} package1 [package2]... 卸載程序包,卸載時(shí)會(huì)將依賴于指定要卸載的程序包的相關(guān)程序包也卸載
- yum localinstall /path/to/rpmfile ... 安裝本地的程序包文件,安裝時(shí)也會(huì)智能判斷依賴關(guān)系
- yum localupdate /path/to/rpmfile ... 升級(jí)安裝本地的程序包文件
- yum list [all|available|installed|updates|extras|obsoletes] [glob_exp1]... 查看yum倉庫列表,按需求使用選項(xiàng)和glob表達(dá)式
- yum grouplist [hidden] [groupwildcard] 顯示包組列表,按需使用選項(xiàng)(如是否顯示隱藏和使用組通配符等)
- yum provides|whatprovides feature1 [feature2]... 查看指定的特性(可以是個(gè)文件)是由哪個(gè)程序包提供的
- yum deplist package1 [package2]... 查看指定程序包依賴的capabilities
- yum info package1 ... 顯示包簡要信息
- yum groupinfo group1 ... 顯示包組的簡要信息
- yum groupinstall group1 ... 安裝包組
- yum groupupdate group1 ... 升級(jí)安裝包組
- yum groupremove group1 ... 卸載包組
- yum repolist [all|enabled|disabled] 顯示yum倉庫列表
- yum clean [all|packages|metadata|expire-cache|rpmdb|plugins] 清楚yum緩存數(shù)據(jù)
- yum makecache 手動(dòng)創(chuàng)建yum緩存
CentOS下自建yum倉庫,分別為網(wǎng)絡(luò)源和本地源
通過vim命令創(chuàng)建repo文件
網(wǎng)絡(luò)yum源
~]# vim /etc/yum.repos.d/networks.repo
[networks]
name=networks
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=0
本地yum源
先將CentOS7光盤掛載至/media/cdrom路徑下
~]# ls /media/cdrom/
CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
創(chuàng)建本地repo文件
~]# vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///media/cdrom
gpgcheck=0
查看所有yum源驗(yàn)證效果,可以看到上面添加的2個(gè)yum源已經(jīng)成功
~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
epel/7/x86_64 Epel 12,184
local local 9,591
networks/7/x86_64 networks 9,591
簡述at和crontab命令
at命令
at命令用于設(shè)置一次性的任務(wù)計(jì)劃,其只執(zhí)行一次就結(jié)束。
at命令是由atd服務(wù)提供的:
- CentOS6可以使用 service atd start 來啟動(dòng)該服務(wù)
- CentOS7可以使用 systemctl start atd.service 來啟動(dòng)該服務(wù)
- 命令使用格式 : at [option] TIME
例如添加一個(gè)at任務(wù)
~]$ at 15:00 # 15點(diǎn)執(zhí)行該任務(wù)
at> ls /etc # 輸入需要執(zhí)行的任務(wù)內(nèi)容
at> <EOT> # 使用'鍵盤ctrl+D'退出任務(wù)編輯
job 4 at Sun Dec 31 15:00:00 2017
- -l選項(xiàng) : 也可以使用atq,效果等同,都是顯示所有當(dāng)前用戶的at任務(wù)列表
- -d選項(xiàng) : 也可以使用atrm,效果等同,都是刪除一個(gè)at任務(wù)列表中的at任務(wù)
- -c選項(xiàng) : 打印任務(wù)內(nèi)容到標(biāo)準(zhǔn)輸出
- TIME的格式
- HH:MM [date] : 其中的date可以是具體年月日(例如2017-12-31),也可以是英文表示的日子(例如December 31),甚至?xí)r間上也可以簡化表示(明天下午2點(diǎn):2pm tomorrow)
- HH:MM + #(minutes|hours|days|weeks) : 某時(shí)刻加一個(gè)相對(duì)時(shí)間表示法(例如2pm + 3days三天后的下午2點(diǎn))
- 實(shí)例
~]$ atq # 顯示當(dāng)前任務(wù)列表
4 Sun Dec 31 15:00:00 2017 a sky
5 Sun Dec 31 14:00:00 2017 a sky
6 Mon Jan 1 07:00:00 2018 a sky
~]$ at -d 6 # 刪除6號(hào)任務(wù)
~]$ atq
4 Sun Dec 31 15:00:00 2017 a sky
5 Sun Dec 31 14:00:00 2017 a sky
~]$ at -c 4
#!/bin/sh
# atrun uid=1000 gid=1000
# mail sky 0
umask 2
# 此處省略冗長的環(huán)境變量內(nèi)容
ls /etc # 任務(wù)內(nèi)容
~]$ at -f scripts/num_sum.sh 2pm + 3 days # 3天后的下午2點(diǎn)執(zhí)行腳本文件中的內(nèi)容
job 7 at Wed Jan 3 14:00:00 2018
crontab命令
crontab可以設(shè)置周期性任務(wù)計(jì)劃。它是由crond服務(wù)來實(shí)現(xiàn)的。
- 系統(tǒng)cron任務(wù)
- 它是通過編輯配置文件/etc/crontab來實(shí)現(xiàn)的
文件中添加任務(wù)的格式
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
- 時(shí)間表示的4個(gè)方式
- 時(shí)間位上的*表示每個(gè)有效的取值
25 * * * * # 這就表示每個(gè)整點(diǎn)過25分執(zhí)行一次任務(wù)
- 時(shí)間位上出現(xiàn)*/# 表示相應(yīng)的位上每#個(gè)間隔一次
0 8 * */3 * # 表示每間隔3天的8:00執(zhí)行一次
- 時(shí)間位上#-# 表示連續(xù)時(shí)間
30 1-3 * * * # 表示每天1:30, 2:30, 3:30分別執(zhí)行
- 時(shí)間位上#,# 表示離散的時(shí)間點(diǎn)
15 9 * * 3,5 # 表示周3和周5的9:15執(zhí)行
- command執(zhí)行的結(jié)果,默認(rèn)會(huì)以郵件的形式發(fā)送給用戶,如果不想接收郵件,可以使用輸出重定向command &> /dev/null
- 用戶cron任務(wù)
- 用戶的cron任務(wù)配置文件: /var/spool/cron/路徑下與用戶同名的文件
- 使用crontab命令來編輯用戶cron任務(wù)
- crontab -e : 直接進(jìn)入編輯文件
- crontab -l : 列出已經(jīng)定義的所有任務(wù)
- crontab -r : 清空列表中的所有任務(wù)
制定 每周三凌晨三、五點(diǎn)10分執(zhí)行某個(gè)腳本,輸出當(dāng)前時(shí)間,時(shí)間格式為 2017-12-28 10:00:00
~]$ crontab -e
10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"
~]$ crontab -l
10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"
簡述sed常用操作命令,并舉例
sed是一種行編輯器,它可以使用正則表達(dá)式進(jìn)行模式匹配。它在處理文本時(shí),會(huì)逐行進(jìn)行處理,先將當(dāng)前處理的行存儲(chǔ)在一個(gè)臨時(shí)緩沖區(qū)“模式空間”(pattern space)中,接著用sed命令進(jìn)行處理,處理完成后,默認(rèn)將結(jié)果送至標(biāo)準(zhǔn)輸出,然后在繼續(xù)處理下一行,直至文本的末尾。默認(rèn)操作下sed不會(huì)改變文件的內(nèi)容,如果想保存sed處理后的結(jié)果,可以使用輸出重定向。

sed.png
命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)參數(shù)
- -e script1 -e script2 : -e選項(xiàng)可以指定多條命令執(zhí)行
- -f scriptfile : -f選項(xiàng)可以從文件中讀取命令執(zhí)行操作,同樣可以指定多個(gè)文件處理
- -n選項(xiàng) : 僅顯示sed命令處理后的結(jié)果
- -r選項(xiàng) : 支持?jǐn)U展的正則表達(dá)式
- -i選項(xiàng) : 直接修改源文件
- sed命令
a\ 在當(dāng)前行下面插入文本
i\ 在當(dāng)前行上面插入文本
c\ 把選定的行改為新的文本
= 打印行號(hào)
d 刪除,刪除選擇的行
D 刪除模板塊的第一行
! 表示其后面的命令對(duì)所有沒有前面的條件匹配的行發(fā)生作用
s 替換指定字符
g 表示行內(nèi)全面替換
h 拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)
H 追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)
g 獲得內(nèi)存緩沖區(qū)的內(nèi)容,并替代當(dāng)前模板塊中的文本
G 獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面
x 互換當(dāng)前模式空間和內(nèi)存緩沖區(qū)的內(nèi)容
n 讀取下一個(gè)輸入行進(jìn)入模式空間
N 追加下一個(gè)輸入行到模式空間現(xiàn)有數(shù)據(jù)的后面
p 打印模板塊的行
P(大寫) 打印模板塊的第一行
w file 把處理過的結(jié)果寫入文件
r file 讀取文件內(nèi)容并追加進(jìn)入模式空間
關(guān)于n, N這兩個(gè)命令的執(zhí)行方式是容易搞錯(cuò)的地方,可以參考下面的圖示

sed_n1.png

sed_n2.png

sedN2.png
- sed處理文本示例
僅顯示以"#"開頭的行
~]$ sed -n '/^#/p' /etc/fstab
在所有"#"后添加"*"
~]$ sed 's/\(#\)/\1*/g' /etc/fstab
刪除第5行及其之后的所有行
~]$ sed '5,$d' /etc/fstab
刪除每一行開頭的"#"并刪除文件中的空白行
~]$ sed -e 's/^#//g' -e '/^[[:space:]]*$/d' /etc/fstab
-r選項(xiàng)使用擴(kuò)展正則表達(dá)式,"&"表示每一個(gè)匹配到的內(nèi)容
~]$ echo "this is a test line" | sed -r 's/\w+/[&]/g'
[this] [is] [a] [test] [line]
將issue文件的內(nèi)容添加到fstab文件每一個(gè)以"#"開頭的行之后
~]$ sed '/^#/r /etc/issue' /etc/fstab
將this is a test添加到以"#"開頭的行之后
~]$ sed '/^#/a\this is a test' /etc/fstab
將this is a test添加到以"#"開頭的行之前
~]$ sed '/^#/i\this is a test' /etc/fstab
打印以"#"開頭的行的行號(hào)
~]$ sed '/^#/=' /etc/fstab
為文件每一行添加行號(hào)
~]$ sed = /etc/fstab | sed 'N;s/\n/: /g'
1:
2: #
3: # /etc/fstab
刪除文件的偶數(shù)行
~]$ sed 'n;d' /etc/fstab
僅輸出文件最后2行
~]$ sed 'N;$!D' /etc/fstab
關(guān)于難點(diǎn)N的處理邏輯的實(shí)例解析
~]$ cat ./123
1
2
3
4
5
~]$ sed 'N;P' ./123
1
1
2
3
3
4
5
~]$ sed -n 'N;P' ./123
1
3
/ 從上面的多次處理結(jié)果可以得出sed從首行開始每次有2行進(jìn)入模式空間進(jìn)行處理,
P命令打印空間中的第1行,當(dāng)讀取到最后一行第5行時(shí),由于沒有下一行了所以無法
執(zhí)行N命令,于此同時(shí)分號(hào)后面的P命令也沒有被執(zhí)行
將文件的所有行逆序輸出
~]$ sed '1!G;h;$!d' ./123
5
4
3
2
1