美文网首页
Linux学习博客5

Linux学习博客5

作者: sky_c146 | 来源:发表于2018-01-01 21:29 被阅读0次

    简述rpm与yum命令的常见选项,并举例

    rpm命令

    rpm命令用来手动安装rpm格式的程序包,使用格式为

    • rpm [option] path/to/rpmfile
    1. -i安装选项
    • 使用格式rpm -i[installopition] path/to/rpmfile
    • -h选项 : 使用#来显示安装进度
    • -v选项 : 显示安装过程
    • -vv选项 : 显示更详细的安装过程比-v更详细,按需求使用
    • --test选项 : 不进行实际安装操作,而是进行安装环境的测试,可以查看安装是否可以成功
    • --nodeps选项 : 忽略依赖关系,这样即使安装成功,也可能由于依赖关系造成运行问题
    • --replacepkgs选项 : 覆盖安装
    • --force选项 : 强制安装
    • 对于新安装程序包,常用的操作是rpm -ivh path/to/rpmfile
    1. 升级选项
    • -U : 升级安装或全新安装
    • -F : 升级安装
    • 同安装选项一样,常用组合有-Uvh -Fvh
    • 同安装选项一样,也可以使用--test --nodeps选项
    • --oldpackage选项 : 降级安装旧版本程序包 rpm -U --oldpackage path/to/rpmfile
    1. 卸载
    • -e : 卸载已安装的rpm程序,使用 rpm -e packagename
    • 使用-e进行卸载时也可以使用--test --nodeps选项
    • --allmatches选项 : 卸载所有匹配的安装,例如一个rpm程序的多个版本
    • 对于卸载,需要注意的是如果程序包的配置文件在安装后被修改过,则卸载时并不会删除这些文件,而是将它们重命名(加后缀 .rpmsave)
    1. 查询
    • 使用格式rpm -q[queryoption] [packagename] [file]
    • 直接使用rpm -q packagename... : 查询某程序包是否安装,包名可以是多个
    • -i选项 : info显示程序包简要信息 rpm -qi packagename
    • -a选项 : 显示已安装的程序包列表 rpm -qa
    • -f选项 : 后跟一个文件,查询此文件是由哪个程序包生成的 rpm -qf filename
    • -p选项 : 查询某个未安装的程序包,可与i选项连用 rpm -qpi packagename 查询rpm仓库中指定的未安装程序包的简要信息
    • -l选项 : 显示某个程序包生成的文件列表 rpm -ql packagename
    • -c选项 : 显示某程序包生成的配置文件 rpm -qc packagename
    • -d选项 : 显示某程序包生成的帮助文件 rpm -qd packagename
    • --provides选项 : 显示程序包提供的capabilities
    • --requires选项 : 显示程序包所依赖的capabilities
    • --scripts选项 : 查询程序包安装或卸载时执行的脚本,这些脚本可以分为以下4类:
      • preinstall : 程序包安装之前执行的脚本
      • postinstall : 程序包安装完成之后执行的脚本
      • preuninstall : 程序包卸载之前执行的脚本
      • postuninstall : 程序包卸载之后执行的脚本
    1. 校验
    • rpm -V packagename : 验证程序包安装之后生成的文件是否发生了改变
    • 程序包合法性验证
      • 先导入验证密匙文件 rpm --import path/to/key-file
      • 再使用命令验证程序包 rpm -K path/to/packagefile
    1. 创建rpm包管理数据库,创建的数据库文件保存路径为/var/lib/rpm下
    • --initdb : 初始化数据库,当rpm包管理数据库不存在时新建它
    • --rebuilddb : 重建数据库,无论之前数据库是否存在
    • --dbpath DIRECTORY : 可以指明建立的数据库文件保存路径,即改变默认的/var/lib/rpm,例如 rpm --rebuilddb --dbpath /var/rpmdb

    yum命令

    yum命令可以更智能的管理和安装rpm程序包,它可以自动处理程序包之前的依赖关系,使用起来更加方便。

    1. yum的配置文件
    • 全局配置文件/etc/yum.conf
    [main]
    cachedir=/var/cache/yum/$basearch/$releasever
      // yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,定义配置
      文件中出现的$basearch表示系统的平台(如i386,x86_64这种),
      $releasever表示OS发行版的主版本号(例如CentOS7.4的主版本号
      就是7)
    keepcache=0
      // 安装完成后是否保留软件包,0为不保留(默认为0),1为保留
    debuglevel=2
      // Debug 信息输出等级,范围为0-10,默认为2
    logfile=/var/log/yum.log
      // yum 生成的日志所在
    pkgpolicy=newest
     // 包的策略。一共有两个选项,newest和last,这个作用是如果你
     设置了多个repository,而同一软件在不同的repository 中同时存
     在,yum 应该安装哪一个,如果是newest,则yum会安装最新版本。
     如果是last,则yum 会将服务器id 以默认方式排序,并选择最后的
     那个服务器上的软件安装。一般都是选newest
    tolerant=0
     // 有1和0两个选项,表示yum 是否容忍命令行发生与软件包有关的
     错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你
     设为1,则yum 不会出现错误信息。默认是0
    exactarch=1
      // 有1和0两个选项,设置为1,则yum 只会安装和系统平台匹配的软件
      包,例如,yum 不会将x64的软件包安装在适合i386的系统中。默认为1
    retries=6
     // 网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认
     值为6
    obsoletes=1
      // 这是一个update 的参数,具体可参阅yum(8),简单的说就是相当
      于upgrade,允许更新旧的RPM包
    gpgcheck=1
      // 是否检查gpgkey,1为检查,0为不检查
    plugins=1
      // 是否启用插件,默认1为允许,0表示不允许
    installonly_limit=5
      // 允许同时安装的程序包个数,这里设置为5个
    exclude=selinux*
      // 排除某些软件在升级名单之外,不让它们升级,可以用通配符,列表
      中各个项目要用空格隔开
    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
    
    
    • 各repository的配置文件
      文件为/etc/yum.d/*.repo
    [base]
      // []中表示此repository的ID,必须唯一不能重复
    name=
      // repository的名字
    baseurl=
      // repository的路径,支持ftp:// http:// file://
    gpgcheck=1
      // 是否进行gpgkey的检查,1为检查,0为不检查
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      // gpgkey的路径
    enabled=
      // 是否启用此repository,1为启用,0为不启用。可省略,省略时表示启用
    cost=
      // 指明repository的开销,默认为1000,可省略
    
    
    1. yum命令的使用
    • yum install package1 [package2]... 从仓库源安装安装程序包
      根据配置文件的默认设置,如果某程序包存在多个版本,可能会默认安装最新的版本,如果需要安装指定版本需要指明package的版本
    • -y选项 安装卸载时可以使用该选项,例如yum install -y packagename 安装时就不需要在交互时手动回答yes了
    • --disablerepo= 安装时禁用某repository
    • --enablerepo= 安装时启用某repository
    • --nogpgcheck 安装时禁止gpgkey校验
    • yum reinstall package1 [package2]... 重新安装程序包(可以覆盖安装)
    • yum update package1 [package2]... 升级安装程序包
    • yum downgrade package1 [package2]... 降级安装程序包
    • yum check-update 检查有哪些升级程序包可用
    • yum {remove | erase} package1 [package2]... 卸载程序包,卸载时会将依赖于指定要卸载的程序包的相关程序包也卸载
    • yum localinstall /path/to/rpmfile ... 安装本地的程序包文件,安装时也会智能判断依赖关系
    • yum localupdate /path/to/rpmfile ... 升级安装本地的程序包文件
    • yum list [all|available|installed|updates|extras|obsoletes] [glob_exp1]... 查看yum仓库列表,按需求使用选项和glob表达式
    • yum grouplist [hidden] [groupwildcard] 显示包组列表,按需使用选项(如是否显示隐藏和使用组通配符等)
    • yum provides|whatprovides feature1 [feature2]... 查看指定的特性(可以是个文件)是由哪个程序包提供的
    • yum deplist package1 [package2]... 查看指定程序包依赖的capabilities
    • yum info package1 ... 显示包简要信息
    • yum groupinfo group1 ... 显示包组的简要信息
    • yum groupinstall group1 ... 安装包组
    • yum groupupdate group1 ... 升级安装包组
    • yum groupremove group1 ... 卸载包组
    • yum repolist [all|enabled|disabled] 显示yum仓库列表
    • yum clean [all|packages|metadata|expire-cache|rpmdb|plugins] 清楚yum缓存数据
    • yum makecache 手动创建yum缓存

    CentOS下自建yum仓库,分别为网络源和本地源

    通过vim命令创建repo文件
    网络yum源

    ~]# vim /etc/yum.repos.d/networks.repo
    [networks]
    name=networks
    baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
    gpgcheck=0
    

    本地yum源

    先将CentOS7光盘挂载至/media/cdrom路径下
    ~]# ls /media/cdrom/
    CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL
    创建本地repo文件
    ~]# vim /etc/yum.repos.d/local.repo
    [local]
    name=local
    baseurl=file:///media/cdrom
    gpgcheck=0
    
    

    查看所有yum源验证效果,可以看到上面添加的2个yum源已经成功

    ~]# yum repolist
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    repo id                                                                                        repo name                                                                             status
    epel/7/x86_64                                                                                  Epel                                                                                  12,184
    local                                                                                          local                                                                                  9,591
    networks/7/x86_64                                                                              networks                                                                               9,591
    

    简述at和crontab命令

    at命令

    at命令用于设置一次性的任务计划,其只执行一次就结束。

    at命令是由atd服务提供的:

    • CentOS6可以使用 service atd start 来启动该服务
    • CentOS7可以使用 systemctl start atd.service 来启动该服务
    1. 命令使用格式 : at [option] TIME
    例如添加一个at任务
    ~]$ at 15:00    # 15点执行该任务
    at> ls /etc     # 输入需要执行的任务内容
    at> <EOT>       # 使用'键盘ctrl+D'退出任务编辑
    job 4 at Sun Dec 31 15:00:00 2017
    
    • -l选项 : 也可以使用atq,效果等同,都是显示所有当前用户的at任务列表
    • -d选项 : 也可以使用atrm,效果等同,都是删除一个at任务列表中的at任务
    • -c选项 : 打印任务内容到标准输出
    1. TIME的格式
    • HH:MM [date] : 其中的date可以是具体年月日(例如2017-12-31),也可以是英文表示的日子(例如December 31),甚至时间上也可以简化表示(明天下午2点:2pm tomorrow)
    • HH:MM + #(minutes|hours|days|weeks) : 某时刻加一个相对时间表示法(例如2pm + 3days三天后的下午2点)
    1. 实例
    ~]$ atq    # 显示当前任务列表
    4   Sun Dec 31 15:00:00 2017 a sky
    5   Sun Dec 31 14:00:00 2017 a sky
    6   Mon Jan  1 07:00:00 2018 a sky
    ~]$ at -d 6   # 删除6号任务
    ~]$ atq
    4   Sun Dec 31 15:00:00 2017 a sky
    5   Sun Dec 31 14:00:00 2017 a sky
    ~]$ at -c 4
    #!/bin/sh
    # atrun uid=1000 gid=1000
    # mail sky 0
    umask 2
    # 此处省略冗长的环境变量内容
    ls /etc  # 任务内容
    ~]$ at -f scripts/num_sum.sh 2pm + 3 days   # 3天后的下午2点执行脚本文件中的内容
    job 7 at Wed Jan  3 14:00:00 2018
    

    crontab命令

    crontab可以设置周期性任务计划。它是由crond服务来实现的。

    1. 系统cron任务
    • 它是通过编辑配置文件/etc/crontab来实现的
    文件中添加任务的格式
    # 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
    
    
    • 时间表示的4个方式
      • 时间位上的*表示每个有效的取值
    25 * * * *      # 这就表示每个整点过25分执行一次任务
    
      • 时间位上出现*/# 表示相应的位上每#个间隔一次
    0 8 * */3 *     # 表示每间隔3天的8:00执行一次
    
      • 时间位上#-# 表示连续时间
    30 1-3 * * *     # 表示每天1:30, 2:30, 3:30分别执行
    
      • 时间位上#,# 表示离散的时间点
    15 9 * * 3,5     # 表示周3和周5的9:15执行
    
    • command执行的结果,默认会以邮件的形式发送给用户,如果不想接收邮件,可以使用输出重定向command &> /dev/null
    1. 用户cron任务
    • 用户的cron任务配置文件: /var/spool/cron/路径下与用户同名的文件
    • 使用crontab命令来编辑用户cron任务
      • crontab -e : 直接进入编辑文件
      • crontab -l : 列出已经定义的所有任务
      • crontab -r : 清空列表中的所有任务
    制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
    ~]$ crontab -e
    10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"
    ~]$ crontab -l
    10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"
    

    简述sed常用操作命令,并举例

    sed是一种行编辑器,它可以使用正则表达式进行模式匹配。它在处理文本时,会逐行进行处理,先将当前处理的行存储在一个临时缓冲区“模式空间”(pattern space)中,接着用sed命令进行处理,处理完成后,默认将结果送至标准输出,然后在继续处理下一行,直至文本的末尾。默认操作下sed不会改变文件的内容,如果想保存sed处理后的结果,可以使用输出重定向。


    sed.png
    1. 命令格式
      sed [options] 'command' file(s)
      sed [options] -f scriptfile file(s)

    2. 参数

    • -e script1 -e script2 : -e选项可以指定多条命令执行
    • -f scriptfile : -f选项可以从文件中读取命令执行操作,同样可以指定多个文件处理
    • -n选项 : 仅显示sed命令处理后的结果
    • -r选项 : 支持扩展的正则表达式
    • -i选项 : 直接修改源文件
    1. sed命令
    a\ 在当前行下面插入文本
    i\ 在当前行上面插入文本
    c\ 把选定的行改为新的文本
    = 打印行号
    d 删除,删除选择的行
    D 删除模板块的第一行
    ! 表示其后面的命令对所有没有前面的条件匹配的行发生作用
    s 替换指定字符
    g 表示行内全面替换
    h 拷贝模板块的内容到内存中的缓冲区
    H 追加模板块的内容到内存中的缓冲区
    g 获得内存缓冲区的内容,并替代当前模板块中的文本
    G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
    x 互换当前模式空间和内存缓冲区的内容
    n 读取下一个输入行进入模式空间
    N 追加下一个输入行到模式空间现有数据的后面
    p 打印模板块的行
    P(大写) 打印模板块的第一行
    w file 把处理过的结果写入文件
    r file 读取文件内容并追加进入模式空间
    

    关于n, N这两个命令的执行方式是容易搞错的地方,可以参考下面的图示


    sed_n1.png
    sed_n2.png
    sedN2.png
    1. sed处理文本示例
    仅显示以"#"开头的行
    ~]$ sed -n '/^#/p' /etc/fstab
    在所有"#"后添加"*"
    ~]$ sed 's/\(#\)/\1*/g' /etc/fstab
    删除第5行及其之后的所有行
    ~]$ sed '5,$d' /etc/fstab
    删除每一行开头的"#"并删除文件中的空白行
    ~]$ sed -e 's/^#//g' -e '/^[[:space:]]*$/d' /etc/fstab
    -r选项使用扩展正则表达式,"&"表示每一个匹配到的内容
    ~]$ echo "this is a test line" | sed -r 's/\w+/[&]/g'
    [this] [is] [a] [test] [line]
    将issue文件的内容添加到fstab文件每一个以"#"开头的行之后
    ~]$ sed '/^#/r /etc/issue' /etc/fstab
    将this is a test添加到以"#"开头的行之后
    ~]$ sed '/^#/a\this is a test' /etc/fstab
    将this is a test添加到以"#"开头的行之前
    ~]$ sed '/^#/i\this is a test' /etc/fstab
    打印以"#"开头的行的行号
    ~]$ sed '/^#/=' /etc/fstab
    为文件每一行添加行号
    ~]$ sed = /etc/fstab | sed 'N;s/\n/: /g'
    1: 
    2: #
    3: # /etc/fstab
    
    删除文件的偶数行
    ~]$ sed 'n;d' /etc/fstab
    仅输出文件最后2行
    ~]$ sed 'N;$!D' /etc/fstab
    
    关于难点N的处理逻辑的实例解析
    ~]$ cat ./123
    1
    2
    3
    4
    5
    ~]$ sed 'N;P' ./123
    1
    1
    2
    3
    3
    4
    5
    ~]$ sed -n 'N;P' ./123
    1
    3
      / 从上面的多次处理结果可以得出sed从首行开始每次有2行进入模式空间进行处理,
      P命令打印空间中的第1行,当读取到最后一行第5行时,由于没有下一行了所以无法
      执行N命令,于此同时分号后面的P命令也没有被执行
    
    将文件的所有行逆序输出
    ~]$ sed '1!G;h;$!d' ./123
    5
    4
    3
    2
    1
    

    相关文章

      网友评论

          本文标题:Linux学习博客5

          本文链接:https://www.haomeiwen.com/subject/agkxnxtx.html