05linux葵花宝典–linux软件安装、计划任务和sed流编辑
linux系统上安装软件,和windows上有所区别,对于大多数初学者来说,在使用命令行模式时安装软件,都是一个需要跨越的难题。本节博客将以红帽系列开发版为例,详细介绍linux系统上安装软件的操作。另外,还将介绍计划任务,以及sed流编辑命令。
一、rpm命令使用
在linux系统上,安装软件分为源码安装和二进制程序安装。源码安装需要将应用程序源代码经过编译、链接等过程,生成适用于linux各系统的二进制程序后,在进行安装。二进制格式安装,是下载其他组织或个人已经编译链接好的二进制代码,进行安装。通常,为方便起见,选择二进制安装。当需要对程序进行某些功能增加、改进或者已制作好的二进制代码不能满足使用者的特殊需求时,则使用源代码编译后安装。
二进制代码安装,在红帽系列发行版中,使用rpm命令作为软件包的前端管理工具,debian发行版本中使dpkg命令作为软件包管理工具,S.u.S.E使用zypper作为管理工具。下面以红帽系列的rpm命令为例,详细介绍其命令使用方法。
第一节博客中提到过,linux的哲学思想之一就是使用一个程序完成一个简单功能,然后将这些简单程序组合起来,完成复杂功能。在软件包安装过程中,A软件的功能可能需要用到B软件,这时,在安装A软件时,就必须先安装B软件,也就是A软件包依赖B,这就是软件包的依赖关系。
另外,为保证软件包的可靠性(软件包是否就是软件开发者自己的)、完整性(软件包是否是未经过修改加入或删除一些其他功能的)等一些软件的关键信息,软件包中还包括了软件的一些验证信息。
rpm软件包通常使用以下方式命名:PACKAGEName-Version-Release.arch.rpm 其中PACKAGEName是包名。Version是版本号,包括主版本号、次版本号和发行号,如:3.1.2,3表示主版本号,通常该软件有重大功能改进时,改变该数值,1表示次版本号,通常该软件有较大功能改进时,改变该数值,2表示发行号,通常软件有较小改动时,改变该数值。Release表示从软件从源代码编译成二进制格式的发行号;arch表示该软件所适用的架构,即i386、x86_64或者noarch(于架构无关,那种平台都可用),有时后面可能还跟有操作系统如el7,指使用于红帽的rhel7版本操作系统。
rpm RPM package manager,在管理软件包时,分为以下几种操作:安装、升级、卸载、查询、校验以及其他。下面分别说明
在介绍各种操作之前,先介绍rpm的通用选项:即这几种选项是独立或者配合以上几种操作来完成相关软件包管理的
-?输出帮助
-v 输出详细信息
-vv 输出更详细信息
1、安装
rpm {-i|–install} [install-options] PACKAGE_FILE …
其中,install-options可以的选项有
-h 输出50个#来显示安装进度
--force 强制安装
--ignoresize 不检查磁盘可以空间大小
--ignorearch 忽略软件包可适用的架构是否和本机一致
--ignoreos 忽略软件包的操作系统是否和本机系统
--nodigest 不验证包的完整性
--nodeps 不检查软件包的依赖关系
--nosignature 不验证包来源的可靠性
例如
[root@localhost Packages]rpm -ivh zip-3.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:zip-3.0-10.el7 ################################# [100%]
[root@localhost Packages]#
上面使用-ivh选项来安装了zip软件包,i表示安装,v表示显示详细信息,h表示用50个#来显示安装进度。
2、升级
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
-U与-F选项均表示升级操作,其区别是-U安装软件包后,其他版本的该软件包将都被删除;而-F将升级为新软件包。
其install-options和安装选项一样, –oldpackage 使用旧版本的软件包替换已安装的新版本
3、卸载
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
卸载已安装的软件包,
--nodeps 卸载时不检查软件直接的依赖关系
--noscripts 卸载时不执行软件默认的卸载前和卸载后的脚本命令
--test 测试卸载,即不真正卸载
注意,卸载时后面跟的是PACKAGE_NAME,而安装升级时是PACKAGE_FILE
例如:
[root@localhost Packages]# rpm -evh zip
Preparing... ################################# [100%]
Cleaning up / removing...
1:zip-3.0-10.el7 ################################# [100%]
4、查询
查询是指查询当前系统软件相关的各种信息,例如安装了哪些软件,某软件提供了什么功能,软件有哪些文件,某个文件是哪个软件生成的,软件的相关信息等等。
rpm {-q|–query} [select-options] [query-options]
-q 查询
select-options
-a 所有已安装软件
-f FILE 文件归属于哪个软件包
-p PACKAGE_FILE 这个包有哪些文件
--whatprovides CAPABILITY 哪些包提供了CAPABILITY
--whatrequires CAPABILITY 哪些包需要CAPABILITY的运行
query-options
--changelog 软件包的版本更新日志
-c 软件包的配置文件
-d 软件包的文档
-i 软件包的相关信息
-l 软件包的文件
--provides 软件包提供了哪些能力CAPABILITY
--scipts 软件包中的脚本(最多有四种:preinstall预安装脚本、postinstall安装后脚本、preuninstall预卸载脚本、postuninstall卸载后脚本)
例如:
-qi PACKAGE_NAME 查询已安装软件信息
[root@localhost Packages]# rpm -qi zip
Name : zip
Version : 3.0
Release : 10.el7
Architecture: x86_64
Install Date: Thu 29 Mar 2018 11:25:11 PM EDT
Group : Applications/Archiving
Size : 815037
License : BSD
Signature : RSA/SHA256, Fri 04 Jul 2014 01:53:58 AM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM : zip-3.0-10.el7.src.rpm
Build Date : Mon 09 Jun 2014 10:37:07 PM EDT
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.info-zip.org/Zip.html
Summary : A file compression and packaging utility compatible with PKZIP
Description :
The zip program is a compression and file packaging utility. Zip is
analogous to a combination of the UNIX tar and compress commands and
is compatible with PKZIP (a compression and file packaging utility for
MS-DOS systems).
Install the zip package if you need to compress files using the zip
program.
-qd PACKAGE_NAME
[root@localhost Packages]# rpm -qd zip
/usr/share/doc/zip-3.0/CHANGES
/usr/share/doc/zip-3.0/LICENSE
/usr/share/doc/zip-3.0/README
/usr/share/doc/zip-3.0/README.CR
/usr/share/doc/zip-3.0/TODO
/usr/share/doc/zip-3.0/WHATSNEW
/usr/share/doc/zip-3.0/WHERE
/usr/share/doc/zip-3.0/algorith.txt
/usr/share/man/man1/zip.1.gz
/usr/share/man/man1/zipcloak.1.gz
/usr/share/man/man1/zipnote.1.gz
/usr/share/man/man1/zipsplit.1.gz
-q –provides PACKAGE_NAME
[root@localhost Packages]# rpm -q --provides zip
zip = 3.0-10.el7
zip(x86-64) = 3.0-10.el7
-q –scipts PACKAGE_NAME
[root@localhost Packages]# rpm -q --scripts zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
echo "/bin/zsh" > /etc/shells
else
grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
fi
if [ -f /usr/share/info/zsh.info.gz ]; then
# This is needed so that --excludedocs works.
/sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \
--entry="* zsh: (zsh). An enhanced bourne shell."
fi
:
preuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ] ; then
if [ -f /usr/share/info/zsh.info.gz ]; then
# This is needed so that --excludedocs works.
/sbin/install-info --delete /usr/share/info/zsh.info.gz /usr/share/info/dir \
--entry="* zsh: (zsh). An enhanced bourne shell."
fi
fi
:
postuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ] ; then
if [ -f /etc/shells ] ; then
TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX`
grep -v '^/bin/zsh$' /etc/shells > $TmpFile
cp -f $TmpFile /etc/shells
rm -f $TmpFile
fi
fi
zsh软件包提供了三个脚本,分别是postinstall、preuninstall和postuninstall。
5、校验
rpm {-V|–verify} [select-options] [verify-options]
修改了zsh相关文件后,使用校验功能的结果
[root@localhost scripts]# rpm -V zsh
S.5....T. /usr/share/zsh/5.0.2/scripts/newuser
一共9个指示位,.表示没有改变,不是.表示改变了,其意义如下:
S 文件大小改变
M 文件模式改变(包括权限和文件类型等)
5 信息摘要改变(MD5摘要信息)
D 设备主/次号改变
L 读连接路径改变
U 属主改变
G 属组改变
T 修改时间改变
P 能力改变(CAPABILITY)
6、其他
rpm –initdb 初始化rpm数据库
rpm — rebuilddb 重建rpm数据库
由于rpm是一个包安装的前端工具,每个通过rpm安装的软件包的相关信息都会在数据库中记录,这两个命令就是针对这个数据库进行操作。
rpmkeys –import PUBKEY …
导入公钥文件,主要在验证包的信息时用到,例如,在讲安装时,默认会验证包的签名信息和摘要信息,使用的公钥就是通过该命令导入
rpmkeys {-K|–checksig} PACKAGE_FILE …
验证该包的信息,仅验证。
[root@localhost Packages]# rpm -K zziplib-utils-0.13.62-5.el7.x86_64.rpm
zziplib-utils-0.13.62-5.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
查询PUBKEY信息
[root@localhost Packages]# rpm -qa gpg-pubkey
gpg-pubkey-f4a80eb5-53a7ff4b
二、yum的使用
yum Yellowdog Updater Modified 是红帽发行版yellowdog的一款rpm包管理器,在红帽系列linux发行版中广泛应用。
yum主要用于解决软件包的依赖性问题。例如在安装大型软件包时,其可能依赖很多其他包,而其他包有可能依赖另外的包,这样,如果使用rpm工具来安装,将会是一个非常痛苦和漫长的过程。
yum通过一个repository(可以理解为软件仓库)来组织软件包,并将软件包的相关信息组成一个数据库,通过数据库中的信息来管理软件包,并解决软件依赖问题。
其基本功能也是安装、升级、卸载、查询、验证以及其自身一些管理功能。
在使用yum命令前,需要配置好repository,这节主要将命令使用,下节详细介绍repository配置方法。
yum的一些常用选项
-y 安装过程中自动回答yes
-q 静默模式安装
--nogpgcheck不检查签名等信息(即使仓库中配置了gpgcheck=1)
--enablerepo 临时启用一个禁用的仓库(仓库中配置了enabled=0)
--noplugin 禁用插件
1、yum install package1 [package2] …
使用yum安装httpd
[root@localhost Packages]# yum install httpd
Loaded plugins: fastestmirror
CDROM | 3.6 kB 00:00:00
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-31.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-31.el7.centos for package: httpd-2.4.6-31.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-31.el7.centos.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-31.el7.centos.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-31.el7.centos.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-31.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Installing:
httpd x86_64 2.4.6-31.el7.centos CDROM 2.7 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 CDROM 103 k
apr-util x86_64 1.5.2-6.el7 CDROM 92 k
httpd-tools x86_64 2.4.6-31.el7.centos CDROM 79 k
mailcap noarch 2.1.41-2.el7 CDROM 31 k
Transaction Summary
========================================================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 3.0 M
Installed size: 10 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------------------------------
Total 22 MB/s | 3.0 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : apr-1.4.8-3.el7.x86_64 1/5
Installing : apr-util-1.5.2-6.el7.x86_64 2/5
Installing : httpd-tools-2.4.6-31.el7.centos.x86_64 3/5
Installing : mailcap-2.1.41-2.el7.noarch 4/5
Installing : httpd-2.4.6-31.el7.centos.x86_64 5/5
Verifying : httpd-tools-2.4.6-31.el7.centos.x86_64 1/5
Verifying : apr-1.4.8-3.el7.x86_64 2/5
Verifying : mailcap-2.1.41-2.el7.noarch 3/5
Verifying : httpd-2.4.6-31.el7.centos.x86_64 4/5
Verifying : apr-util-1.5.2-6.el7.x86_64 5/5
Installed:
httpd.x86_64 0:2.4.6-31.el7.centos
Dependency Installed:
apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-31.el7.centos
mailcap.noarch 0:2.1.41-2.el7
Complete!
安装httpd时,依赖了4个软件包(apr、apr-util、httpd-tools、mailcap),这些都由yum工具自动安装。
2、yum update [package1] [package2] […]
升级软件包
3、yum remove | erase package1 [package2] […]
卸载软件包
[root@localhost Packages]# yum erase zsh
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package zsh.x86_64 0:5.0.2-7.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Removing:
zsh x86_64 5.0.2-7.el7 installed 5.6 M
Transaction Summary
========================================================================================================
Remove 1 Package
Installed size: 5.6 M
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Erasing : zsh-5.0.2-7.el7.x86_64 1/1
Verifying : zsh-5.0.2-7.el7.x86_64 1/1
Removed:
zsh.x86_64 0:5.0.2-7.el7
Complete!
4、yum list […]
列出相应信息
all 所有可安装的和已经安装的软件包(可使用通配符glob_exp)
updates 列出可升级的软件包
installed 列出已经安装的等
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled
5、yum provides | whatprovides feature1 [feature2] […]
查询特性由哪个软件包
[root@localhost Packages]# yum whatprovides zip\(x86-64\)
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
zip-3.0-10.el7.x86_64 : A file compression and packaging utility compatible with PKZIP
Repo : CDROM
Matched from:
Provides : zip(x86-64) = 3.0-10.el7
zip-3.0-10.el7.x86_64 : A file compression and packaging utility compatible with PKZIP
Repo : installed
Matched from:
Provides : zip(x86-64) = 3.0-10.el7
6、yum search string1 [string2] […]
在仓库中查找strins相关的软件包或功能等,特别使用于知道某个功能或软件名字,但又记不清楚时
yum search http
7、yum info package
查看包的相关信息,相当于rpm -qi package
8、yum group
软件包组的相关内容,有yum groupinstall GRPUP_NAME安装软件包组
9、yum downgrade
软件降级
10、yum repolist [all|enabled|disabled]
显示所有、可用、禁用的软件仓库信息
11、yum history
显示通过yum管理软件的相关信息
[root@localhost Packages]# yum history
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
7 | root <root> | 2018-03-30 00:37 | Erase | 1
6 | root <root> | 2018-03-30 00:33 | Install | 5 <
5 | root <root> | 2018-03-29 20:26 | Install | 4 >
4 | root <root> | 2018-03-29 19:48 | Install | 7
3 | root <root> | 2018-03-10 15:58 | Install | 1
2 | root <root> | 2018-03-08 11:52 | Install | 31
1 | System <unset> | 2018-02-23 11:35 | Install | 297
history list
三、yum仓库配置
yum全局配置文件在/etc/yum.conf中,仓库文件在/etc/yum.repos.d/*.repo ,注意,yum仓库文件必须以.repo结尾。
仓库文件示例:
[仓库名称] name=Centos.name.
[root@koala yum.repos.d]# cat CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#号开头的是注释信息
[base] 仓库名称 name 仓库的意义或作用,相当于仓库注释 baseurl 仓库的路径URL,可使用httpd、ftp、file等指明仓库的url,当使用file时,一般格式为: baseurl=file:///to/some/path,file:后有三个/,其中前两个//和file:一起(file://)指协议,第三个/ 指文件系统下的路径,该路径一定是包含repodata的路径。 gpgcheck 是否验证仓库的签名和摘要信息 gpgkey 验证信息时的公钥位置 enabled 该仓库是否启用,如果没有该条目,表示启用,即enabled=1
在上节中提到,yum仓库通过一个元数据文件repodata来管理软件包,在建立yum仓库时,首先要下载一些软件包到某目录下,然后使用命令生成creatrepo仓库的数据库文件,然后手动设置*.repo文件,并放置于/etc/yum.repos.d/目录下,即可使用该软件仓库。
createrepo [options] 生成yum仓库元数据文件(xml格式)
例如,将一些软件包下载至/tmp/pkg/目录下,使用createrepo ./命令即可生成metadata文件
示例:制作yum仓库
#新建一个目录用于仓库目录
[root@localhost pkg]# mkdir /tmp/yumrepo
#拷贝一些RPM软件包到仓库目录下
[root@localhost pkg]# cp /media/cdrom/Packages/c*.rpm /tmp/yumrepo
[root@localhost pkg]# cd /tmp/yumrepo
#使用createrepo命令生成仓库rpm包的元数据文件metadata
[root@localhost yumrepo]# createrepo ./
Spawning worker 0 with 279 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
#创建my.repo文件,并编辑,使其符合前面所说的仓库文件格式,这里使用的是本地源。
#如果要使用网络源,可将/tmp/yumrepo文件夹中的内容复制到http或ftp服务器相关目录下,并使my.repo文件中的baseurl指向该网络路径。
[root@localhost yumrepo]# vi /etc/yum.repos.d/my.repo
[myrepo]
name=include c*.rpm
baseurl=file:///tmp/yumrepo/
enabled=1
#测试该仓库是否可用
#使用yum clean all 清楚系统上的yum缓存数据
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: myrepo
Cleaning up everything
Cleaning up list of fastest mirrors
#使用yum makecache 重新读取/etc/yum.repos.d/*.repo 仓库中的medatata数据
[root@localhost yum.repos.d]# yum makecache
Loaded plugins: fastestmirror
myrepo | 2.9 kB 00:00:00
(1/3): myrepo/filelists_db | 151 kB 00:00:00
(2/3): myrepo/other_db | 93 kB 00:00:00
(3/3): myrepo/primary_db | 156 kB 00:00:00
Determining fastest mirrors
Metadata Cache Created
#查看仓库信息
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
myrepo include c*.rpm 279
repolist: 279
#查找仓库中cvs相关的软件。
[root@localhost yum.repos.d]# yum list all | grep cvs*
libedit.x86_64 3.0-12.20121213cvs.el7 @anaconda
cvs.x86_64 1.11.23-35.el7 myrepo
cvs-contrib.noarch 1.11.23-35.el7 myrepo
cvs-doc.noarch 1.11.23-35.el7 myrepo
cvs-inetd.noarch 1.11.23-35.el7 myrepo
cvsps.x86_64 2.2-0.14.b1.el7 myrepo
四、计划任务
计划任务像闹钟一样,在计划规定的时间,执行一系列的任务。分为两种,一是执行一次的计划,二是周期性执行的计划。 通常,执行一次的计划使用at和batch命令,周期性计划使用crond系统服务,使用crontab和anacron。
1、at
at [options] TIME
常用命令选项有
-l 同atq命令,显示at的计划任务
-d 同atrm命令,删除指定的计划任务
-v 以时间方式,显示出任务列表
-m 任务完成后以email方式通知用户执行结果
TIME,指定任务的执行时间,具体有以下几种格式:
HH:MM 小时:分钟,从现在开始,第一次出现该时间点的时刻
MMDDYY或MM/DD/YY或DD.MM.YY或YYYY-MM-DD其中Y是年,M是月,D是日
指定命令输入完成后,使用ctrl+d退出at交互。 batch用法和at基本相同,但batch不用指定时间,该计划任务将在系统空闲时执行。
2、crontab
crontab可以创建一个周期性执行的任务计划。
root用户可以为自己和其他用户创建周期性任务计划。其他用户是否有权限创建周期性任务计划,取决于/etc目录下的cron.allow和cron.deny这两个文件。当没有这两个文件时,只有root用户可以为自己或其他用户创建任务计划;当存在cron.allow文件时,只有文件中允许的用户可以创建任务计划,而忽略有没有cron.deny文件。当只有cron.deny文件时,文件中的用户将不被允许创建任务计划,不在文件中的用户可以创建任务计划。
crontd服务通过调用配置文件来执行计划任务,分为系统cron和用户cron。系统cron的配置文件为/etc/crontab,用户的配置文件为/var/spool/cron/USERNAME
/etc/crontab格式为(用户配置文件没有user-name): * user-name command to be executed
1* 表示分钟 0-59
2* 表示小时 0-23
3* 表示天 0-31
4* 表示月 1-12
5* 表示周 0-7,0 7都表示周日
以上时间表示方法中,*代表任意取值都可以;可使用 num1-num2表示连续值;num1,num2表示离散值;/num 表示间隔num个单位,如在分钟位置上/5表示每5分钟。
例如: 05 表示每小时的5分钟那一时刻
00 01 * 表示每天的01:00
03 01 1 表示每周一的01:03
可以通过编辑配置文件来创建任务计划,但这样做容易出现语法问题,通常通过crontab命令来创建任务计划
在指定任务计划时,可以执行脚本。
由于在执行任务计划时,该任务计划对应的用户不一定登录在系统上,此时,任务计划中的命令,应该已完全路径表示或者经命令的路径在脚本中导入PATH环境变量,否则,很可能出现命令执行不成功。 例如,指定每周三凌晨三、五点10分执行某脚本,输出时间,时间格式为2017-12-28 10:00:00
[root@koala etc]# crontab
10 03,05 * * 3 /tmp/crontest.sh
Ctrl+d 提交
[root@koala tmp]# vi crontest.sh
#!/bin/bash
/bin/date '+%Y-%m-%d %H:%M:%S'
[root@koala /]# cat /var/spool/cron/root
10 03,05 * * 3 /tmp/crontest.sh
不同linux发行版,date命令的路径可能不同。
crontab常见的命令选项有: -e 编辑crontab -l 显示 -r 移除所有crontab -u username 为指定用户创建crontab ,只有root用户可用
五、sed命令
sed stream editor 流编辑器,它是将指定文件或输入的数据,逐行进行处理的命令,其基本用法是:
sed [OPTIONS] ‘AddressCommand’ file …
Address 表示行地址范围,也就是Command的作用对象,
Address有下面几种表示方法:
num1,num2 文件中从num1开始至num2结束的行
REG 正则表达式匹配到的行
/REG1/,/REG2/ 正则表达式REG1第一次匹配到的行至正则表达式REG2第一次匹配到的行
$ 最后一行
num1,+num2 从num1开始后的num2行
Command 命令 常用的命令有 d 删除匹配到的行 p 显示匹配到的行 a \string 在匹配到的行后增加一行 i \string 在匹配到的行前增加一行
注意:sed命令默认不修改源文件,只是将指定文件读入模式空间,并予以显示,意思是读入该行后,改行就在模式空间内,如果使用d命令,则该匹配到的行将被从模式空间内删除,最终结果就是没有被匹配的行留在模式空间,并被显示;如果使用p命令,则该文件会全部留在模式空间内,并被显示,而匹配到的行也会被显示,最终结果就是匹配到的行会显示2次,未匹配到的行显示1次。
常用选项有:
-r 可使用扩展正则表达式
-n 静默模式
-i 修改源文件(慎用)
-f /path/to/scripts 读入脚本文件执行
sed命令的查找替换
sed命令使用s 来完成查找替换
sed [options] ‘addresss/PATTERN/string/’ file …
其中,s///为固定格式,也可换为s@@@ s###
以上命令的含义是将file文件中被address匹配到的行中,第一次被PATTERN匹配到的字符串替换为string。注意只是第一次被匹配到的字符串会被替换,如果需要全局替换,则需要在第三个/或者@或者#后面加修饰符,常用的修饰符有g,表示全部替换;i,表示在使用PATTERN匹配时忽略大小写。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/94864