1. 程式人生 > >linux安裝包管理:yum和rpm 文本處理:sed

linux安裝包管理:yum和rpm 文本處理:sed

repos rpm -e 偶數 匹配 usr ip地址 rpm查詢 att 替代

1.每12小時備份並壓縮/etc/目錄到/data中,並保存文件格式為“etc-年-月-日-時-分.tar.gz”
  1. 編寫腳本用來備份 文件/root/etcback.sh

     #!/bin/bash
     tar -zcf /data/etc-`date "+%F-%H-%M"`.tar.gz  /etc/  &>/dev/null
  2. 執行crontab -e,加入0 1,13 * /root/etcback.sh,保存退出
  3. 確保crond服務啟動 ps -aux|grep cron
    root 971 0.0 0.1 126304 1564 ? Ss 13:18 0:00 /usr/sbin/crond -n

    root 5393 0.0 0.0 123252 760 ? Ss 15:01 0:00 /usr/sbin/anacron -s

  4. 測試:把系統時間調整到差不多時間,date -s 0:57
    查看日誌/var/log/cron
    Dec 15 01:00:01 centos7 CROND[2440]: (root) CMD (/root/etcback.sh)
    ls /data
    etc-2018-12-15-01-00.tar.gz
    成功備份

2.rpm基本用法和應用

  1. 將編譯好的應用程序的各組成文件打包一個或幾個 程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、 升級和校驗等管理操作
    rpm數據庫(公共):/var/lib/rpm
  2. rpm安裝與升級
    rpm -ivh PACKAGE_FILE 包路徑 基本安裝方法
    --test: 測試安裝,但不真正執行安裝,即dry run模式
    --nodeps:忽略依賴關系
    --replacepkgs | replacefiles 強行重新安裝
    --nosignature: 不檢查來源合法性
    --nodigest:不檢查包完整性
    --noscripts:不執行程序包腳本
    --oldpackage:降級
    --force: 強制安裝
    rpm -Uvh 升級和安裝
    rpm -Fvh 只升級(無舊版本無法升級)
    內核建議rpm -ivh 安裝新版本 (內核允許多版本)
  3. rpm包查詢
    rpm -q 包名 查詢
    -qp 包路徑 對未安裝包查詢
    -qa 查詢所有安裝包
    -ql 包名 列出文件列表
    -qf 文件 列出文件來自哪個包
    -qp 包路徑 針對未安裝包的查詢
    -qc 只看配置文件
    -qd 只看文檔
    -qi 看一些說明
    -V 包名 查看安裝包文件是否被修改
    rpm -K|checksig rpmfile 檢查包的完整性和簽名
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入私鑰
  4. 包卸載
    rpm -e 包名 卸載
    --nodeps 忽略依賴關系
    --noscripts
    --notriggers
    --test 測試卸載
  5. 其他應用
    rpm2cpio 包文件|cpio –itv 預覽包內文件
    rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件 (默認恢復到當前文件夾,不加條件恢復全部)
  6. 示例
    1. rpm -qpi /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm查詢包信息
      Name : httpd
      Version : 2.4.6
      Release : 67.el7.centos
      Architecture: x86_64
      Install Date: (not installed)
      Group : System Environment/Daemons
      Size : 9823661
      License : ASL 2.0
      Signature : RSA/SHA256, Fri 11 Aug 2017 12:40:32 AM CST, Key ID 24c6a8a7f4a80eb5
      Source RPM : httpd-2.4.6-67.el7.centos.src.rpm
      Build Date : Fri 04 Aug 2017 11:21:07 AM CST
      Build Host : c1bm.rdu2.centos.org
      Relocations : (not relocatable)
      Packager : CentOS BuildSystem <http://bugs.centos.org>
      Vendor : CentOS
      URL : http://httpd.apache.org/
      Summary : Apache HTTP Server
      Description :
      The Apache HTTP Server is a powerful, efficient, and extensible
      web server.
    2. rpm -ivh --nodeps Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm 忽略依賴性安裝
      Preparing... ################################# [100%]
      Updating / installing...
      1:httpd-2.4.6-67.el7.centos ################################# [100%]
    3. rpm2cpio /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm |cpio -idv ./usr/sbin/httpd 解壓rpm包中指定文件到當前文件夾
      ./usr/sbin/httpd
      19336 blocks
      tree usr/ 查看解壓文件
      usr/
      └── sbin
      └── httpd
      1 directory, 1 file

