週期性任務計劃,包管理,sed以及shell編程基礎

週期性任務計劃,包管理,sed以及shell編程基礎

1、每12小時備份並壓縮/etc/目錄至/backup目錄中,保存文件名稱格式爲,"etc-年-月-日-時-分.tar.gz"
[root@localhost /]# crontab -e
0 /12 /usr/bin/tar -zcf /data/backup/etc-$(date '+%Y-%m-%d--%H-%M').tar.gz /ect/*
2.rpm包管理功能總結以及實例應用演示
rpm是一個功能十分強大的軟件包管理系統,它使得在Linux下安裝、升級和刪除軟件包的工作變得容易,並且具有安裝、升級、卸載、查詢和校驗、數據庫維護等功能.
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
(1)安裝:

rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm  -ivh  PACKAGE_FILE ...
GENERAL OPTIONS:
 -v:verbose,詳細信息
 -vv:更詳細的輸出
[install-options]:
 -h:hash marks輸出進度條;每個#表示2%的進度;
 --test:測試安裝,檢查並報告依賴關係及衝突消息等;
--nodeps:忽略依賴關係;不建議;
--replacepkgs:重新安裝
注意:rpm可以自帶腳本;
四類:--noscripts
preinstall:安裝過程開始之前運行的腳本,%pre , --nopre
postinstall:安裝過程完成之後運行的腳本,%post , --nopost
preuninstall:卸載過程真正開始執行之前運行的腳本,%preun, --nopreun
postuninstall:卸載過程完成之後運行的腳本,%postun , --nopostun
--nosignature:不檢查包簽名信息,不檢查來源合法性;
--nodigest:不檢查包完整性信息;

(2)升級:

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)後提供;

(3)卸載:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...----allmatches:卸載所有匹配指定名稱的程序包的各版本;
 --nodeps:忽略依賴關係
 --test:測試卸載,dry run模式

(4)查詢:

rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;
 -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, ...

(5)校驗:

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
包來源合法性驗正和完整性驗正:
來源合法性驗正:
完整性驗正:
獲取並導入信任的包製作者的密鑰:
對於CentOS發行版來說:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
驗正:
(1) 安裝此組織簽名的程序時,會自動執行驗正;
(2) 手動驗正:rpm -K PACKAGE_FILE

(6)數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操作:通過此處的數據庫進行;

獲取幫助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
 --initdb:初始化數據庫,當前無任何數據庫可實始化創建一個新的;當前有時不執行任何操作;
 --rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
  • yum的配置和使用總結以及yum私有倉庫的創建。
    (1) yum是rpm的前端工具,可以解決軟件包的依賴問題。yum的配置文件分兩個部分:一個是 /etc/yum.conf 配置文件爲所有倉庫提供公共配置,一個是 /etc/yum.repos.d/*.repo 倉庫配置文件。yum的日誌文件保存在 /etc/log/yum.log 文件中。
    yum命令的用法:
    yum [options] [command] [package ...]
    顯示倉庫列表:
    repolist [all|enabled|disabled]
    顯示程序包:
    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私有倉庫的創建

[root@localhost yum.repos.d]# vim epel.repo 
[epel]
 name=Fedora EPEL
 baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
 gpgcheck=0
  • 寫一個腳本實現列出以下菜單給用戶:
    (1)disk:show disk info信息
    (2)mem: show memory info信息
    (3)cpu: show cpu info信息
    (*)quit
    /bin/bash
    cat <<EOF
    disk)show disks info
    mem)show mem info
    cpu)show cpu info
    *)QUIT
    EOF
    read -p "Your choice": option
    if [[ "${option}" == "disk" ]];then
    fdisk -l /dev/[sh]d[a-z]
    elif [[ "${option}" == "mem" ]];then
    free -m
    elif [[ "${option}" == "cpu" ]];then
    lscpu
    else
    echo "Unkown option"
    exit 3
    fi
  • sed用法總結並結合實例演示
    1.用法:
    sed [OPTION]... 'script' [input-file] ...
    script:
    地址定界編輯命令
    常用選項:
    -n:不輸出模式空間中的內容至屏幕;
    -e script, --expression=script:多點編輯;
    -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:刪除;
    p:顯示模式空間中的內容;
    a  \text:在行後面追加文本“text”,支持使用\n實現多行追加; 
    i  \text:在行前面插入文本“text”,支持使用\n實現多行插入; 
    c  \text:把匹配到的行替換爲此處指定的文本“text”;
    w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;
    r  /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行後面;文件合併;
    =:爲模式匹配到的行打印行號;
    !:條件取反;
    地址定界!編輯命令;
    s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;
    替換標記:
    g:全局替換;
    w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;
    p:顯示替換成功的行;
    高級編輯命令:
    h:把模式空間中的內容覆蓋至保持空間中;
    H:把模式空間中的內容追加至保持空間中;
    g:把保持空間中的內容覆蓋至模式空間中;
    G:把保持空間中的內容追加至模式空間中;
    x:把模式空間中的內容與保持空間中的內容互換;
    n:覆蓋讀取匹配到的行的下一行至模式空間中;
    N:追加讀取匹配到的行的下一行至模式空間中;
    d:刪除模式空間中的行;
    D:刪除多行模式空間中的所有行;

    2.結合實例演示:
    (1)打印 /etc/passwd 文件的第三行,原文件所有行也將打印:
    sed ‘3p’ /etc/passwd
    (2)只打印 /etc/passwd 文件的第三行
    sed -n ‘3p’ /etc/passwd
    (3)只打印 /etc/passwd 文件的第一行到第四行
    sed -n '1,4p' /etc/passwd
    (4)只打印 /etc/passwd 文件中包行root字符的所有行
    sed -n '/root/p' /etc/passwd
    (5)第一行打印行號,第二行打印行內容,循環打印所有匹配到的行
    sed -n -e '/root/p' -e '/root/=' /etc/passwd
    (6)在匹配行的下一行添加superman,並換行添加over。支持添加多行內容。
    sed ‘/root/a\superman\nover’ /etc/passwd
    (7)在匹配行的上一行添加superman,並換行添加over。支持添加多行內容。
    sed ‘/root/i\superman\nover’ /etc/passwd
    (8)在匹配行的行替換爲superman和over新行。支持替換爲多行內容。
    sed ‘/root/c\superman\nover’ /etc/passwd
    (9)刪除file中的空行並打印
    sed ‘/^$/d’ file
    (10)將root替換爲rootsuperman字符串,其中&代表是每一個匹配的結果,如一行中有多個字符串匹配則只選取第一個匹配結果
    sed -n 's/root/&superman/p' /etc/passwd
    (11)刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#後面的所有空白字符
    sed 's@^#[[:space:]]*@@' /etc/fstab

  • 用bash實現統計訪問日誌文件中狀態碼大於等於400的IP數量並排序
    (1) awk '$9&gt;400{print $1}' /var/log/httpd/access_log | sort -n | uniq -c
    (2)sed -nr 's@^(.*)- -.*" ([0-9]{3}).*@\1,\2@p' /var/log/httpd/access_log | grep '.* ,[4|5].*' | sort -nr | uniq -c
  • 使用自制的yum源安裝ftp、openssh、curl、wget、tcpdump等軟件包
     [root@httpd-server yum.repos.d]# vim epel.repo 
      [epel]
      name=Fedora EPEL
      baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
      gpgcheck=0

    yum install -y ftp openssh curl wget tcpdum &&gt; /dev/null

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章