Linux程序包管理、任务计划命令和sed常用命令

程序包管理器

| 发行版代表 | 软件管理机制 | 使用命令(后端工具) | 前端工具 |
| Debian | dpt | fpkg | apt-get |
| redhat | rpm | rpm | yum |
| S.u.S.e | rpm | rpm | zypper |
| Gentoo | ports | emerge | portage |

前端工具:自动解决安装包过程中的依赖关系

因为我们这使用的CentOS系统,所以使用的软件管理机制为RPM机制,前端工具使用的是YUM!

程序包的命名格式

源代码:name-VERSION.tar.gz
  • VERSION: major.minor.release软件的版本号
RPM命名格式;name-VERSION-release.arch.rpm

例如:php-5.4.16-23.el7_0.3.x86_64.rpm

  • php: 软件名称

  • VERSION:5.4.16; major.minor.release软件的版本号

  • release.arch: rpm包的发行号

    • release.os:23.el7
    • archetecture: i386,x64(amd64),ppc,noarch 适合的硬件平台

程序包的制作流程

程序源码预处理后进行编译,编译成目标代码,然后汇编成二进制代码(包括二进制程序、库文件、配置文件、帮助文件等),然后把它们组织成为一个或有限几个“包”文件(即最终可执行的二进制代码)。

程序包管理器的功能:

将编译好的应用程序的个组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作。

程序包文件组成:

  1. 程序包的组成清单(每个程序包都单独实现)
    文件清单
    安装或卸载时运行的脚本
  2. 数据库(公共)
    程序包的名称和版本
    依赖关系
    功能说明
    安装生成的个文件的文件路径以及校验码

获取程序包的途径

  1. 系统发行版的光盘或者官方的文件服务器
    http://mirrors.aliyun.com
    http://mirrors.sohu.com
    http://mirrors.163.com
  2. 项目的官方站点
  3. 第三方组织
    <1> EPEL
    <2> 搜素引擎
    http://pkgs.org
    http://rpmfind.net
    http://rpm.pbone.net
  4. 自己动手

RPM命令管理程序包

RPM是一个开放的软件包管理器,全称是Redhat Package Manager,它工作于Red Hat Linux以及其它Linux系统,成为了Linux中公认的软件包管理标准。

1. rpm命令语法格式

rpm [OPTION] [PACKAGE_FILE]

2. 安装

rpm {-i|--install} [install-options] PACKAGE_FILE ...

 常规选项:GENERAL OPTION                

                -v: verbose,详细信息
                -w:更详细的输出

 安装选项:INSTALL-OPTIONS

                 -h:hash marks,输出进度条,每个#表示2%的进度
                 --test:测试安装,检查并报告依赖关系及冲突消息等
                 --nodeps:忽略依赖关系;不建议使用
                 --replacepkgs:重新安装(不能替换配置文件)
                 --nosignature:不检查包签名信息,不检查来源合法性
                 --nodigest:不检查包完整性信息

示例:

    [root@localhost Packages]# rpm -ivh --nodeps libsepol-2.1.9-3.el7.i686.rpm 
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:libsepol-2.1.9-3.el7             ################################# [100%]

3. 升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

    常用选项:
          -U:升级或安装;
          rpm -Uvh PACKAGE_FILE
          -F:升级不安装;
          rpm -Fvh PACKAGE_FILE
          --oldpackage:降级
          --force:强制升级

  • 注意:
    <1> 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核。
    <2> 如果某源程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供。
4. 卸载

