cron,yum,sed

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

[root@localhost backup]# crontab -l
0 */12 * * * /usr/bin/tar -zcf /backup/etc-$(date +\%F-\%H-\%M-\%S).tar.gz /etc

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

概述:
    系统级开发:(直接调用硬件资源)
		C/C++:httpd, vsftpd, nginx
		go
    应用级开发:
		java/Python/perl/ruby/php:
			java: hadoop,  hbase,   (jvm)
			Python:openstack, (pvm)
			perl: (perl)
			ruby: (ruby)
			php: (php)
			
	C/C++程序格式:
		源代码:文本格式的程序代码;
			编译开发环境:编译器、头文件、开发库
		二进制格式:文本格式的程序代码 --> 编译器 --> 二进制格式(二进制程序、库文件、配置文件、帮助文件)
		
	java/python程序格式:
		源代码:编译成能够在其虚拟机(jvm/pvm)运行的格式;
			开发环境:编译器、开发库
		二进制
		
	项目构建工具:
		c/c++: make
		java: maven
		
程序包管理器:
	源代码  --> 目标二进制格式(二进制程序、库文件、配置文件、帮助文件) --> 组织成为一个或有限几个“包”文件;
		安装、升级、卸载、查询、校验
		
	程序包管理器:
		debian:dpt, dpkg, ".deb"
		redhat:redhat package manager, rpm, ".rpm"; rpm is package manager;
		S.u.S.E:rpm, ".rpm",  
		
		Gentoo:ports
		ArchLinux:
		
	源代码:name-VERSION.tar.gz
		VERSION:major.minor.release
	rpm包命名格式:
		name-VERSION-release.arch.rpm 
			VERSION:major.minor.release
			release.arch:rpm包的发行号
				release.os: 2.el7.i386.rpm
				archetecture:i386, x64(amd64), ppc, noarch
				
			redis-3.0.2.tar.gz --> redis-3.0.2-1.centos7.x64.rpm 
		
		拆包:主包和支包
			主包:name-VERSION-release.arch.rpm 
			支包:name-function-VERSION-release.arch.rpm 
				function:devel, utils, libs, ...
			
	依赖关系: 
		X, Y, Z
		
			X --> Y,Z
				Y --> A, B, C
				C --> Y
				
		前端工具:自动解决依赖关系;
			yum:rhel系列系统上rpm包管理器的前端工具;
			apt-get (apt-cache):deb包管理器的前端工具;
			zypper:suse的rpm管理器前端工具;
			dnf:Fedora 22+系统上rpm包管理器的前端工具;
			
	程序包管理器:
		功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作; 
		
		1、程序包的组成清单(每个程序包都单独实现);
			文件清单
			安装或卸载时运行的脚本
		2、数据库(公共)
			程序包的名称和版本;
			依赖关系;
			功能说明;
			安装生成的各文件的文件路径及校验码信息;
			等等等
			
			/var/lib/rpm/
			
获取程序包(rpm)的途径:
	(1) 系统发行版的光盘或官方的文件服务器(或镜像站点):
		http://mirrors.aliyun.com, 
		http://mirrors.sohu.com,
		http://mirrors.163.com 
	(2) 项目的官方站点
	(3) 第三方组织:
		(a) EPEL
		(b) 搜索引擎
			http://pkgs.org
			http://rpmfind.net 
			http://rpm.pbone.net 
	(4) 自动动手,丰衣足食 
	
	建议:检查包合法性
		来源合法性;
		程序包的完整性;
		
CentOS系统上rpm命令管理程序包:
	安装、升级、卸载、查询和校验、数据库维护
	
	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 ...
		
			rpm  -ivh  PACKAGE_FILE ...
			
			GENERAL OPTIONS:
				-v:verbose,详细信息
				-vv:更详细的输出
			
			[install-options]:
				-h:hash marks输出进度条;每个#表示2%的进度;
				--test:测试安装,检查并报告依赖关系及冲突消息等;
				--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:查询指定的程序包是否已经安装,及其版本;
			-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:列出指定的程序包提供的所有的;
			-R, --requires:查询指定的程序包的依赖关系(CAPABILITY);
			--scripts:查看程序包自带的脚本片断;
		用法:
			-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]	
			
			
		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:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

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