3.yum的配置與使用,私有倉庫創建

  1. yum客戶端配置文件
    /etc/yum.conf:為所有倉庫提供公共配置
    /etc/yum.repos.d/*.repo:為倉庫的指向提供配置
  2. 倉庫指向的定義:
    [repositoryID] name= 倉庫名字
    baseurl=https:// http:// ftp:// file://
    enabled={1|0} 0表示禁用,默認開啟
    gpgcheck={1|0} 0表示不檢查,默認檢查
    gpgkey=URL 私鑰文件位置
    enablegroups={1|0}
    failovermethod={roundrobin|priority} roundrobin:意為隨機挑選,默認值 priority:按順序訪問 cost= 默認為1000
  3. yum的repo配置文件中可用的變量:
    $releasever: 當前OS的發行版的主版本號
    $arch: 平臺,i386,i486,i586,x86_64等
    $basearch:基礎平臺;i386, x86_64
    $YUM0-$YUM9:自定義變量
    實例: http://server/centos/$releasever/$basearch/
  4. yum --nogpgcheck:禁止進行gpg check -y: 自動回答為“yes” -q:靜默模式
    yum repolist [all|enabled|disabled] 列出源信息
    yum list all 列出所有可安裝的包
    yum install package1 [package2] [...] 安裝
    yum reinstall package1 [package2] [...] (重新安裝)
    yum update package1 [package2] [...] 更新
    yum downgrade package1 [package2] [...] (降級)
    yum check-update 檢查可用更新
    yum remove | erase package1 [package2] [...] 卸載
    yum info package 查看包信息
    yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 清理本地緩存: 清除/var/cache/yum/$basearch/$releasever緩存
    yum search string1 [string2] [...] 以指定的關鍵字搜索程序包名和相關信息
    yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats] 查看yum事務歷史

    yum history
    yum history info 6
    yum history undo 6
  5. yum 程序組合安裝相關
    yum groupinstall group1 [group2] [...]
    yum groupupdate group1 [group2] [...]
    yum grouplist [hidden] [groupwildcard] [...]
    yum groupremove group1 [group2] [...]
    yum groupinfo group1 [...]
  6. 創建自己的yum倉庫
    進入. /etc/yum.repos.d/ 建立base.repo文件
    [base]
    name=carom
    baseurl=file:///misc/cd/
    gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-$releaserver
    [network]
    name=all
    baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
    enabled=1
    gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/RPM-GPG-KEY-CentOS-$releasever

    禁用network yum源時改為enabled=0
    [root@centos7 ~]# yum clean all
    Loaded plugins: fastestmirror, langpacks
    Cleaning repos: base network
    Cleaning up everything
    Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
    [root@centos7 ~]#yum repolist
    Loaded plugins: fastestmirror, langpacks
    base | 3.6 kB 00:00:00
    network | 3.6 kB 00:00:00
    (1/4): base/group_gz | 156 kB 00:00:00
    (2/4): base/primary_db | 5.7 MB 00:00:00
    (3/4): network/7/group_gz | 166 kB 00:00:01
    (4/4): network/7/primary_db | 6.0 MB 00:00:05
    Determining fastest mirrors
    repo id repo name status
    base carom 9,591
    network/7 all 10,019
    repolist: 19,610


4.查看系統信息小腳本

 #!/bin/bash
disk () {
    df -h
    echo ""
    lsblk
}

mem () {
    free -h
    echo ""
    cat /proc/meminfo
}
cpu (){
    iostat -c
    echo ""
    cat /proc/cpuinfo
}
f_wait () {
    echo ""
    read -p  "please input any key to continue !" key
    case $key in
    *)
            continue
            ;;
    esac
}
while true ;do
    echo -e "(1)disk:show disk info\n"
    echo -e "(2)mem: show memory info\n"
    echo -e "(3)cpu: show cpu info!\n" 
    echo -e "(*) quit\n "
    read -p "please input your selection (1-3): " num
    case $num in 
    1)
            disk
            f_wait
            ;;
    2)
            mem
            f_wait
            ;;
    3)
            cpu
            f_wait
            ;;
    *)
            echo "exit........"
            sleep 1
            exit
    esac
done

測試:
root@centos7 testsh]#bash sysmenu.sh
(1)disk:show disk info

(2)mem: show memory info

(3)cpu: show cpu info!

(*) quit

please input your selection (1-3): 1
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 8.8G 42G 18% /
devtmpfs 576M 0 576M 0% /dev
tmpfs 591M 0 591M 0% /dev/shm
tmpfs 591M 8.5M 582M 2% /run
tmpfs 591M 0 591M 0% /sys/fs/cgroup
/dev/sda3 30G 75M 30G 1% /data
/dev/sda1 1014M 158M 857M 16% /boot
/dev/sdb1 9.8G 13M 7.8G 1% /mydata
tmpfs 119M 12K 119M 1% /run/user/42
tmpfs 119M 0 119M 0% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /misc/cd

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 50G 0 part /
├─sda3 8:3 0 30G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 10G 0 part /mydata
└─sdb2 8:18 0 1G 0 part [SWAP]
sdc 8:32 0 30G 0 disk
├─sdc1 8:33 0 10G 0 part
├─sdc2 8:34 0 10G 0 part
│ └─testvg-testlv 253:0 0 3G 0 lvm
└─sdc3 8:35 0 10G 0 part
sr0 11:0 1 8.1G 0 rom /misc/cd

please input any key to continue !
(1)disk:show disk info

(2)mem: show memory info

(3)cpu: show cpu info!

(*) quit

please input your selection (1-3): q
exit........

5.sed用法

sed是一種流編輯器,它一次處理一行內容。處理時,把當前 處理的行存儲在臨時緩沖區中,稱為“模式空間”,接著用sed命令處理緩沖區中的內容,處理完成後 ,把緩沖區的內容送往屏幕。然後讀入下行,執行下一個循環 。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空 模式空間,但不會清空保持空間(高級用法時候使用)。這樣不斷重復,直到文件末 尾。文件內容並沒有改變,除非你使用重定向存儲輸出。

  1. 基本格式
    sed 選項 位置定界 執行操作 如:sed –n ‘2p’ /etc/passwd 2是位置定界 p是打印操作
  2. 基本選項
    -n:不輸出模式空間內容到屏幕,即不自動打印
    -e: 連接多次操作
    -f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
    -r: 支持使用擴展正則表達式
    -i.bak: 修改原文件並且備份原文件
  3. 位置定界
    (1) 不給地址:對全文進行處理
    (2) 單地址: n: 指定的第n行,$:最後一行 /pattern/:被此處模式所能夠匹配到的每一行(可用正則表達式匹配)
    (3) 地址範圍: m,n 指定從m行到n行 m,+n 指定從m行開始到下面第n行 /pat1/,/pat2/ 表達式之間的行 m,/pat1/ 從m行開始 到匹配行
    (4) ~:步進 m~n 表示第m行開始 每n行處理一次 1~2 奇數行 2~2 偶數行
  4. 執行操作
    d: 刪除模式空間匹配的行,並立即啟用下一輪循環
    p:打印當前模式空間內容,追加到默認輸出之後
    a []text:在指定行後面追加文本 支持使用\n實現多行追加
    i []text:在行前面插入文本
    c []text:替換行為單行或多行文本
    w /path/somefile: 保存模式匹配的行至指定文件
    r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行後
    =: 打印行號
    !:模式空間中匹配行取反處理 如 2!d 刪除除了第二行所有行
  5. 常用用法(替代)
    s///:查找替換,支持使用其它分隔符,s@@@,s### ?
    替換標記: g: 行內全局替換 如sed ‘s/test/mytest/g‘ example test 換成 mytest
    p: 顯示替換成功的行 sed –n ‘s/root/&superman/p’ /etc/passwd root 換成 rootsuperman &表示要替換內容
    w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
    例子
    ifconfig ens33| sed -rn "2s/.inet (.) +netmask./\1/p" 獲取ip ;第2行做替換 ,後向引用獲取第一個括號內容
    df |sed -rn "/^\/dev\/sd/s/.
    ([0-9]+)%./\1/p" 獲取各個分區利用率
    sed -r ‘s/(.
    \/)([^/]+\/?)/\2/‘ 獲取目錄基名
    sed -r ‘s/(.*\/)([^/]+\/?)/\1/‘獲取目錄名
  6. 高級用法(使用模式空間和保持空間)
    P 打印到\n
    h 模式空間 覆蓋 保持空間
    H 模式空間 追加 保持空間
    g 保持空間 覆蓋 模式空間
    G 保持空間 追加 模式空間
    x 保持空間 互換 模式空間
    n 讀取匹配行的下一行覆蓋到模式空間 如果沒有用-n開關關閉auto-print,每次模式空間清空之前會默認打印一次裏面的內容
    N 讀取匹配行的下一行追加到模式空間
    d 刪除模式空間的行
    D 如果模式空間有換行符 ,就刪除第一個換行符的模式空間文本,不重新讀取新行,並返回腳本頭部執行 例如:sed ‘N;D ‘中讀第一行後執行N,追加第二行,執行D,刪除第一行,這時系統不直接讀取第三行,而是直接執行N
    如果不包含換行符 ,類似d
  7. 示例
    seq 1 10 | sed -n ‘n;p‘ seq 1 10 | sed -n ‘1~2p‘ 打印偶數行
    seq 1 10 | sed ‘1!G;h;$!d‘ seq 1 10 | sed -n ‘1!G;h;$p‘倒序打印1-10
    seq 1 10 | sed ‘N;D ‘ seq 1 10 | sed ‘$!d‘ 打印最後一行
    seq 1 10 | sed ‘$!N;$!D ‘打印最後兩行
    seq 1 10 | sed ‘G‘ 每一行下追加空行
    seq 1 10 | sed ‘g ‘ 變成全部空行
    sed ‘/^$/d;G‘ 每一行追加空白行且刪除原本所以空白行
    seq 1 10|sed ‘N;s/\n/ /‘ seq 1 10|xargs -n2

[^A-Za-z0-9_ ] 方法可以使用在排除特殊字符


6.統計httpd日誌文件狀態大於400的ip地址數量

#!/bin/bash
dirpath=/var/log/httpd/access_log
while read line ; do
    sta=`echo $line |sed -rn "s/.*\" ([0-9]+) .*/\1/p"`
    if [ $sta -ge 400 ] ;then
            echo $line |sed -rn "s/(.*) - -.*/\1/p" >> ./httpdstat
    fi
