Linux系統(tǒng)管理

本文主要介紹了系統(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ì)刪除源文件
    

    同樣,解壓命令bunzip2bzip2 -d

    同時(shí)也有用于直接查看文本內(nèi)容的工具bzcat

  • xz

    xz [OPTIONS] /PATH/TO/SOMEFILE
        OPTIONS
            -d: 解壓縮
            -#: 指定壓縮比稚铣,1-9, 默認(rèn)是6
            -k: 壓縮時(shí)保留原文件
    

    對(duì)應(yīng)的解壓命令unxzxz -d箱叁,查看文本文件內(nèi)容工具xzcat墅垮,此外還有一個(gè)小型.xz文件解壓工具xzdec

  • lzmaunlzma耕漱,lzcat

    可以使用xz --format=lzma算色、xz --format=lzma --decompressxz --format=lzma --decompress --stdout實(shí)現(xiàn)

以上壓縮命令均不能壓縮目錄

歸檔

以上命令不能壓縮目錄螟够,且若指定多個(gè)文件灾梦,則依然會(huì)壓縮為多個(gè),若需要將文件“打包”妓笙,則需要用到歸檔(Archive)工具若河,歸檔本身不會(huì)壓縮,常用的有ziptar

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中,軟件包管理器的作為有以下

  1. 打包成一個(gè)文件:二進(jìn)制程序姊途,庫(kù)文件涉瘾,配置文件知态,幫助文件
  2. 生成數(shù)據(jù)庫(kù),跟蹤所安裝的每一個(gè)文件立叛,其中有以下內(nèi)容
    軟件名和版本
    安裝生成的各文件路徑及校驗(yàn)碼
    依賴關(guān)系
    提供功能性說(shuō)明
  3. 提供程序組成格式负敏,如
    文件清單
    安裝卸載時(shí)運(yùn)行的腳本

可見,Linux平臺(tái)到的軟件包管理工作較為復(fù)雜秘蛇,其核心功能為

  1. 制作軟件包
graph LR
A[源代碼] -- 編譯 --> B[目標(biāo)二進(jìn)制格式]
B[目標(biāo)二進(jìn)制格式] --打包--> C[一個(gè)或有限幾個(gè)包文件]
  1. 安裝其做、卸載、升級(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)信息

  1. 發(fā)行商光盤或站點(diǎn)服務(wù)器

    https://mirrors.aliyun.com
    https://mirrors.sohu.com
    https://mirrors.163.com

  2. 項(xiàng)目官方站點(diǎn)

  3. 第三方組織

    Fedora-EPEL:https://fedoraproject.org/wiki/EPEL

    搜索引擎:
    https://pkgs.org
    https://rpmfind.net
    https://rpm.pbone.net

  4. 自己制作

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]

yum

這里我們一般將Server端稱為Yum Repository(yum倉(cāng)庫(kù))邓尤,他主要提供以下服務(wù)

  1. 提供了各rpm包
  2. 提供了依賴關(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
    : 查看指定包所依賴的capabilitys

  • install: 安裝
    : 直接指定包胳泉,可以本地安裝: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.denyat.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ǔ)言碴里,與vimawk并成為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_patter_space

sed工作流程

sed工作按照讀取就珠、處理寇壳、顯示的流程執(zhí)行,即[4]

sed_workflow
  • 讀取(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       顯示替換成功的行

seds命令與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ō)明

  • 使用到的tardate命令均在/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

  1. 關(guān)于加密的相關(guān)內(nèi)容返干,Web服務(wù)將做介紹 ?

  2. 圖片引用自 http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php#intro_solution ?

  3. 表格內(nèi)容來(lái)自yum.conf(5) ?

  4. 圖片來(lái)源:https://www.tutorialspoint.com/sed/sed_workflow.htm ?

  5. 參考自 https://www.tutorialspoint.com/sed/sed_workflow.htm ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兴枯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矩欠,更是在濱河造成了極大的恐慌财剖,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件癌淮,死亡現(xiàn)場(chǎng)離奇詭異躺坟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乳蓄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門咪橙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人虚倒,你說(shuō)我怎么就攤上這事美侦。” “怎么了魂奥?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵菠剩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我耻煤,道長(zhǎng)具壮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任哈蝇,我火速辦了婚禮棺妓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炮赦。我一直安慰自己涧郊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布眼五。 她就那樣靜靜地躺著,像睡著了一般彤灶。 火紅的嫁衣襯著肌膚如雪看幼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天幌陕,我揣著相機(jī)與錄音诵姜,去河邊找鬼。 笑死搏熄,一個(gè)胖子當(dāng)著我的面吹牛棚唆,可吹牛的內(nèi)容都是我干的暇赤。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼宵凌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞋囊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瞎惫,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤溜腐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瓜喇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挺益,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年乘寒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了望众。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伞辛,死狀恐怖烂翰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情始锚,我是刑警寧澤刽酱,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站瞧捌,受9級(jí)特大地震影響棵里,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姐呐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一殿怜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧曙砂,春花似錦头谜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至笑陈,卻和暖如春际度,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涵妥。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工乖菱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓窒所,卻偏偏與公主長(zhǎng)得像鹉勒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吵取,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 觀其大綱 第1部分Linux的基礎(chǔ)知識(shí)第1章Linux概述第2章Linux系統(tǒng)的安裝KickStart開始自動(dòng)安裝...
    周少言閱讀 1,491評(píng)論 1 10
  • 1. 認(rèn)識(shí)系統(tǒng)服務(wù)(daemon) 簡(jiǎn)單的說(shuō)禽额,系統(tǒng)為了某些功能必須要提供一些服務(wù) (不論是系統(tǒng)本身還是網(wǎng)絡(luò)方面),...
    月影訴殘心閱讀 334評(píng)論 0 1
  • 觀其大綱 第一部分 基本管理技術(shù) 1第1章 從何處入手 2第2章 腳本和shell 24第3章 引導(dǎo)和關(guān)機(jī) 62第...
    周少言閱讀 1,821評(píng)論 1 2
  • 今天是我農(nóng)歷32歲生日海渊,也是我來(lái)到這個(gè)世界的第11665天绵疲。感謝母親給予我生命,并歷經(jīng)艱難撫養(yǎng)我長(zhǎng)大〕家桑現(xiàn)如今...
    米爹_c175閱讀 278評(píng)論 0 0
  • 為何要高效閱讀 在互聯(lián)網(wǎng)和自媒體風(fēng)行的時(shí)代讯沈,我們周遭的環(huán)境發(fā)生了很大的變化郁岩,比如房?jī)r(jià)瘋了似地飆漲,有初入職場(chǎng)迷茫不...
    藍(lán)小歌閱讀 1,396評(píng)論 6 65