yum命令的用法:
	yum [options] [command] [package ...]

   command is one 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]
	    # yum repolist
	   
显示程序包:
	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 [...]

如何使用光盘当作本地yum仓库:
	(1) 挂载光盘至某目录,例如/media/cdrom
		# mount -r -t iso9660 /dev/cdrom /media/cdrom
	(2) 创建配置文件
	[CentOS7]
	name=
	baseurl=
	gpgcheck=
	enabled=

yum的命令行选项:
	--nogpgcheck:禁止进行gpg check;
	-y: 自动回答为“yes”;
	-q:静默模式;
	--disablerepo=repoidglob:临时禁用此处指定的repo;
	--enablerepo=repoidglob:临时启用此处指定的repo;
	--noplugins:禁用所有插件;

yum的repo配置文件中可用的变量:
	$releasever: 当前OS的发行版的主版本号;  centos 6.6  主版本号6
	$arch: 平台; i386 i486 i586  x64
	$basearch:基础平台; 全部识别为i386

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

(1)disk:show disk info信息

(2)mem: show memory info信息

(3)cpu: show cpu info信息

(*)quit

[root@localhost script]# cat menu.sh 
#!/bin/bash
#
cat << EOF
disk: show disk info
mem: show memory info
cpu: show cpu info
quit:
EOF

read -p "Select Mune: " option

if [[ "$option" == "disk" ]];then
	fdisk -l /dev/[sh]d[a-z]
elif [[ "$option" == "mem" ]];then
	free -m
elif [[ "$option" == "cpu" ]];then
	lscpu
elif [[ "$option" == "quit" ]];then
	echo "quit"
else
	echo "Please input option"
fi

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

sed [OPTION]...  'script'  [input-file] ...
常用选项:
		-n:不输出模式空间中的内容至屏幕;
		-e script, --expression=script:多点编辑;
		-f  /PATH/TO/SED_SCRIPT_FILE
			每行一个编辑命令;
		-r, --regexp-extended:支持使用扩展正则表达式;
		-i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;
	
		~]# sed  -e  's@^#[[:space:]]*@@'   -e  '/^UUID/d'  /etc/fstab
	
	地址定界:
		(1) 空地址:对全文进行处理;
		(2) 单地址:
			#:指定行;
			/pattern/:被此模式所匹配到的每一行;
		(3) 地址范围
			#,#:起始行,结束行
			#,+#:
			#,/pat1/
			/pat1/,/pat2/
			$:最后一行;
		(4) 步进:~
			1~2:所有奇数行
			2~2:所有偶数行
			
	编辑命令:
		d:删除;  ******特殊的操作******
			[root@localhost ~]# sed '1,5d' /etc/fstab 
			# 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

			[root@localhost ~]# sed '/^UUID/d' /etc/fstab 

			#
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

			[root@localhost ~]# sed '/^#/d' /etc/fstab 

			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0
			[root@localhost ~]# sed '3d' /etc/fstab #删除第3行

			#
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

			[root@localhost ~]# sed '1~2d' /etc/fstab   #显示偶数行
			#
			# Created by anaconda on Fri Nov 30 07:38:26 2018
			# Accessible filesystems, by reference, are maintained under '/dev/disk'
			#
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

		p:显示模式空间中的内容;
			[root@localhost ~]# sed '1~2p' /etc/fstab  #奇数行显示两遍


			#
			# /etc/fstab
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

			[root@localhost ~]# sed -n '1~2p' /etc/fstab  #显示奇数行

			# /etc/fstab
			#
			# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0

		a  \text:在行后面追加文本“text”,支持使用\n实现多行追加; 
			[root@localhost ~]# sed '3a \new line' /etc/fstab  #在第3行后面追加 new line 

			#
			# /etc/fstab
			new line
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

			[root@localhost ~]# sed '3a \new line\nanother new line' /etc/fstab 

			#
			# /etc/fstab
			new line
			another new line
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

			[root@localhost ~]# sed '/^UUID/a \#Hello UUID' /etc/fstab #为多行添加注释信息。

			#
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			#Hello UUID
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0
		i  \text:在行前面插入文本“text”,支持使用\n实现多行插入;
			[root@localhost ~]# sed '3i \new line' /etc/fstab  #在第3行前面追加文件new line

			#
			new line
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0 

		c  \text:把匹配到的行替换为此处指定的文本“text”; change替换
			[root@localhost ~]# sed '/^UUID/c \#Hello UUID' /etc/fstab

			#
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			#Hello UUID
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0

		w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
			[root@localhost ~]# sed '/^[^#]/w /tmp/fstab.new' /etc/fstab  #匹配非#开头的行至/tmp/fstab.new文件中

			#
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0
			[root@localhost ~]# cat /tmp/fstab.new 
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0
		r  /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
			[root@localhost ~]# sed '3r /etc/issue' /etc/fstab  

			#
			# /etc/fstab
			\S
			Kernel \r on an \m

			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0
			[root@localhost ~]# cat /etc/issue
			\S
			Kernel \r on an \m

		=:为模式匹配到的行打印行号;
			[root@localhost ~]# sed '/^UUID/=' /etc/fstab 

			#
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#
			/dev/mapper/centos-root /                       xfs     defaults        0 0
			10
			UUID=4c44aac5-946a-4c31-9dc6-bfdd837ae42f /boot                   xfs     defaults        0 0
			/dev/mapper/centos-home /home                   xfs     defaults        0 0
			/dev/mapper/centos-swap swap                    swap    defaults        0 0
		!:条件取反;
			格式:地址定界!编辑命令;
			[root@localhost ~]# sed '/^#/!d' /etc/fstab 
			#
			# /etc/fstab
			# Created by anaconda on Fri Nov 30 07:38:26 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
			#	

		s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
			替换标记:
				g:全局替换;
				w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
				p:显示替换成功的行;
			
			
			练习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@[^/]+/?$@@'
				
	高级编辑命令:
		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' FILE:在原有的每行后方添加一个空白行;

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

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

