linux安装包管理:yum和rpm 文本处理:sed

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux安装包管理:yum和rpm 文本处理:sed相关的知识,希望对你有一定的参考价值。

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
    [[email protected] ~]# 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
    [[email protected] ~]#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
"
    echo -e "(2)mem: show memory info
"
    echo -e "(3)cpu: show cpu info!
" 
    echo -e "(*) quit
 "
    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

测试:
[email protected] 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:在指定行后面追加文本 支持使用 实现多行追加
    i []text:在行前面插入文本
    c []text:替换行为单行或多行文本
    w /path/somefile: 保存模式匹配的行至指定文件
    r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
    =: 打印行号
    !:模式空间中匹配行取反处理 如 2!d 删除除了第二行所有行
  5. 常用用法(替代)
    s///:查找替换,支持使用其它分隔符,[email protected]@@,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 打印到
    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/ / /‘ 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访问网页产生错误和正常日志文件
执行脚本
[[email protected] 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. 查看安装历史
    [[email protected] 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的主要内容,如果未能解决你的问题,请参考以下文章

linux软件安装管理之yum

Linux程序包管理之yum源安装

Linux文本处理和软件包管理

linux yum怎么安装 及过程

在linux中,rpm和yum有什么区别?

Linux 包管理工具之Yum