linux软件管理,定时任务及sed命令示例

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

rpm命令:rpm [OPTIONS] [PACKAGE_FILE]

rpm是一款强大的包管理工具可以实现安装、升级、卸载、查询和校验、数据库维护
1. 安装:-i, --install

rpm {-i|--install} [install-options] PACKAGE_FILE ...
          -v:显示详细过程
          -h:输出进度条(#)
          --test:测试安装,检查并报告依赖关系及冲突消息等
          --nodeps:忽略依赖关系,忽略依赖关系的包可能会出现各种问题,不建议使用.
          --replacepkgs:重新安装
          --nosignature:不检查包签名信息及源合法性(--这也是一个危险的操作--)
          --nodigest:不检查包完整性信息
[root@localhost Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm 
warning: zsh-5.0.2-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
    package zsh-5.0.2-7.el7.x86_64 is already installed

2.升级或安装:-U, --update

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
         --oldpackage:降级
         --force:强制升级
[root@localhost Packages]# rpm -Uvh zsh-5.0.2-7.el7.x86_64.rpm 
warning: zsh-5.0.2-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
    package zsh-5.0.2-7.el7.x86_64 is already installed

程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供
Linux支持多内核版本并存,可以直接安装新版本内核,不要对内核做升级操作

3. 升级: -F, --freshen
-F只能升级不能进行安装操作

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
         --oldpackage:降级
         --force:强制升级
[root@localhost Packages]# rpm -Fvh zsh-5.0.2-7.el7.x86_64.rpm 
warning: zsh-5.0.2-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

4. 卸载:-e, --erase

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
            
        --allmatches:卸载所有匹配指定名称的程序包的各版本;
        --nodeps:忽略依赖关系
        --test:测试卸载,干跑(dry run)模式
[root@localhost Packages]# rpm -evh zsh
Preparing...                          ################################# [100%]
Cleaning up / removing...
   1:zsh-5.0.2-7.el7                  ################################# [100%]


5. 查询:-q, --query
查询指定的程序包是否已经安装,及其版本号

rpm {-q|--query} [select-options] [query-options]
          [select-options]
                -a:查询所有已经安装过的包;
                -f  FILE:查询指定的文件由哪个程序包安装生成
                -p, --package PACKAGE_FILE:查询未安装的程序包
                --whatprovides CAPABILITY:查询指定的功能由哪个程序包提供
                --whatrequires CAPABILITY:查询指定的功能被哪个包所依赖
            
         [query-options]
                --changelog:查询rpm包的更新日志
                -l, --list:程序安装生成的所有文件列表
                -i, --info:程序包相关的信息
                -c, --configfiles:查询指定的程序包提供的配置文件
                -d, --docfiles:查询指定的程序包提供的文档
                --provides:列出指定的程序包提供的所有的功能
                -R, --requires:查询指定的程序包的依赖关系
                --scripts:查看程序包自带的脚本(程序不一定都有自带脚本)
[root@localhost Packages]# rpm -qpR zziplib-0.13.62-5.el7.x86_64.rpm 
warning: zziplib-0.13.62-5.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
/sbin/ldconfig
/sbin/ldconfig
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libz.so.1()(64bit)
libzzip-0.so.13()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

6. 校验:-V, --verify

 rpm {-V|--verify} [select-options] [verify-options]    
             S: 程序包文件大小改变
             M: 权限改变 (包括许可权限和文件类型)
             5: MD5码改变 
             D: 设备的主/次设备号不匹配
             L: 实际链接路径不匹配
             U: 属主关系改变
             G: 属组关系改变
             T: mTime改变
             P: 功能改变,(可以rpm -q --provides 包名 查询)
     [verify-options]   
             --nodeps:不校验依赖性
             --nosignature:不校验包完整性
             --noscripts;不校验脚本
               ...
[root@localhost tmp]# rpm -V zsh
S.5....T.    /usr/share/zsh/5.0.2/functions/zsh-mime-setup

7. 数据库维护:--builddb, --initdb

不同版本获取帮助的方法:
CentOS 6:man rpm
CentOS 7:man rpmdb

rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
  --initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
  --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建

  --dbpath DIRECTORY:指定数据的存放路径
[root@localhost tmp]# mkdir /tmp/dbtest
[root@localhost tmp]# rpm --initdb --dbpath /tmp/dbtest/
[root@localhost tmp]# ls dbtest/
Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
Conflictname  __db.003  Installtid  Packages      Sha1header
__db.001      Dirnames  Name        Providename   Sigmd5

yum命令:

yum [options] [command] [package ...]
     [options]
       -y: 自动应答
       -q:静默模式
       --noplugins: 禁用程序包插件
       --disablerepo=repoidglob:临时禁用给定的epo
       --enablerepo=repoidglob:临时启用给定的repo
       --nogpgcheck:不做gpgcheck检查
     [command]
        install:安装
        update:升级
        remove:卸载
        list:列出指定程序包
        clean:清理本地缓存
        makecache:构建缓存
        search:搜索
        repolist:列出所有(在用,停用的)的yum.repo
  等等选项,详见man yum

yum的repo配置文件中可用的变量说明:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,如:i386 i486等类型
$basearch:基础平台

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

本地源配置:

本示例使用光盘做本地yum源,应保证有对应版本的镜像包并且光盘能正常挂载系统,也可以从镜像网站下载好rpm包之后使用createrepo命令创建本地yum源.
1.创建本地光盘挂载目录:/mnt/media.repo

 mkdir -p /mnt/media.repo

2.将本地光盘挂在到/mnt/media.repo

 临时挂载
 mount  /dev/cdrom  /mnt/media.repo
 永久挂载
 echo "/dev/cdrom  /mnt/media.repo iso9660 defaults 0 0" >> /ect/fstab

3.编辑本地yum源配置文件

yum配置文件在/etc/yum.repos.d/目录下,并且以.repo结尾的文件

  [base]    
  name=media   
  baseurl=file:///mnt/media.repo   
  gpgcheck=0   #gpg检验,0表示不检验,如果是1还要提供gpgkey
  enabled=1    #是否启用1表示启用

4.检验配置yum源是否配置成功

将配置文件保存退出后就可以验证了,具体操作如下:

[root@localhost Packages]# yum makecache 
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
media                                                           | 4.1 kB  00:00:00     
Metadata Cache Created
----------------------------------分割线----------------------------------

[root@localhost Packages]# yum repolist
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id                                  repo name                               status
media                                    media                                   4,305
repolist: 4,305
#这里看到media有4305个rpm包证明本地yum配置成功

网络源配置:

配置网络源要保证linux系统能连接网络
1、备份本地yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、下载新对应的CentOS-Base.repo 到/etc/yum.repos.d/
要根据自己的版本来下载,高版本的linux不能使用低版本的yum源,阿里的yum源地址:https://opsx.alibaba.com/mirror

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、之后运行yum makecache生成缓存
makecache成功则网络yum源成功配置

简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00

at命令:

at是单次执行一个任务,不能周期性的自动执行

at  [OPTION]... TIME        
       TIME:
         HH:MM [YYYY-mm-dd]
         teatime: 下午4点
         tomorrow:第二天
         now+# :从现在起+多少时间
         常用单位:minutes, hours, days, weeks   
     常用选项:
         -l:查看作业队列,
         -f /文件名:从指定文件中读取作业任务
         -d:删除指定的作业,
         -c:查看指定作业的具体内容;
         -q QUEUE:指明队列;
[root@localhost test]# at -f /tmp/test/date.sh 3:10
job 1 at Mon Mar 12 03:10:00 2018

crontab命令

crontab是周期性执行指定任务的命令
crontab有系统的配置文件和用户自己的配置文件具体的路径如下:
系统cron的配置格式:/etc/crontab
用户cron的配置格式:/var/spool/cron/USERNAME
如下示例可以看到系统的cron的配置

[root@localhost Packages]# vim /etc/crontab 

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59) 每分钟数范围是0-59
# |  .------------- hour (0 - 23)  每小时数范围是0-23
# |  |  .---------- day of month (1 - 31)  一个月的天范围是0-31
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...每个月数范围时1-12
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat每星期的天数0-6(0和7都代表星期日)
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed  用户名   要执行的命令(使用绝得路径如: /bin/bash)

注意事项:
day of month和day of week 最好不要一起定义,定义其中一个就好
指定的 */# 不能被整除时 如: */7 * * * * root /bin/echo "hiya" 因为一分钟不能整除7在一分钟之后将不是每隔7分钟执行一次操作了
运行结果以邮件通知给当前用户
某任务在指定的时间因关机未能执行,下次开机到达指定的时间并不会自己再执行该任务
如果执行的命令中有%符号要注意转义.可以将命令放在脚本里.
最小时间单位为“分钟”,不能精确到秒钟,可以利用脚本实现在每分钟之内,循环多次
*:代表每个时间. #,#,#:表多个离散的时间. #-#:表示一段连续的时间. */# :表示步长,要能被整除才有意义

*/2 * * * *:每2分钟执行一次某任务
0 9-15 * * 6-7: 每周末的9点到15点整执行某任务
crontab [-u user] [-l | -r | -e] [-i] 
             -e:编辑任务
             -l:列出所有任务
             -r:移除所有任务
             -i:在使用-r选项移除所有任务时提示用户确认;
            -u user:root用户可为指定用户管理cron任务
1.设置脚本
[root@localhost test]# vim date.sh

#!/bin/bash

date "+%F %H:%M:%S"
-----------------------------------------------------
2.设置crontab
[root@localhost test]# crontab -e
no crontab for root - using an empty one

10 3,5 * * 0-6 /bin/bash /tmp/test/date.sh
-----------------------------------------------------
3.查看crontab
[root@localhost test]# crontab -l
10 3,5 * * 0-6 /bin/bash /tmp/test/date.sh

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

sed:Stream EDitor,流编辑器

sed是一种非交互式的行编辑器,一次把当前行的内容放入"模式空间"
中,然后用sed命令处理"模式空间"里的内容,处理完毕后输出到标准输
出,接着处理下一行,一直到文件末尾.

sed默认的处理过程并不会改变对象文件的原有内容,除非使用重定向等方式来储存结果

sed [OPTION]...  'script'  [input-file] ...
    常用选项:
        -n:不输出模式空间中的内容至屏幕
        -e script, --expression=script:多点编辑
        -f /PATH/TO/SED_SCRIPT_FILE 从脚本里读取编辑命令,每行一个编辑命令
        -r, --regexp-extended:支持使用扩展正则表达式
        -i [SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 (会破坏源文件内容)

    script:
        地址定界编辑命令        
    地址定界:
        (1) 空地址:对全文进行处理
        (2) 单地址:
            #:指定行
            /pattern/:被此模式所匹配到的每一行
        (3) 地址范围
            #,#:从第几行到第几行匹配到的所有行
            #,+#:从几行+几行匹配到的所有行
            #,/pat1/ 从第几行到被pat1/ 匹配到的所有行
            /pat1/,/pat2/ 从/pat1/到/pat2/匹配到的所有行
            $:最后一行
        (4) 步进:~
            1~2:所有奇数行
            2~2:所有偶数行
            
    编辑命令:
        d:删除匹配到的行
        p:显示模式空间中的内容
        a \text:在行后面追加文本“text”,在text后面加\n new text来实现多行追加
        i \text:在行前面插入文本“text”,支在text后面加\n new text来实现多行插入
        c \text:把匹配到的行替换为成“text”(整行替换)
        w /FILE:保存模式空间匹配到的行至指定的文件中(覆盖模式保存)
        r /FILE:读取指定文件的内容至当前文件被模式匹配到的行后面实现文件合并功能
        =:为模式匹配到的行打印行号
        !:条件取反.用法:放在地址定界与编辑命令之间,格式如:        地址定界!编辑命令
        s///:查找替换,默认只替换第一次匹配到的行,其分隔符可自行指定,常用的有s@@@, s###等
            替换标记:
                g:全局替换
                w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中()
                p:显示替换成功的行
[root@localhost tmp]# sed 's@^#[[:space:]]*@@' fstab

/etc/fstab
Created by anaconda on Sun Mar 11 07:33:07 2018

Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=9d1faf64-5990-40c7-80d2-33112997dcc9 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/cdrom /mnt/media.repo iso9660 defaults 0 0
--------------------------------分割线--------------------------------
[root@localhost test]# cat sedtest.txt   #这是原文件文件
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed -n '1 s@h@H@p' sedtest.txt   #替换第一行的第一次匹配到的字符,并显示该行
Hello,hello,hello,hello,hello,hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed -n '1 s@h@H@gp' sedtest.txt  #全局替换匹配到的行并显示
Hello,Hello,Hello,Hello,Hello,Hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed  '1 a1\n2\n3' sedtest.txt   #匹配到的行后面实现多行追加并显示
hello,hello,hello,hello,hello,hello
1
2
3
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello

--------------------------------分割线--------------------------------
[root@localhost test]# sed  '1 i1\n2\n3' sedtest.txt   #匹配到的行前面实现多行插入并显示
1
2
3
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
hello,hello,hello,hello,hello,hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed  '1~2 c3\n5\n6' sedtest.txt   #奇数行实现多行替换并显示
3
5
6
hello,hello,hello,hello,hello,hello
3
5
6
hello,hello,hello,hello,hello,hello
     高级编辑命令:
         h:把模式空间中的内容覆盖至保持空间中
         H:把模式空间中的内容追加至保持空间中
         g:把保持空间中的内容覆盖至模式空间中
         G:把保持空间中的内容追加至模式空间中
         x:把模式空间中的内容与保持空间中的内容互换
         n:覆盖读取匹配到的行的下一行至模式空间中
         N:追加读取匹配到的行的下一行至模式空间中
         d:删除模式空间中的行
         D:删除多行模式空间中的所有行
--------------------------------分割线--------------------------------
[root@localhost test]# cat sedtest.txt   #这是原文件
1.hello,hello,hello,hello,hello,hello
2.hello,hello,hello,hello,hello,hello
3.hello,hello,hello,hello,hello,hello
4.hello,hello,hello,hello,hello,hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed  '2~2 N;d' sedtest.txt 
4.hello,hello,hello,hello,hello,hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed -n '$!G;H;p' sedtest.txt
1.hello,hello,hello,hello,hello,hello

2.hello,hello,hello,hello,hello,hello

1.hello,hello,hello,hello,hello,hello

3.hello,hello,hello,hello,hello,hello

1.hello,hello,hello,hello,hello,hello

2.hello,hello,hello,hello,hello,hello

1.hello,hello,hello,hello,hello,hello

4.hello,hello,hello,hello,hello,hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed -n 'n;x;p' sedtest.txt

2.hello,hello,hello,hello,hello,hello
--------------------------------分割线--------------------------------
[root@localhost test]# sed -n 'n;p' sedtest.txt
2.hello,hello,hello,hello,hello,hello
4.hello,hello,hello,hello,hello,hello
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容