1、简述rpm与yum命令的常见选项,并举例
RPM:
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安装:-i, –install
升级:-U, –update, -F, –freshen
卸载:-e, –erase
查询:-q, –query
校验:-V, –verify
数据库维护:—rebuilddb, –initdb
安装:
rpm {-i|–install} [install-options] PACKAGE_FILE …
rpm -ivh PACKAGE_FILE …
]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
]# cat /etc/shells
GENERAL OPTIONS:
-v:verbose,详细信息
-vv:更详细的输出
]# rpm -e zsh
]# rpm -ivvh zsh-5.0.2-28.el7.x86_64.rpm
[install-options]:
-h:hash marks输出进度条;每个#表示2%的进度;
–test:测试安装,检查并报告依赖关系及冲突消息等;
]# rpm -ivh –test zsh-html-5.0.2-28.el7.x86_64.rpm
–nodeps:忽略依赖关系;不建议;
–replacepkgs:重新安装
(如果配置文件有误,删除后在重新安装)
注意:rpm可以自带脚本;
四类:–noscripts
preinstall:安装过程开始之前运行的脚本,%pre , –nopre
postinstall:安装过程完成之后运行的脚本,%post , –nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, –nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun , –nopostun
–nosignature:不检查包签名信息,不检查来源合法性;
–nodigest:不检查包完整性信息;
升级:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
-U:升级或安装;
-F:升级
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage:降级;
–force:强制升级;
注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
(2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …
–allmatches:卸载所有匹配指定名称的程序包的各版本;
–nodeps:忽略依赖关系
–test:测试卸载,dry run模式
查询:
rpm {-q|–query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
]# rpm -q zsh
-a, –all:查询所有已经安装过的包;
]# rpm -qa
-f FILE:查询指定的文件由哪个程序包安装生成;
]# rpm -qf /etc/fstab
-p, –package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
]# rpm -qpl zsh-5.0.2-28.el7.x86_64.rpm
]# rpm -qpi zsh-5.0.2-28.el7.x86_64.rpm
]# rpm -qpc zsh-5.0.2-28.el7.x86_64.rpm
]# rpm -qp –scripts zsh-5.0.2-28.el7.x86_64.rpm
–whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
[root@bogon ~]# rpm -q –provides zsh
config(zsh) = 5.0.2-28.el7
zsh = 5.0.2-28.el7
zsh(x86-64) = 5.0.2-28.el7
[root@bogon ~]# rpm -q –whatprovides zsh
zsh-5.0.2-28.el7.x86_64
[root@bogon ~]# rpm -q –whatprovides ‘config(zsh)’
zsh-5.0.2-28.el7.x86_64
–whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
]# rpm -q –whatrequires bash
[query-options]
–changelog:查询rpm包的changlog;
]# rpm -q –changelog zsh
-l, –list:程序安装生成的所有文件列表;
]# rpm -ql zsh
-i, –info:程序包相关的信息,版本号、大小、所属的包组,等;
]# rpm -qi zsh
-c, –configfiles:查询指定的程序包提供的配置文件;
]# rpm -qc zsh
-d, –docfiles:查询指定的程序包提供的文档;
]# rpm -qd zsh
–provides:列出指定的程序包提供的所有的CAPABILITY;
]# rpm -q –provides zsh
-R, –requires:查询指定的程序包的依赖关系;
]# rpm -qR zsh
(查询结果为CAPABILITY)
–scripts:查看程序包自带的脚本片断;
]# rpm -q –scripts zsh
用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, …
校验:
rpm {-V|–verify} [select-options] [verify-options]
]# rpm -V zsh
]# rpm -V –nofiles zsh
(Don’t verify any attributes of package files.)
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
(CAPABILITY发生改变)
]# rpm -V zsh
S.5….T. d /usr/share/doc/zsh-5.0.2/FAQ
包来源合法性验正和完整性验正:
来源合法性验正:
完整性验正:
获取并导入信任的包制作者的密钥:
对于CentOS发行版来说:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
在光盘中获取并导入信任的包制作者的密钥:
]# rpm –import RPM-GPG-KEY-CentOS-7
]# cd Packages/
]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
验正:
(1) 安装此组织签名的程序时,会自动执行验正;
(2) 手动验正:rpm -K PACKAGE_FILE
]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm
数据库重建:
rpm管理器数据库路径:/var/lib/rpm/
查询操作:通过此处的数据库进行;
获取帮助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {–initdb|–rebuilddb} [–dbpath DIRECTORY] [–root DIRECTORY]
–initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
]# mkdir /tmp/rpm
]# rpm –initdb –dbpath=/tmp/rpm
]# ls /tmp/rpm/
–rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
]# rpm –rebuilddb –dbpath=/tmp/rpm
]# ls /tmp/rpm/
YUM:
yum命令的用法:
yum [options] [command] [package …]
显示仓库列表:
repolist [all|enabled|disabled]
(默认是enabled)
显示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] […]
]# yum list php*
# yum list {available|installed|updates} [glob_exp1] […]
(available表示仓库中有但尚未安装的)
安装程序包:
install package1 [package2] […]
reinstall package1 [package2] […] (重新安装)
升级程序包:
update [package1] [package2] […]
downgrade package1 [package2] […] (降级)
检查可用升级:
check-update
卸载程序包:
remove | erase package1 [package2] […]
查看程序包information:
info […]
]# yum info python
查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] […]
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
makecache
搜索:
search string1 [string2] […]
以指定的关键字搜索程序包名及summary信息;
查看指定包所依赖的capabilities:
deplist package1 [package2] […]
]# yum deplist python
查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
]# yum history packages-list python
]# yum history list
安装及升级本地程序包:
* localinstall rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use install)
]# yum localinstall zsh-5.0.2-28.el7.x86_64.rpm
* localupdate rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use update)
(在centos6及以上版本中,可以直接使用yum install来安装rpm包)
包组管理的相关命令:
* groupinstall group1 [group2] […]
]# yum groupinstall “Development Tools”
* groupupdate group1 [group2] […]
* grouplist [hidden] [groupwildcard] […]
]# yum grouplist
* groupremove group1 [group2] […]
* groupinfo group1 […]
]# yum groupinfo “Development Tools”
yum的命令行选项:
–nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q:静默模式;
–disablerepo=repoidglob:临时禁用此处指定的repo;
]# yum –disablerepo=base install tree
–enablerepo=repoidglob:临时启用此处指定的repo;
]# yum –enablerepo=base install tree
注意:“base”为repo_name,在/etc/yum.repos.d/xxxxxx.repo文件里,名字为[base]的仓库,并且当enabled=0时,安装包如果报错,建议把yum源换成官方的
–noplugins:禁用所有插件;
2、自建yum仓库,分别为网络源和本地源
创建yum仓库:
createrepo [options] <directory>
]# yum install createrepo
]# mkdir -p /yum/repo
]# cp /media/cdrom/Packages/*.rpm /yum/repo
]# cd /yum/repo
]# createrepo ./
]# cd repodata
]# ls
(repodata目录里有一个以.xml结尾的文件,此文件就是缓存文件,是本地缓存与文件服务器上的.xml校验的文件)
]# cd /etc/yum.repos.d/
]# vim centos-local.repo
[base]
name=CentOS7 Local
baseurl=file:///yum/repo
gpgcheck=1
]# yum repolist
]# yum install zsh
网络源为:baserul指向网络URL,例如:https://opsx.alibaba.com/mirror
3、简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
未来的某时间点执行一次某任务:at, batch
周期性运行某任务:crontab
两种执行结果:会通过邮件发送给用户
at命令:
at [OPTION]… TIME
TIME:
HH:MM [YYYY-mm-dd]
noon(中午12点),midnight(晚上12点), teatime(下午4点)
tomorrow
now+#
UNIT:minutes, hours, days, OR weeks
]# at now+1min
at> ls /var
at> <EOT>
(ctrl+d提交)
]# at -l
(列出此前提交的任务)
如果无法收到mail,需要启动atd服务,在centos7中启动方法如下:]# systemctl start atd
at的作业有队列,用单个字母表示,默认都使用a队列;
常用选项:
-l:查看作业队列,相当于atq
]# at -l
-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;
]# at -f at.task now+5min
-d:删除指定的作业,相当于atrm;
]# at -l
]# at -d 4
-c:查看指定作业的具体内容;
]# at -c 5
-q QUEUE:指明队列;
]# at -f at.task now+5min -q b
]# at -l
周期性任务计划:cron
服务程序:
cronie:主程序包,提供了crond守护进程及相关辅助工具;
确保crond守护进程(daemon)处于运行状态:
CentOS 7:
systemctl status crond.service
Active: active (running) … …
CentOS 6:
service crond status
… is running
向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令;
cron任务分为两类:
系统cron任务:主要用于实现系统自身的维护;
手动编辑:/etc/crontab文件
用户cron任务:
命令:crontab命令
系统cron的配置格式:/etc/crontab
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
# | | | | |
# * * * * * 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) 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;
定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;
示例:
(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:每周三和周日;
(6) 0 8,20 * * 3,7:
(7) 0 9-18 * * 1-5:
(8) */5 * * * *:每5分钟执行一次某任务;
(9) */7 * * * *: 每7分钟执行一次某任务,最后4分钟执行一次;
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
注意:(1)为输出真重定向到“黑洞中”;(2)为输出无论真假都定向到“黑洞”中,以(2)为例,当执行一个命令,如果这个命令写错,比如ls写成lssss,此时系统无法识别这个命令,所以就不会执行命令之后的内容了,此时会发一封邮件到用户账号中,再比如,如果启动一个服务,此时服务故障无法开启,虽然错误,但命令能够从头到尾执行一遍,所以最后会重定向到“黑洞中”,并不会发送邮件到用户账号中;
注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可;
]# crontab -l
10 3,5 * * 3 echo “$(date +’\%F \%T’)” >>/tmp/a.txt
4、简述sed常用操作命令,并举例
sed [OPTION]… ‘script’ [input-file] …
script:
地址定界编辑命令
常用选项:
-n:不输出模式空间中的内容至屏幕;
]# sed -n ‘/^#/d’ /etc/fstab
]# sed -n ‘1~2p’ /etc/fstab
]# sed -n ‘/^[^#]/p’ /etc/fstab
-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) 地址范围
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/
$:最后一行;
(4) 步进:~
1~2:所有奇数行
2~2:所有偶数行
编辑命令:
d:删除;
]# sed ‘1,5d’ /etc/fstab
]# sed ‘/^#/d’ /etc/fstab
]# sed ‘3d’ /etc/fstab
]# sed ‘1~2d’ /etc/fstab
p:显示模式空间中的内容;
]# sed ‘1~2p’ /etc/fstab
a \text:在行后面追加文本“text”,支持使用\n实现多行追加;
]# sed ‘3a\new line’ /etc/fstab
]# sed ‘/^UUID/a\NEW LINE’ /etc/fstab
i \text:在行前面插入文本“text”,支持使用\n实现多行插入;
]# sed ‘3i\new line’ /etc/fstab
c \text:把匹配到的行替换为此处指定的文本“text”;
]# sed ‘/^UUID/c\NEW LINE’ /etc/fstab
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
]# sed ‘/^[^#]/w/tmp/fstab.new’ /etc/fstab
r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
]# sed ‘3r/etc/issue’ /etc/fstab
]# sed ‘/^UUID/r/etc/issue’ /etc/fstab
=:为模式匹配到的行打印行号;
]# sed ‘/^UUID/=’ /etc/fstab
!:条件取反;
地址定界!编辑命令;
]# sed ‘/^#/!d’ /etc/fstab
s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/103064