done <$dirpath
cat ./httpdstat|sort -rn|uniq -c|sort -rn
rm -f ./httpdstat &>/dev/null

安裝httpd服務,啟動httpd服務,用不同ip訪問網頁產生錯誤和正常日誌文件
執行腳本
[root@centos7 testsh]#bash httpdstatic.sh
354 192.168.0.101
18 192.168.0.108
15 192.168.0.111
3 192.168.0.112


7.使用自定義yum安裝ftp、openssh、tcpdump服務

  1. 執行命令批量安裝服務
    yum -y install ftp tcpdump openssh
    後面提示
    Installed:
    ftp.x86_64 0:0.17-67.el7 openssh.x86_64 0:7.4p1-16.el7 tcpdump.x86_64 14:4.9.2-3.el7

    Complete!
    成功安裝

  2. 查看安裝歷史
    [root@centos7 testsh]#yum history info
    Loaded plugins: fastestmirror, langpacks
    Transaction ID : 16
    Begin time : Sun Dec 16 17:56:29 2018
    Begin rpmdb : 1304:04159b1e18a815a1fde89273c26b57ef2cb0405d
    End time : 17:56:30 2018 (1 seconds)
    End rpmdb : 1307:43802a135230576fae6af9f1bc4399169efa29d4
    User : root <root>
    Return-Code : Success
    Command Line : -y install ftp tcpdump openssh
    Transaction performed with:
    Installed rpm-4.11.3-32.el7.x86_64 @network
    Installed yum-3.4.3-154.el7.centos.noarch @anaconda
    Installed yum-plugin-fastestmirror-1.1.31-42.el7.noarch @anaconda
    Packages Altered:
    Install ftp-0.17-67.el7.x86_64 @base
    Install openssh-7.4p1-16.el7.x86_64 @network
    Install tcpdump-14:4.9.2-3.el7.x86_64 @network
    history info

linux安裝包管理:yum和rpm 文本處理:sed