Linux第五周作业

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

如果无法收到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

(1)
opfsopfs
上一篇 2018-07-16
下一篇 2018-07-16

相关推荐