第四周sed rpm yum dnf

第四周

处理文本的工具sed

  • Stream EDitor, 行编辑器
  • sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时 缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的 内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。 如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清 空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重 定向存储输出。
  • 功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
  • 参考: http://www.gnu.org/software/sed/manual/sed.html

    sed [option]... 'script' inputfile...

    常用选项:

  • -n 不输出模式空间内容到屏幕,即不自动打印
  • -e 多点编辑
  • -f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
  • -r 支持使用扩展正则表达式
  • -i.bak 备份文件并原处编辑

script: '地址命令'
地址定界:

  • (1) 不给地址:对全文进行处理
  • (2) 单地址:
       #:指定的行,$:最后一行
       /pattern/:被此处模式所能够匹配到的每一行
  • (3) 地址范围:
        #,#
        #,+#
        /pat1/,/pat2/
        #,/pat1/
  • (4) ~:步进
       1~2 奇数行
       2~2 偶数行

编辑命令:

  • d 删除模式空间匹配的行,并立即启用下一轮循环
  • p 打印当前模式空间内容,追加到默认输出之后
  • a []text 在指定行后面追加文本,支持使用\n实现多行追加
  • i []text 在行前面插入文本
  • c []text 替换行为单行或多行文本
  • w /path/file 保存模式匹配的行至指定文件
  • r /path/file 读取指定文件的文本至模式空间中匹配到的行后
  • = 为模式空间中的行打印行号
  • ! 模式空间中匹配行取反处理
  • s/// 查找替换,支持使用其它分隔符,s@@@,s###
  • 替换标记:
        g 行内全局替换
        p 显示替换成功的行
        w /PATH/FILE 将替换成功的行保存至文件中

    高级编辑命令:

  • P: 打印模式空间开端至\n内容,并追加到默认输出之前
  • h: 把模式空间中的内容覆盖至保持空间中
  • H:把模式空间中的内容追加至保持空间中
  • g: 从保持空间取出数据覆盖至模式空间
  • G:从保持空间取出内容追加至模式空间
  • x: 把模式空间中的内容与保持空间中的内容进行互换
  • n: 读取匹配到的行的下一行覆盖至模式空间
  • N:读取匹配到的行的下一行追加至模式空间
  • d: 删除模式空间中的行
  • D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环

软件包管理

包和包管理器

  • 最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在 GNU/Linux上运行的软件。用户急需系统能提供一种更加便利的方法来 管理这些软件,当Debian诞生时,这样一个管理工具也就应运而生,它 被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux 系统中,稍后Red Hat才开发自己的“rpm”包管理系统
  • 包的组成: 二进制文件、库文件、配置文件、帮助文件

    程序包管理器:

    • debian: deb文件, dpkg包管理器
    • redhat: rpm文件, rpm包管理器
    • rpm:Redhat Package Manager
         RPM Package Manager
      包命名
  • 源代码:name-VERSION.tar.gz|bz2|xz
    VERSION: major.minor.release
  • rpm包命名方式:
    name-VERSION-release.arch.rpm
    例:bash-4.2.46-19.el7.x86_64.rpm
    VERSION: major.minor.release release:release.OS
    常见的arch: x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc
    跟平台无关:noarch

    包命名和工具

  • 包:分类和拆包
    Application-VERSION-ARCH.rpm: 主包
    Application-devel-VERSION-ARCH.rpm 开发子包
    Application-utils-VERSION-ARHC.rpm 其它子包
    Application-libs-VERSION-ARHC.rpm 其它子包
  • 包之间:可能存在依赖关系,甚至循环依赖
  • 解决依赖包管理工具
    yum:rpm包管理器的前端工具
    apt:deb包管理器前端工具
    zypper:suse上的rpm前端管理工具
    dnf:Fedora 18+ rpm包管理器前端管理工具

    库文件

  • 查看二进制程序所依赖的库文件
    ldd /PATH/TO/BINARY_FILE
  • 管理及查看本机装载的库文件
    ldconfig 加载配置文件中指定的库文件
    /sbin/ldconfig –p 显示本机已经缓存的所有可用库文件名及文件路径 映射关系
  • 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
  • 缓存文件:/etc/ld.so.cache

    程序包的来源

  • 管理程序包的方式:
          使用包管理器:rpm
          使用前端工具:yum, dnf

    获取程序包的途径

    (1) 系统发版的光盘或官方的服务器

  • CentOS镜像:
    https://www.centos.org/download/
    http://mirrors.aliyun.com
    http://mirrors.sohu.com
    http://mirrors.163.com

(2) 项目官方站点
(3) 第三方组织:

(4) 自己制作
注意:第三方包建议要检查其合法性 来源合法性,程序包的完整性

rpm包管理

CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护

  • 安装: rpm {-i|--install} [install-options] PACKAGE_FILE…
    -v: verbose
    -vv:
    -h: 以#显示程序包管理执行进度
  • rpm -ivh PACKAGE_FILE ...

    rpm包安装

    • [install-options]
      --test: 测试安装,但不真正执行安装,即dry run模式
      --nodeps:忽略依赖关系
      --replacepkgs | replacefiles
      --nosignature: 不检查来源合法性
      --nodigest:不检查包完整性
      --noscripts:不执行程序包脚本
            %pre: 安装前脚本 --nopre
            %post: 安装后脚本 --nopost
            %preun: 卸载前脚本 --nopreun
            %postun: 卸载后脚本 --nopostun

      rpm包升级

    • 升级:
    • rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
    • rpm {-F|--freshen} [install-options] PACKAGE_FILE...
         upgrade:安装有旧版程序包,则“升级”
            如果不存在旧版程序包,则“安装”
         freshen:安装有旧版程序包,则“升级”
            如果不存在旧版程序包,则不执行升级操作
    • rpm -Uvh PACKAGE_FILE ...
    • rpm -Fvh PACKAGE_FILE ...
    • --oldpackage:降级
    • --force: 强制安装
