1、简述rpm与yum命令的常见选项,并举例

RPM命令:

rpm  [OPTIONS]  [PACKAGE_FILE]

安装:-i, --install 升级:-U, --update, -F, --freshen 卸载:-e, --erase 查询:-q, --query 校验:-V, --verify 数据库维护:--builddb, --initdb

安装:

命令格式:
rpm {-i|--install} [install-options] PACKAGE_FILE ...		
安装选项:
-v:verbose,详细信息
-vv:更详细的输出
-h:hash marks输出进度条;每个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系;不建议;
--replacepkgs:重新安装
--noscripts:不执行程序包脚本
		preinstall:安装过程开始之前运行的脚本,%pre , --nopre
		postinstall:安装过程完成之后运行的脚本,%post , --nopost
		preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreun 
		postuninstall:卸载过程完成之后运行的脚本,%postun , --nopostun						
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;
示例:
[root@centos7 ~]# rpm -ivh lrzsz-0.12.20-36.el7.x86_64.rpm
准备中...                          ################################# [100%]
	软件包 lrzsz-0.12.20-36.el7.x86_64 已经安装
[root@centos7 ~]# 

升级:

命令格式:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...			

卸载:

命令格式:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...			
选项:
--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式
示例:
[root@centos7 ~]# rpm -evh lrzsz-0.12.20-36.el7.x86_64
准备中...                          ################################# [100%]
正在清理/删除...
   1:lrzsz-0.12.20-36.el7             ################################# [100%]
[root@centos7 ~]# 

查询:

命令格式:
rpm {-q|--query} [select-options] [query-options]
选项
[select-options]
		-a, --all:查询所有已经安装过的包;
		-f  FILE:查询指定的文件由哪个程序包安装生成;
		-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
		--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
		--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
