簡述rpm與yum命令的常見選項倦卖,并舉例
rpm命令
rpm命令用來手動安裝rpm格式的程序包麦牺,使用格式為
- rpm [option] path/to/rpmfile
- -i安裝選項
- 使用格式rpm -i[installopition] path/to/rpmfile
- -h選項 : 使用#來顯示安裝進度
- -v選項 : 顯示安裝過程
- -vv選項 : 顯示更詳細的安裝過程比-v更詳細筒捺,按需求使用
- --test選項 : 不進行實際安裝操作司浪,而是進行安裝環(huán)境的測試微饥,可以查看安裝是否可以成功
- --nodeps選項 : 忽略依賴關系遂庄,這樣即使安裝成功,也可能由于依賴關系造成運行問題
- --replacepkgs選項 : 覆蓋安裝
- --force選項 : 強制安裝
- 對于新安裝程序包塔拳,常用的操作是rpm -ivh path/to/rpmfile
- 升級選項
- -U : 升級安裝或全新安裝
- -F : 升級安裝
- 同安裝選項一樣鼠证,常用組合有-Uvh -Fvh
- 同安裝選項一樣,也可以使用--test --nodeps選項
- --oldpackage選項 : 降級安裝舊版本程序包 rpm -U --oldpackage path/to/rpmfile
- 卸載
- -e : 卸載已安裝的rpm程序靠抑,使用 rpm -e packagename
- 使用-e進行卸載時也可以使用--test --nodeps選項
- --allmatches選項 : 卸載所有匹配的安裝量九,例如一個rpm程序的多個版本
- 對于卸載,需要注意的是如果程序包的配置文件在安裝后被修改過孕荠,則卸載時并不會刪除這些文件娩鹉,而是將它們重命名(加后綴 .rpmsave)
- 查詢
- 使用格式rpm -q[queryoption] [packagename] [file]
- 直接使用rpm -q packagename... : 查詢某程序包是否安裝,包名可以是多個
- -i選項 : info顯示程序包簡要信息 rpm -qi packagename
- -a選項 : 顯示已安裝的程序包列表 rpm -qa
- -f選項 : 后跟一個文件稚伍,查詢此文件是由哪個程序包生成的 rpm -qf filename
- -p選項 : 查詢某個未安裝的程序包弯予,可與i選項連用 rpm -qpi packagename 查詢rpm倉庫中指定的未安裝程序包的簡要信息
- -l選項 : 顯示某個程序包生成的文件列表 rpm -ql packagename
- -c選項 : 顯示某程序包生成的配置文件 rpm -qc packagename
- -d選項 : 顯示某程序包生成的幫助文件 rpm -qd packagename
- --provides選項 : 顯示程序包提供的capabilities
- --requires選項 : 顯示程序包所依賴的capabilities
- --scripts選項 : 查詢程序包安裝或卸載時執(zhí)行的腳本,這些腳本可以分為以下4類:
- preinstall : 程序包安裝之前執(zhí)行的腳本
- postinstall : 程序包安裝完成之后執(zhí)行的腳本
- preuninstall : 程序包卸載之前執(zhí)行的腳本
- postuninstall : 程序包卸載之后執(zhí)行的腳本
- 校驗
- rpm -V packagename : 驗證程序包安裝之后生成的文件是否發(fā)生了改變
- 程序包合法性驗證
- 先導入驗證密匙文件 rpm --import path/to/key-file
- 再使用命令驗證程序包 rpm -K path/to/packagefile
- 創(chuàng)建rpm包管理數(shù)據(jù)庫个曙,創(chuàng)建的數(shù)據(jù)庫文件保存路徑為/var/lib/rpm下
- --initdb : 初始化數(shù)據(jù)庫锈嫩,當rpm包管理數(shù)據(jù)庫不存在時新建它
- --rebuilddb : 重建數(shù)據(jù)庫,無論之前數(shù)據(jù)庫是否存在
- --dbpath DIRECTORY : 可以指明建立的數(shù)據(jù)庫文件保存路徑垦搬,即改變默認的/var/lib/rpm呼寸,例如 rpm --rebuilddb --dbpath /var/rpmdb
yum命令
yum命令可以更智能的管理和安裝rpm程序包,它可以自動處理程序包之前的依賴關系猴贰,使用起來更加方便对雪。
- yum的配置文件
- 全局配置文件/etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
// yum 緩存的目錄,yum 在此存儲下載的rpm 包和數(shù)據(jù)庫米绕,定義配置
文件中出現(xiàn)的$basearch表示系統(tǒng)的平臺(如i386,x86_64這種)瑟捣,
$releasever表示OS發(fā)行版的主版本號(例如CentOS7.4的主版本號
就是7)
keepcache=0
// 安裝完成后是否保留軟件包,0為不保留(默認為0)栅干,1為保留
debuglevel=2
// Debug 信息輸出等級迈套,范圍為0-10,默認為2
logfile=/var/log/yum.log
// yum 生成的日志所在
pkgpolicy=newest
// 包的策略碱鳞。一共有兩個選項桑李,newest和last,這個作用是如果你
設置了多個repository窿给,而同一軟件在不同的repository 中同時存
在贵白,yum 應該安裝哪一個,如果是newest填大,則yum會安裝最新版本戒洼。
如果是last,則yum 會將服務器id 以默認方式排序允华,并選擇最后的
那個服務器上的軟件安裝圈浇。一般都是選newest
tolerant=0
// 有1和0兩個選項寥掐,表示yum 是否容忍命令行發(fā)生與軟件包有關的
錯誤,比如你要安裝1,2,3三個包磷蜀,而其中3此前已經安裝了召耘,如果你
設為1,則yum 不會出現(xiàn)錯誤信息褐隆。默認是0
exactarch=1
// 有1和0兩個選項污它,設置為1,則yum 只會安裝和系統(tǒng)平臺匹配的軟件
包庶弃,例如衫贬,yum 不會將x64的軟件包安裝在適合i386的系統(tǒng)中。默認為1
retries=6
// 網絡連接發(fā)生錯誤后的重試次數(shù)歇攻,如果設為0固惯,則會無限重試。默認
值為6
obsoletes=1
// 這是一個update 的參數(shù)缴守,具體可參閱yum(8)葬毫,簡單的說就是相當
于upgrade,允許更新舊的RPM包
gpgcheck=1
// 是否檢查gpgkey屡穗,1為檢查贴捡,0為不檢查
plugins=1
// 是否啟用插件,默認1為允許村砂,0表示不允許
installonly_limit=5
// 允許同時安裝的程序包個數(shù)烂斋,這里設置為5個
exclude=selinux*
// 排除某些軟件在升級名單之外,不讓它們升級础废,可以用通配符源祈,列表
中各個項目要用空格隔開
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,必須唯一不能重復
name=
// repository的名字
baseurl=
// repository的路徑色迂,支持ftp:// http:// file://
gpgcheck=1
// 是否進行gpgkey的檢查,1為檢查手销,0為不檢查
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
// gpgkey的路徑
enabled=
// 是否啟用此repository歇僧,1為啟用,0為不啟用锋拖≌┖罚可省略,省略時表示啟用
cost=
// 指明repository的開銷兽埃,默認為1000侥钳,可省略
- yum命令的使用
- yum install package1 [package2]... 從倉庫源安裝安裝程序包
根據(jù)配置文件的默認設置,如果某程序包存在多個版本柄错,可能會默認安裝最新的版本舷夺,如果需要安裝指定版本需要指明package的版本 - -y選項 安裝卸載時可以使用該選項苦酱,例如yum install -y packagename 安裝時就不需要在交互時手動回答yes了
- --disablerepo= 安裝時禁用某repository
- --enablerepo= 安裝時啟用某repository
- --nogpgcheck 安裝時禁止gpgkey校驗
- yum reinstall package1 [package2]... 重新安裝程序包(可以覆蓋安裝)
- yum update package1 [package2]... 升級安裝程序包
- yum downgrade package1 [package2]... 降級安裝程序包
- yum check-update 檢查有哪些升級程序包可用
- yum {remove | erase} package1 [package2]... 卸載程序包,卸載時會將依賴于指定要卸載的程序包的相關程序包也卸載
- yum localinstall /path/to/rpmfile ... 安裝本地的程序包文件给猾,安裝時也會智能判斷依賴關系
- yum localupdate /path/to/rpmfile ... 升級安裝本地的程序包文件
- yum list [all|available|installed|updates|extras|obsoletes] [glob_exp1]... 查看yum倉庫列表疫萤,按需求使用選項和glob表達式
- yum grouplist [hidden] [groupwildcard] 顯示包組列表,按需使用選項(如是否顯示隱藏和使用組通配符等)
- yum provides|whatprovides feature1 [feature2]... 查看指定的特性(可以是個文件)是由哪個程序包提供的
- yum deplist package1 [package2]... 查看指定程序包依賴的capabilities
- yum info package1 ... 顯示包簡要信息
- yum groupinfo group1 ... 顯示包組的簡要信息
- yum groupinstall group1 ... 安裝包組
- yum groupupdate group1 ... 升級安裝包組
- yum groupremove group1 ... 卸載包組
- yum repolist [all|enabled|disabled] 顯示yum倉庫列表
- yum clean [all|packages|metadata|expire-cache|rpmdb|plugins] 清楚yum緩存數(shù)據(jù)
- yum makecache 手動創(chuàng)建yum緩存
CentOS下自建yum倉庫敢伸,分別為網絡源和本地源
通過vim命令創(chuàng)建repo文件
網絡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源驗證效果扯饶,可以看到上面添加的2個yum源已經成功
~]# 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命令用于設置一次性的任務計劃,其只執(zhí)行一次就結束池颈。
at命令是由atd服務提供的:
- CentOS6可以使用 service atd start 來啟動該服務
- CentOS7可以使用 systemctl start atd.service 來啟動該服務
- 命令使用格式 : at [option] TIME
例如添加一個at任務
~]$ at 15:00 # 15點執(zhí)行該任務
at> ls /etc # 輸入需要執(zhí)行的任務內容
at> <EOT> # 使用'鍵盤ctrl+D'退出任務編輯
job 4 at Sun Dec 31 15:00:00 2017
- -l選項 : 也可以使用atq尾序,效果等同,都是顯示所有當前用戶的at任務列表
- -d選項 : 也可以使用atrm躯砰,效果等同每币,都是刪除一個at任務列表中的at任務
- -c選項 : 打印任務內容到標準輸出
- TIME的格式
- HH:MM [date] : 其中的date可以是具體年月日(例如2017-12-31),也可以是英文表示的日子(例如December 31)弃揽,甚至時間上也可以簡化表示(明天下午2點:2pm tomorrow)
- HH:MM + #(minutes|hours|days|weeks) : 某時刻加一個相對時間表示法(例如2pm + 3days三天后的下午2點)
- 實例
~]$ atq # 顯示當前任務列表
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號任務
~]$ 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)境變量內容
ls /etc # 任務內容
~]$ at -f scripts/num_sum.sh 2pm + 3 days # 3天后的下午2點執(zhí)行腳本文件中的內容
job 7 at Wed Jan 3 14:00:00 2018
crontab命令
crontab可以設置周期性任務計劃脯爪。它是由crond服務來實現(xiàn)的。
- 系統(tǒng)cron任務
- 它是通過編輯配置文件/etc/crontab來實現(xiàn)的
文件中添加任務的格式
# 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
- 時間表示的4個方式
- 時間位上的*表示每個有效的取值
25 * * * * # 這就表示每個整點過25分執(zhí)行一次任務
- 時間位上出現(xiàn)*/# 表示相應的位上每#個間隔一次
0 8 * */3 * # 表示每間隔3天的8:00執(zhí)行一次
- 時間位上#-# 表示連續(xù)時間
30 1-3 * * * # 表示每天1:30, 2:30, 3:30分別執(zhí)行
- 時間位上#,# 表示離散的時間點
15 9 * * 3,5 # 表示周3和周5的9:15執(zhí)行
- command執(zhí)行的結果矿微,默認會以郵件的形式發(fā)送給用戶痕慢,如果不想接收郵件,可以使用輸出重定向command &> /dev/null
- 用戶cron任務
- 用戶的cron任務配置文件: /var/spool/cron/路徑下與用戶同名的文件
- 使用crontab命令來編輯用戶cron任務
- crontab -e : 直接進入編輯文件
- crontab -l : 列出已經定義的所有任務
- crontab -r : 清空列表中的所有任務
制定 每周三凌晨三涌矢、五點10分執(zhí)行某個腳本掖举,輸出當前時間,時間格式為 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是一種行編輯器塔次,它可以使用正則表達式進行模式匹配。它在處理文本時名秀,會逐行進行處理励负,先將當前處理的行存儲在一個臨時緩沖區(qū)“模式空間”(pattern space)中,接著用sed命令進行處理匕得,處理完成后继榆,默認將結果送至標準輸出,然后在繼續(xù)處理下一行汁掠,直至文本的末尾略吨。默認操作下sed不會改變文件的內容,如果想保存sed處理后的結果考阱,可以使用輸出重定向翠忠。
命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)參數(shù)
- -e script1 -e script2 : -e選項可以指定多條命令執(zhí)行
- -f scriptfile : -f選項可以從文件中讀取命令執(zhí)行操作,同樣可以指定多個文件處理
- -n選項 : 僅顯示sed命令處理后的結果
- -r選項 : 支持擴展的正則表達式
- -i選項 : 直接修改源文件
- sed命令
a\ 在當前行下面插入文本
i\ 在當前行上面插入文本
c\ 把選定的行改為新的文本
= 打印行號
d 刪除乞榨,刪除選擇的行
D 刪除模板塊的第一行
! 表示其后面的命令對所有沒有前面的條件匹配的行發(fā)生作用
s 替換指定字符
g 表示行內全面替換
h 拷貝模板塊的內容到內存中的緩沖區(qū)
H 追加模板塊的內容到內存中的緩沖區(qū)
g 獲得內存緩沖區(qū)的內容秽之,并替代當前模板塊中的文本
G 獲得內存緩沖區(qū)的內容当娱,并追加到當前模板塊文本的后面
x 互換當前模式空間和內存緩沖區(qū)的內容
n 讀取下一個輸入行進入模式空間
N 追加下一個輸入行到模式空間現(xiàn)有數(shù)據(jù)的后面
p 打印模板塊的行
P(大寫) 打印模板塊的第一行
w file 把處理過的結果寫入文件
r file 讀取文件內容并追加進入模式空間
關于n, N這兩個命令的執(zhí)行方式是容易搞錯的地方,可以參考下面的圖示
- 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選項使用擴展正則表達式政溃,"&"表示每一個匹配到的內容
~]$ echo "this is a test line" | sed -r 's/\w+/[&]/g'
[this] [is] [a] [test] [line]
將issue文件的內容添加到fstab文件每一個以"#"開頭的行之后
~]$ 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
打印以"#"開頭的行的行號
~]$ sed '/^#/=' /etc/fstab
為文件每一行添加行號
~]$ 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
關于難點N的處理邏輯的實例解析
~]$ 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
/ 從上面的多次處理結果可以得出sed從首行開始每次有2行進入模式空間進行處理趾访,
P命令打印空間中的第1行,當讀取到最后一行第5行時董虱,由于沒有下一行了所以無法
執(zhí)行N命令扼鞋,于此同時分號后面的P命令也沒有被執(zhí)行
將文件的所有行逆序輸出
~]$ sed '1!G;h;$!d' ./123
5
4
3
2
1