tmp目录下,新建目录myrepo/Packages。
从光盘中复制相应的rpm包到Pacakges目录。
createrepo [options] 
   -u --baseurl 
      Optional base URL location for all files.
执行命令createrepo -u /tmp/myrepo/Packages /tmp/myrepo
    [root@localhost tmp]# createrepo -u /tmp/myrepo /tmp/myrepo
编辑文件/etc/yum.repos.d/myrepo.repo,添加如下内容:
    [root@localhost tmp]# cat /etc/yum.repos.d/myrepo.repo
    [myrepo]
    name=my repo
    baseurl=file:///tmp/myrepo
    enabled=1
    gpgcheck=0
    
    [root@localhost tmp]# yum repolist
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    file:///media/iso/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /media/iso/repodata/repomd.xml"
    Trying other mirror.
    file:///media/iso/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /media/iso/repodata/repomd.xml"
    Trying other mirror.
    myrepo                                                                  | 3.1 kB  00:00:00     
    myrepo/primary_db                                                       |  17 kB  00:00:00     
    repo id                                    repo name                                     status
    myrepo                                     my repo                                          22
    repolist: 22
    
    [root@localhost myrepo]# yum -y install ftp
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    Resolving Dependencies
    --> Running transaction check
    ---> Package ftp.x86_64 0:0.17-67.el7 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ===============================================================================================
     Package           Arch                 Version                     Repository            Size
    ===============================================================================================
    Installing:
     ftp               x86_64               0.17-67.el7                 myrepo                61 k
    
    Transaction Summary
    ===============================================================================================
    Install  1 Package
    
    Total download size: 61 k
    Installed size: 96 k
    Downloading packages:
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : ftp-0.17-67.el7.x86_64                                                      1/1 
      Verifying  : ftp-0.17-67.el7.x86_64                                                      1/1 
    
    Installed:
      ftp.x86_64 0:0.17-67.el7                                                                     
    
    Complete!

你可能感兴趣的:(Linux系统管理)