1、簡述rpm與yum命令的常見選項,并舉例
RPM:
rpm命令:rpm ?[OPTIONS] ?[PACKAGE_FILE]
安裝:-i, –install
升級:-U, –update, -F, –freshen
卸載:-e, –erase
查詢:-q, –query
校驗:-V, –verify
數據庫維護:—rebuilddb, –initdb
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE …
rpm ?-ivh ?PACKAGE_FILE …
]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
]# cat /etc/shells
GENERAL OPTIONS:
-v:verbose,詳細信息
-vv:更詳細的輸出
]# rpm -e zsh
]# rpm -ivvh zsh-5.0.2-28.el7.x86_64.rpm
[install-options]:
-h:hash marks輸出進度條;每個#表示2%的進度;
–test:測試安裝,檢查并報告依賴關系及沖突消息等;
]# rpm -ivh –test zsh-html-5.0.2-28.el7.x86_64.rpm
–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:查詢指定的程序包是否已經安裝,及其版本;
]# rpm -q zsh
-a, –all:查詢所有已經安裝過的包;
]# rpm -qa
-f ?FILE:查詢指定的文件由哪個程序包安裝生成;
]# rpm -qf /etc/fstab
-p, –package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作;
]# rpm -qpl zsh-5.0.2-28.el7.x86_64.rpm
]# rpm -qpi zsh-5.0.2-28.el7.x86_64.rpm
]# rpm -qpc zsh-5.0.2-28.el7.x86_64.rpm
]# rpm -qp –scripts zsh-5.0.2-28.el7.x86_64.rpm
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供;
[root@bogon ~]# rpm -q –provides zsh
config(zsh) = 5.0.2-28.el7
zsh = 5.0.2-28.el7
zsh(x86-64) = 5.0.2-28.el7
[root@bogon ~]# rpm -q –whatprovides zsh
zsh-5.0.2-28.el7.x86_64
[root@bogon ~]# rpm -q –whatprovides ‘config(zsh)’
zsh-5.0.2-28.el7.x86_64
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
]# rpm -q –whatrequires bash
[query-options]
–changelog:查詢rpm包的changlog;
]# rpm -q –changelog zsh
-l, –list:程序安裝生成的所有文件列表;
]# rpm -ql zsh
-i, –info:程序包相關的信息,版本號、大小、所屬的包組,等;
]# rpm -qi zsh
-c, –configfiles:查詢指定的程序包提供的配置文件;
]# rpm -qc zsh
-d, –docfiles:查詢指定的程序包提供的文檔;
]# rpm -qd zsh
–provides:列出指定的程序包提供的所有的CAPABILITY;
]# rpm -q –provides zsh
-R, –requires:查詢指定的程序包的依賴關系;
]# rpm -qR zsh
(查詢結果為CAPABILITY)
–scripts:查看程序包自帶的腳本片斷;
]# rpm -q –scripts zsh
用法:
-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]
]# rpm -V zsh
]# rpm -V –nofiles zsh
(Don’t verify any attributes of package files.)
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
(CAPABILITY發生改變)
]# rpm -V zsh
S.5….T.? d /usr/share/doc/zsh-5.0.2/FAQ
包來源合法性驗正和完整性驗正:
來源合法性驗正:
完整性驗正:
獲取并導入信任的包制作者的密鑰:
對于CentOS發行版來說:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
在光盤中獲取并導入信任的包制作者的密鑰:
]# rpm –import RPM-GPG-KEY-CentOS-7
]# cd Packages/
]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
驗正:
(1) 安裝此組織簽名的程序時,會自動執行驗正;
(2) 手動驗正:rpm -K PACKAGE_FILE
]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm
數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操作:通過此處的數據庫進行;
獲取幫助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {–initdb|–rebuilddb} [–dbpath DIRECTORY] [–root DIRECTORY]
–initdb:初始化數據庫,當前無任何數據庫可實始化創建一個新的;當前有時不執行任何操作;
]# mkdir /tmp/rpm
]# rpm –initdb –dbpath=/tmp/rpm
]# ls /tmp/rpm/
–rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
]# rpm –rebuilddb –dbpath=/tmp/rpm
]# ls /tmp/rpm/
YUM:
yum命令的用法:
yum [options] [command] [package …]
顯示倉庫列表:
repolist [all|enabled|disabled]
(默認是enabled)
顯示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] […]
]# yum list php*
# yum list {available|installed|updates} [glob_exp1] […]
(available表示倉庫中有但尚未安裝的)
安裝程序包:
install package1 [package2] […]
reinstall package1 [package2] […] ?(重新安裝)
升級程序包:
update [package1] [package2] […]
downgrade package1 [package2] […] (降級)
檢查可用升級:
check-update
卸載程序包:
remove | erase package1 [package2] […]
查看程序包information:
info […]
]# yum info python
查看指定的特性(可以是某文件)是由哪個程序包所提供:
provides | whatprovides feature1 [feature2] […]
清理本地緩存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:
makecache
搜索:
search string1 [string2] […]
以指定的關鍵字搜索程序包名及summary信息;
查看指定包所依賴的capabilities:
deplist package1 [package2] […]
]# yum deplist python
查看yum事務歷史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
]# yum history packages-list python
]# yum history list
安裝及升級本地程序包:
* localinstall rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use install)
]# yum localinstall zsh-5.0.2-28.el7.x86_64.rpm
* localupdate rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use update)
(在centos6及以上版本中,可以直接使用yum install來安裝rpm包)
包組管理的相關命令:
* groupinstall group1 [group2] […]
]# yum groupinstall “Development Tools”
* groupupdate group1 [group2] […]
* grouplist [hidden] [groupwildcard] […]
]# yum grouplist
* groupremove group1 [group2] […]
* groupinfo group1 […]
]# yum groupinfo “Development Tools”
yum的命令行選項:
–nogpgcheck:禁止進行gpg check;
-y: 自動回答為“yes”;
-q:靜默模式;
–disablerepo=repoidglob:臨時禁用此處指定的repo;
]# yum –disablerepo=base install tree
–enablerepo=repoidglob:臨時啟用此處指定的repo;
]# yum –enablerepo=base install tree
注意:“base”為repo_name,在/etc/yum.repos.d/xxxxxx.repo文件里,名字為[base]的倉庫,并且當enabled=0時,安裝包如果報錯,建議把yum源換成官方的
–noplugins:禁用所有插件;
2、自建yum倉庫,分別為網絡源和本地源
創建yum倉庫:
createrepo [options] <directory>
]# yum install createrepo
]# mkdir -p /yum/repo
]# cp /media/cdrom/Packages/*.rpm /yum/repo
]# cd /yum/repo
]# createrepo ./
]# cd repodata
]# ls
(repodata目錄里有一個以.xml結尾的文件,此文件就是緩存文件,是本地緩存與文件服務器上的.xml校驗的文件)
]# cd /etc/yum.repos.d/
]# vim centos-local.repo
[base]
name=CentOS7 Local
baseurl=file:///yum/repo
gpgcheck=1
]# yum repolist
]# yum install zsh
網絡源為:baserul指向網絡URL,例如:https://opsx.alibaba.com/mirror
3、簡述at和crontab命令,制定 每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00
未來的某時間點執行一次某任務:at, batch
周期性運行某任務:crontab
兩種執行結果:會通過郵件發送給用戶
? ?at命令:
at ?[OPTION]… TIME
TIME:
HH:MM [YYYY-mm-dd]
noon(中午12點),midnight(晚上12點), teatime(下午4點)
tomorrow
now+#
UNIT:minutes, hours, days, OR weeks
]# at now+1min
at> ls /var
at> <EOT>
(ctrl+d提交)
]# at -l
(列出此前提交的任務)
如果無法收到mail,需要啟動atd服務,在centos7中啟動方法如下:]# systemctl start atd
at的作業有隊列,用單個字母表示,默認都使用a隊列;
常用選項:
-l:查看作業隊列,相當于atq
]# at -l
-f /PATH/FROM/SOMEFILE:從指定文件中讀取作業任務,而不用再交互式輸入;
]# at -f at.task now+5min
-d:刪除指定的作業,相當于atrm;
]# at -l
]# at -d 4
-c:查看指定作業的具體內容;
]# at -c 5
-q QUEUE:指明隊列;
]# at -f at.task now+5min -q b
]# at -l
? ?周期性任務計劃:cron
服務程序:
cronie:主程序包,提供了crond守護進程及相關輔助工具;
確保crond守護進程(daemon)處于運行狀態:
CentOS 7:
systemctl ?status ?crond.service
Active: active (running) … …
CentOS 6:
service ?crond ?status
… is running
向crond提交作業的方式不同于at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器直接編輯此文件;要使用crontab命令;
cron任務分為兩類:
系統cron任務:主要用于實現系統自身的維護;
手動編輯:/etc/crontab文件
用戶cron任務:
命令:crontab命令
系統cron的配置格式:/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
注意:
(1) 每一行定義一個周期性任務,共7個字段;
* ?* ?* ?* ?* : 定義周期性時間
user-name : 運行任務的用戶身份
command to be executed:任務
(2) 此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;
(3) 執行結果郵件發送給MAILTO指定的用戶
用戶cron的配置格式:/var/spool/cron/USERNAME
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
# | ?| ?| ?| ?|
# * ?* ?* ?* ?* ? command to be executed
注意:
(1) 每行定義一個cron任務,共6個字段;
(2) 此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;
(3) 郵件發送給當前用戶;
時間表示法:
(1) 特定值;
給定時間點有效取值范圍內的值;
注意:day of week和day of month一般不同時使用;
(2) *
給定時間點上有效取值范圍內的所有值;表“每..”
(3) 離散取值:,
在時間點上使用逗號分隔的多個值;
#,#,#
(4) 連續取值:-
在時間點上使用-連接開頭和結束
#-#
(5) 在指定時間點上,定義步長:
/#:#即步長;
注意:
(1) 指定的時間點不能被步長整除時,其意義將不復存在;
(2) 最小時間單位為“分鐘”,想完成“秒”級任務,得需要額外借助于其它機制;
定義成每分鐘任務:而在利用腳本實現在每分鐘之內,循環執行多次;
示例:
(1) 3 * * * *:每小時執行一次;每小時的第3分鐘;
(2) 3 4 * * 5:每周執行一次;每周5的4點3分;
(3) 5 6 7 * *:每月執行一次;每月的7號的6點5分;
(4) 7 8 9 10 *:每年執行一次;每年的10月9號8點7分;
(5) 9 8 * * 3,7:每周三和周日;
(6) 0 8,20 * * 3,7:
(7) 0 9-18 * * 1-5:
(8) */5 * * * *:每5分鐘執行一次某任務;
(9) */7 * * * *: ? 每7分鐘執行一次某任務,最后4分鐘執行一次;
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-e:編輯任務;
-l:列出所有任務;
-r:移除所有任務;即刪除/var/spool/cron/USERNAME文件;
-i:在使用-r選項移除所有任務時提示用戶確認;
-u user:root用戶可為指定用戶管理cron任務;
注意:運行結果以郵件通知給當前用戶;如果拒絕接收郵件:
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
注意:(1)為輸出真重定向到“黑洞中”;(2)為輸出無論真假都定向到“黑洞”中,以(2)為例,當執行一個命令,如果這個命令寫錯,比如ls寫成lssss,此時系統無法識別這個命令,所以就不會執行命令之后的內容了,此時會發一封郵件到用戶賬號中,再比如,如果啟動一個服務,此時服務故障無法開啟,雖然錯誤,但命令能夠從頭到尾執行一遍,所以最后會重定向到“黑洞中”,并不會發送郵件到用戶賬號中;
注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置于單引號中的%不用轉義亦可;
]# crontab -l
10 3,5 * * 3 echo “$(date +’\%F \%T’)” >>/tmp/a.txt
4、簡述sed常用操作命令,并舉例
sed [OPTION]… ?‘script’ ?[input-file] …
script:
地址定界編輯命令
常用選項:
-n:不輸出模式空間中的內容至屏幕;
]# sed -n ‘/^#/d’ /etc/fstab
]# sed -n ‘1~2p’ /etc/fstab
]# sed -n ‘/^[^#]/p’ /etc/fstab
-e script, –expression=script:多點編輯;
]#? sed -e ‘s@^#[[:space:]]*@@’ -e ‘/^UUID/d’ /etc/fstab
-f ?/PATH/TO/SED_SCRIPT_FILE
每行一個編輯命令;
-r, –regexp-extended:支持使用擴展正則表達式;
-i[SUFFIX], –in-place[=SUFFIX]:直接編輯原文件 ;
地址定界:
(1) 空地址:對全文進行處理;
(2) 單地址:
#:指定行;
/pattern/:被此模式所匹配到的每一行;
(3) 地址范圍
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/
$:最后一行;
(4) 步進:~
1~2:所有奇數行
2~2:所有偶數行
編輯命令:
d:刪除;
]# sed ‘1,5d’ /etc/fstab
]# sed ‘/^#/d’ /etc/fstab
]# sed ‘3d’ /etc/fstab
]# sed ‘1~2d’ /etc/fstab
p:顯示模式空間中的內容;
]# sed ‘1~2p’ /etc/fstab
a ?\text:在行后面追加文本“text”,支持使用\n實現多行追加;
]# sed ‘3a\new line’ /etc/fstab
]# sed ‘/^UUID/a\NEW LINE’ /etc/fstab
i ?\text:在行前面插入文本“text”,支持使用\n實現多行插入;
]# sed ‘3i\new line’ /etc/fstab
c ?\text:把匹配到的行替換為此處指定的文本“text”;
]# sed ‘/^UUID/c\NEW LINE’ /etc/fstab
w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;
]# sed ‘/^[^#]/w/tmp/fstab.new’ /etc/fstab
r ?/PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;文件合并;
]# sed ‘3r/etc/issue’ /etc/fstab
]# sed ‘/^UUID/r/etc/issue’ /etc/fstab
=:為模式匹配到的行打印行號;
]# sed ‘/^UUID/=’ /etc/fstab
!:條件取反;
地址定界!編輯命令;
]# sed ‘/^#/!d’ /etc/fstab
s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;
替換標記:
g:全局替換;
w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;
p:顯示替換成功的行;
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/103064