linux系统是由cron(crond)这个系统服务来控制的。linux系统上面原本有很多的计划性工作,因此这个服务是默认启动的。另个,使用者也可以根据自己的需求设置计划任务。linux计划任务可分类:
a . 未来的某时间点执行一次某任务:常用命令有 at
,batch
b. 周其性运行某个任务 : 常用命令有 crontab
.
crond
是linux系统下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似。当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond
进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。任务计划执行的结果:会通过邮件发送给用户。一般位于
/var/spool/mail/USERNAME
smtp
: simple mail transmission protocol 简单邮件传输协议;只能发不能接收。pop3
: post office protocol imap4
: Internet Mail Access Protocolss -tnl
或者 netstat -tnl
例如:
[root@localhost ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
[root@localhost ~]#
**************************************************************************************
[root@localhost ~]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
[root@localhost ~]#
其中上面有一个
25
号的端口属于邮件的监听状态。
mail : 命令 (centos 5,6 系列): send and receive Internet mail
mailx : 命令 (centos 7 系列 ) : send and receive Internet mail
mua : mail user agent : 用户收发邮件的工具程序。
mail 命令格式
.
点号单独行可以表示正文单独一行结束;CTRL+d 提交邮件。mail 命令
不带任何参数
表示:接收邮件。
作用:未来某时间点一次执行某任务。
常用选项:
-m
:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户。-c
工作号:显示该at工作的实际内容。时间格式:
HH:MM
例如 02:30。HH:MM YYYY-MM-DD
例如 02:30 2016-08-20。HH:MM[am|pm] [month] [date]
例如 02:30 July 25 。HH:MM[am|pm] + [minutes|hours|days|weeks]
例如 now+5 minutes 。HH:MM[YYYY-mm-dd]
。noon
(正中午),midnight
(晚上12点),teatime
(下午4点) 。tomorrow
(明天) 。 now+# (#) unit : minutes,hours,days, OR weeks
。例如:
[root@localhost ~]# at now+1 minutes
at> ls /etc # 输入要执行的命令。
at> # 按CRTl+d结束,提交。
job 1 at Sun Jun 10 12:33:00 2018
-l
: 查看作业队列。 -f/PATH/FROM/SOMEFILe
: 从指定文件中读取作业任务,而不用再交互式输入。 -d
: 删除指定的作业。-c
: 想看指定作业的具体内容。-q
: queue ; 指明队列。 at的作业有队列,用单个字母表示,默认都使用 a 队列。
作用:batch 会让系统自行选择在系统资源较空闲的时间去执行指定的任务。
常用参数:
-l
: 查看作业队列。 -f/PATH/FROM/SOMEFILe
: 从指定文件中读取作业任务,而不用再交互式输入。 -d
: 删除指定的作业。 -c
: 想看指定作业的具体内容。-q : queue
; 指明队列。服务主程序包:
cronie
: 提供了crond
守护进程及相关辅助工具。
确保crond守护进程(deamon)处于运行状态。
查看crond运行命令格式:
例如:
[root@caibird ~]# uname -r
2.6.32-696.el6.x86_64
[root@caibird ~]# service crond status # centos 6.9
crond (pid 1471) 正在运行...
[root@caibird ~]#
************************************************************************
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# systemctl status crond.service #centos 7.4
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2018-06-03 10:37:08 CST; 1 weeks 0 days ago
Main PID: 967 (crond)
CGroup: /system.slice/crond.service
└─967 /usr/sbin/crond -n
6月 03 10:37:08 localhost.localdomain systemd[1]: Started Command...
6月 03 10:37:08 localhost.localdomain systemd[1]: Starting Comman...
6月 03 10:37:08 localhost.localdomain crond[967]: (CRON) INFO (RA...
6月 03 10:37:08 localhost.localdomain crond[967]: (CRON) INFO (ru...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]#
向 crond 提交作业的方式不同于 at ,它需要使用专用的配置文件,此文件有固定的格式。
不建议使用文件编辑器直接编辑此文件;要使用crontab
命令;
cron任务分为两类:
/etc/crontab
。/var/spool/cron/USERNAME
目录中,其文件名与用户名一致。例如:
[root@caibird ~]# 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
[root@caibird ~]#
cron文件格式说明 :
注意:
1 . 每一行定义一个周期任务:各字段之间都使用空格 字符分开。
2 . 此处的环境变量不同于用户登录后获取的环境。因此,建议命令使用绝对路径,或者自定义PATH环境变量。
例如:
[root@caibird ~]# 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
\# | | | | |
\# * * * * * command to be executed
[root@caibird ~]#
注意: 用户cron的配置格式比系统cron配置格式少了一个 username
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段.
任务格式如下:
minute hour day month week command
其中:
-minute
: 表示分钟,可以是从0到59之间的任何整数。
hour
:表示小时,可以是从0到23之间的任何整数。
day
:表示日期,可以是从1到31之间的任何整数。
month
:表示月份,可以是从1到12之间的任何整数。
week
:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command
:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
注意: 在以上各个字段中,还可以使用以下特殊字符表示时间法:
day of week
和day of month
一般不同时使用。*
):代表所有可能的值,表示 “ 每 …”例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 例如1
: 3 * * * * command : 每小时第三分钟执行任务(每小时候任务),如果都 是星号,则找出最小一级的星号为标准。 例如2
: 3 4 * * 5 command : 每周执行一次;每周5的4点3分执行任务(每周任务)例如3
: 5 6 7 * * command : 每月执行一次;每月的7号的6点5分执行任务 (每月任务)例如4
:7 8 9 10 * command : 每年执行一次,每年的10月9号8点分执行任务(每年任务)逗号(,
):指定时间点离散取值,可以用逗号隔开的值指定一个列表范围,中间没有空格 ,例如,“1,2,5,7,8,9”。
例如5
:9 8 * * 3,7 command : 每周三和周日8点9分执行任务一次。例如6
:0 8,20 * * 3,7 command : 每周三和周日8点,和20点执行任务一次。中杠(-
):连续取值,可以用整数之间的中杠表示一个整数范围,来表示 时间的开头与结束。例如“2-6”表示“2,3,4,5,6” 。
例如7
: 0 9-18 * * 1-5 command : 每周一到周五工作内的每小时执行任务一次(9点-18点)正斜线(/
):可以用正斜线指定时间的间隔频率,即 /# ,#即步长。例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
例如8
: /5 * * * command : 每5分钟执行任务一次 ( 每分钟任务)例如9
: * * * * * command : 每分钟r执行任务一次。注意:
分钟
, 如果想完成 秒
级任务,得需要额外借助于其他机制来实现;利用shell脚本的循环来实现,定义成每分钟任务,再利用脚本实现在每分钟之内循环执行多次,从而实现 秒
级任务。命令格式:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ] [-i]
命令功能:
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
常用选项:
-u user
:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
-file
:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e
:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l
:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r
:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i
:在删除用户的crontab文件时给确认提示。
注意:
1 . 运行结果以由邮件通知给当前用户,如何拒绝接收邮件:
2 . 在定义command 时,如果命令需要用到 %
,则需要对其转义;但放置于单引号中的%号不用户转义亦可。
3 . 如果某任务在指定的时间因关机未能执行,下次开机不会自动执行。只会到了下一个时间执行的时候,才会执行。如果希望某时间因故未能按时执行,下次开机后无论是否到了相应赶时间做要执行一次,可以使用 anacron
命令来实现 。
例题:制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
[root@localhost ~]# date +%F\ %T
2018-06-10 17:07:16
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
10 3,5 * * 3 date +%F\ %T
~
[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l
10 3,5 * * 3 date +%F\ %T
[root@localhost ~]#
应用程序接口分为:
API
(Application Program Interface)和ABI
(Application Binary Interface)两类。
ABI(Application Binary Interface)
:描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。API(Application Programming Interface
:定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任务系统中编译。
执行文件格式:
- Unix-like : ELE
- Windows : EXE
- Linux : Cywin
- Windows : WinE
- 源代码 :文本格式的程序代码。
- 二进制格式: 文本格式的程序代码–>编译器–二进制格式(二进制程序,库文件,配置文件,帮助文件)
项目构建工具 :
c/c++ --> make ; java--> maven
作用: 源代码–>目标二进制格式–>组织成为一个或有限几个”包“ ,能够实现 程序的安装,升级,卸载,查询和校验,数据库维护等功能。
系统 | 程序包管理器 | 程序包扩展名 |
---|---|---|
debian | dpt , dpkg | .deb |
RHEL | rpm | .rpm |
S.u.S.E | rpm | .rpm |
Gentoo | port | |
Archlinux | …. | …. |
程序包类型 | 命名格式 |
---|---|
源代码 | name-VERSION.tar.gz |
源代码 | VERSION:major.minor.release |
rpm | name-VERSION-release.arch.rpm |
rpm | VERSION:major.minor.release |
rpm | release.arch.rpm 包的发行号 |
rpm | release.os.2.el7.i386.rpm |
常用架构 :(
architecture
):i386
,x64(amd64)
,ppc(powerpc)
,noarch
(无平台限制)
function
-VERSION-release.arch.rpmfunction包括:
devel
,utils
,libs
依赖关系:
前端工具 : 自动解决依赖关系
-yum
: rhel系列rpm管理的前端工具
apt-get(apt-cache)
: debian系列deb包的管理器的前端式具。zypper
: S.uS.E的rpm的管理前端工具。dnf
: fedora 22+以后的系统上的rpm包管理器的前端 工具。功能 : 将编译好的应用程序的各组文件打包成一个或几个程序包文件。从而更方便地实现程序包的安装,升级,查询和卸载等管理的操作。
/var/lib/rpm
下 1 . 系统发行版的光盘或官方的文件服务器(或镜像站点),如国内常用的镜像站点:
2 . 项目的官方网站
3 . 第三方组织
建议:校验,检查其合法性。 1,来源的合法性;2,程序包的完整性。
RPM是
RedHat Package Manager
(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”.
rpm命令管理程序包的功能包括:安装,升级,卸载,查询和校验,数据库维护等等。
RPM软件的安装、删除、更新只有
root
权限才能使用;对于查询功能任何用户都可以操作;如果普通用户拥有安装目录的权限,也可以进行安装;
rpm [OPTION] [PACKAGE_FILe]
-i ; --install
-U ; --update or -F ; --Freshen
-e ; --erase
-q ; --query
-V ; --verify
--builddb ; --initdb
rpm { -i | –install } [install-options] PACKAGE_FILE …
-v
: verbose ,详细信息。-vv
:更详细的输出信息。[Install_Option]
-h
: hash marks输出进条,每个#表示2%的进度。rpm -ivh PACKAGE _file…
--test
:测试安装,检查并报告依赖关系及冲突消息等。--nodeps
:忽略依赖关系。 不建议这么做。--replacekgs
:重新安装。--noscripts
:不运行脚本。--nosignature
:不检查包签名信息,不检查 来源全法性。--nodigest
:不检查包完整性信息。
注意:
rpm可以自带脚本。常用的脚本可分为四类:
- preinstall:安装过程开始之前运行的脚本,%pre , –nopre
- postinstall :安装过程完成之后运行的脚本 ,%post , –nopost
- preuninstall : 卸载过程真正开始执行之前运行的脚本, %preun , –nopreun
- postuninstall :卸载过程完成之后运行的脚本, %postun, –nopostun
例如:
[root@caibird ~]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm
Preparing... ########################################### [100%]
1:zsh ########################################### [100%]
[root@caibird ~]# rpm -q zsh-4.3.11-4.el6.centos.2.x86_64.rpm
package zsh-4.3.11-4.el6.centos.2.x86_64.rpm is not installed
[root@caibird ~]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm
Preparing... ########################################### [100%]
package zsh-4.3.11-4.el6.centos.2.x86_64 is already installed
[root@caibird ~]# rpm -q zsh-4.3.11-4.el6.centos.2.x86_64.rpm
package zsh-4.3.11-4.el6.centos.2.x86_64.rpm is not installed
rpm {-U | –upgrade} [install-options] PACKAGE_FILE …
格式 :
rpm -Uvh PACKAGE_FILE…
-U
:升级或安装。 rpm {-F | –freshen} [install-options] PACKAGE_FILE …
-F
:升级。 [install-options]:
--oldpackage
:降级。--force
:强制升级。注意:
- a, 不要对内核做升级操作。linux支持多内核并存。因此,可直接安装新版本内核。
- b .如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重名(FILENAME.rpmnew)后提供。
rpm {-e | –erase} [–allmatches] [–justdb] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
格式:
rpm { -e | –erase } [erase-option] PACKAGE_name…
--allmatches
:卸载所有匹配指定名称的程序包的各 版本。--nodeps
:忽略依赖关系。--test
: 测试卸载。dry run 模式。例如:
[root@caibird ~]# rpm -e --test tree
[root@caibird ~]# rpm -q tree
tree-1.5.3-3.el6.x86_64
[root@caibird ~]# rpm -e tree
[root@caibird ~]# rpm -q tree
package tree is not installed
[root@caibird ~]#
rpm {-q | –query} [ select-options] [query-options]
格式:
rpm {q | –query } [select-options] [ query-options]
PACKAGE_NAME
:查询指定的程序包是否已经安装,及其版本号。-a,--all
: 查询所有已经安装过的包。-f FILE
:查询指定的文件由哪个安装包生成。-p,--package PACKAGE-file
: 用于实现未安装的程序包执行查询操作。--whatprovides CAPABILITY
:查询指定的CAPABILITY由哪个程序包提供。--whatrequires CAPABILITY
:查询指定的CAPABILITY被哪个包所依赖。--changelog
:查询rpm包的changelog。-l, --list
: 程序安装产生的所有文件列表。-i,--info
:程序包相关信息,版本号,大小,所属的包组,等等。-c, --configfiles
:查询指定的程序包提供的配置文件。-d, --docfiles
: 查询指定的程序包提供的文档。--provides
:列出指定的程序包所提供的所有的CAPABILITY。-R, --requires
查询一些常用 用法:
-qi PACKAGE
-qf FILE
-ql PACKAGE
-qc PACKAGE
-qd PACKAGE
-qpi PACKAGE-FILE
-qpc PACKAGE-FILE
例如:
[root@caibird ~]# rpm -q -f /etc/issue # /ect/issue 是由哪个程序产生的
centos-release-6-9.el6.12.3.x86_64
[root@caibird ~]#
[root@caibird ~]# rpm -q -c bash # bash程序产生的配置文件
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
[root@caibird ~]#
[root@caibird ~]# rpm -q -i bash # bash程序包相关信息,版本号,大小,所属的包组,等等。
Name : bash Relocations: (not relocatable)
Version : 4.1.2 Vendor: CentOS
Release : 48.el6 Build Date: 2017年03月23日 星期四 08时17分20秒
Install Date: 2018年04月29日 星期日 23时12分50秒 Build Host: c1bm.rdu2.centos.org
Group : System Environment/Shells Source RPM: bash-4.1.2-48.el6.src.rpm
Size : 3142529 License: GPLv3+
Signature : RSA/SHA1, 2017年03月23日 星期四 22时59分39秒, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem .centos.org>
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.
[root@caibird ~]#
[root@caibird ~]# rpm -q -l bash # bash程序包安装后产生的文件列表 。
/bin/bash
/bin/sh
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
/usr/bin/bashbug-64
/usr/share/doc/bash-4.1.2/COPYING
/usr/share/info/bash.info.gz
/usr/share/locale/af/LC_MESSAGES/bash.mo
/usr/share/locale/bg/LC_MESSAGES/bash.mo
/usr/share/locale/ca/LC_MESSAGES/bash.mo
/usr/share/locale/cs/LC_MESSAGES/bash.mo
/usr/share/locale/de/LC_MESSAGES/bash.mo
/usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo
/usr/share/locale/en@quot/LC_MESSAGES/bash.mo
/usr/share/locale/eo/LC_MESSAGES/bash.mo
/usr/share/locale/es/LC_MESSAGES/bash.mo
/usr/share/locale/et/LC_MESSAGES/bash.mo
/usr/share/locale/fi/LC_MESSAGES/bash.mo
/usr/share/locale/fr/LC_MESSAGES/bash.mo
/usr/share/locale/ga/LC_MESSAGES/bash.mo
/usr/share/locale/hu/LC_MESSAGES/bash.mo
/usr/share/locale/id/LC_MESSAGES/bash.mo
/usr/share/locale/ja/LC_MESSAGES/bash.mo
/usr/share/locale/lt/LC_MESSAGES/bash.mo
/usr/share/locale/nl/LC_MESSAGES/bash.mo
/usr/share/locale/pl/LC_MESSAGES/bash.mo
/usr/share/locale/pt_BR/LC_MESSAGES/bash.mo
/usr/share/locale/ro/LC_MESSAGES/bash.mo
/usr/share/locale/ru/LC_MESSAGES/bash.mo
/usr/share/locale/sk/LC_MESSAGES/bash.mo
/usr/share/locale/sv/LC_MESSAGES/bash.mo
/usr/share/locale/tr/LC_MESSAGES/bash.mo
/usr/share/locale/vi/LC_MESSAGES/bash.mo
/usr/share/locale/zh_TW/LC_MESSAGES/bash.mo
/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
/usr/share/man/man1/bashbug.1.gz
/usr/share/man/man1/bg.1.gz
/usr/share/man/man1/bind.1.gz
/usr/share/man/man1/break.1.gz
/usr/share/man/man1/builtin.1.gz
/usr/share/man/man1/builtins.1.gz
/usr/share/man/man1/caller.1.gz
/usr/share/man/man1/cd.1.gz
/usr/share/man/man1/command.1.gz
/usr/share/man/man1/compgen.1.gz
/usr/share/man/man1/complete.1.gz
/usr/share/man/man1/compopt.1.gz
/usr/share/man/man1/continue.1.gz
/usr/share/man/man1/declare.1.gz
/usr/share/man/man1/dirs.1.gz
/usr/share/man/man1/disown.1.gz
/usr/share/man/man1/enable.1.gz
/usr/share/man/man1/eval.1.gz
/usr/share/man/man1/exec.1.gz
/usr/share/man/man1/exit.1.gz
/usr/share/man/man1/export.1.gz
/usr/share/man/man1/fc.1.gz
/usr/share/man/man1/fg.1.gz
/usr/share/man/man1/getopts.1.gz
/usr/share/man/man1/hash.1.gz
/usr/share/man/man1/help.1.gz
/usr/share/man/man1/history.1.gz
/usr/share/man/man1/jobs.1.gz
/usr/share/man/man1/let.1.gz
/usr/share/man/man1/local.1.gz
/usr/share/man/man1/logout.1.gz
/usr/share/man/man1/mapfile.1.gz
/usr/share/man/man1/popd.1.gz
/usr/share/man/man1/pushd.1.gz
/usr/share/man/man1/read.1.gz
/usr/share/man/man1/readonly.1.gz
/usr/share/man/man1/return.1.gz
/usr/share/man/man1/set.1.gz
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/shift.1.gz
/usr/share/man/man1/shopt.1.gz
/usr/share/man/man1/source.1.gz
/usr/share/man/man1/suspend.1.gz
/usr/share/man/man1/times.1.gz
/usr/share/man/man1/trap.1.gz
/usr/share/man/man1/type.1.gz
/usr/share/man/man1/typeset.1.gz
/usr/share/man/man1/ulimit.1.gz
/usr/share/man/man1/umask.1.gz
/usr/share/man/man1/unalias.1.gz
/usr/share/man/man1/unset.1.gz
/usr/share/man/man1/wait.1.gz
[root@caibird ~]#
rpm { -V| –verify} [select-options] [verify-options]
校验:包括来源合法性验证和完整性验证:
来源合法性验证包括:数字签名和完整性验证。
数字签名:用自己的私钥去加密对应数据的特征码。
S file Size differs # 文件大小
M Mode differs (includes permissions and file type) # 模式(包括许可和文件类型)
5 digest (formerly MD5 sum) differs # MD5校验和
D Device major/minor number mismatch # 设备
L readLink(2) path mismatch # 符号连接
U User ownership differs # 用户
G Group ownership differs # 组
T mTime differs # 修改时间
P caPabilities differ
RPM-GPG-KEY-CENTOS-7
; centos 6 RPM-GPG-KEY-CentOS-6
rpm -import /media/cdrom/RPM-GPG-KEY-CentOS
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
; centos7 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证: 1.。安装此组织签名的程序时,会自动执行验证。2。 手动验证: rpm -k PACKAGE-FILe
.
rpm 管理数据库路径:
/var/lib/rmp/
; 查询操作是通过此数据库进行。
man rpm
man rpmdb
rpm { --initdb | --rebuilddb}
--initdb
:初始化数据库,当前无任何数据库可实现初始化创建一个新的;当前有时不执行任何操作。--rebuilddb
:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建。简介
- Yum(全称为
Yellow dog Updater, Modified
)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。- yum 属于 c/s 架构,即client and server.
yum的工作原理
yum的工作需要两部分来合作,一部分是yum服务器端,还有就是client的yum工具客户端。
所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,例如:
ftp://[path],nft:://[path]
或者httpd://[path]
的形式都可以,本地刚使用file://[localpath]
。yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号,conf文件,binary信息,以及很关键的依赖信息。在yum服务器上提供了createrepo
工具,用于把rpm包的基本概要信息做成一张”清单”,这张”清单”“就是描述每个rpm包的spec文件中信息。
yum repository (yum repo) :存储了众多的rpm包,以及包相关的元数据文件(放置于特定的目录下:repodata
)
client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。yum会定期去”更新”yum服务器上的rpm包”清单”,然后把”清单”下载保存到yum自己的cache里面,根据
/etc/yum.conf
里配置(默认是在/var/cache/yum
下面),每次调用yum装包的时候都会去这个cache目录下去找”清单”,根据”清单”里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,然后再去yum服务器下载rpm包安装。(前提是不存在rpm包的cache)
/etc/yum.conf
:为所有仓库提供公共配置的。
/ect/yum.repos.d/*.repo
:为某一个仓库提供特有的配置的。
[repositoryID]
name=some name for this repository # 定义仓库的名字
baseurl=URL://path/to/repository/ # '='两边不能有空格,否则会出现语法错误,可以指定多个URL。
enable={1|0} # 是否启用此仓库。默认启用, 为 1。
gpgcheck={1|0} # 是否对仓库所有程序包在安装之前检查完整性,来源合法性。
repo-gpgcheck={1|0} # 是否对repo源数据文件检查签名信息。
gpgkel=URL # 密钥文件的访问路径,GPG的密钥文件 -->RPM-GPG-KEY-CENTOS-7
enablegroups={1|0} #是否在仓库使用组来批量管理程序包。
failovermethod={roundrobin|priority} #故障转移方法,随机选一个(roundrobin)优先级自上而下(priority),默认为roundrobin,意为随机。
cost=1000 #开销数字,默认为1000。
[root@caibird cdrom]# cat /etc/yum.repos.d/CentOS-Base.repo
[base]
name=local repository centos6
baseurl=file:///mnt/cdrom
enable=1
gpgcheck=1
pgpkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[root@caibird cdrom]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
仓库标识 仓库名称 状态
base local repository centos6 6,706
repolist: 6,706
[root@caibird cdrom]#
[root@localhost yum.repos.d]# vim CentOS-Base.repo
[root@localhost yum.repos.d]# yum repolist
已加载插件:fastestmirror, langpacks
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
源标识 源名称 状态
!base network repository centos7 9,911
repolist: 9,911
[root@localhost yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
base | 3.4 kB 00:00:00
(1/4): base/prestodelta | 255 kB 00:00:00
(2/4): base/filelists_db | 1.5 MB 00:00:05
(3/4): base/other_db | 248 kB 00:00:00
(4/4): base/primary_db | 2.7 MB 00:00:05
Loading mirror speeds from cached hostfile
元数据缓存已建立
[root@localhost yum.repos.d]# cat CentOS-Base.repo
[base]
name=network repository centos7
baseurl=https://mirrors.aliyun.com/centos/7.5.1804/updates/x86_64/
enabel=1
gpgcheck=0
[root@localhost yum.repos.d]#
-h, --help
: # 显示此帮助消息并退出-t, --tolerant
:# 忽略错误-C, --cacheonly
: # 完全从系统缓存运行,不升级缓存-c [config file], --config=[config file]
: #配置文件路径-R [minutes], --randomwait=[minutes]
: # 命令最长等待时间-d [debug level], --debuglevel=[debug level]
: # 调试输出级别--showduplicates
: # 在 list/search 命令下,显示源里重复的条目-e [error level], --errorlevel=[error level]
:# 错误输出级别--rpmverbosity=[debug level name]
:# RPM 调试输出级别-q, --quiet
:# 静默执行-v, --verbose
:# 详尽的操作过程-y, --assumeyes
:# 回答全部问题为是--assumeno
:# 回答全部问题为否--version
:# 显示 Yum 版本然后退出--installroot=[path]
:# 设置安装根目录--enablerepo=[repo]
:#启用一个或多个软件源(支持通配符)--disablerepo=[repo]
:#禁用一个或多个软件源(支持通配符)-x [package], --exclude=[package]
:# 采用全名或通配符排除软件包--disableexcludes=[repo]
:# 禁止从主配置,从源或者从任何位置排除--disableincludes=[repo]
:# disable includepkgs for a repo or for everything--obsoletes
:# 更新时处理软件包取代关系--noplugins
:# 禁用 Yum 插件--nogpgcheck
:# 禁用 GPG 签名检查--disableplugin=[plugin]
:# 禁用指定名称的插件--enableplugin=[plugin]
:# 启用指定名称的插件--skip-broken
:# 忽略存在依赖关系问题的软件包--color=COLOR
:# 配置是否使用颜色--releasever=RELEASEVER
:# 在 yum 配置和 repo 文件里设置 $releasever 的值--downloadonly :# 仅下载而不更新
--downloaddir=DLDIR
:# 指定一个其他文件夹用于保存软件包--setopt=SETOPTS
:# 设置任意配置和源选项--bugfix
:# Include bugfix relevant packages, in updates--security
:# Include security relevant packages, in updatescheck-update
: # 检查可更新的所有软件包update
: #下载更新系统已安装的所有软件包upgrade
: #大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级install
: #安装新软件包update
: #更新指定的软件包remove
: #卸载指定的软件包groupinstall
: #安装指定软件组中的软件包groupupdate
: #更新指定软件组中的软件包groupremove
: #卸载指定软件组中的软件包grouplist
: # 查看系统中已经安装的和可用的软件组list
: #列出资源库中所有可以安装或更新以及已经安装的rpm包list
: #列出资源库中与正则表达式匹配的可以安装或更新以及已经安装的rpm包list available
: #列出资源库中所有可以安装的rpm包list available
: #列出资源库中与正则表达式匹配的所有可以安装的rpm包list updates
: #列出资源库中所有可以更新的rpm包list updates
: #列出资源库中与正则表达式匹配的所有可以更新的rpm包list installed
: # 列出资源库中所有已经安装的rpm包list installed
: #列出资源库中与正则表达式匹配的所有已经安装的rpm包list extras
: #列出已经安装的但是不包含在资源库中的rpm包list extras
: # 列出与正则表达式匹配的已经安装的但是不包含在资源库中的rpm包list recent
: #列出最近被添加到资源库中的软件包search
: #检测所有可用的软件的名称、描述、概述和已列出的维护者,查找与正则表达式匹配的值provides
: #检测软件包中包含的文件以及软件提供的功能,查找与正则表达式匹配的值clean headers
: #清除缓存中的rpm头文件clean packages
: # 清除缓存中rpm包文件clean all
: #清除缓存中的rpm头文件和包文件deplist
: # 显示软件包的依赖信息注意: 当第一次使用yum 或yum 资源库有更新时,yum 会自动下载所有所需的he ade rs放置于 /var/cache /yum 目录下,所需时间可能较长。还可以使用 yum info 命令列出包信息,yum info 可用的参数与 yum list 的相同。 yum 命令还可以使用 -y 参数用于用 ye s 回答命令运行时所提出的问题,比如 yum -y install vsftpd,这样在安装软件的时候就不用输入yes/y了。
[centos 7]
name=
baseurl=
gpgcheck=
enable=
yum repolist
命令列出所有可用的仓库,第一次用的时候会先从服务器下载元数据 base/primary_db
到本地。yum makecache
,命令,运行yum makecache生成缓存。简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed : Stream Editor
,流编辑器。是一种以行为单位处理的文字编辑器。
grep , egrep , fgrep
:文本过滤器。
awk
:文本格式化工具,报告生成器。
sed [OPTION]… ‘script’ [input=file]…
b . 单地址:
c . 地址范围
d. 步进
d
:删除,整行删除。 p
: 显示模式空间中的内容。a \text
:在行后面追加文本’text’,支持使用\n实现多行追加。i \text
:在行前面插入文本’text’,支持使用\n实现 多行插入。c\ text
:把匹配到的行替换为此处指定的文本’text‘。w /PATH/TO/SOMEFILE
:保存模式空间匹配到的行到指定的文件中。r /PATH/TO/SOMEFILE
:读取指定文件的内容至当前文件被模式匹配到的行后面,实现文件合并。=
:为模式匹配到的行打印行号。!
:条件取反。 地址定界!编辑命令s///
: 查找替换,其分隔符可以自行指定,常用的有s@@@ , S### 等。g
: 全局替换。w /PATH/TO/FILENAME
: 将替换成功的结果保存至指定文件中。p
: 显示替换成功的行。例子:
sed -n '2p' test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息,若没加-n,则打印文件的所有信息而不是匹配信息)
sed -n '1,4p' test.txt 打印第一行到第四行的信息
sed -n '/los/p' test.txt模式匹配los,并打印出来
sed -n '2,/los/p' test.txt 从第二行开始。。知道匹配第一个los
sed -n '/^$/p' test.txt 匹配空行
sed -n -e '/^$/p' -e '/^$/=' test.txt 打印空行及行号
sed -n '/good/a\morning' test.txt 在匹配到的good后面附加morning
sed -n '/good/i\morning' test.txt 在匹配到的good前面插入morning
sed -n '/good/c\morning' test.txt 将匹配到的good替换成morning
sed '1,2d' test.txt 删除第1和2行
sed 's/good/good morning/g' test.txt 匹配good并替换成goodmorning
send 's/good/& hello /p' test.txt 匹配到good就在其后面加上hello
send 's/good/ hello &/p' test.txt 匹配到good就在其前面加上hello
示例
sed -n 'n;p' file : #显示偶数行
sed ' 1!G;h;$1d' file : #逆序显示
sed '$!d' file : #取出最后一行
sed '$!N;$!D' file : #取出最后二行
sed '/^$/d;G' file : #删除原有的所有空行,而后为所有的非空白添加一个空白行。
sed 'n;d' file : #显示奇数行
sed 'G' file : #在原有的每行后方添加一个空白行。
[root@caibird ~]# cat -n /etc/fstab
1
2 #
3 # /etc/fstab
4 # Created by anaconda on Sun Apr 29 23:12:37 2018
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=586c8191-c63f-4263-8eed-01f0655513f2 / ext4 defaults 1 1
10 UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot ext4 defaults 1 2
11 UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap swap defaults 0 0
12 tmpfs /dev/shm tmpfs defaults 0 0
13 devpts /dev/pts devpts gid=5,mode=620 0 0
14 sysfs /sys sysfs defaults 0 0
15 proc /proc proc defaults 0 0
[root@caibird ~]# cat -n /etc/fstab | sed 'G' #在原文的第一行后方添加一个空白行
1
2 #
3 # /etc/fstab
4 # Created by anaconda on Sun Apr 29 23:12:37 2018
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=586c8191-c63f-4263-8eed-01f0655513f2 / ext4 defaults 1 1
10 UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot ext4 defaults 1 2
11 UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap swap defaults 0 0
12 tmpfs /dev/shm tmpfs defaults 0 0
13 devpts /dev/pts devpts gid=5,mode=620 0 0
14 sysfs /sys sysfs defaults 0 0
15 proc /proc proc defaults 0 0
[root@caibird ~]#
[root@caibird ~]# cat -n /etc/fstab | sed -n '1,5p' #打印第一行到第五行
1
2 #
3 # /etc/fstab
4 # Created by anaconda on Sun Apr 29 23:12:37 2018
5 #
[root@caibird ~]#
[root@caibird ~]# cat -n /etc/fstab | sed '1,5d' #删除第1到5行内容
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=586c8191-c63f-4263-8eed-01f0655513f2 / ext4 defaults 1 1
10 UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot ext4 defaults 1 2
11 UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap swap defaults 0 0
12 tmpfs /dev/shm tmpfs defaults 0 0
13 devpts /dev/pts devpts gid=5,mode=620 0 0
14 sysfs /sys sysfs defaults 0 0
15 proc /proc proc defaults 0 0
[root@caibird ~]#
[root@caibird ~]# sed -n 3p /etc/fstab # 显示第三行
# /etc/fstab
[root@caibird ~]#
[root@caibird ~]# sed -n /^UUID/p /etc/fstab # 显示以UUID开头的行
UUID=586c8191-c63f-4263-8eed-01f0655513f2 / ext4 defaults 1 1
UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot ext4 defaults 1 2
UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap swap defaults 0 0
[root@caibird ~]#
[root@caibird ~]# cat -n /etc/fstab | sed 'n;d';=: /etc/fstab #显示奇数行并打印等号。
1
3 # /etc/fstab
5 #
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
9 UUID=586c8191-c63f-4263-8eed-01f0655513f2 / ext4 defaults 1 1
11 UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap swap defaults 0 0
13 devpts /dev/pts devpts gid=5,mode=620 0 0
15 proc /proc proc defaults 0 0
-bash: =:: command not found
[root@caibird ~]#
[root@caibird ~]# cat -n /etc/issue
1 CentOS release 6.9 (Final)
2 Kernel \r on an \m
3
[root@caibird ~]# sed s/release/banben/ /etc/issue #替换release为banben
CentOS banben 6.9 (Final)
Kernel \r on an \m
[root@caibird ~]#
[root@caibird ~]# sed /UUID/a\newUUID /etc/fstab #在文件内容UUID行下面行添加newUUID
#
# /etc/fstab
# Created by anaconda on Sun Apr 29 23:12:37 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
#
UUID=586c8191-c63f-4263-8eed-01f0655513f2 / ext4 defaults 1 1
newUUID
UUID=f971264c-f0f7-4150-a22a-914c00dcb16e /boot ext4 defaults 1 2
newUUID
UUID=e12d2a8f-f7ba-4bd3-87ae-e1b755ee627c swap swap defaults 0 0
newUUID
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@caibird ~]#