[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, ...

[root@centos7 ~]# rpm -ql lrzsz-0.12.20-36.el7.x86_64
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz

[root@centos7 ~]# rpm -qf /usr/bin/sz
lrzsz-0.12.20-36.el7.x86_64

[root@centos7 ~]# rpm -qi lrzsz-0.12.20-36.el7.x86_64
Name        : lrzsz
Version     : 0.12.20
Release     : 36.el7
Architecture: x86_64
Install Date: 2018年11月21日 星期三 12时31分49秒
Group       : Applications/Communications
Size        : 184846
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 11时35分32秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : lrzsz-0.12.20-36.el7.src.rpm
Build Date  : 2014年06月10日 星期二 07时29分11秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://×××w.ohse.de/uwe/software/lrzsz.html
Summary     : The lrz and lsz modem communications programs
Description :
Lrzsz (consisting of lrz and lsz) is a cosmetically modified
zmodem/ymodem/xmodem package built from the public-domain version of
the rzsz package. Lrzsz was created to provide a working GNU
copylefted Zmodem solution for Linux systems.

[root@centos7 ~]# rpm -qd lrzsz-0.12.20-36.el7.x86_64
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz
[root@centos7 ~]# 

校验:

命令格式:
rpm {-V|--verify} [select-options] [verify-options]
S: file Size differs文件的容量大小是否被篡改
M:Mode differs文件的类型或文件的属性是否被改变
5:MD5 sum differs MD5这一种指纹码的内容已经不同
D:Device major/minor number mismatch装置的主/次代码已经改变
L:readLink(2) path mismatch Link路径已被改变
U:User ownership differs 文件的所属人已被改变
G:Group ownership differs 文件的所属群组已被改变
T:mTime differs 文件的创建时间已被改变
P:caPabilities differ
示例:
[root@centos7 ~]# rpm -V lrzsz-0.12.20-36.el7.x86_64
[root@centos7 ~]# echo "123" >> /usr/bin/rz
[root@centos7 ~]# rpm -V lrzsz-0.12.20-36.el7.x86_64
S.5....T.    /usr/bin/rb
S.5....T.    /usr/bin/rx
S.5....T.    /usr/bin/rz
[root@centos7 ~]# 

数据库维护

命令格式:
rpm {--initdb|--rebuilddb}
选项:
initdb: 初始化
		如果事先不存在数据库,则新建之
		否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录

YUM命令:

常见命令:
		显示仓库列表:
				repolist [all|enabled|disabled]
		显示程序包:
				list
						# yum list [all | glob_exp1] [glob_exp2] [...]
						# yum list {available|installed|updates} [glob_exp1] [...]
		安装程序包:
				install package1 [package2] [...]
				reinstall package1 [package2] [...]  (重新安装)
		 升级程序包:
				update [package1] [package2] [...]
				downgrade package1 [package2] [...] (降级)
		检查可用升级:
				check-update
		卸载程序包:
				remove | erase package1 [package2] [...]
		查看程序包information:
				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 [...]

2、自建yum仓库,分别为网络源和本地源

本地源

[root@centos7 ~]# yum repolist 
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源标识                                                                                       源名称                                                                                   状态
c7-media                                                                                     aaa                                                                                      9,591
repolist: 9,591
[root@centos7 ~]# cat /etc/yum.repos.d/bendi.repo 
[c7-media]
name=aaa
baseurl=file:///media/cdrom/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

网络源

[root@centos7 cdrom]# cat /etc/yum.repos.d/internet.repo
[internet]
name=aliyun
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
[root@centos7 cdrom]# yum repolist 
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源标识                                                                                      源名称                                                                                    状态
internet                                                                                    aliyun                                                                                    9,911
repolist: 9,911
[root@centos7 cdrom]# 

3、简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00

at:

d
命令格式:
at [option] TIME
常用选项:
		-V 显示版本信息:
		-l: 列出指定队列中等待运行的作业;相当于atq
		-d: 删除指定的作业;相当于atrm
		-c: 查看具体作业任务
		-f /path/from/somefile:从指定的文件中读取任务
		-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
TIME:
定义出什么时候进行 at 这项任务的时间
		HH:MM [YYYY-mm-dd]
		noon, midnight, teatime(4pm)
		tomorrow
		now+#{minutes,hours,days, OR weeks}
用法示例:
[root@centos7 mail]# at now+2min
at> echo hello!
at> <EOT>
job 7 at Wed Nov 21 15:38:00 2018
[root@centos7 mail]# at -l
7	Wed Nov 21 15:38:00 2018 a root
[root@centos7 mail]# at -l
您在 /var/spool/mail/root 中有新邮件
[root@centos7 mail]# mail 
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 3 messages 1 new
    1 root                  Wed Nov 21 15:27  17/595   "Output from your job        4"
    2 root                  Wed Nov 21 15:32  15/505   "Output from your job        6"
>N  3 root                  Wed Nov 21 15:38  14/488   "Output from your job        7"
& 3
Message  3:
From root@centos7.localdomain  Wed Nov 21 15:38:01 2018
Return-Path: <root@centos7.localdomain>
X-Original-To: root
Delivered-To: root@centos7.localdomain
Subject: Output from your job        7
To: root@centos7.localdomain
Date: Wed, 21 Nov 2018 15:38:01 +0800 (CST)
From: root@centos7.localdomain (root)
Status: R

hello!

& 

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
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
				
注意:对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义;管理cron任务;	
每周三凌晨三、五点10分输出当前时间:
[root@centos7 ~]# crontab -l
10 3,5 * * 3  /bin/date '+%F %H:%M:%S '

4、简述sed常用操作命令,并举例

命令格式:
sed [option]... 'script' inputfile...
常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印
-e: 多点编辑
-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i.bak: 备份文件并原处编辑
script:
地址命令,即由于地址定界和编辑命令组成
地址定界:
		(1) 不给地址:对全文进行处理
		(2) 单地址:
				#: 指定的行,$:最后一行
				/pattern/:被此处模式所能够匹配到的每一行
		(3) 地址范围:
				#,#
				#,+#
				/pat1/,/pat2/
				#,/pat1/
		(4) ~:步进
				1~2 奇数行
				2~2 偶数行
编辑命令:
		d: 删除模式空间匹配的行,并立即启用下一轮循环
		p:打印当前模式空间内容,追加到默认输出之后
		a [\]text:在指定行后面追加文本,支持使用\n实现多行追加
		i [\]text:在行前面插入文本
		c [\]text:替换行为单行或多行文本
		w /path/somefile: 保存模式匹配的行至指定文件
		r /path/somefile:在文件的指定位置插入另一个文件的所有内容
		=: 为模式空间中的行打印行号
		!:模式空间中匹配行取反处理
		s///:查找替换,支持使用其它分隔符,s@@@,s###
				g: 行内全局替换
				p: 显示替换成功的行
				w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
用法示例:
将/etc/fstab文件中已UUID开头的行注释
[root@centos7 ~]# sed -rn 's@(^UUID)@#\1@p'  /etc/fstab
#UUID=c9fc2cce-0b87-4d33-872d-c2a30871bcbc /                       xfs     defaults        0 0
#UUID=15e19e6c-1b9f-47d4-be20-12c1cf7c9bf1 /app                    xfs     defaults        0 0
#UUID=666253c9-449b-46c6-93a7-b8007803ed6f /boot                   xfs     defaults        0 0
#UUID=57e1db57-12ab-458b-be54-585129688dac swap                    swap    defaults        0 0

将/etc/passwd文件中35行到以mage开头的行打印出来
[root@centos7 ~]# cat /etc/passwd |sed -n '35,/^mage/p'
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mage:x:1000:1000::/home/mage:/bin/bash

将/etc/issue读取到/etc/passwd中以wang开头的行后
[root@centos7 ~]# sed  '/^wang/r /etc/issue'   /etc/passwd

在/etc/fstab文件中已UUID开头的行后追加一行,内容为123
[root@centos7 ~]# sed  '/^UUID/a 123'   /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sat Aug 25 13:40:09 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=c9fc2cce-0b87-4d33-872d-c2a30871bcbc /                       xfs     defaults        0 0
123
UUID=15e19e6c-1b9f-47d4-be20-12c1cf7c9bf1 /app                    xfs     defaults        0 0
123
UUID=666253c9-449b-46c6-93a7-b8007803ed6f /boot                   xfs     defaults        0 0
123
UUID=57e1db57-12ab-458b-be54-585129688dac swap                    swap    defaults        0 0
123
#/dev/sdb1                                 /usr/mydate             xfs      defaults      0 0 

等等... ...