rpm {-e | --erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACJAGE_NAME

    常用选项:
            --allmatches:卸载所有匹配指定名称的程序包的各版本
            --nodeps:忽略依赖关系
            --test:测试卸载;dry run模式

5. 查询

rpm {-q | --query} [select-options] [query-options]

    select-options:
            PACKAGE_NAME: 查询指定的程序包是否已经安装,及其版本
            -a,--all: 查询所有已经安装过的包
            -f FILE: 查询指定文件由哪个程序包安装生成
            -p,--package PACKAGE_FILE: 用于实现对未安装的程序包执行查询操作
            --whatprovides CAPABILITY: 查询指定的CAPABILITY由哪个程序包提供
            --whatrequires CAPABILITY: 查询指定的CAPABILITY被哪个包所依赖
    query-options:
            --changelog: 查询rpm包的changelog
            -l,--list: 列出程序包安装生成的所有文件
            -i,--info: 程序包相关的信息,版本号、大小、所属包组等
            -c,--configfiles: 查询指定的程序包提供的配置文件
            -d,docfiles: 查询指定的程序包提供的文档
            --provides:列出指定的程序包提供的所有的CAPABILITY
            -R,--requires:查询指定的程序包的依赖关系
            --scripts: 查看程序包自带的脚本片段 

常见用法:

<1> rpm -qi PACKAGE_NAME 查询某包的简要说明信息

    [root@localhost]# rpm -qi bash
    Name        : bash
    Version     : 4.2.46
    Release     : 12.el7
    Architecture: x86_64
    Install Date: Wed 02 May 2018 09:10:10 PM CST
    Group       : System Environment/Shells
    Size        : 3663626
    License     : GPLv3+
    Signature   : RSA/SHA256, Sat 14 Mar 2015 03:39:08 PM CST, Key ID 24c6a8a7f4a80eb5
    Source RPM  : bash-4.2.46-12.el7.src.rpm
    Build Date  : Fri 06 Mar 2015 06:09:15 AM CST
    Build Host  : worker1.bsys.centos.org
    Relocations : (not relocatable)
    Packager    : CentOS BuildSystem <http://bugs.centos.org>
    Vendor      : CentOS
    URL         : http://www.gnu.org/software/bash
    Summary     : The GNU Bourne Again shell
    Description :
    The GNU Bourne Again shell (Bash) is a shell or command language
    interpreter that is compatible with the Bourne shell (sh). Bash
    incorporates useful features from the Korn shell (ksh) and the C shell
    (csh). Most sh scripts can be run by bash without modification.

<2> rpm -qf FILE 查询某文件是由哪个包安装生成

    [root@localhost]# rpm -qf /etc/fstab
    setup-2.8.71-5.el7.noarch

<3> rpm -qc PACKAGE_NAME 查询某包安装完成后生成的所有配置

    [root@localhost ~]# rpm -qc bash
    /etc/skel/.bash_logout
    /etc/skel/.bash_profile
    /etc/skel/.bashrc

<4> rpm -ql PACKAGE_NAME 查询某包安装生成的文件列表

    [root@localhost ~]# rpm -ql bash
    /etc/skel/.bash_logout
    /etc/skel/.bash_profile
    /etc/skel/.bashrc
    /usr/bin/alias
    /usr/bin/bash
    /usr/bin/bashbug
    ...

<5> rpm -qd PACKAGE_NAME 查询某包安装生成的所有帮助文件

    [root@localhost ~]# rpm -qd bash
    /usr/share/doc/bash-4.2.46/COPYING
    /usr/share/info/bash.info.gz
    /usr/share/man/man1/..1.gz
    /usr/share/man/man1/:.1.gz
    /usr/share/man/man1/[.1.gz
    /usr/share/man/man1/alias.1.gz
    /usr/share/man/man1/bash.1.gz
    ...

<6> rpm -qpi PACKAGE_FILE 查询尚未安装的包文件的相关信息

    [root@localhost ~]# rpm -qpi /tmp/test/Packages/php-5.4.16-23.el7_0.3.x86_64.rpm 
    Name        : php
    Version     : 5.4.16
    Release     : 23.el7_0.3
    Architecture: x86_64
    Install Date: (not installed)
    Group       : Development/Languages
    ...

<7> rpm -qpl PACKAGE_FILE 查询尚未安装的包文件列表
<8> rpm -qpc PACKAGE_FILE 查询尚未安装的包的配置文件

  • 注意: rpm可以自带脚本,分为四类:
          preinstall:安装过程开始之前运行的脚本;%pre
          postinstall:安装过程完成之后运行的脚本;%post
          preuninstall:卸载过程真正开始执行之前的脚本;%preun
          postuninstall:卸载过程完成之后运行的脚本;%postun

6. 校验

rpm {-V|--verify} [select-options] [verify-options]

示例:

    [root@localhost ~]# rpm -V bash
    [root@localhost ~]# rpm -V php
    Unsatisfied dependencies for php-5.4.16-45.el7.x86_64:
        httpd-mmn = 20120211x8664 is needed by (installed) php-5.4.16-45.el7.x86_64
        php-common(x86-64) = 5.4.16-45.el7 is needed by (installed) php-5.4.16-45.el7.x86_64
        php-cli(x86-64) = 5.4.16-45.el7 is needed by (installed) php-5.4.16-45.el7.x86_64
        libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by (installed) php-5.4.16-45.el7.x86_64
    S.5....T.  c /etc/httpd/conf.d/php.conf
    ......G..    /var/lib/php/session

当没有输出结果时表示软件包完整OK,当有相应的结果输出表明对应的内容有修改,具体如下:

S:(file Size differs) 文件的容量大小是否被改变
M:(Mode differs) 文件的类型或文件的属性(rwx)是否被改变?如是否可运行等参数已被改变
5:(MD5 sum differs) MD5这一种指纹码的内容已经不同
D:(Device major/minor number mis-match) 装置的主/次代码已经改变
L:(readLink(2) path mis-match)Link 路径已被改变
U:(User ownership differs) 文件的所属人已被改变
G:(Group ownership differs) 文件的所属组已被改变
T:(mTime differs) 文件的创建时间已被改变
P:caPabilities differ
. 表示未改变

程序包的合法性验证:

  • 来源合法性验证:依赖制作者的数字签名
  • 完整性验证:依赖于制作者提供的程序特征码

验证方式:
获取并导入信任的包制作者的密钥,验证来源合法性;
使用同样的特征码提取算法提取程序包的特征码,并与原制作者提供的比较验证完整性.

对于CentOS发行版来说,可以导入KEY文件验证光盘中的程序包的来源及完整性

    rpm --import /etc/pki/rom-gpg/RPM-GPG-KEY-CentOS-7

验证:
<1> 安装此组织签名的程序的程序时,会自动执行验证
<2> 手动验证

rpm -K PACKAGE_FILE

7. 数据库重建

rpm管理器数据库路径:/var/lib/rpm/;
查询操作是通过此处的数据库进行的。

rpm {--initdb|--rebuilddb}

        --initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
        --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;无论存在与否,都会直接重建

YUM程序包管理器

yum是通过分析RPM的标头数据后,根据各软件的依赖关系制作出有依赖关系时的解决方案,然后可以自动处理软件的依赖性问题,以解决软件安装或移除与升级的问题。
yum可以看做是C/S架构的软件,因此它包含yum client和yum server(即yum repository)

yum repository: yum repo 即yum仓库;存储了众多rpm包,以及包的相关的元数据(放置于特定的目录下:repodata);repodata目录所在的位置即仓库所应指向的路径。
yum client: yum的配置文件路径

    /etc/yum.conf  # 为各仓库提供公共配置文件
    /etc/yum.repos.d/*.repo  #为仓库的指向提供配置,可以指定多仓库

仓库指向的定义:
    [repositoryid] #仓库id,用于唯一标识此仓库的指向,必须唯一
    name=Some name for this repository #当前仓库描述信息
    baseurl=url://patch/to/repository #指明仓库的访问路径;通常为一个文件服务器上的输出的某repository
    #url支持的类型:
            ftp服务:ftp://
            http服务:http://
            本地目录:file:///
    enabeld={1|0} #此仓库是否可被使用;默认启用
    gpgcheck={1|0} #是否检查程序包来源完整合法性
    gpgkey=URL #指明密钥文件
    enablegroup={1|0} #是否基于组批量管理程序包
    failovermethod={roundrobin|priority} #是按随机挑选还是按优先级挑选仓库访问路径;默认为随机roundrobin;
    cost=     #指明当前repository的访问开销,默认为1000

yum命令的使用:

yum [options] [command] [package...]

1. 显示仓库列表
yum repolist : 列出已经配置的所有可用仓库
yum repolist[all|enabled|disabled] #默认为enabled

    示例:
                [root@localhost ~]# yum repolist
                Loaded plugins: fastestmirror, langpacks
                Bad id for repo: centos 7, byte =   6
                Loading mirror speeds from cached hostfile
                 * base: centos.ustc.edu.cn
                 * extras: mirrors.tuna.tsinghua.edu.cn
                 * updates: mirrors.tuna.tsinghua.edu.cn
                repo id                                     repo name                                    status
                !base/7/x86_64                              CentOS-7 - Base                              9,911
                !extras/7/x86_64                            CentOS-7 - Extras                              305
                !updates/7/x86_64                           CentOS-7 - Updates                             654
                repolist: 10,870

2. 显示程序包
yum list [all|glob_exp1] [glob_exp2][...]
yum list {available|installed|extras|obsoletes|updates}[glob_exp1][...]

    示例:
            [root@localhost ~]# yum list all php*
            Loaded plugins: fastestmirror, langpacks
            Bad id for repo: centos 7, byte =   6
            Loading mirror speeds from cached hostfile
             * base: centos.ustc.edu.cn
             * extras: mirrors.tuna.tsinghua.edu.cn
             * updates: centos.ustc.edu.cn
            Installed Packages
            php.x86_64             5.4.16-45.el7     installed
            Available Packages
            php-bcmath.x86_64      5.4.16-45.el7      base     
            php-cli.x86_64         5.4.16-45.el7      base     
            php-common.x86_64      5.4.16-45.el7      base     
            php-dba.x86_64         5.4.16-45.el       base     
            php-devel.x86_64       5.4.16-45.el7      base     
            ...

3. 安装程序包
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...]  #重新安装(覆盖安装)

    示例:
            [root@localhost ~]# yum install zsh

  • 注意:
    <1>只需要提供包名
    <2>如果某包有在补通仓库中有多个不同版本,默认安装最新版
    <3>如果要安装指定版本:install PACKAGE-VERSION
4. 升级程序包
yum update package1 [package2][...]
yum downgrade package1 [package2] [...]  #降级

5. 检查可用升级
yum check-update

6. 卸载程序包
yum remove|erasw package1 [package2] [...]

7. 查询程序包相关简要信息
yum info PACKAGE...

8. 查看指定的特性(可以是某文件)是由哪个程序包所提供
yum procides|whatprovides feature1 [feature2][...]

9. 清理本地缓存
yum clean [package|metadata|expire-cache|rpmdb|plugins|all]

10. 构建缓存
yum makecache

11. 搜索
yum search string1 [string2] [...] #以指定的关键字搜索程序包名及summary信息

12. 查看指定包所依赖的capabilities
yum deplist package1 [package2] [...]

13. 查看yum事物历史
yum history [info|list|package-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

14.安装及升级本地程序包
yum localinstall rpmfile1 [rpmfile2] [...] #centos6,7可以直接使用install
yum localupdate rpmfile1 [rpmfile2] [...] #centos6,7可以直接使用update

15. 包组管理的相关命令
yum groupinstall group1 [...] #安装
yum groupupdate group2 [...] #升级
yum grouplist [hidden] [groupwildcard] [...] #列出所有yum repos的可用组
yum groupremove group1[...] #卸载
yum groupinfo group1 [...] #显示指定包组详情

16. yum的命令行选项
    -y: 自动回答“yes”
    --nogpgcheck:禁止进行gpgcheck
    -q:静默模式
    --disablerepo=repoidglob: 临时禁用此处指定的repo
    --enablerepo=repoidglob: 临时启用此处指定的repo
    --noplugins: 禁用所有插件

17. yum的repo配置文件中可用的变量
    $releasever:当前OS的发行版的主版本号
    $arch:平台
    $basearch:基础平台
    $YUM1-$YUM9:自定义的变量

如:在yum的配置文件中定义的baseurl路径为:

 baseurl=http://repo.magedu.com/centos/$releasever/$basearch

且当前系统为CentOS 6.6 x86_64,因此实际的baseurl路径为:

http://repo.magedu.com/centos/6/x86_64

制作本地yum源

  1. 使用发行版光盘作为yum repository
    [root@localhost ~]# mount -r /dev/cdrom /media/cdrom
    # 挂载光盘
    [root@localhost ~]# cd /etc/yum.repos.d/
    [root@localhost yum.repos.d]# vim local.repo 
    #新建yum repo配置文件
              1 [dvdbase]
              2 name=CentOS 7 x86_64 on dvd
              3 baseurl=file:///media/cdrom
              4 gpgcheck=0
              5 enabled=1
    [root@localhost yum.repos.d]# yum repolist #列出已配置的所有可用仓库

  1. 创建本地yum仓库
    [root@localhost ~]# yum install createrepo -y
    #先安装createrepo程序包
    [root@localhost ~]# cp -r /media/cdrom/Packages/ /var/ftp/pub
    #把镜像光盘中的rpm包复制到文件存放路径/var/ftp/pub
    [root@localhost ~]# cd /var/ftp/pub/Packages/
    #cd到rpm包存放的目录
    [root@localhost ~]# createrepo ./
    #运行createrepo,生成repodata目录
    [root@localhost ~]# vim /etc/yum.repos.d/my.repo
    #编辑创建仓库配置信息
            [myrepo]
            name=myrepo centos6.9
            baseurl=file:///var/ftp/pub
            enabled=1
            gpgcheck=0
    [root@localhost ~]# yum repolist 

  1. 创建网络源yum仓库
    [root@localhost ~]# yum install createrepo -y
    #先安装createrepo程序包
    [root@localhost ~]# yum install vsftpd -y
    #安装vsftpd程序包
    [root@localhost ~]# service vsftpd start
    #启动服务
    [root@localhost ~]# cp -r /media/cdrom/Packages/ /var/ftp/pub
    #把镜像光盘中的rpm包复制到文件存放路径/var/ftp/pub
    [root@localhost ~]# cd /var/ftp/pub/Packages/
    #cd到rpm包存放的目录
    [root@localhost ~]# createrepo ./
    #运行createrepo,生成repodata目录
    [root@localhost ~]# vim /etc/yum.repos.d/my.repo
    #编辑创建仓库配置信息
            [myrepo]
            name=myrepo centos6.9
            baseurl=ftp://192.168.1.103/pub/Packages/
            enabled=1
            gpgcheck=0
    #保存好配置文件
    [root@localhost ~]# yum repolist   
    已加载插件:fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.huaweicloud.com
     * extras: centos.ustc.edu.cn
     * updates: mirror.bit.edu.cn
        myrepo                     | 2.9 kB     00:00     
        myrepo/primary_db          | 1.4 MB     00:00     
        仓库标识                     仓库名称         状态
        base                 CentOS-6 - Base         6,706
        extras               CentOS-6 - Extras       53
        myrepo               myrepo centos6.9        1,561
        updates              CentOS-6 - Updates      1,308
        repolist: 9,628

编译安装apche2.2,并启动此服务

前提:安装开发工具和开发环境

对CentOS6来说,需要安装“Development tools”和“Server Platform Development”

    [root@localhost ~]# yum groupinstall “Development tools” -y
    [root@localhost ~]# yum groupinstall “Server Platform Development” -y

第一步:
[root@localhost ~]# tar -zxf httpd-2.2.32.tar.gz
#拿到程序包源码后解压
[root@localhost ~]# cd httpd-2.2.32
[root@localhost httpd-2.2.32]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd
#运行configure脚本,生成makefile.in 文件

第二步:
[root@localhost httpd-2.2.32]# make

第三步:
[root@localhost httpd-2.2.32]# make install

验证:
[root@localhost gentoo]# cd /usr/local/apache2/
[root@localhost apache2]# ls
bin  build  cgi-bin  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@localhost apache2]# bin/apachectl start
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[root@localhost apache2]# netstat -tan
tcp        0      0 :::80 
httpd.png
安装后配置:

<1>. 导出二进制程序目录至PATH环境变量中

[root@localhost httpd-2.2.32]# vim /etc/profile.d/httpd2.sh
#编辑全局环境变量   
    export PATH=$PATH:/usr/local/apache2/bin
[root@localhost httpd-2.2.32]# source /etc/profile.d/httpd2.sh
#让bash重读配置文件

<2>.导出库文件路径

[root@localhost httpd-2.2.32]# vim /etc/ld.so.conf.d/httpd.conf
#编辑库文件
    /usr/local/apache2/lib
[root@localhost httpd-2.2.32]# ldconfig -v
#让系统重新生成缓存

<3>.导出头文件
基于链接的方式实现

[root@localhost httpd-2.2.32]# ln -sv /usr/local/apache2/include /usr/include//httpd

<4>.导出帮助手册

[root@localhost httpd-2.2.32]# vim /etc/man.config 
#编辑上述文件添加下面一行
MANPATH /usr/local/apache2/man

at命令

at是有atd服务提供的,在CentOS6中使用service atd start启动服务;在CentOS7中使用systemctl start atd.service来启动服务

使用方法:

at [OPTION]...TIME

常用选项:
    -l:at -l相当于atq;查看作业队列
    -f /PATH/FROM/SOMEFILE :指定文件中读取作业任务,而不再交互输入
    -d:at -d相当于atrm;删除指定的作业
    -c:查看指定作业得具体内容
    -q QUEUE:指明队列

TIME的格式:
    HH:MM: 直接指定时分;若该时刻以超过,则明天的HH:MM进行此工作
    HH:MM:YYYY-MM-DD:如 20:00 2018-10-22
    HH:MM[am|pm][Month][Date]:如04pm March 17
        强制规定在某年某月的某一天的特殊时刻进行该工作
    HH:MM[am|pm]+number[minuttes|hours|days|weeks]
        指在某个时间点再加上几个时间后才进行

crontab命令

crontab是由crond服务提供的,它的主程序包是cronie

确保crond守护进程(daemon)处于运行状态: CentOS 7:
systemctl status crond.service
Active: active (running) … …
启动服务:systemctl start crond.service
CentOS 6:
service crond status
… is running.
启动服务: service crond start

系统cron的配置格式:/etc/crontab
    [root@localhost ~]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/

    # 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

  • 注意:
    (1) 每一行定义一个周期性任务,共7个字段;
            • : 定义周期性时间
              user-name : 运行任务的用户身份
              command to be executed:任务
              (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
              (3) 执行结果邮件发送给MAILTO指定的用户
用户cron的配置格式:/var/spool/cron/USERNAME
            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)
            # |  .------------- 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
            # |  |  |  |  |
            # *  *  *  *  *   command to be executed    

  • 注意:
    (1) 每行定义一个cron任务,共6个字段;
    (2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
    (3) 邮件发送给当前用户;
时间表示法:

(1) 特定值;
给定时间点有效取值范围内的值;
注意:day of week和day of month一般不同时使用;
(2) *
给定时间点上有效取值范围内的所有值;表“每..”
(3) 离散取值:,
在时间点上使用逗号分隔的多个值;
\ #,#,#
(4) 连续取值:-
在时间点上使用-连接开头和结束
\ #-#
(5) 在指定时间点上,定义步长:
/#:#即步长;

  • 注意:
    (1) 指定的时间点不能被步长整除时,其意义将不复存在;
    (2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;
    定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;
crontab命令用法:

crontab [-u user] [-l | -r | -e] [-i]

    常用选项:
        -e:编辑任务
        -l:列出所有任务
        -r:移除所有任务,即删除/var/spool/cron/USERNAME
            删除单一任务用crontab -e 编辑
        -i:交互式
        -u USER:root为某用户指定用户cron任务

  • 注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件
    <1> COMMAND > /dev/null
    <2> COMMAND&> /dev/null
    定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义
练习:

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

     [root@localhost ~]# vim /scripts/mydate.sh
     #写一个显示时间的脚本

            #!/bin/bash
            #显示系统当前时间
            date +%Y-%m-%d\ %T
    [root@localhost ~]# crontab -e
    crontab: installing new crontab
    [root@localhost ~]# crontab -l
    0 3,5 * * 3 root bash /scripts/mydate.sh

sed命令:流编辑器;行编辑器

sed [OPTION]... {script} [input-file]...[actions]

    常用命令:
        -r:支持扩展表达式
        -n:静默模式
        -e script1 -e script2 -e script3:指定多脚本运行;多点编辑
        -f /PATH/TO/SED_SCRIPT_FILE:从指定文件中读取脚本运行
                                    每行一个编辑命令
        -i:直接修改源文件

script:地址定界编辑命令

地址定界:

<1>不给地址(空地址):对全文进行处理
<2>单地址:

    #:指定行
    /pattern/:被模式所匹配到的每一行

<3>地址范围:

    #,#:从#行到#行中间所有的行
    #,+N:从#行开始,一直到向下的N行
    #,/pat1/:从#行开始,到第一次被/pat1/匹配到的行结束,中间所有的行
    /pat1/,/pat2/:从第一次被/par1/匹配到的行开始到第一次被/pat2/匹配到的行结束,中间所有的行
    $:最后一行

<4>步进:

    1~2:所有奇数行
    2~2:所有偶数行

编辑命令:
    d:删除模式空间中的行
    p:显示模式空间中的内容
    a \text:在行后面追加文本“text”,支持适应\n实现多行追加
    i \text:在行前门插入文本“text”,支持使用\n实现多行插入
    c \text:把匹配到的行替换为此处指定的文本“text”
    w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中
    r /PATH/FROM/SOMEFILE:在文件的指定位置插入另一个文件的所有内容,完成文件合并
    =:为模式匹配到的行打印行号
    !:条件取反(地址定界!编辑命令)
    s/regexp/replacement/:替换由regexp所匹配到的内容为replacement
                        分隔符还可以使用s@@@,s###
            替换后的选项:             
                g:全局替换
                i:不区分大小写
                P:显示替换成功的行

练习:

1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符

    [root@localhost ~]# sed "s@^[[:space:]]@@" /boot/grub2/grub.cfg 

2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符

    [root@localhost ~]# sed 's@^#[[:space:]]*@@' /etc/fstab

3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname

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

推荐阅读更多精彩内容