第五周Linux 作业

这篇博客介绍了第五周的Linux作业,包括每12小时将/etc/目录备份到/backup,RPM包管理的总结与应用,YUM的配置、私有仓库创建,编写脚本展示系统信息,sed命令的使用,以及使用自建YUM源安装多个软件包。
摘要由CSDN通过智能技术生成

第五周Linux 作业

1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,“etc-年-月-日-时-分.tar.gz”

#crontab -e
0 */12 * * * /bin/tar -zvcf /backup/etc-$(date +%Y-%m-%d-%H-%M).tar.gz /etc

2、rpm包管理功能总结以及实例应用演示。

	-安装:{-i|--install} [install-options] PACKAGE_FILE...
		-h:以#号来表示显示安装进度
		-v,--verbose:显示安装过程中的详细信息
		--test:不执行真正的安装过程,而仅报告依赖关系及冲突信息
		--nodeps:或略依赖关系
		--replacepkgs:覆盖安装
		--force:强制安装
		常用组合:-ivh , -ivvh
	升级:
		rpm {-U|--upgrade} [install-options] PACKAGE_FILE..
				-U:升级或者安装
		rpm {-F|--freshen} [install-options] PACKAGE_FILE...
				-F:升级
			组合使用:-Uvh, -Fvh
			--oldpackage: 降级:
			--force:强制升级:
	- 卸载:
		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:查询指定的程序包是否安装,及其版本
		-a,--all: 查询所有已经安装过的包:   
		rpm -qa | grep "^z" 查询以Z 开头的已经安装过的程序包
		-f File:查询指定的文件由哪个程序包安装生成;
		rpm -qf /etc/fstab  查询fstab 是由哪个安装包生成的。
		-p, --package PACKAGE_FILE:用于实现对未安装的
		
		--whatprovides CAPABILITY:查询指定的CAPABILITY 由哪个程序包提供;
		--whatrequires CAPABILITY:查询指定的CAPABILITY 被哪个包所依赖;
		
		[query-option]
		--changelog:查询rpm包的change log;
		rpm -q --changelog bash | less
		-l,--list:查询安装生成的文件列表
		rpm -ql bash | wc -l 查询bash生成的文件数量
		-i,--info:程序包相关的信息,版本号,大小
		rpm -qi bash :
		-c,--configfigfiles:查询指定的程序包提供的配置文件
		-d,--document ;查询 指定的程序包所包含的文档
		--provides:列出指定的程序包提供的所有的 CAPABILITY
		--R, --requires:查询指定的程序包所依赖的程序包
		--scripts,查询程序包所自带的脚本片段;
rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
rpm -e httpd-tools-2.4.6-80.el7.centos.x86_64.rpm

