本文主要介紹了系統(tǒng)管理相關(guān)內(nèi)容银伟,包括壓縮與歸檔、Linux軟件包管理绘搞,任務(wù)計(jì)劃彤避、郵件功能,另外還介紹了sed命令的使用夯辖。
一琉预、歸檔與壓縮
1. 概念
歸檔(Archive),是指文書部門將辦理完并且有保存價(jià)值的文件蒿褂,經(jīng)系統(tǒng)整理交檔案室或檔案館保存的過(guò)程圆米。在計(jì)算機(jī)中的歸檔即“將文件打包保存”之意卒暂,即將多個(gè)文件或目錄合并稱為一個(gè)文件的操作
壓縮(Compression) 是為了減少數(shù)據(jù)大小以節(jié)省保存空間和傳輸?shù)臅r(shí)間。為了數(shù)據(jù)的傳輸娄帖,壓縮能夠作用于單獨(dú)的數(shù)據(jù)內(nèi)容或者所有的傳輸單元(包括數(shù)據(jù)頭)也祠,這取決于一些特定的因素
2. 相關(guān)命令
關(guān)于Linux壓縮與歸檔,有眾多命令可以實(shí)現(xiàn)块茁,如
-
compress
:經(jīng)典壓縮工具齿坷,如今已不再流行,其對(duì)應(yīng)的解壓命令為uncompress
数焊,默認(rèn)擴(kuò)展名為.Z
-
zip
:歸檔工具永淌,其對(duì)應(yīng)的解壓命令為unzip
,默認(rèn)擴(kuò)展名為.zip
-
gzip
:GNU的zip
實(shí)現(xiàn)佩耳,解壓命令為gunzip
遂蛀,默認(rèn)擴(kuò)展名為.gz
-
xz
:用于壓縮XZ格式的工具,解壓命令為unxz
干厚,默認(rèn)擴(kuò)展名為.xz
-
lzma
:LZMA格式壓縮工具李滴,解壓命令為unlzma
,默認(rèn)擴(kuò)展名為.lzma
-
bzip2
:著名壓縮工具蛮瞄,其解壓命令為bunzip2
所坯,默認(rèn)擴(kuò)展名為.bz2
-
tar
:Linux歸檔壓縮命令,較為常用
此外還有其他相關(guān)命令挂捅,如可直接查看壓縮文件內(nèi)的文本文件內(nèi)容芹助,以下將做大致介紹
壓縮
-
gzip
:使用格式為gzip [OPTIONS] /PATH/TO/SOMEFILE OPTIONS -d 解壓縮 -c 不改變?cè)次募瑢嚎s或解壓縮后的內(nèi)容輸出到標(biāo)準(zhǔn)輸出 可以使用重定向闲先,創(chuàng)建壓縮文件状土,并且保存源文件,如 gzip -c FILE > /PATH/TO/SOMEFILE.gz -# 指定壓縮比伺糠,1-9蒙谓,默認(rèn)是6
默認(rèn)壓縮后會(huì)刪除源文件,如
[root@localhost ~]# mkdir test [root@localhost ~]# cd test [root@localhost test]# cp /var/log/messages ./ [root@localhost test]# ll -h total 12K -rw-------. 1 root root 12K Feb 25 10:55 messages [root@localhost test]# gzip messages [root@localhost test]# ll -h total 4.0K -rw-------. 1 root root 1.1K Feb 25 10:55 messages.gz [root@localhost test]# gunzip messages.gz [root@localhost test]# ll total 12 -rw-------. 1 root root 11587 Feb 25 10:55 messages
gunzip
命令用于解壓縮训桶,相當(dāng)于gzip -d
累驮,同樣的,會(huì)刪除原文件此外還有
zcat
命令舵揭,用于在不解壓文件的前提下慰照,查看其中的文本內(nèi)容:[root@localhost test]# zcat messages.gz Feb 25 09:39:56 localhost dhclient[6438]: DHCPREQUEST on eno16777736 to 192.168.18.254 port 67 (xid=0x334cb01a) Feb 25 09:39:56 localhost dhclient[6438]: DHCPACK from 192.168.18.254 (xid=0x334cb01a) Feb 25 09:39:56 localhost NetworkManager[6155]: <info> address 192.168.18.128 …………
-
bzip2
:比gzip有更大壓縮比的壓縮工具,使用格式近似gzip
bzip2 [OPTIONS] /PATH/TO/SOMEFILE OPTIONS -d:解壓縮 -#: 指定壓縮比琉朽,1-9,默認(rèn)是6 -k: 壓縮或解壓時(shí)保留原文件,默認(rèn)壓縮后會(huì)刪除源文件
同樣,解壓命令
bunzip2
同bzip2 -d
同時(shí)也有用于直接查看文本內(nèi)容的工具
bzcat
-
xz
xz [OPTIONS] /PATH/TO/SOMEFILE OPTIONS -d: 解壓縮 -#: 指定壓縮比稚铣,1-9, 默認(rèn)是6 -k: 壓縮時(shí)保留原文件
對(duì)應(yīng)的解壓命令
unxz
同xz -d
箱叁,查看文本文件內(nèi)容工具xzcat
墅垮,此外還有一個(gè)小型.xz
文件解壓工具xzdec
-
lzma
,unlzma
耕漱,lzcat
可以使用
xz --format=lzma
算色、xz --format=lzma --decompress
、xz --format=lzma --decompress --stdout
實(shí)現(xiàn)
以上壓縮命令均不能壓縮目錄
歸檔
以上命令不能壓縮目錄螟够,且若指定多個(gè)文件灾梦,則依然會(huì)壓縮為多個(gè),若需要將文件“打包”妓笙,則需要用到歸檔(Archive)工具若河,歸檔本身不會(huì)壓縮,常用的有zip
與tar
tar
命令的用法為
tar [OPTIONS] -f FILE.tar FILE1,FILE2 ...
OPTIONS
-f FILE.tar 操作的歸檔文件
-c 創(chuàng)建歸檔文件
-x 展開歸檔
--xattrs 歸檔時(shí)寞宫,保留文件的擴(kuò)展屬性信息(默認(rèn)不會(huì)存儲(chǔ))
-t 查看歸檔的文件列表
如:# tar tf /PATH/TO/SOME.tar
-C 指定目標(biāo)目錄
如:# tar xf /PATH/FROM/SOMEFILE.tar -C /PATH/TO/SOMEDIR
-z:調(diào)用gzip
-zcf 歸檔并調(diào)用gzip壓縮
-zxf 調(diào)用gzip解壓縮并展開歸檔,-z選項(xiàng)可省略
-ztf 查看歸檔的文件列表
-j:調(diào)用bzip2
-jcf 歸檔并調(diào)用bzip2壓縮
-jxf 調(diào)用bzip2解壓縮并展開歸檔,-j選項(xiàng)可省略
-jtf 查看歸檔的文件列表
-J:調(diào)用xz
-Jcf 歸檔并調(diào)用xz壓縮
-Jxf 調(diào)用xz解壓縮并展開歸檔,-J選項(xiàng)可省略
-Jtf 查看歸檔的文件列表
Tips
: - tar
命令在操作對(duì)象為壓縮文件時(shí)(如解壓)萧福,可以不指定-z
、-j
或-J
辈赋,tar
命令會(huì)自動(dòng)識(shí)別文件從而調(diào)用相應(yīng)工具
: - 選項(xiàng)組合時(shí)鲫忍,f選項(xiàng)應(yīng)放在后面,而后跟文件
: - tar
命令中的-
可以省略
: - tar
命令默認(rèn)不會(huì)刪除原文件
zip
工具的使用格式為
zip FILENAME.zip FILE1 FILE2 ...
注意:壓縮目錄時(shí)钥屈,應(yīng)指定為目錄下的所有文件
其他相關(guān)命令
此處對(duì)cpio
命令稍作介紹悟民,該命令常用于備份,不過(guò)一般需要通過(guò)管道或重定向配合使用篷就,如
備份目錄
find /DIRCTORY| cpio -ocvB > /FILE.cpio
-o:工作于“copy-out”模式射亏,即將文件復(fù)制輸出
-c:一種較新的portable format方式儲(chǔ)存
-v:顯示詳細(xì)信息
-B:讓預(yù)設(shè)的Blocks 可以增加至5120 bytes ,默認(rèn)是512 bytes
解壓
cpio -idvc < /FILE.cpio
-i:即Copy-in模式腻脏,從壓縮文件復(fù)制出來(lái)
-d:自動(dòng)建立目錄鸦泳,使用cpio 所備份的資料內(nèi)容不見得會(huì)在同一層目錄中,此時(shí)需要要讓cpio 在還原時(shí)可以建立新目錄
查看壓縮包內(nèi)文件列表
cpio -ivct < /FILE.cpio
-t:查看壓縮包內(nèi)文件列表永品,一般配合-i選項(xiàng)使用
二做鹰、Linux軟件包管理
1. 軟件包管理器概念
計(jì)算機(jī)由眾多軟件組成,他們分別完成特定工作鼎姐,而我們就需要一類軟件來(lái)管理這些軟件钾麸,即軟件包管理的意義
在Windows中,傳統(tǒng)Win32應(yīng)該程序可以通過(guò)Control Panel進(jìn)行管理(一般只能進(jìn)行卸載炕桨,一些大型程序可進(jìn)行功能配置)饭尝,而UWP(Universal Windows Platform)程序則可通過(guò)Microsoft Store進(jìn)行管理(可進(jìn)行安裝、卸載献宫,升級(jí)钥平、配置等)
而在Linux中,軟件包管理器的作為有以下
- 打包成一個(gè)文件:二進(jìn)制程序姊途,庫(kù)文件涉瘾,配置文件知态,幫助文件
- 生成數(shù)據(jù)庫(kù),跟蹤所安裝的每一個(gè)文件立叛,其中有以下內(nèi)容
軟件名和版本
安裝生成的各文件路徑及校驗(yàn)碼
依賴關(guān)系
提供功能性說(shuō)明 - 提供程序組成格式负敏,如
文件清單
安裝卸載時(shí)運(yùn)行的腳本
可見,Linux平臺(tái)到的軟件包管理工作較為復(fù)雜秘蛇,其核心功能為
- 制作軟件包
graph LR
A[源代碼] -- 編譯 --> B[目標(biāo)二進(jìn)制格式]
B[目標(biāo)二進(jìn)制格式] --打包--> C[一個(gè)或有限幾個(gè)包文件]
- 安裝其做、卸載、升級(jí)赁还、查詢妖泄、校驗(yàn)
Linux有眾多發(fā)行版,各個(gè)發(fā)行版使用的軟件包管理器亦不相同秽浇,較為常用的有
-
dpkg
這個(gè)機(jī)制最早是由Debian Linux社群所開發(fā)出來(lái)的浮庐,通過(guò)dpkg的機(jī)制, Debian提供的軟件就能夠簡(jiǎn)單的安裝起來(lái)柬焕,同時(shí)還能提供安裝后的軟件信息审残。只要是衍生于Debian的其他Linux distributions大多使用dpkg這個(gè)機(jī)制來(lái)管理軟件的,包括B2D, Ubuntu等
-
rpm
這個(gè)機(jī)制最早是由Red Hat這家公司開發(fā)出來(lái)的斑举,后來(lái)實(shí)在很好用搅轿,因此很多distributions就使用這個(gè)機(jī)制來(lái)作為軟件安裝的管理方式。包括Fedora, CentOS, SuSE等
現(xiàn)代計(jì)算機(jī)軟件開發(fā)有一個(gè)重要思想富玷,即代碼共用璧坟,在這里依然使用,這就會(huì)引發(fā)一些依賴性問(wèn)題赎懦,如:
用戶需要安裝軟件A雀鹃,而A依賴于軟件B和C中的功能,而后用戶在安裝B與C的時(shí)候励两,發(fā)現(xiàn)軟件C依賴于軟件D黎茎,而D竟然依賴軟件A!
這種循環(huán)依賴的問(wèn)題就不能簡(jiǎn)單地直接通過(guò)命令安裝当悔,雖然可以用某些選項(xiàng)安裝傅瞻,但是這些復(fù)雜的依賴關(guān)系依然會(huì)花費(fèi)不少時(shí)間
為了解決這類問(wèn)題,Linux還有更上層的工具盲憎,我們將其稱之為前端管理工具嗅骄,按照此思路,以上介紹的可叫做后端工具饼疙,常見的有
- yum:rpm包管理器的前端工具
- apt-get:deb包管理器的前端工具
- zypper:suse上的rpm前端管理工具
- dnf:Fedora 22+ rpm包管理器的前端管理工具
這里將以rpm與yum介紹Linux軟件包管理相關(guān)內(nèi)容
2. rpm
rpm包命名格式
我們知道軟件源代碼需要編譯為而進(jìn)行才可執(zhí)行溺森,而rpm包也有源碼版本提供,我們可稱之為SRPM
rpm源碼包的一般命名格式為
NAME-VERSION.tar.COMPRESS_TYPE
NAME:包名
VERSION:版本,其一般格式為
major.minor.release
即:主版本號(hào).次版本號(hào).release號(hào)
COMPRESS_TYPE:壓縮方式儿惫,如gz澡罚,bz2,xz
rpm包的命名格式一般為
主包
name-VERSION-ARCH.rpm
VERSION
version-release
major.minor.release-release
第一個(gè)release是軟件的開發(fā)者提供的
第二個(gè)release是rpm包制作者提供的
ARCH
OS平臺(tái)
RedHat: el# RedHat Enterprise Linux #
CentOS: CentOS#
CentOS與RedHat兼容
CPU架構(gòu)
x86_64
i386,i586,686
ppc:PowerPC平臺(tái)
noarch:與平臺(tái)無(wú)關(guān)
子包
name-FUNCTION-VERSION-release.arch.rpm
例:bind-libs-9.7.1-1.el5.i586.rpm
bind-utils-9.7.1-1.el5.i586.rpm
對(duì)于子包而言肾请,bind-libs、bind-utils就是包名
FUNCTION:devel更胖,utils铛铁,libs,…
rpm包的獲取路徑
可通過(guò)uname -a
查看當(dāng)前系統(tǒng)平臺(tái)信息
-
發(fā)行商光盤或站點(diǎn)服務(wù)器
https://mirrors.aliyun.com
https://mirrors.sohu.com
https://mirrors.163.com 項(xiàng)目官方站點(diǎn)
-
第三方組織
Fedora-EPEL:https://fedoraproject.org/wiki/EPEL
搜索引擎:
https://pkgs.org
https://rpmfind.net
https://rpm.pbone.net 自己制作
rpm命令
rpm(RPM is Package Manager)却妨,看到這個(gè)名字感覺(jué)開源界似乎很流行這種遞歸縮寫式的命名饵逐,因?yàn)閞pm原為Radhat Package Manager,不知道是否是跟風(fēng)??
rpm可進(jìn)行軟件的安裝彪标、卸載倍权、升級(jí)、校驗(yàn)等功能捞烟,先將主要選項(xiàng)列出:
- 安裝:
-i
薄声,--install
- 升級(jí):
-U
,--update
题画,-F
默辨,--freshen
- 卸載:
-e
,--erase
- 查詢:
-q
苍息,--query
- 校驗(yàn):
-V
缩幸,--verify
- 數(shù)據(jù)庫(kù)維護(hù):
--builddb
,--initdb
還有一些通用的選項(xiàng)竞思,此處將其列出:
-
-v
:顯示詳細(xì)過(guò)程 -
-vv
:顯示更詳細(xì)過(guò)程 -
-vvv
:顯示更更詳細(xì)過(guò)程 -
-h
:hash marks表谊,以#顯示程序包管理執(zhí)行進(jìn)度;每個(gè)#表示2%的進(jìn)度
安裝
安裝使用的一般選項(xiàng)為
rpm -ivh [INSTALL_OPTIONS] /PATH/TO/PACKAGE_FILE …
-i, --install
INSTALL_OPTIONS
--test 測(cè)試安裝盖喷,不真正執(zhí)行安裝爆办,dry run模式
--nodeps 忽略依賴關(guān)系
--ignoreos 忽略O(shè)S平臺(tái)
--replacepkgs 重新安裝,替換原有的安裝传蹈,不能替換配置文件
--nosignature 不檢查來(lái)源合法性
--nodigest 不檢查包完整性
--replacefiles 替換文件
--oldpackage 降級(jí)安裝
--force 強(qiáng)行安裝押逼,相當(dāng)于--replacepkgs --replacefiles --oldpackage,可以實(shí)現(xiàn)重裝或降級(jí)
--noscripts 不執(zhí)行程序包腳本片段
%pre:安裝前腳本 --nopre
%post:安裝后腳本 --nopost
%preun:卸載前腳本 --nopreun
%postun:卸載后腳本 --nopostun
--test 僅測(cè)試
查詢
查看使用的選項(xiàng)為
rpm {-q|--query} [select-options] [query-options]
select-options
-a:查詢所有已安裝的包
-f /PATH/TO/SOMEFILE:查詢指定的文件是由哪個(gè)rpm包安裝生成的
-p /PATH/TO/PACKAGE_FILE:針對(duì)尚未安裝的程序包文件做查詢操作
要跟[query-options]
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個(gè)包所提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個(gè)包所依賴
[query-options]
--changelog:查看rpm包的changelog
-c:查詢程序包的配置文件
-d:查詢程序的文檔
-i:information
-l:查看指定 的程序包安裝后生成的所有文件列表
--scripts:程序包自帶的腳本片段
-R:查詢指定的程序包所依賴的CAPABILITY
--provides:列出指定程序包所提供的CAPABILITY
-qi PACKAGE_NAME:查詢指定包的說(shuō)明信息
如果某rpm包尚未安裝惦界,我們需查詢其說(shuō)明信息挑格、安裝以后會(huì)生成的文件
rpm -qpi /PATH/TO/PACKAGE_FILE 查詢摘要信息
rpm -qpl /PATH/TO/PACKAGE_FILE 查詢安裝后會(huì)生成的文件列表
rpm -qpc /PATH/TO/PACKAGE_FILE 查詢配置文件
rpm -qpd /PATH/TO/PACKAGE_FILE 查詢幫助文件
升級(jí)
升級(jí)操作一般使用的選項(xiàng)為
rpm -Uvh [INSTALL_OPTIONS] /PATH/TO/PACKAGE_FILE …
rpm -Fvh [INSTALL_OPTIONS] /PATH/TO/PACKAGE_FILE …
-U|--upgrade: 如果裝有老版本的,則升級(jí)沾歪;否則安裝
-F|--freshen: 如果裝有老版本的漂彤,則升級(jí);否則退出
INSTALL_OPTIONS
--oldpackage 降級(jí)
--nodeps 忽略依賴關(guān)系
--force 強(qiáng)行安裝
Tips:
: 1. 不要對(duì)內(nèi)核執(zhí)行升級(jí)操作,多版本內(nèi)核可以共存挫望,因此立润,建議執(zhí)行安裝操作
: 2. 若原程序包的配置文件安裝后曾被修改,升級(jí)時(shí)媳板,新版本提供的同一個(gè)配置文件并不會(huì)直接覆蓋老版本的配置文件桑腮,而是把新版本的文件重命名(FILENAME.rpmnew
)后保存
卸載
卸載時(shí)一般使用的選項(xiàng)為
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--nodeps 卸載前不檢查依賴關(guān)系
--allmatches 卸載所有匹配指定名稱的程序包的各版本
--test 僅測(cè)試
注意:若卸載的包被其他包所依賴,則不允許卸載
重建數(shù)據(jù)庫(kù)
rpm管理器的數(shù)據(jù)庫(kù)為:/var/lib/rpm/
蛉幸,查詢操作即通過(guò)此數(shù)據(jù)庫(kù)進(jìn)行(使用-p
選項(xiàng)除外)破讨,我們可以通過(guò)某些選項(xiàng)對(duì)其進(jìn)行操作:
rpm --rebuilddb|initdb [--dbpath]
--rebuilddb 重建數(shù)據(jù)庫(kù),一定會(huì)重新建立
--initdb 初始化數(shù)據(jù)庫(kù)奕纫,沒(méi)有才建立提陶,有就不用建立
[--dbpath] 指定數(shù)據(jù)庫(kù)路徑,可選
校驗(yàn)
校驗(yàn)操作可檢查包安裝后生成的文件是否被修改過(guò)
rpm {-V|--verify} [select-options] [verify-options]
改變信息的各字段
字段 | 意義 |
---|---|
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 |
檢驗(yàn)來(lái)源合法性匹层,及軟件包完整性
rpm包的完整性是通過(guò)單項(xiàng)加密(SHA-256)保證隙笆,而來(lái)源合法性則是通過(guò)公鑰加密[1](RSA)實(shí)現(xiàn)
關(guān)于加密的相關(guān)內(nèi)容,詳見Web相關(guān)內(nèi)容升筏,此處只需要了解撑柔,單向加密可用于提取信息特征碼,理論上加密信息變化后仰冠,該特征碼一定變化(取決于密碼長(zhǎng)度)乏冀,且不可解密;而公鑰加密則有一對(duì)秘鑰洋只,我們稱之為公鑰(Public Key)與私鑰(Private Key)辆沦,顧名思義,公鑰可公開识虚,而私鑰只有作者持有肢扯,且公鑰加密的內(nèi)容只有私鑰能解密,反之亦然
包制作者提取包的指紋信息后担锤,使用其私鑰加密該信息蔚晨,使用者通過(guò)相應(yīng)的公鑰解密,而后計(jì)算獲取到的包的指紋信息肛循,二者對(duì)比即可進(jìn)行完整性與來(lái)源合法性驗(yàn)證
而在檢驗(yàn)之前铭腕,需要導(dǎo)入信任的包制作者的秘鑰,對(duì)于CentOS發(fā)行版而言多糠,可使用:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-RELEASE_NAME-release_version
如
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
關(guān)于驗(yàn)證操作累舷,我們?cè)诎惭b此組織所簽名的程序時(shí),會(huì)自動(dòng)進(jìn)行夹孔,欲手動(dòng)驗(yàn)證被盈,可使用
rpm -K PACKAGE_FILE
如
[root@localhost ~]# rpm -K bash-4.2.46-31.el7.x86_64.rpm
bash-4.2.46-31.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
輸出信息中
- dsa, gpg: 驗(yàn)正來(lái)源合法性析孽,也即驗(yàn)正簽名;可以使用
--nosignature
只怎,略過(guò)此項(xiàng) - sha1, md5: 驗(yàn)正軟件包完整性袜瞬;可以使用
--nodigest
,略過(guò)此項(xiàng)
3. yum
yum(Yellowdog Update Modifier)是rpm的前端管理工具
yum的工作機(jī)制
從yum整體的工作機(jī)制來(lái)看身堡,應(yīng)該算是C/S架構(gòu)(Client/Server)[2]
這里我們一般將Server端稱為Yum Repository(yum倉(cāng)庫(kù))邓尤,他主要提供以下服務(wù)
- 提供了各rpm包
- 提供了依賴關(guān)系、程序包安裝后所能夠生成文件列表等元數(shù)據(jù)文件
yum客戶端工作機(jī)制:
- 1盾沫、配置文件:指定各可用的yum倉(cāng)庫(kù)裁赠;
- 2、緩存元數(shù)據(jù):yum會(huì)到各可用yum倉(cāng)庫(kù)獲取元數(shù)據(jù)赴精,并緩存至本地;
- 3绞幌、分析元數(shù)據(jù):根據(jù)具體的操作請(qǐng)求完成元數(shù)據(jù)分析蕾哟,可能包括檢查依賴關(guān)系、文件列表等信息
- 4莲蜘、執(zhí)行具體操作谭确;
yum repository
上文已有介紹,我們?cè)谑褂脃um時(shí)票渠,軟件由yum倉(cāng)庫(kù)提供逐哈,其對(duì)外提供服務(wù)時(shí)可以通過(guò)以下方式
- FTP
- HTTP
- NFS
- FILE
FILE即通過(guò)文件系統(tǒng)提供服務(wù),而客戶端如何訪問(wèn)yum倉(cāng)庫(kù)則由其配置文件定義
yum倉(cāng)庫(kù)中的元數(shù)據(jù)文件
: 文件 | 作用 |
---|---|
primary.xml.gz |
當(dāng)前倉(cāng)庫(kù)中所有RPM包的列表问顷,依賴關(guān)系昂秃,每個(gè)RPM安裝生成的文件列表 |
filelists.xml.gz |
當(dāng)前倉(cāng)庫(kù)內(nèi)所有rpm包的所有文件列表 |
other.xml.gz |
額外信息,RPM包的修改日志 |
repomd.xml |
記錄的是上面三個(gè)文件的時(shí)間戳和校驗(yàn)和 |
comps*.xml |
RPM包分組信息 |
yum配置文件
yum配置文件為
-
/etc/yum.conf
:為所有倉(cāng)庫(kù)提供公共配置 -
/etc/yum.repos.d/*.repo
:為倉(cāng)庫(kù)的指向提供配置
其配置文件類似于Windows中的INI
文件杜窄,/etc/yum.conf
主要由2段:
[main]
:住配置段
[repo]
:倉(cāng)庫(kù)配置段
而/etc/yum.repos.d/*.repo
用于配置倉(cāng)庫(kù)肠骆,可有多段:
-
[REPO_NAME]
:倉(cāng)庫(kù)名稱 -
[REPO_NAME]
:倉(cāng)庫(kù)名稱 - ……
yum.conf
文件內(nèi)容:
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
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
# 以下為注釋,此處省略
常用字段[3]
字段 | 描述 |
---|---|
cachedir |
Directory where yum should store its cache and db files. The default is `/var/cache/yum'. |
keepcache |
Either '1' or '0'. Determines whether or not yum keeps the cache of headers and packages after successful installation. Default is '1' (keep files) |
debuglevel |
Debug message output level. Practical range is 0-10. Default is '2'. |
logfile |
Full directory and file name for where yum should write its log file. |
tolerant |
Either '1' or '0'. If enabled, yum will go slower, checking for things that shouldn't be possible making it more tolerant of external errors. Default to `0' (not tolerant). |
distroverpkg |
The package used by yum to determine the "version" of the distribution, this sets $releasever for use in config. files. This can be any installed package.Default is 'system-release(releasever)', 'redhat-release'. Yum will now look at the version provided by the provide, and if that is non-empty then will use the full V(-R), otherwise it uses the version of the package. You can see what provides this manually by using: "yum whatprovides 'system-release(releasever)' redhat-release" and you can see what $releasever is most easily by using: "yum version". |
exactarchlist |
List of packages that should never change archs in an update. That means, if a package has a newer version available which is for a different compatible arch, yum will not consider that version an update if the package name is in this list. For example, on x86_64, foo-1.x86_64 won't be updated to foo-2.i686 if foo is in this list. Kernels in particular fall into this category. Shell globs using wildcards (eg. * and ?) are allowed. Default is an empty list. |
obsolees |
This option only has affect during an update. It enables yum's obsoletes processing logic. Useful when doing distribution level upgrades. See also the yum upgrade command documentation for more details (yum(8)). Default is 'true'. |
gpgcheck |
Either '1' or '0'. This tells yum whether or not it should perform a GPG signature check on packages. When this is set in the [main] section it sets the default for all repositories. The default is '0'. |
plugins |
Either '0' or '1'. Global switch to enable or disable yum plugins. Default is '0' (plugins disabled). See the PLUGINS section of the yum(8) man for more information on installing yum plugins. |
為yum定義repo文件
我們一般都將倉(cāng)庫(kù)定義放置于/etc/yum.repos.d/
目錄下塞耕,并且以.repo
為文件名結(jié)尾蚀腿,其內(nèi)容格式為
[Repo_ID]
name=Description
baseurl= 倉(cāng)庫(kù)的訪問(wèn)路徑,可以同時(shí)指定多個(gè)
ftp://
http://
nfs://
file://
enabled={1|0} 是否啟用此倉(cāng)庫(kù)扫外,默認(rèn)啟用
gpgcheck={1|0} 是否檢查包來(lái)源合法性及完整性
gpgkey= 公鑰文件的URL
若gpgcheck指定為1莉钙,此項(xiàng)必須指定,方法同baseurl筛谚,可為ftp,htpp,nfs,file
enablegroup={1|0} 是否允許使用組進(jìn)行管理
enablegroups={1|0} 是否允許在次倉(cāng)庫(kù)上基于組執(zhí)行倉(cāng)庫(kù)管理磁玉,默認(rèn)開啟
failovermethod={roundrobin|priority} 故障轉(zhuǎn)移方式
默認(rèn)為:roundrobin,為隨機(jī)挑選
username=
password=
用戶名與密碼
cost= 定義此倉(cāng)庫(kù)的開銷
默認(rèn)為1000刻获,開銷越小蜀涨,將越被優(yōu)先使用
說(shuō)明
- 關(guān)于
baseurl
瞎嬉,指定時(shí)以協(xié)議名開頭,而指定為file://
時(shí)表示通過(guò)文件系統(tǒng)方位(一般用于本地)厚柳,此時(shí)其后根本地路徑氧枣,將展示為file:///PATH
,即三個(gè)/
别垮,第三個(gè)/
表示Root Directory便监,如下為一個(gè)本地倉(cāng)庫(kù)的定義:[base1] name=CentOS 7 Release 7.1 baseurl=file:///media/cdrom enabled=0 gpgcheck=1 gpgkey=file:///media/cdrom/RPM-GPG-KEY-CentOS-7
yum的repo配置文件中可用的宏
$releasever
程序的版本,對(duì)yum而言指的是redhat-release版本碳想,只替換為主版本號(hào)
如RHEL 6.5烧董,則替換為6
$arch: 系統(tǒng)架構(gòu)
$basearch: 基礎(chǔ)系統(tǒng)架構(gòu)
如i686, i586等的基本架構(gòu)為i386
$YUM[0-9]: 在系統(tǒng)中定義的環(huán)境變量,可在yum中使用
我們可以通過(guò)Python的相關(guān)模塊來(lái)獲取這些宏信息:
[root@localhost ~]# python
Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum,pprint
>>> yb=yum.yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror, langpacks
{'arch': 'ia32e',
'basearch': 'x86_64',
'contentdir': 'centos',
'infra': 'stock',
'releasever': '7',
'uuid': 'b20d80a4-93ea-4c88-8d97-a4b982570a63'}
>>> exit()
[root@localhost ~]#
yum命令
yum
命令的使用格式為
yum[options] [command] [package ...]
[options]
-y: 自動(dòng)回答為yes
--nogpgcheck:不使用gpg check
-q:靜默模式
--disablerepo=repoidglob:臨時(shí)禁用此處指定的repo
--enablerepo=repoidglob:臨時(shí)啟用此處指定的repo
--noplugins:禁用所有插件
yum
有眾多子命令胧奔,以下將做介紹
-
list
: 列表逊移,顯示程序包
:all
:所有,默認(rèn)選項(xiàng)
:available
:可用的龙填,即倉(cāng)庫(kù)中有但尚未安裝的
:installed
:已經(jīng)安裝的
:updates
: 可用的升級(jí)可使用Glob過(guò)濾:
yum list [all|available|installed|updates | glob_exp1] [glob_exp2] [...]
clean
: 清理本地緩存
: 可選擇清理那些內(nèi)容:[packages|headers|metadata|expire-cache|rpmdb|dbcache|plugins|all]
repolist
: 顯示repo列表及其簡(jiǎn)要信息
:all
:enabled
: 默認(rèn)
:disabled
deplist
: 查看指定包所依賴的capabilitysinstall
: 安裝
: 直接指定包胳泉,可以本地安裝:yum install PACKAGE_FILE
: 需要手動(dòng)禁止檢查來(lái)源及完整性:--nogpgcheck
reinstall
:重新安裝
: 可指定本地包:yum reinstall PACKAGE_NAME
升級(jí)
:check-update
:檢查可升級(jí)的包
:update [package1 package2 …]
:升級(jí)為庫(kù)中的最新版本
:update_to
: 升級(jí)為指定版本
:downgrade
:降級(jí)remove|erase
:卸載
: 注意:會(huì)卸載掉依賴當(dāng)前軟件的包查詢信息
:info
:查詢指定包的說(shuō)明信息
:provides | whatprovides
:查看指定的特性(可以是某文件)是由哪個(gè)程序包所提供makecache
: 構(gòu)建緩存search string1 [string2] [...]
: 搜索,以指定的關(guān)鍵字搜索程序包名及summary信息包組相關(guān)
:groupinfo
:顯示指定包組信息
:grouplist
:顯示所有組
:groupinstall
: 安裝指定的包組
- CentOS7組安裝可能要執(zhí)行yum groups mark convert
:groupremove
:卸載組history
:查看yum的事務(wù)歷史
:[info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
創(chuàng)建yum倉(cāng)庫(kù):
:createrepo [options] <directory>
三岩遗、任務(wù)計(jì)劃
1. Linux任務(wù)計(jì)劃
Linux系統(tǒng)的任務(wù)計(jì)劃大體上分為兩種:一次性任務(wù)和周期性任務(wù)
同時(shí)扇商,系統(tǒng)也預(yù)設(shè)了一些任務(wù)居灯,如locate
數(shù)據(jù)庫(kù)的建立解阅、man手冊(cè)的建立等
2. 一次性任務(wù)
at
at需要依賴atd服務(wù),在RHEL系列發(fā)行版上鹦蠕,該服務(wù)默認(rèn)啟用
at
為交互式命令梆靖,執(zhí)行后控汉,用戶可在at>
提示符下進(jìn)行任務(wù)配置,命令使用方式為
at [OPTION] TIME
OPTION
-l 查看作業(yè)列表涤姊,相當(dāng)于atq命令
-f 從指定文件中讀取作業(yè)任務(wù)暇番,而不是交互式輸入
at -f /path/to/at_job_file TIME
-d 刪除一個(gè)尚未執(zhí)行的作業(yè),相當(dāng)于atrm命令
# at -d job_num
# atrm job_num
-c 查看指定作業(yè)的具體內(nèi)容
可查看at執(zhí)行任務(wù)時(shí)的環(huán)境配置
-q 指定隊(duì)列
at作業(yè)有隊(duì)列:使用單個(gè)字母來(lái)表示
TIME
絕對(duì)時(shí)間:HH:MM思喊, DD.MM.YY MM/DD/YY
相對(duì)時(shí)間:now+#UNIT
UNIT:minutes,hours,days,weeks
模糊時(shí)間:noon,midnight,teatime(16:00),tomorrow
而在at>
提示符中壁酬,直接輸入要執(zhí)行的命令即可,使用Ctrl+D
提交
任務(wù)計(jì)劃的執(zhí)行結(jié)果恨课,將以郵件的形式發(fā)送給安排任務(wù)計(jì)劃的用戶
at的執(zhí)行權(quán)限
在/etc/
下舆乔,可以編輯at.deny
和at.allow
文件,來(lái)設(shè)定誰(shuí)可以使用at
命令
- 若兩個(gè)文件都存在剂公,只有
at.allow
文件生效 - 若兩個(gè)文件都不存在希俩,只允許root用戶使用
batch
batch
命令可讓用戶無(wú)需指定時(shí)間,自動(dòng)選擇系統(tǒng)空閑的時(shí)間(load average<0.8)執(zhí)行任務(wù)纲辽,其他格式同at
3. 周期性任務(wù)
cron
cron
依賴的服務(wù)為crond
颜武,cron任務(wù)分為兩類璃搜,系統(tǒng)cron任務(wù)與用戶cron任務(wù)
cron任務(wù)的設(shè)定是通過(guò)定義文件來(lái)實(shí)現(xiàn)的,接下來(lái)將對(duì)兩種分別介紹
系統(tǒng)cron
系統(tǒng)cron定義在/etc/cron/
目錄中鳞上,/etc/cron/.*/
目錄下有各種周期的計(jì)劃任務(wù)这吻,管理員可通過(guò)編輯/etc/crontab
文件來(lái)定義系統(tǒng)cron,筆者系統(tǒng)該默認(rèn)文件如下
[root@localhost ~]# cat /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
上面為crond在指定任務(wù)時(shí)使用的環(huán)境配置篙议,而下方的注釋信息說(shuō)明了任務(wù)的定義格式唾糯,每行定義一個(gè)任務(wù),格式為
分鐘 小時(shí) 天 月 周 用戶 任務(wù)
cron的環(huán)境變量:
cron執(zhí)行的所有命令都去PATH
環(huán)境變量指定的路徑下去找鬼贱,在執(zhí)行任務(wù)的時(shí)候移怯,用戶可能沒(méi)有登錄,所以沒(méi)有環(huán)境變量
cron中默認(rèn)的環(huán)境變量:PATH /bin:/sbin/:usr/bin:/usr/sbin
應(yīng)該使用絕對(duì)路徑这难,或自定義PATH
環(huán)境變量
若任務(wù)計(jì)劃是腳本舟误,可以在腳本中設(shè)定環(huán)境變量:
#!/bin/bash
export PATH=……
用戶cron
用戶cron定義在/var/spool/cron/USERNAME
文件中,格式如下:
分鐘 小時(shí) 天 月 周 任務(wù)
與系統(tǒng)cron相比姻乓,此處無(wú)需指定用戶脐帝,其他定義方式與類似
時(shí)間的指定方式
時(shí)間的有效取值
: 分鐘:0-59
: 小時(shí):0-23
: 天:1-31
: 月:1-12
: 周:0-7,0和7都表示周日
時(shí)間通配表示:
: *
:對(duì)應(yīng)的所有有效取值糖权,如
- 3 * * * *
:每小時(shí)的第3分鐘執(zhí)行
- 3 * * * 7
:每周日的每小時(shí)的第3分鐘執(zhí)行
- 13 12 6 * 3
:每月的6日,同時(shí)是周三炸站,12:13分執(zhí)行
: ,
:離散時(shí)間點(diǎn)星澳,如
- 10,40 * * * *
:每小時(shí)的第10分和第40分執(zhí)行
- 10,40 * * * 2,5
:每周二和每周五的每小時(shí)第10分和第40分執(zhí)行
: -
:連續(xù)時(shí)間點(diǎn),如
- 10 02 * * 1-5
:每周一到周五的2:10執(zhí)行
: /#
:對(duì)應(yīng)取值范圍每多久一次旱易,如
- */3 * * * *
每3分鐘執(zhí)行一次
Tips
: 在使用/#
方式指定時(shí)間時(shí)禁偎,若指定的時(shí)間點(diǎn)不能被#
整除,將沒(méi)有意義
: day of week與day of month一般不同時(shí)使用
: 執(zhí)行結(jié)果將以郵件的形式發(fā)送給管理員阀坏,可通過(guò)下列方式拒收郵件
- 通過(guò)輸出重定向而拒收郵件:*/3 * * * * cat /etc/fstab &> /dev/null
- 指定MAILTO
為空如暖,發(fā)送mail給空用戶:MAILTO=""
例
: (1) 3 * * * *
:每小時(shí)執(zhí)行一次;每小時(shí)的第3分鐘忌堂;
: (2) 3 4 * * 5
:每周執(zhí)行一次盒至;每周5的4點(diǎn)3分;
: (3) 5 6 7 * *
:每月執(zhí)行一次士修;每月的7號(hào)的6點(diǎn)5分枷遂;
: (4) 7 8 9 10 *
:每年執(zhí)行一次;每年的10月9號(hào)8點(diǎn)7分棋嘲;
: (5) 9 8 * * 3,7
:每周三和周日的8點(diǎn)9分執(zhí)行酒唉;
: (6) 0 8,20 * * 3,7
:每周三和周日的8點(diǎn)和20d點(diǎn)執(zhí)行;
: (7) 0 9-18 * * 1-5
:周一至周五的9點(diǎn)至18點(diǎn)整沸移,每小時(shí)執(zhí)行痪伦;
: (8) */5 * * * *
:每5分鐘執(zhí)行一次某任務(wù)侄榴;
cron的使用權(quán)限
類似于at,cron也對(duì)那些用戶可以使用做了限制网沾,定義在/etc/cron.allow
與/etc/cron.deny
中
同樣的癞蚕,二者只有一個(gè)可以生效,/etc/cron.allow
優(yōu)先級(jí)較高
crontab命令
該命令用于維護(hù)cron任務(wù)绅这,用法為
crontab
-l 列出當(dāng)前用戶的所有cron任務(wù)列表
-e 通過(guò)EDITOR變量中定義的編輯器打開用戶自己的cron配置文件
編輯單獨(dú)的任務(wù)都使用-e選項(xiàng)涣达,無(wú)論是刪除、修改還是新建
-r 刪除/var/spool/cron/USERNAME文件证薇,移除所有任務(wù)
-i 在使用-r選項(xiàng)移除所有任務(wù)時(shí)提示用戶確認(rèn)
-u USERNAME 管理其他用戶的cron任務(wù)度苔,只有管理員可執(zhí)行
如: # crontab -e -U user1
Tips
: 如果在crontab的用戶命令中使用%
,需要轉(zhuǎn)義為\%
浑度,在使用單引號(hào)后寇窑,%
也可以不必轉(zhuǎn)義
5 3 * * * /bin/touch ~/testfile_`date +%Y-%m-%d`.txt 應(yīng)該寫為
5 3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
或放置于單引號(hào)中:
5 3 * * * /bin/touch ~/testfile_`date +'%Y-%m-%d'`.txt
例
: 1、每3分鐘執(zhí)行一個(gè)echo “how are you箩张?”
b */3 * * * * /bin/echo “how are you甩骏?”
: 2、每周2先慷、4饮笛、6備份/etc/目錄至/backup
目錄中,備份的文件名以當(dāng)etc_開頭并跟上當(dāng)日的日期作為文件名
b 0 0 * * 2论熙,4福青,6 ([ -d /backup ] || mkdir /backup )&& /bin/tar Jcf /back/etc-`date +'%F'`.tar.xz /etc/*
: 3.每天6,9脓诡,12无午,15,18查看一下系統(tǒng)當(dāng)前掛載的所有文件系統(tǒng)祝谚,并將查看的結(jié)果追加至/tmp/mounts.txt
文件中
b 0 6-18/3 * * * /bin/mount >> /tmp/mounts.txt
: 4.每天每?jī)尚r(shí)取當(dāng)前系統(tǒng)內(nèi)存空間余量宪迟,將其保存至/stats/memory.txt
文件中
b 20 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /stats/memory.txt
anacron
anacron是crontab的補(bǔ)充,用于檢查crontab中某任務(wù)在過(guò)去的一個(gè)周期內(nèi)是否沒(méi)有執(zhí)行,如果沒(méi)有執(zhí)行交惯,則在開機(jī)以后的某時(shí)間點(diǎn)讓其執(zhí)行一次次泽,無(wú)論其周期是否到達(dá)
/etc/anacrontab
文件如下
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
類似于/etc/crontabb
,文件中有4個(gè)字段:period in days delay in minutes job-identifier command
即
- 天數(shù)
- 若指定天數(shù)超過(guò)而任務(wù)沒(méi)有執(zhí)行商玫,則在開機(jī)以后的第多少分鐘執(zhí)行
- 注釋信息
- 操作
四箕憾、sed
sed
是Linux系統(tǒng)上著名的文本處理工具,sed為Stream EDitor之意拳昌,顧名思義袭异,它是一款流編輯器,由貝爾實(shí)驗(yàn)室開發(fā)炬藤,異常強(qiáng)大御铃,可以說(shuō)是一個(gè)腳本語(yǔ)言碴里,與vim
、awk
并成為L(zhǎng)inux文本處理三劍客(The Three Musketeers)
1. sed工作方式
模式空間
sed
工作時(shí)從輸入流或文件中逐行讀取文本到一個(gè)稱為模式空間(Pattern Space)的內(nèi)部緩沖區(qū)上真。每讀一行開始一個(gè)循環(huán) 咬腋。對(duì)于模式空間,sed
會(huì)應(yīng)用sed Script指定的一個(gè)或多個(gè)操作
另外還有另一殊緩沖區(qū)睡互,即保持空間(Hold Space)根竿,可以由幾個(gè)sed
命令使用,用于在循環(huán)之間保持和累積文本
sed工作流程
sed
工作按照讀取就珠、處理寇壳、顯示的流程執(zhí)行,即[4]
讀取(Read):sed從輸入流(文件妻怎,管道或標(biāo)準(zhǔn)輸入)讀取一行壳炎,并將其存儲(chǔ)在名為模式緩沖區(qū)的內(nèi)部緩沖區(qū)中
執(zhí)行(Execute):所有Sed命令按順序應(yīng)用于模式緩沖區(qū)。 默認(rèn)情況下逼侦,除非指定行尋址匿辩,否則SED命令將應(yīng)用于所有行(globally)
顯示(Display):將(修改的)內(nèi)容發(fā)送到輸出流。 發(fā)送數(shù)據(jù)后榛丢,模式緩沖區(qū)將為空
sed
對(duì)文件的每一行指定上述操作铲球,直至輸入流為空
說(shuō)明[5]
: - 模式空間是一塊活躍的緩沖區(qū),在sed編輯器執(zhí)行命令時(shí)它會(huì)保存待檢查的文本
: - 默認(rèn)情況下晰赞,所有的sed
命令都是在模式空間中執(zhí)行睬辐,因此輸入文件并不會(huì)發(fā)生改變
: - 還有另外一個(gè)緩沖區(qū)叫做保持空間,在處理模式空間中的某些行時(shí)宾肺,可以用保持空間來(lái)臨時(shí)保存一些行。在每一個(gè)循環(huán)結(jié)束的時(shí)候侵俗,sed
將會(huì)移除模式空間中的內(nèi)容锨用,但是該緩沖區(qū)中的內(nèi)容在所有的循環(huán)過(guò)程中是持久存儲(chǔ)的。sed
命令無(wú)法直接在該緩沖區(qū)中執(zhí)行隘谣,因此sed
允許數(shù)據(jù)在保持空間和模式空間之間切換
: - 初始情況下增拥,保持空間和模式空間這兩個(gè)緩沖區(qū)都是空的
: - 如果沒(méi)有提供輸入文件的話,sed
將會(huì)從標(biāo)準(zhǔn)輸入接收請(qǐng)求
: - 如果沒(méi)有提供地址范圍的話寻歧,默認(rèn)情況下sed
將會(huì)對(duì)所有的行進(jìn)行操作
2. 基礎(chǔ)用法
sed
默認(rèn)不編輯原文件掌栅,僅對(duì)模式空間中的數(shù)據(jù)做處理;處理結(jié)束后码泛,將模式空間打印至屏幕
其基本使用格式為
sed [options] SCRIPT file ...
若使用變量替換猾封,應(yīng)使用雙引號(hào),即sed [options] "SCRIPT" file ...
options
-n 靜默模式噪珊,不再默認(rèn)顯示模式空間的內(nèi)容
-i 直接修改原文件
-e 指定多個(gè)編輯指令
-e SCRIPT -e SCRIPT ... 即
-e 'AddressCommand' -e 'AddressCommand' ...
-f /PATH/TO/SED_SCRIPT_FILE 讀取腳本文件來(lái)處理文本
sed -f /path/to/sed_scripts file
文件中每行一個(gè)指令
-r 使用擴(kuò)展正則表達(dá)式(默認(rèn)為基本正則表達(dá)式)
SCRIPT:由<Address><Command>組成晌缘,多個(gè)SCRIPT直接可使用分號(hào)隔開
Address:地址定界
1齐莲、 StartLine,EndLine
1,100 第1行到第100行
$ 最后一行
2、 /Rpattern/ 能被pattern匹配到的所有行
/^root/ 以root開頭的行
3磷箕、/pattern1/,/pattern2/
第一次被pattern1匹配到的行開始选酗,至第一次被pattern2匹配到的行結(jié)束,這中間的所有行
或LineNumber,/pattern/
4岳枷、 LineNumber
指定的行
$ 最后一行
5芒填、 StartLine,+N
從StartLine開始,向后的N行(共n+1行)
6空繁、空地址
即不給定地址定界殿衰,對(duì)全文進(jìn)行處理
7、步進(jìn):~
1~2:所有奇數(shù)行
2~2:所有偶數(shù)行
Command:編輯命令
d 刪除符合條件的行
p 顯示符合條件的行
a \STRING 在指定的行后面追加新行家厌,內(nèi)容為STRING
\n 換行
i \STRING 在指定的行前面追加新行播玖,內(nèi)容為STRING
c \STRING 把匹配到的行替換為此處指定的文本STRING
r FILE 將指定的文件的內(nèi)容添加至符合條件的行處
w FILE 將符合條件的行另存至指定的文件中
= 顯示符合條件的行的行號(hào)
! 條件取反
一般形式:地址定界!編輯命令
s 查找并替換饭于,默認(rèn)只替換每行中第一次被模式匹配到的字符串
地址定界s/pattern/string/修飾符
將每一行中能夠被pattern匹配到的字符串替換成string字符串
注意:string字段中不能使用正則表達(dá)式
修飾符
g 全局替換蜀踏,替換所有被模式匹配到的字符串
i 忽略字符大小寫
w /PATH/TO/SOMEFILE
將替換成功的結(jié)果保存至指定文件中
p 顯示替換成功的行
sed
的s
命令與vim
中相同
例
: ①刪除/etc/grub.conf
文件中行首的空白符;
- sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf
: ②替換/etc/inittab
文件中"id:3:initdefault:"一行中的數(shù)字為5掰吕;
- sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
: ③刪除/etc/inittab
文件中的空白行果覆;
- sed '/^$/d' /etc/inittab
: ④刪除/etc/inittab
文件中開頭的#號(hào);
- sed 's@^#@@g' /etc/inittab
: ⑤刪除某文件中開頭的#
號(hào)及后面的空白字符,但要求#
號(hào)后面必須有空白字符;
- sed -r 's@^#[[:space:]]+@@g' /etc/inittab
: ⑥刪除文件中以空白字符后面跟#類的行中的開頭的空白字符及#
- sed -r 's@^[[:space:]]+#@@g' /etc/inittab
: ⑦取出一個(gè)文件路徑的目錄名稱;
- echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
- echo "/var/log/messages" | sed 's@[^/]\+/\?$@@'
: ⑧刪除/etc/init.d/functions
文件中的空白行
: - sed '/^$/d' /etc/init.d/functions
: ⑨刪除/etc/rc.d/rc.rc.sysinit
文件中以#
開頭且后面跟了至少一個(gè)空白字符的行的行首的#
和空白符殖熟;
- sed 's@^#[[:space:]]\{1,\}@@' /etc/rc.d/rc.sysinit
: ⑩取出一個(gè)文件路徑的目錄名稱局待,如/etc/sysconfig/network
,其目錄為/etc/sysconfig
菱属,功能類似dirname
命令钳榨;
- echo /etc/sysconfig/network | sed 's@[^/]\{1,\}/\?$@@'
2. 高級(jí)用法
sed
高級(jí)編輯命令
h:把模式空間(pattern space)中的內(nèi)容覆蓋至保持空間(hold space)中
H:把模式空間中的內(nèi)容追加至保持空間中
g:把保持空間中的內(nèi)容覆蓋至模式空間中
G:把保持空間中的內(nèi)容追加至模式空間中
x:把模式空間中的內(nèi)容與保持空間中的內(nèi)容互換
n:覆蓋讀取匹配到的行的下一行至模式空間中
N:追加讀取匹配到的行的下一行至模式空間中
d:刪除模式空間中的行
D:刪除多行模式空間中的所有行
如
sed-n'n;p' FILE
:顯示偶數(shù)行
- 說(shuō)明:對(duì)于N或n命令,讀取到下一行后纽门,下次就不再讀取
sed '1!G;h;$!d' FILE
:按行逆序顯示文件內(nèi)容
sed '$!d' FILE
:取出最后一行
sed '$!N;$!D' FILE
:取出最后兩行
sed '/^$/d;G' FILE
:刪除文件中的空行薛耻,而后給文件的每一行后加空行
sed 'n;d' FILE
:顯示奇數(shù)行
sed 'G' FILE
:在原有的每行后添加一個(gè)空行
五、例
1赏陵、每12小時(shí)備份并壓縮/etc/目錄至/backup目錄中饼齿,保存文件名稱格式為,"etc-年-月-日-時(shí)-分.tar.gz"
編輯/etc/crontab
文件蝙搔,定義任務(wù)計(jì)劃:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
0 0,12 * * * tar zcf /backup/etc-`date +'%F-%H-%M'`.tar.gz /etc/
說(shuō)明
- 使用到的
tar
與date
命令均在/usr/bin/
目錄下缕溉,在cron環(huán)境變量中定義之,或使用絕對(duì)路徑 - 命令中用到的
%
可使用\
轉(zhuǎn)義或?qū)⑵渲糜?code>''中
2吃型、寫一個(gè)腳本實(shí)現(xiàn)列出以下菜單給用戶:
cpu) display cpu information
mem) display memory information
disk) display disks information
quit) quit
!/bin/bash
cat << EOF
cpu) display cpu information
mem) display memory information
disk) display disks information
quit) quit
================================
EOF
read -p "Enter your option: " option
while true; do
case $option in
cpu)
lscpu
break
;;
mem)
free -m
break
;;
disk)
fdisk -l /dev/[hs]d[a-z]
break
;;
quit)
echo "quit"
exit 0
;;
*)
read -p "Enter your option: " option
;;
esac
done
3证鸥、 用bash實(shí)現(xiàn)統(tǒng)計(jì)訪問(wèn)日志文件中狀態(tài)碼大于等于400的IP數(shù)量并排序
本機(jī)的訪問(wèn)日志定義格式為
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "logs/access_log" combined
統(tǒng)計(jì)命令為
cut -d' ' -f1,9 access.log | grep [[:space:]][45] | sort | cut -d' ' -f1 | uniq -c
4、 使用自制的yum源安裝ftp、openssh敌土、curl镜硕、wget、tcpdump等軟件包
yum源配置:
[base1]
name=CentOS 7 Release 7.1
baseurl=file:///media/cdrom
enabled=0
gpgcheck=1
gpgkey=file:///media/cdrom/RPM-GPG-KEY-CentOS-7
軟件包安裝
[root@localhost scripts]# yum -y install ftp openssh curl wget tcpdump
-
關(guān)于加密的相關(guān)內(nèi)容返干,Web服務(wù)將做介紹 ?
-
圖片引用自 http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php#intro_solution ?
-
表格內(nèi)容來(lái)自yum.conf(5) ?
-
圖片來(lái)源:https://www.tutorialspoint.com/sed/sed_workflow.htm ?