简述rpm与yum命令的常见选项,并举例:
CentOS系统上rpm命令管理程序包:
安装、升级、卸载、查询和校验、数据库维护
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安装:-i,--instal
升级:-U,--update,-F,--freshen
卸载:-e,--erase
查询:-q,--query
校验:-V,--verify
数据库维护:--rebuildb,--initdb
安装:
rpm {-i | --install} [install-options] PACKAGE_FILE...
rpm -ivh PACKAGE_FILE ...
GENERAL OPTIONS:
-v:verbose,详细信息
-vv:更详细的输出
[install-options]:
-h:hash marks 输出进度条:每个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系; 不建议;
--replacepkgs:重新安装
注意:rpm可以自带脚本;
四类:--notscripts:不运行脚本
preinstall:安装过程开始之前运行的脚本,%pre,--nopre
postinstall:安装过程完成之后运行的脚本,%post,--nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息
例1:安装
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install--options] PACKAGE_FILE ...
-U:升级或安装;
-F:升级
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
[install-options]:
--oldpackage:降级;
--force:强制升级;
注意:(1)不要对内核做升级操作;linux支持多内核版本并存,因此,直接安装新版本内核;
(2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
例2:因上一图中已安装,所以此处提示已经安装
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式(干跑)
例3:卸载
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
-a,--all:查询所有已经安装过的包;
-f FILE:查询指定的文件由哪个程序包安装生成;
-p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
--whatprovides CAPABTLITY:查询指定的CAPABILITY由哪个程序包提供;
--whatrequires CAPABILITY:查询指定的CAPAGILITY被哪个包所依赖;
[query-options]
--changelog:查询rpm包的changlog;
-l,--list:查询安装生成的所有文件列表;
-i,--info:程序包相关的信息,版本号、大小、所属的包组等;
-c,--configfiles:查询指定的程序包提供的配置文件;
-d,--docfiles:查询指定的程序包提供的文档;
--provides:列出指定的程序包提供的所有的CAPABILITY;
-R,--requires:查询指定的程序包的依赖关系;
--scripts:查看程序包自带的脚本片断;
用法:
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
-qpi PACKAGE_FILE,-qpl PACKAGE_FILE,-qpc PACKAGE_FILE,...
例4:检查已安装包的内容
例5:检查未安装包的一些内容
检验:
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
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
获取并导入信任的包制作者的密钥:
对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证:
(1)安装此组织签名的程序时,会自动执行验证;
(2)手动验证:rpm -K PACKAGE_FILE
数据库重建:
rpm管理器数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行:
获取帮助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
-initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作;
--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建
例6:重建数据库
yum repository:yum repo(yum仓库)
存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodate);
文件服务器:
ftp://
http://
fpt://
file:///
yum客户端:
配置文件:
/etc/yum.conf :为所有仓库提供公共配置
/etc/yum.repos.d/*.repo :为仓库的指向提供配置
仓库指向的定义:
[repositoryID]
name=Some name for this repository (描述)
baseurl=url://path/to/repository/ (路径,可指明多个URL)
enabled={1|0} (默认启用为1)
gpgcheck={1|0} (检查签名)
gpgkey=URL (密钥文件)
enbalegroups={1|0} (是否支持在组织上管理批量的程序包)
failovermethod={roundrobin|prioryity} (多个baseurl的选择方式)
默认为:roundrobin,意为随机挑选;
cost=
默认为1000
yum命令的用法:
yum [options] [command] [package ...]
command is of :
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
* 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]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* check
* help [command]
显示仓库列表:
repolist [all|enabled|disabled]
显示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] [...]
# yum list {available|installed}updates} [glob_exp2] [...]
安装程序包:
install package1 [package2] [...]
reinstall package1 [package2] [...] (重新安装)
升级程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
检查可用升级:
check-update
卸载程序包:
remove | erase package1 [package2] [...]
查看程序包infomation:
info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides } whatprovides feature1 [feature2] [...]
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
makecache
搜索:
search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息;
查看指定包所依赖的capabilities :
deplist package1 [package2] [...]
查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
安装及升级本地程序包:
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
包组管理的相关命令:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
yum的命令行选项:
--nogpgcheck:禁止进行gpg check;
-y:自动回答为“yes”;
-q:静默模式;
--disbalerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglog:临时启用此处指定的repo;
--noplugins:禁用所有插件;
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;
$basearch:基础平台;
$YUM0-$YUM9
http://mirrors.magedu.com/centos/$releasever/$basearch/os
自建yum仓库,分别为网络源和本地源
创建本地源yum仓库:
createrepo [options]
如何使用光盘当作本地yum仓库:
(1)挂载光盘至某目录,例如:/media/cdrom
#mount -r -t iso9660 /dev/cdrom /media/cdrom
(2)创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=若启用则需要gpgkey
gpgkey=不启用gpgcheck则无需写
enabled=默认为1 ,可不写
例:
1、创建挂载光盘的目录,并找到/etc/yum.repos.d下以.repo结尾的文件
2、编辑文件键入以下内容,gpgcheck为1时需要写入gpgkey并指明gpgkey的URL
3、makecache构建缓存并用repolist验证yum源是否配置成功
创建网络源
1、创建网络源之前建议备份/etc/yum.repo.d/CentOS-Base.repo
2下载新对应的CentOS-Base.repo 到/etc/yum.repos.d/要根据自己的版本来下载,高版本的linux不能使用低版本的yum源,可从阿里源或网易源等网站下载
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3、运行yum makecachesg生成缓存,成功则配置成功
简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
at命令:单次执行一个任务,不能周期性的自动执行
at [OPTION]... TIME
TIME:
HH:MM [YYYY-mm-dd]
noon,midnight,teatime,tomorrow
now+#:从现在起+多少时间
UNIT:minutes,hours,days,weeks
at的作业有队列,用单个字母表示,默认都使用a队列;
常用选项:
-l:查看作业队列,相当于atq
-f:/PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;
-d:删除指定的作业,相当于atrm;
-c:查看指定作业的具体内容;
-q QUEUE:指明队列;
注意:作业执行结果是以邮件发送给提交作业的用户
例:制定在16:00执行一次ls,以及-l查看任务队列
cron命令:周期性任务计划
确保crond守护进程(daemon)处于运行状态:
CentOS 7:
systemctl status crond.service
CentOS 6:
service crond status
向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令;
cron任务分为两类:
系统cron任务:主要用于实现系统自身的维护;
手动编辑:/etc/crontab文件
用户cron任务:
命令crontab命令
系统cron的配置格式 :/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
注意:
(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
注意:
(1) 每行定义一个cron任务,共6个字段;
(2) 此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;
(3) 邮件发送给当前用户;
时间表示法:
(1)特定值;
给定时间点有效取值范围内的值;
注意:day of week和day of month一般不同时使用;
(2)*
给定时间点上有效取值范围内的所有值;表“每..”
(3)离散取值:,
在时间点上使用逗号分隔的多个值;
#,#,#
(4)连续取值:-
在时间点上使用-连接开关和结束
#-#
(5)在指定时间点上,定义步长:
/#:#即步长;
注意:
(1) 指定的时间点不能被步长整除时,其意义将不复存在;
(2) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;
定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;
示例:
(1) 3 * * * *:每小时执行一次;每小时的第3分钟;
(2) 3 4 * * 5:每周执行一次;每周5的4点3分;
(3) 5 6 7 * *:每月执行一次;每月的7号的6点5分;
(4) 7 8 9 10 *:每年执行一次;每年的10月9号8点7分;
(5) 9 8 * * 3,7:每周三和周日的8点9分执行一次;
(6) 0 8,20 * * 3,7:每周三和周日的8点和20点执行一次
(7) 0 9-18 * * 1-5:每周一至周五的9点至18点之间一直执行
(8) */5 * * * *:每5分钟执行一次某任务;
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-e:编辑任务;
-l:列出所有任务;
-r:移除所有任务;即删除/var/spool/cron/USERNAME文件;
-i:在使用-r选项移除所有任务时提示用户确认;
-u user:root用户可为指定用户管理cron任务;
注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件;
(1)COMMAND > /dev/null 只收错误信息
(2)COMMAND &> /dev/null 任何信息都不通知
注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可;
1、设置脚本:
2、编辑crontab任务:
3、查看任务列表:
简述sed常用操作命令,并举例
sed命令:
sed [OPTION]... 'script' [input-file] ...
script:地址定界编辑命令
常用选项:
-n:不输出模式空间中的内容至屏幕;
-e script,--expression=script:多点编辑(多命令);
例:~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab
-f /PATH/TO/SED_SCRIPT_FILE:每行一个编辑命令;
-r,--regexp-extended:支持使用扩展正则表达式;
-i[SUFFIX],--in-place[=SUFFIX]:直接编辑原文件;
地址定界:
(1)空地址:对全文进行处理;
(2)单地址:
#:指定行
/pattern/:被此模式所匹配到的每一地;
(3)地址范围
#1,#2:#1到#2行之间
#1,+#2:#1到#1+#2之间
#,/pat1/:#到模式1之间
/pat1/,/pat2/:模式1到模式2之间
$:最后一行
(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///:查找替换,其分隔符可自行指定,常用的有s@@@,s###等;
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;
例1:删除/etc/fstab所有以UUID号开头的行
例2:删除/etc/grub2.cf所有以空白符开头的行的行首的所有空白字符