程序包管理器
| 发行版代表 | 软件管理机制 | 使用命令(后端工具) | 前端工具 |
| 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 适合的硬件平台
程序包的制作流程
程序源码预处理后进行编译,编译成目标代码,然后汇编成二进制代码(包括二进制程序、库文件、配置文件、帮助文件等),然后把它们组织成为一个或有限几个“包”文件(即最终可执行的二进制代码)。
程序包管理器的功能:
将编译好的应用程序的个组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作。
程序包文件组成:
- 程序包的组成清单(每个程序包都单独实现)
文件清单
安装或卸载时运行的脚本 - 数据库(公共)
程序包的名称和版本
依赖关系
功能说明
安装生成的个文件的文件路径以及校验码
获取程序包的途径
- 系统发行版的光盘或者官方的文件服务器
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
… - 项目的官方站点
- 第三方组织
<1> EPEL
<2> 搜素引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net - 自己动手
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源
- 使用发行版光盘作为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 #列出已配置的所有可用仓库
- 创建本地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
- 创建网络源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
安装后配置:
<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@[^/]\+$@@'