簡(jiǎn)述rpm與yum命令的常見選項(xiàng)掌逛,并舉例
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
rpm是一款強(qiáng)大的包管理工具可以實(shí)現(xiàn)安裝篙贸、升級(jí)禽篱、卸載八千、查詢和校驗(yàn)、數(shù)據(jù)庫維護(hù)
1. 安裝:-i, --install
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v:顯示詳細(xì)過程
-h:輸出進(jìn)度條(#)
--test:測(cè)試安裝呻征,檢查并報(bào)告依賴關(guān)系及沖突消息等
--nodeps:忽略依賴關(guān)系,忽略依賴關(guān)系的包可能會(huì)出現(xiàn)各種問題,不建議使用.
--replacepkgs:重新安裝
--nosignature:不檢查包簽名信息及源合法性(--這也是一個(gè)危險(xiǎn)的操作--)
--nodigest:不檢查包完整性信息
[root@localhost Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
warning: zsh-5.0.2-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ################################# [100%]
package zsh-5.0.2-7.el7.x86_64 is already installed
2.升級(jí)或安裝:-U, --update
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
--oldpackage:降級(jí)
--force:強(qiáng)制升級(jí)
[root@localhost Packages]# rpm -Uvh zsh-5.0.2-7.el7.x86_64.rpm
warning: zsh-5.0.2-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ################################# [100%]
package zsh-5.0.2-7.el7.x86_64 is already installed
程序包的配置文件安裝后曾被修改過耘婚,升級(jí)時(shí),新版本的程序提供的同一個(gè)配置文件不會(huì)覆蓋原有版本的配置文件陆赋,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供
Linux支持多內(nèi)核版本并存,可以直接安裝新版本內(nèi)核,不要對(duì)內(nèi)核做升級(jí)操作
3. 升級(jí): -F, --freshen
-F只能升級(jí)不能進(jìn)行安裝操作
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
--oldpackage:降級(jí)
--force:強(qiáng)制升級(jí)
[root@localhost Packages]# rpm -Fvh zsh-5.0.2-7.el7.x86_64.rpm
warning: zsh-5.0.2-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
4. 卸載:-e, --erase
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸載所有匹配指定名稱的程序包的各版本嚷闭;
--nodeps:忽略依賴關(guān)系
--test:測(cè)試卸載攒岛,干跑(dry run)模式
[root@localhost Packages]# rpm -evh zsh
Preparing... ################################# [100%]
Cleaning up / removing...
1:zsh-5.0.2-7.el7 ################################# [100%]
5. 查詢:-q, --query
查詢指定的程序包是否已經(jīng)安裝,及其版本號(hào)
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:查詢所有已經(jīng)安裝過的包胞锰;
-f FILE:查詢指定的文件由哪個(gè)程序包安裝生成
-p, --package PACKAGE_FILE:查詢未安裝的程序包
--whatprovides CAPABILITY:查詢指定的功能由哪個(gè)程序包提供
--whatrequires CAPABILITY:查詢指定的功能被哪個(gè)包所依賴
[query-options]
--changelog:查詢r(jià)pm包的更新日志
-l, --list:程序安裝生成的所有文件列表
-i, --info:程序包相關(guān)的信息
-c, --configfiles:查詢指定的程序包提供的配置文件
-d, --docfiles:查詢指定的程序包提供的文檔
--provides:列出指定的程序包提供的所有的功能
-R, --requires:查詢指定的程序包的依賴關(guān)系
--scripts:查看程序包自帶的腳本(程序不一定都有自帶腳本)
[root@localhost Packages]# rpm -qpR zziplib-0.13.62-5.el7.x86_64.rpm
warning: zziplib-0.13.62-5.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
/sbin/ldconfig
/sbin/ldconfig
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libz.so.1()(64bit)
libzzip-0.so.13()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
6. 校驗(yàn):-V, --verify
rpm {-V|--verify} [select-options] [verify-options]
S: 程序包文件大小改變
M: 權(quán)限改變 (包括許可權(quán)限和文件類型)
5: MD5碼改變
D: 設(shè)備的主/次設(shè)備號(hào)不匹配
L: 實(shí)際鏈接路徑不匹配
U: 屬主關(guān)系改變
G: 屬組關(guān)系改變
T: mTime改變
P: 功能改變,(可以rpm -q --provides 包名 查詢)
[verify-options]
--nodeps:不校驗(yàn)依賴性
--nosignature:不校驗(yàn)包完整性
--noscripts;不校驗(yàn)?zāi)_本
...
[root@localhost tmp]# rpm -V zsh
S.5....T. /usr/share/zsh/5.0.2/functions/zsh-mime-setup
7. 數(shù)據(jù)庫維護(hù):--builddb, --initdb
不同版本獲取幫助的方法:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化數(shù)據(jù)庫灾锯,當(dāng)前無任何數(shù)據(jù)庫可實(shí)始化創(chuàng)建一個(gè)新的;當(dāng)前有時(shí)不執(zhí)行任何操作嗅榕;
--rebuilddb:重新構(gòu)建顺饮,通過讀取當(dāng)前系統(tǒng)上所有已經(jīng)安裝過的程序包進(jìn)行重新創(chuàng)建
--dbpath DIRECTORY:指定數(shù)據(jù)的存放路徑
[root@localhost tmp]# mkdir /tmp/dbtest
[root@localhost tmp]# rpm --initdb --dbpath /tmp/dbtest/
[root@localhost tmp]# ls dbtest/
Basenames __db.002 Group Obsoletename Requirename Triggername
Conflictname __db.003 Installtid Packages Sha1header
__db.001 Dirnames Name Providename Sigmd5
yum命令:
yum [options] [command] [package ...]
[options]
-y: 自動(dòng)應(yīng)答
-q:靜默模式
--noplugins: 禁用程序包插件
--disablerepo=repoidglob:臨時(shí)禁用給定的epo
--enablerepo=repoidglob:臨時(shí)啟用給定的repo
--nogpgcheck:不做gpgcheck檢查
[command]
install:安裝
update:升級(jí)
remove:卸載
list:列出指定程序包
clean:清理本地緩存
makecache:構(gòu)建緩存
search:搜索
repolist:列出所有(在用,停用的)的yum.repo
等等選項(xiàng),詳見man yum
yum的repo配置文件中可用的變量說明:
$releasever: 當(dāng)前OS的發(fā)行版的主版本號(hào)
$arch: 平臺(tái),如:i386 i486等類型
$basearch:基礎(chǔ)平臺(tái)
自建yum倉庫吵聪,分別為網(wǎng)絡(luò)源和本地源
本地源配置:
本示例使用光盤做本地yum源,應(yīng)保證有對(duì)應(yīng)版本的鏡像包并且光盤能正常掛載系統(tǒng),也可以從鏡像網(wǎng)站下載好rpm包之后使用createrepo命令創(chuàng)建本地yum源.
1.創(chuàng)建本地光盤掛載目錄:/mnt/media.repomkdir -p /mnt/media.repo
2.將本地光盤掛在到/mnt/media.repo
臨時(shí)掛載 mount /dev/cdrom /mnt/media.repo 永久掛載 echo "/dev/cdrom /mnt/media.repo iso9660 defaults 0 0" >> /ect/fstab
3.編輯本地yum源配置文件
yum配置文件在/etc/yum.repos.d/目錄下,并且以.repo結(jié)尾的文件
[base] name=media baseurl=file:///mnt/media.repo gpgcheck=0 #gpg檢驗(yàn),0表示不檢驗(yàn),如果是1還要提供gpgkey enabled=1 #是否啟用1表示啟用
4.檢驗(yàn)配置yum源是否配置成功
將配置文件保存退出后就可以驗(yàn)證了,具體操作如下:
[root@localhost Packages]# yum makecache
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
media | 4.1 kB 00:00:00
Metadata Cache Created
----------------------------------分割線----------------------------------
[root@localhost Packages]# yum repolist
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id repo name status
media media 4,305
repolist: 4,305
#這里看到media有4305個(gè)rpm包證明本地yum配置成功
網(wǎng)絡(luò)源配置:
配置網(wǎng)絡(luò)源要保證linux系統(tǒng)能連接網(wǎng)絡(luò)
1、備份本地yum源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2兼雄、下載新對(duì)應(yīng)的CentOS-Base.repo 到/etc/yum.repos.d/
要根據(jù)自己的版本來下載,高版本的linux不能使用低版本的yum源,阿里的yum源地址:https://opsx.alibaba.com/mirrorwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3吟逝、之后運(yùn)行yum makecache生成緩存
makecache成功則網(wǎng)絡(luò)yum源成功配置
簡(jiǎn)述at和crontab命令,制定 每周三凌晨三赦肋、五點(diǎn)10分執(zhí)行某個(gè)腳本块攒,輸出當(dāng)前時(shí)間,時(shí)間格式為 2017-12-28 10:00:00
at命令:
at是單次執(zhí)行一個(gè)任務(wù),不能周期性的自動(dòng)執(zhí)行
at [OPTION]... TIME
TIME:
HH:MM [YYYY-mm-dd]
teatime: 下午4點(diǎn)
tomorrow:第二天
now+# :從現(xiàn)在起+多少時(shí)間
常用單位:minutes, hours, days, weeks
常用選項(xiàng):
-l:查看作業(yè)隊(duì)列佃乘,
-f /文件名:從指定文件中讀取作業(yè)任務(wù)
-d:刪除指定的作業(yè)囱井,
-c:查看指定作業(yè)的具體內(nèi)容;
-q QUEUE:指明隊(duì)列趣避;
[root@localhost test]# at -f /tmp/test/date.sh 3:10
job 1 at Mon Mar 12 03:10:00 2018
crontab命令
crontab是周期性執(zhí)行指定任務(wù)的命令
crontab有系統(tǒng)的配置文件和用戶自己的配置文件具體的路徑如下:
系統(tǒng)cron的配置格式:/etc/crontab
用戶cron的配置格式:/var/spool/cron/USERNAME
如下示例可以看到系統(tǒng)的cron的配置
[root@localhost Packages]# vim /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) 每分鐘數(shù)范圍是0-59
# | .------------- hour (0 - 23) 每小時(shí)數(shù)范圍是0-23
# | | .---------- day of month (1 - 31) 一個(gè)月的天范圍是0-31
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...每個(gè)月數(shù)范圍時(shí)1-12
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat每星期的天數(shù)0-6(0和7都代表星期日)
# | | | | |
# * * * * * user-name command to be executed 用戶名 要執(zhí)行的命令(使用絕得路徑如: /bin/bash)
注意事項(xiàng):
day of month和day of week 最好不要一起定義,定義其中一個(gè)就好
指定的 */# 不能被整除時(shí) 如: */7 * * * * root /bin/echo "hiya" 因?yàn)橐环昼姴荒苷?在一分鐘之后將不是每隔7分鐘執(zhí)行一次操作了
運(yùn)行結(jié)果以郵件通知給當(dāng)前用戶
某任務(wù)在指定的時(shí)間因關(guān)機(jī)未能執(zhí)行,下次開機(jī)到達(dá)指定的時(shí)間并不會(huì)自己再執(zhí)行該任務(wù)
如果執(zhí)行的命令中有%符號(hào)要注意轉(zhuǎn)義.可以將命令放在腳本里.
最小時(shí)間單位為“分鐘”,不能精確到秒鐘,可以利用腳本實(shí)現(xiàn)在每分鐘之內(nèi)庞呕,循環(huán)多次
*:代表每個(gè)時(shí)間. #,#,#:表多個(gè)離散的時(shí)間. #-#:表示一段連續(xù)的時(shí)間. */# :表示步長(zhǎng),要能被整除才有意義
*/2 * * * *:每2分鐘執(zhí)行一次某任務(wù)
0 9-15 * * 6-7: 每周末的9點(diǎn)到15點(diǎn)整執(zhí)行某任務(wù)
crontab [-u user] [-l | -r | -e] [-i]
-e:編輯任務(wù)
-l:列出所有任務(wù)
-r:移除所有任務(wù)
-i:在使用-r選項(xiàng)移除所有任務(wù)時(shí)提示用戶確認(rèn);
-u user:root用戶可為指定用戶管理cron任務(wù)
1.設(shè)置腳本
[root@localhost test]# vim date.sh
#!/bin/bash
date "+%F %H:%M:%S"
-----------------------------------------------------
2.設(shè)置crontab
[root@localhost test]# crontab -e
no crontab for root - using an empty one
10 3,5 * * 0-6 /bin/bash /tmp/test/date.sh
-----------------------------------------------------
3.查看crontab
[root@localhost test]# crontab -l
10 3,5 * * 0-6 /bin/bash /tmp/test/date.sh
簡(jiǎn)述sed常用操作命令程帕,并舉例
sed:Stream EDitor住练,流編輯器
sed是一種非交互式的行編輯器,一次把當(dāng)前行的內(nèi)容放入"模式空間"
中,然后用sed命令處理"模式空間"里的內(nèi)容,處理完畢后輸出到標(biāo)準(zhǔn)輸
出,接著處理下一行,一直到文件末尾.sed默認(rèn)的處理過程并不會(huì)改變對(duì)象文件的原有內(nèi)容,除非使用重定向等方式來儲(chǔ)存結(jié)果
sed [OPTION]... 'script' [input-file] ...
常用選項(xiàng):
-n:不輸出模式空間中的內(nèi)容至屏幕
-e script, --expression=script:多點(diǎn)編輯
-f /PATH/TO/SED_SCRIPT_FILE 從腳本里讀取編輯命令,每行一個(gè)編輯命令
-r, --regexp-extended:支持使用擴(kuò)展正則表達(dá)式
-i [SUFFIX], --in-place[=SUFFIX]:直接編輯原文件 (會(huì)破壞源文件內(nèi)容)
script:
地址定界編輯命令
地址定界:
(1) 空地址:對(duì)全文進(jìn)行處理
(2) 單地址:
#:指定行
/pattern/:被此模式所匹配到的每一行
(3) 地址范圍
#,#:從第幾行到第幾行匹配到的所有行
#,+#:從幾行+幾行匹配到的所有行
#,/pat1/ 從第幾行到被pat1/ 匹配到的所有行
/pat1/,/pat2/ 從/pat1/到/pat2/匹配到的所有行
$:最后一行
(4) 步進(jìn):~
1~2:所有奇數(shù)行
2~2:所有偶數(shù)行
編輯命令:
d:刪除匹配到的行
p:顯示模式空間中的內(nèi)容
a \text:在行后面追加文本“text”骆捧,在text后面加\n new text來實(shí)現(xiàn)多行追加
i \text:在行前面插入文本“text”澎羞,支在text后面加\n new text來實(shí)現(xiàn)多行插入
c \text:把匹配到的行替換為成“text”(整行替換)
w /FILE:保存模式空間匹配到的行至指定的文件中(覆蓋模式保存)
r /FILE:讀取指定文件的內(nèi)容至當(dāng)前文件被模式匹配到的行后面實(shí)現(xiàn)文件合并功能
=:為模式匹配到的行打印行號(hào)
!:條件取反.用法:放在地址定界與編輯命令之間,格式如: 地址定界!編輯命令
s///:查找替換,默認(rèn)只替換第一次匹配到的行,其分隔符可自行指定敛苇,常用的有s@@@, s###等
替換標(biāo)記:
g:全局替換
w /PATH/TO/SOMEFILE:將替換成功的結(jié)果保存至指定文件中()
p:顯示替換成功的行
[root@localhost tmp]# sed 's@^#[[:space:]]*@@' fstab
/etc/fstab
Created by anaconda on Sun Mar 11 07:33:07 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
/dev/mapper/centos-root / xfs defaults 0 0
UUID=9d1faf64-5990-40c7-80d2-33112997dcc9 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/cdrom /mnt/media.repo iso9660 defaults 0 0
--------------------------------分割線--------------------------------
[root@localhost test]# cat sedtest.txt #這是原文件文件
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed -n '1 s@h@H@p' sedtest.txt #替換第一行的第一次匹配到的字符,并顯示該行
Hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed -n '1 s@h@H@gp' sedtest.txt #全局替換匹配到的行并顯示
Hello,Hello,Hello,Hello,Hello,Hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed '1 a1\n2\n3' sedtest.txt #匹配到的行后面實(shí)現(xiàn)多行追加并顯示
hello,hello,hello,hello,hello,hello
1
2
3
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed '1 i1\n2\n3' sedtest.txt #匹配到的行前面實(shí)現(xiàn)多行插入并顯示
1
2
3
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed '1~2 c3\n5\n6' sedtest.txt #奇數(shù)行實(shí)現(xiàn)多行替換并顯示
3
5
6
hello,hello,hello,hello,hello,hello
3
5
6
hello,hello,hello,hello,hello,hello
高級(jí)編輯命令:
h:把模式空間中的內(nèi)容覆蓋至保持空間中
H:把模式空間中的內(nèi)容追加至保持空間中
g:把保持空間中的內(nèi)容覆蓋至模式空間中
G:把保持空間中的內(nèi)容追加至模式空間中
x:把模式空間中的內(nèi)容與保持空間中的內(nèi)容互換
n:覆蓋讀取匹配到的行的下一行至模式空間中
N:追加讀取匹配到的行的下一行至模式空間中
d:刪除模式空間中的行
D:刪除多行模式空間中的所有行
--------------------------------分割線--------------------------------
[root@localhost test]# cat sedtest.txt #這是原文件
1.hello,hello,hello,hello,hello,hello
2.hello,hello,hello,hello,hello,hello
3.hello,hello,hello,hello,hello,hello
4.hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed '2~2 N;d' sedtest.txt
4.hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed -n '$!G;H;p' sedtest.txt
1.hello,hello,hello,hello,hello,hello
2.hello,hello,hello,hello,hello,hello
1.hello,hello,hello,hello,hello,hello
3.hello,hello,hello,hello,hello,hello
1.hello,hello,hello,hello,hello,hello
2.hello,hello,hello,hello,hello,hello
1.hello,hello,hello,hello,hello,hello
4.hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed -n 'n;x;p' sedtest.txt
2.hello,hello,hello,hello,hello,hello
--------------------------------分割線--------------------------------
[root@localhost test]# sed -n 'n;p' sedtest.txt
2.hello,hello,hello,hello,hello,hello
4.hello,hello,hello,hello,hello,hello