3、yum的配置和使用总结以及yum私有仓库的创建。

  • yum repository: yum repo
    存储了众多的rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)

    文件服务器:
    ftp://
    http://
    nfs://
    file:///
    yum 客户端:
    配置文件:
    /etc/yum.conf:为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo :为仓库的指向提供配置
    
    仓库的定义:
    [repositoryID]
    name=Some name for this repository
    baseurl=url://path/to/repository/  (等号左右不要有空格)
    enabled={1|0}
    gpgcheck={1|0}: 检查是不是以gpg签名来判断这个仓库的软件是不是安全
    repo_gpgcheck={1|0}  检查是不是以gpg签名来判断这个仓库是不是安全
    gpgkey-URL :检查密钥文件
    enablegroups:{1|0}
    failovermethod={roundrobin|priority}: 有多个url 的时候如何选择 ,默认是随机
    cost=
    开销数字,默认为1000,也就是有多个仓库时可以设定仓库的优先级
    
    yum 命令的用法:
    yum [option] [command] [package...]
    command is one of:
            * install package1 [package2] [...]
            * update [package1] [package2] [...]
            * update-to [package1] [package2] [...]
            * update-minimal [package1] [package2] [...]
            * check-update
            * upgrade [package1] [package2] [...]
            * upgrade-to [package1] [package2] [...]
            * distribution-synchronization [package1] [package2] [...]
            * remove | erase package1 [package2] [...]
            * autoremove [package1] [...]
            * list [...]
            * info [...]
            * provides | whatprovides feature1 [feature2] [...]
            * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
            * makecache [fast]
            * groups [...]
            * search string1 [string2] [...]
            * shell [filename]
            * resolvedep dep1 [dep2] [...]
               (maintained for legacy reasons only - use repoquery or yum provides)
            * 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] 
            * repoinfo [all|enabled|disabled]
             *  repository-packages  <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-
           distribution-synchronization> [package2] [...]
            * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
             *   history   [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll?
           back|new|sync|stats]
            * load-transaction [txfile]
             *  updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all |
           check-running-kernel]
            * fssnapshot [summary | list | have-space | create | delete]
            * fs [filters | refilter | refilter-cleanup | du]
            * check
            * help [command]
    
    
    显示仓库list
          * repolist [all|enabled|disabled] 
    显示程序包 (可显示符合通配符的软件包)
     #yum list [all | glob_exp1] [glob_exp2] [...]
                  List all available and installed packages.
     #yum list available [glob_exp1] [...]
                  List all packages in the yum repositories available to be installed.
    
    #yum list updates [glob_exp1] [...]
                  List all packages with updates available in the yum repositories.
    
     #yum list installed [glob_exp1] [...]
                  List the packages specified by args.  If an argument does not match  the  name  of  an
                  available package, it is assumed to be a shell-style glob and any matches are printed.
    安装程序包
            * install package1 [package2] [...]
    升级程序包
            * update [package1] [package2] [...]
    检查可用升级:
    check-update
    卸载程序包
    * remove | erase package1 [package2] [...]
    查看程序包的信息
           * info [...]
    查看指定的特性(可以是某个文件)是由哪个程序包提供
       * provides | whatprovides feature1 [feature2] [...]
    清理本地缓存:
            * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    构建缓存:
     * makecache
    搜索以指定的关键字搜索程序包名及summary信息:
            * search string1 [string2] [...]
    重新安装
     	  * reinstall package1 [package2] [...]
    降级软件版本
              * downgrade package1 [package2] [...]
    指定包依赖的capabilities;
         * deplist package1 [package2] [...]
    查看yum事务历史
            *   history   [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll?
    安装及升级本地仓库包
            * localinstall rpmfile1 [rpmfile2] [...]
               (maintained for legacy reasons only - use install)
    包组 管理的相关命令
    groupinstall group1 [ group2] [...]
    groupupdate group1 [ group2] [...]
    grouplist [hidden] [groupwildcard] [...]
    groupremove group1 [group2] [...]
    groupinfo group1 [..]
    search string1 [string2] [.,..]
    
安装以FTP 方式的私有仓库
1) yum -y install vsftp
2) mount /dev/cdrom /mnt
3) cd /mnt/Packages
	cp * /var/ftp/pub
4)systemctl start vsftp
	systemctl status vsftp
5)cd /var/ftp
	createrepo pub
Spawning worker 0 with 3971 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
测试仓库是否可用
1)创建my.repo配置文件在/etc/yum.repos.d/
[my]
	name=my
	baseurl=ftp://10.0.0.128/pub
	enabled=1
	gpgcheck=0
	priority=1
2) 清空yum 缓存
	yum clean all
	yum makecache
3) 查询新的Yum仓库内容
	yum list all
4) 安装应用
	yum install httpd

4、写一个脚本实现列出以下菜单给用户:

  • 1)disk:show disk info信息
  • 2)mem: show memory info信息
  • 3)cpu: show cpu info信息
  • *)quit
#!/bin/bash
#
cat << EOF
1)disk: show disk info
2)mem:show memory info
3) cpu:show cpu info
*) quit 
EOF

read -p 'Please input your choice:' option
if [[ $option == 'disk' ]];then
        fdisk -l
elif [[ $option == 'mem' ]];then
        free -h
elif [[ $option == 'cpu' ]];then
        lscpu
else
        exit 0
fi

~

5、sed用法总结并结合实例演示

**Sed 简介**
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“保持空间(hold space)这2个空间的使用。

模式空间:可以想成工程里面的流水线,数据之间在它上面进行处理。
保持空间:可以想象成仓库,我们在进行数据处理的时候,作为数据的暂存区域。
正常情况下,如果不显示使用某些高级命令,保持空间不会使用到!

在这里插入图片描述

sed在正常情况下,将处理的行读入模式空间,脚本中的“sed command(sed命令)”就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。

调用sed命令有两种形式:
sed [options] 'command' file(s)

sed [options] -f scriptfile file(s)


