rpm與yum的使用方法,通過yum自建倉庫;通過at和crontab命令定期執行指令碼
阿新 • • 發佈:2018-11-22
1、簡述rpm與yum命令的常見選項,並舉例
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 ...
安裝選項: -v:verbose,詳細資訊 -vv:更詳細的輸出 -h:hash marks輸出進度條;每個#表示2%的進度; --test:測試安裝,檢查並報告依賴關係及衝突訊息等; --nodeps:忽略依賴關係;不建議; --replacepkgs:重新安裝 --noscripts:不執行程式包指令碼 preinstall:安裝過程開始之前執行的指令碼,%pre , --nopre postinstall:安裝過程完成之後執行的指令碼,%post , --nopost preuninstall:解除安裝過程真正開始執行之前執行的指令碼,%preun, --nopreun postuninstall:解除安裝過程完成之後執行的指令碼,%postun , --nopostun --nosignature:不檢查包簽名信息,不檢查來源合法性; --nodigest:不檢查包完整性資訊;
示例:
[[email protected] ~]# rpm -ivh lrzsz-0.12.20-36.el7.x86_64.rpm
準備中... ################################# [100%]
軟體包 lrzsz-0.12.20-36.el7.x86_64 已經安裝
[[email protected] ~]#
升級:
命令格式: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
解除安裝:
命令格式:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
選項:
--allmatches:解除安裝所有匹配指定名稱的程式包的各版本;
--nodeps:忽略依賴關係
--test:測試解除安裝,dry run模式
示例:
[[email protected] ~]# rpm -evh lrzsz-0.12.20-36.el7.x86_64
準備中... ################################# [100%]
正在清理/刪除...
1:lrzsz-0.12.20-36.el7 ################################# [100%]
[ [email protected] ~]#
查詢:
命令格式:
rpm {-q|--query} [select-options] [query-options]
選項
[select-options]
-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, ...
[[email protected] ~]# rpm -ql lrzsz-0.12.20-36.el7.x86_64
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz
[[email protected] ~]# rpm -qf /usr/bin/sz
lrzsz-0.12.20-36.el7.x86_64
[[email protected] ~]# rpm -qi lrzsz-0.12.20-36.el7.x86_64
Name : lrzsz
Version : 0.12.20
Release : 36.el7
Architecture: x86_64
Install Date: 2018年11月21日 星期三 12時31分49秒
Group : Applications/Communications
Size : 184846
License : GPLv2+
Signature : RSA/SHA256, 2014年07月04日 星期五 11時35分32秒, Key ID 24c6a8a7f4a80eb5
Source RPM : lrzsz-0.12.20-36.el7.src.rpm
Build Date : 2014年06月10日 星期二 07時29分11秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://×××w.ohse.de/uwe/software/lrzsz.html
Summary : The lrz and lsz modem communications programs
Description :
Lrzsz (consisting of lrz and lsz) is a cosmetically modified
zmodem/ymodem/xmodem package built from the public-domain version of
the rzsz package. Lrzsz was created to provide a working GNU
copylefted Zmodem solution for Linux systems.
[[email protected] ~]# rpm -qd lrzsz-0.12.20-36.el7.x86_64
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz
[[email protected] ~]#
校驗:
命令格式:
rpm {-V|--verify} [select-options] [verify-options]
S: file Size differs檔案的容量大小是否被篡改
M:Mode differs檔案的型別或檔案的屬性是否被改變
5:MD5 sum differs MD5這一種指紋碼的內容已經不同
D:Device major/minor number mismatch裝置的主/次程式碼已經改變
L:readLink(2) path mismatch Link路徑已被改變
U:User ownership differs 檔案的所屬人已被改變
G:Group ownership differs 檔案的所屬群組已被改變
T:mTime differs 檔案的建立時間已被改變
P:caPabilities differ
示例:
[[email protected] ~]# rpm -V lrzsz-0.12.20-36.el7.x86_64
[[email protected] ~]# echo "123" >> /usr/bin/rz
[[email protected] ~]# rpm -V lrzsz-0.12.20-36.el7.x86_64
S.5....T. /usr/bin/rb
S.5....T. /usr/bin/rx
S.5....T. /usr/bin/rz
[[email protected] ~]#
資料庫維護
命令格式:
rpm {--initdb|--rebuilddb}
選項:
initdb: 初始化
如果事先不存在資料庫,則新建之
否則,不執行任何操作
rebuilddb:重建已安裝的包頭的資料庫索引目錄
YUM命令:
常見命令:
顯示倉庫列表:
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 [...]
2、自建yum倉庫,分別為網路源和本地源
本地源
[[email protected] ~]# yum repolist
已載入外掛:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源標識 源名稱 狀態
c7-media aaa 9,591
repolist: 9,591
[[email protected] ~]# cat /etc/yum.repos.d/bendi.repo
[c7-media]
name=aaa
baseurl=file:///media/cdrom/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
網路源
[[email protected] cdrom]# cat /etc/yum.repos.d/internet.repo
[internet]
name=aliyun
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
[[email protected] cdrom]# yum repolist
已載入外掛:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源標識 源名稱 狀態
internet aliyun 9,911
repolist: 9,911
[[email protected] cdrom]#
3、簡述at和crontab命令,制定 每週三凌晨三、五點10分執行某個指令碼,輸出當前時間,時間格式為 2017-12-28 10:00:00
at:
d
命令格式:
at [option] TIME
常用選項:
-V 顯示版本資訊:
-l: 列出指定佇列中等待執行的作業;相當於atq
-d: 刪除指定的作業;相當於atrm
-c: 檢視具體作業任務
-f /path/from/somefile:從指定的檔案中讀取任務
-m:當任務被完成之後,將給使用者傳送郵件,即使沒有標準輸出
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關使用者
TIME:
定義出什麼時候進行 at 這項任務的時間
HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}
用法示例:
[[email protected] mail]# at now+2min
at> echo hello!
at> <EOT>
job 7 at Wed Nov 21 15:38:00 2018
[[email protected] mail]# at -l
7 Wed Nov 21 15:38:00 2018 a root
[[email protected] mail]# at -l
您在 /var/spool/mail/root 中有新郵件
[[email protected] mail]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 3 messages 1 new
1 root Wed Nov 21 15:27 17/595 "Output from your job 4"
2 root Wed Nov 21 15:32 15/505 "Output from your job 6"
>N 3 root Wed Nov 21 15:38 14/488 "Output from your job 7"
& 3
Message 3:
From [email protected] Wed Nov 21 15:38:01 2018
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Subject: Output from your job 7
To: [email protected]
Date: Wed, 21 Nov 2018 15:38:01 +0800 (CST)
From: [email protected] (root)
Status: R
hello!
&
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
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
注意:對於cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義,將%放置於單引號中,則可不用轉義;管理cron任務;
每週三凌晨三、五點10分輸出當前時間:
[[email protected] ~]# crontab -l
10 3,5 * * 3 /bin/date '+%F %H:%M:%S '
4、簡述sed常用操作命令,並舉例
命令格式:
sed [option]... 'script' inputfile...
常用選項:
-n:不輸出模式空間內容到螢幕,即不自動列印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定檔案中讀取編輯指令碼
-r: 支援使用擴充套件正則表示式
-i.bak: 備份檔案並原處編輯
script:
地址命令,即由於地址定界和編輯命令組成
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#: 指定的行,$:最後一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址範圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進
1~2 奇數行
2~2 偶數行
編輯命令:
d: 刪除模式空間匹配的行,並立即啟用下一輪迴圈
p:列印當前模式空間內容,追加到預設輸出之後
a [\]text:在指定行後面追加文字,支援使用\n實現多行追加
i [\]text:在行前面插入文字
c [\]text:替換行為單行或多行文字
w /path/somefile: 儲存模式匹配的行至指定檔案
r /path/somefile:在檔案的指定位置插入另一個檔案的所有內容
=: 為模式空間中的行列印行號
!:模式空間中匹配行取反處理
s///:查詢替換,支援使用其它分隔符,[email protected]@@,s###
g: 行內全域性替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行儲存至檔案中
用法示例:
將/etc/fstab檔案中已UUID開頭的行註釋
[[email protected] ~]# sed -rn '[email protected](^UUID)@#\[email protected]' /etc/fstab
#UUID=c9fc2cce-0b87-4d33-872d-c2a30871bcbc / xfs defaults 0 0
#UUID=15e19e6c-1b9f-47d4-be20-12c1cf7c9bf1 /app xfs defaults 0 0
#UUID=666253c9-449b-46c6-93a7-b8007803ed6f /boot xfs defaults 0 0
#UUID=57e1db57-12ab-458b-be54-585129688dac swap swap defaults 0 0
將/etc/passwd檔案中35行到以mage開頭的行打印出來
[[email protected] ~]# cat /etc/passwd |sed -n '35,/^mage/p'
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mage:x:1000:1000::/home/mage:/bin/bash
將/etc/issue讀取到/etc/passwd中以wang開頭的行後
[[email protected] ~]# sed '/^wang/r /etc/issue' /etc/passwd
在/etc/fstab檔案中已UUID開頭的行後追加一行,內容為123
[[email protected] ~]# sed '/^UUID/a 123' /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Aug 25 13:40:09 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=c9fc2cce-0b87-4d33-872d-c2a30871bcbc / xfs defaults 0 0
123
UUID=15e19e6c-1b9f-47d4-be20-12c1cf7c9bf1 /app xfs defaults 0 0
123
UUID=666253c9-449b-46c6-93a7-b8007803ed6f /boot xfs defaults 0 0
123
UUID=57e1db57-12ab-458b-be54-585129688dac swap swap defaults 0 0
123
#/dev/sdb1 /usr/mydate xfs defaults 0 0
等等... ...