注意:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文 件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后 保留

包查询

  • rpm {-q|--query} [select-options] [query-options]
  • [select-options]
    -a:所有包
    -f:查看指定的文件由哪个程序包安装生成
    -p rpmfile:针对尚未安装的程序包文件做查询操作
    --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
    --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
  • rpm2cpio 包文件|cpio –itv 预览包内文件
  • rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
  • [query-options]
    --changelog:查询rpm包的changelog
    -c:查询程序的配置文件
    -d:查询程序的文档
    -i:information
    -l:查看指定的程序包安装后生成的所有文件
    --scripts:程序包自带的脚本
    --provides:列出指定程序包所提供的CAPABILITY
    -R:查询指定的程序包所依赖的CAPABILITY
  • 常用查询用法
    -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
    -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
    -qa
  • 包卸载
    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
    当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留

    包校验

  • 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
  • 包来源的合法性验证及完整性验证
    完整性验证:SHA256
    来源合法性验证:RSA
  • 公钥加密
    对称加密:加密、解密使用同一密钥
    非对称加密:密钥是成对儿的
    public key: 公钥,公开所有人
    secret key: 私钥, 不能公开
  • 导入所需要公钥
    rpm -K|checksig rpmfile 检查包的完整性和签名
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
    rpm -qa “gpg-pubkey*”

    rpm数据库

  • 数据库重建: /var/lib/rpm
  • rpm {--initdb|--rebuilddb}
    initdb: 初始化
    如果事先不存在数据库,则新建之
    否则,不执行任何操作
    rebuilddb:重建已安装的包头的数据库索引目录

    yum源

  • 阿里云repo文件 http://mirrors.aliyun.com/repo/
  • CentOS系统的yum源 阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
  • EPEL的yum源
  • 阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
  • 阿里巴巴开源软件 https://opsx.alibaba.com/

    yum-config-manager

  • 生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x8664.repo yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
  • yum-config-manager --disable “仓库名" 禁用仓库
  • yum-config-manager --enable “仓库名” 启用仓库

    yum命令

  • yum命令的用法:
    yum [options] [command] [package ...]
  • 显示仓库列表: yum repolist [all|enabled|disabled]
  • 显示程序包: yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1] [...]
  • 安装程序包: yum install package1 [package2] [...] yum reinstall package1 [package2] [...] (重新安装)
  • 升级程序包: yum update [package1] [package2] [...] yum downgrade package1 [package2] [...] (降级)
  • 检查可用升级: yum check-update
  • 卸载程序包: yum remove | erase package1 [package2] [...]
  • 查看程序包information:
    yum info [...]
  • 查看指定的特性(可以是某文件)是由哪个程序包所提供: yum provides | whatprovides feature1 [feature2] [...]
  • 清理本地缓存:
    清除/var/cache/yum/$basearch/$releasever缓存
    yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
  • 构建缓存: yum makecache

  • 搜索:yum search string1 [string2] [...]
    以指定的关键字搜索程序包名及summary信息
  • 查看指定包所依赖的capabilities:
    yum deplist package1 [package2] [...]
  • 查看yum事务历史:
    yum history [info|list|packages-list|packages-info|
    summary|addon-info|redo|undo|
    rollback|new|sync|stats]
    yum history
    yum history info 6
    yum history undo 6
    • 日志 :/var/log/yum.log
  • 安装及升级本地程序包
    yum localinstall rpmfile1 [rpmfile2] [...]
    (用install替代)
    yum localupdate rpmfile1 [rpmfile2] [...]
    (用update替代)
    • 包组管理的相关命令
      yum groupinstall group1 [group2] [...]
      yum groupupdate group1 [group2] [...]
      yum grouplist [hidden] [groupwildcard] [...]
      yum groupremove group1 [group2] [...]
      yum groupinfo group1 [...]
  • yum的命令行选项:
    --nogpgcheck:禁止进行gpg check
    -y: 自动回答为“yes”
    -q:静默模式
    --disablerepo=repoidglob:临时禁用此处指定的repo --enablerepo=repoidglob:临时启用此处指定的repo
    --noplugins:禁用所有插件

    系统安装光盘作为本地yum仓库:

  • (1) 挂载光盘至某目录,例如/mnt/cdrom

*<<开起autofs服务 systemctl start autofs
开机启动autofs服务 systemctl enable autofs
开启autofs服务后根目录下出现misc目录, cd /misc/cd cd目录会自动挂载光盘。从而可以将/misc/cd目录作为yum仓库>>
关闭linux防火墙 systemctl
mount /dev/cdrom /mnt/cdrom

  • (2) 创建配置文件
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled=
  • 创建yum仓库:
    createrepo [options] <directory>

DNF

猜你喜欢

转载自blog.51cto.com/14450832/2427517