**常用选项**
e command, --expression=command允许多台编辑
$ sed -e '1,5d' -e 's/test/check/' example          
#(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
$ sed --expression='s/test/check/' --expression='/love/d' example            #一个比-e更好的命令是--expression。它能给sed表达式赋值。
-h, --help
打印帮助,并显示bug列表的地址。
-n, --quiet, --silent
不输出模式空间中的内容至屏幕
-f, --filer=script-file
引导sed脚本文件名。
-r,--regexp-extended:支持使用扩展正则表达式
-i[SUFFIX],--in-place[=SUFFIX];直接编辑原文件
地址定界:
1)空地址:对全文进行处理
2)单地址:
	#;指定行
	/patern/:被此模式所匹配的每一行;
3)地址范围
	#, #;
	#,+#
	#, /part1/
	/part1/,/part2/
	$:最后一行;
4)步进:~
1~2 所有奇数
2~2 所有偶数
编辑命令:
d: 删除命令 
p:打印模式空间中的内容
a: \text: 在行后面追加文本“text",支持使用\n 实现多行追加;
I: \text :在行中间插入文本“text",支持使用\n 实现多行追加;
\# 在每一行后面添加新的行内容
c \text: 把匹配的行替换为此处指定的文本"text";
w /PATH/TO/SOMEFILE:保存模式空间中的内容到指定路径
	r /PATH/TOSOMEFILE:读取指定文件的内容至当前文件被模式匹配的行后面;实现文件合并					   元字符集=:为模式空间匹配到的行,打一行号;
!:条件取反:
地址定界!编辑命令
s///:查找替换,其分隔符可自行制定指定,常用的有s@@@,s###等;
替换标记;	
g:全局替换;
w /PATH/TO/SOMEFILE;将替换成功的结果保存至指定文件中;
p:显示替换成功的行;	
	^
	锚定行的开始 如:/^sed/匹配所有以sed开头的行。
	$
	锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
	.
	匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
	*
	匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
	[]
	匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
	[^]
	匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
	\(..\)
	保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
	&
	保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
	\<
	锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
	\>
	锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
	x\{m\}
	重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
	x\{m,\}
	重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
	x\{m,n\}
	重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
	选定行的范围:逗号
	$ sed -n '/test/,/check/p' example            #所有在模板test和check所确定的范围内的行都被打印。
	$ sed -n '5,/^test/p' example            #打印从第五行开始到第一个包含以test开始的行之间的所有行。
	$ sed '/test/,/check/s/$/sed test/' example            #对于模板test和west之间的行,每行的末尾用字符串sed test替换。	编辑命令
高级命令
h:把模式空间中的内容覆盖至保持空间中
H: 把模式空间中的内容追加至保持空间中
g:把保持空间中内容覆盖至模式空间中
G:把保持空间中的内容追加至模式空间中
x: 把模式空间中的内容和保持空间中的内容互换;
n: 读取匹配到的行的下一行至模式空间中;
N:追加读取匹配好的行的下一行至模式空间中:
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;
示例:
sed -n 'n:p' FILE: 显示偶数行;
sed '1!G;h;$!d' FILE: 逆序显示文件的内容;
sed '$!d' FILE: 去除最后一行;
sed '$!N;$!D' FILE:取出文件后两行;
sed '/^$/d;G' FILE :删除原有的所有空白行,而后为所有的非空白行添加空白行;
sed 'n;d' FILE: 显示奇数行;
sed 'G' /etc/issue:在原有的每行后方添加一个空白行;

实战例子

练习1;删除/boot/grub/grub2.cfg 文件以空白字符开头的行的行首的所有空白字符;
sed 's@^[[:space:]]\+@@' /etc/grub2.cfg

练习2:删除/etc/fstab 文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
sed 's@^#[[:space:]]*@@' /etc/fstab

练习3;输出一个绝对路径给sed 命令,取出其目录,其行为类似dirname;
echo "/var/log/messages" | sed 's@[^/]\+$@@'
echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'

6、 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序


	#!/bin/bash

	nginx_log='/usr/local/nginx/logs/mynginx.log'

	code_400_num=$(grep -o '[4|5][0-9][0-9]' ${nginx_log} | wc -l)

	code_400_sort=$(grep '[4|5][0-9][0-9]' ${nginx_log} | sort

	echo $code_400_num

	echo $code_400_sort

7、 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包

yum -y install ftp opens curl wget tcpdump --enablerepo=Local Yum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值