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

 
• tar:
o 打包:tar -cf something.tar something
o 解包:tar -xf something.tar
o -c:创建 .tar 格式的包文件
o -x:解开.tar格式的包文件
o -v:输出详细信息
o -f:表示使用归档文件
o -p:打包时保留原始文件及目录的权限 –P绝对路径
o -t:列表查看包内的文件
常见压缩格式及对应参数

*.tar.gz *.tar.xz *.tar.bz2
-z -J -j
[root@localhost backup]#tar -czvf /backup/etc-`date +%Y-%m-%d-%H-%M.tar.gz` /etc     //测试一下打包压缩的功能
[root@localhost backup]# ll
total 10760
-rw-r--r--. 1 root root 11017766 Dec 23 19:40 etc-2018-12-23-19-40.tar.gz
[root@localhost backup]# crontab -e            //设置每过12小时执行一次备份压缩任务
0 */12 * * *   tar -czvf /backup/etc-`date +%Y-%m-%d-%H-%M.tar.gz` /etc      

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

rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安装:-i, --install
   -v:verbose,详细信息
   -vv:更详细的输出
   -h:hash marks输出进度条;每个#表示2%的进度;
   --test:测试安装,检查并报告依赖关系及冲突消息等;
   --nodeps:忽略依赖关系;不建议;
   --replacepkgs:重新安装
   --nosignature:不检查包签名信息,不检查来源合法性;
   --nodigest:不检查包完整性信息;
   --noscripts:不带脚本信息

升级:-U, --update, 升级或安装
   -F, --freshen 纯粹升级,必须存在老版本,不支持安装操作
   --oldpackage:降级;
   --force:强制升级;
卸载:-e, --erase
   --allmatches:卸载所有匹配指定名称的程序包的各版本;
   --nodeps:忽略依赖关系
   --test:测试卸载,dry run模式
查询:-q, --query
  -qi PACKAGE --info:查询程序包相关的信息,版本号、大小、所属的包组等
  -qf FILE   查询指定的文件由哪个程序包安装生成
  -qc PACKAGE  --configfiles:查询指定的程序包提供的配置文件
  -ql PACKAGE  --list:查询程序安装生成的所有文件列表
  -qd PACKAGE   --docfiles:查询指定的程序包提供的文档
  -qR PACKAGE   --requires: 查询指定的程序包的依赖关系
  -qpi PACKAGE_FILE  查询未安装的程序包的相关信息
  -qpl PACKAGE_FILE   查询未安装的程序若安装生成的所有文件列表
  -qpc PACKAGE_FILE  查询未安装的程序若安装生成的所有文件列表
  -q --changelog: 查询rpm包的changlog

[root@localhost backup]# rpm -ql php
/etc/httpd/conf.d/php.conf
/usr/lib64/httpd/modules/libphp5.so
/var/lib/php/session
/var/www/icons/php.gif
[root@localhost backup]# rpm -qi php
Name        : php                          Relocations: (not relocatable)
Version     : 5.3.3                             Vendor: Red Hat, Inc.
Release     : 47.el6                        Build Date: Tue 15 Dec 2015 06:01:38 PM CST
Install Date: Sun 23 Dec 2018 08:28:51 PM CST      Build Host: x86-029.build.eng.bos.redhat.com
Group       : Development/Languages         Source RPM: php-5.3.3-47.el6.src.rpm
Size        : 3702253                          License: PHP
Signature   : RSA/8, Sat 12 Mar 2016 12:31:10 AM CST, Key ID 199e2f91fd431d51
Packager    : Red Hat, Inc. 
URL         : http://www.php.net/
Summary     : PHP scripting language for creating dynamic web sites
Description :
PHP is ...(省略)
[root@localhost backup]# rpm -qc php
/etc/httpd/conf.d/php.conf
[root@localhost backup]# rpm -qf /bin/ls
coreutils-8.4-43.el6.x86_64

[root@localhost backup]# rpm -ql /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm 
package /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm is not installed
[root@localhost backup]# rpm -qpl /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm 
warning: /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.2.2
....(省略)

校验:-V, --verify
包来源合法性验正和完整性验证: -K PACKAGE_FILE

[root@localhost Packages]#rpm -K /php-5.3.3-47.el6.x86_64.rpm 
php-5.3.3-47.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#fd431d51) 
[root@localhost Packages]# rpm -ivh --nodeps  php-5.3.3-47.el6.x86_64.rpm 
warning:  php-5.3.3-47.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:php                    ########################################### [100%]
[root@localhost Packages]# rpm -V php
Unsatisfied dependencies for php-5.3.3-47.el6.x86_64:
    php-cli(x86-64) = 5.3.3-47.el6 is needed by php-5.3.3-47.el6.x86_64
    php-common(x86-64) = 5.3.3-47.el6 is needed by php-5.3.3-47.el6.x86_64

 

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

YUM: Yellowdog Update Modifier,完成RHEL系列前端自动解决依赖关系安装工具,依赖rpm存在。
1、YUM配置文件路径

/etc/yum.conf:为所有yum仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置

2./etc/yum.conf主配置定义

[main]            #通用主配置段
cachedir=/var/cache/yum/$basearch/$releasever          # 缓存文件路径
keepcache=0                     # 缓存到本地的文件是否保存
debuglevel=2                   # 调试级别
logfile=/var/log/yum.log                 # 安装的日志文件
exactarch=1                                              # 精确严格的平台release匹配
obsoletes=1
gpgcheck=1                      #检测来源合法性和完整性
plugins=1                         #支持插件机制
installonly_limit=5                    #同时安装多少程序包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bu        # 追踪bug路径
distroverpkg=centos-release               # 当前发行版版本号从哪儿获取
#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
...

*3.yum仓库(.repo)配置文件定义**

[repositoryID]        #仓库ID,唯一标识别,不能重复
name=Some name for this repository       #  完整的仓库名称
baseurl=url://path/to/repository/          # yum仓库指明的访问路径
enabled={1|0}           #是否启用此yum仓库,默认启用
gpgcheck={1|0}              #是否检查完整性和来源合法性
gpgkey=URL                     #秘钥文件位置,可能是对方仓库提供
enablegroups={1|0}              #是否基于组来批量管理程序包
failovermethod={roundrobin|priority}    #故障转移方法:轮询、根据优先级选择; 默认roundrobin随机
cost=#                    #设置开销,默认为1000
… ...

至少需要三行
[repositoryID]  #仓库ID
baseurl=url://path/to/repository/  # yum仓库指明的访问路径
gpgcheck=0  #不检查完整性和来源合法性
 
说明:

 1)*.repo可以将多个[repositoryID]的配置信息放在一个而文件内,也可以切成多个方便管理
 2)baseurl可以使用:ftp:// 、http:// 、nfs:// 、file:///  指明URL路径
 3)baseurl等号两边不能有空格,其后可以填写多个镜像访问路径,每行一个,不能顶行写
       多个访问路径间联系是镜像相同,目的是为了做备用访问
 4)更多选项使用man  5  yum.conf查看,基本配置只需前三行就可以        
 5)发行版光盘镜像安装可能会自动配置网络镜像URL地址

4、YUM常用命令
yum repolist 显示仓库列表
yum list 显示程序包
yum search 模糊查找程序包
yum install 安装程序包
yum remove 卸载程序包
yum update [package1] [package2] [...] 升级操作
yum downgrade package1 [package2] [...] 降级操作
yum info [package1] [package2] [...] 查看程序包简要信息
yum provides | whatprovides feature1 [feature2] [...] 查看指定的特性(可以是某文件)是由哪个程序包所提供
yum clean 清理本地缓存
 

[root@localhost backup]# yum repolist   //查看yum仓库
Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security,
              : subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id              repo name                                                status
rhel-source      Red Hat Enterprise Linux 6Server - x86_64 - Source       3,855
repolist: 3,855
[root@localhost backup]# yum search ftp   //模糊查询安装包
Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security,
              : subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
=============================== N/S Matched: ftp ===============================
ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client
gvfs-obexftp.x86_64 : ObexFTP support for gvfs
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)
vsftpd.x86_64 : Very Secure Ftp Daemon
...
[root@localhost backup]# yum list *ftp*  //查询已安装与未安装的匹配包
Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security,
              : subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Installed Packages
gvfs-obexftp.x86_64 1.4.3-26.el6 @anaconda-RedHatEnterpriseLinux-201604140956.x86_64/6.8
vsftpd.x86_64       2.2.2-21.el6 @rhel-source                                   
Available Packages
ftp.x86_64          0.17-54.el6  rhel-source                                    
lftp.i686           4.0.9-6.el6  rhel-source                                    
lftp.x86_64         4.0.9-6.el6  rhel-source                                    
...

包组:一堆程序的一个集合,用于一起安装,因为某些程序安装需要依赖包组内容

                  # yum  groupinstall group1 [group2] [...]     安装包组
                  # yum  groupupdate group1 [group2] [...]    升级包组
                  # yum  grouplist [hidden] [groupwildcard] [...]   显示包组列表
                 # yum  groupremove group1 [group2] [...]     移除包组
                 # yum  groupinfo group1 [...]   显示包组信息                          

5、创建私有yum仓库
 
第一种:使用发行版光盘作为yum仓库:   
1)挂载光盘或ISO文件到某一挂载点

#mkdir /mnt/cdrom        
#mount /dev/sr0 /mnt/cdrom    

2)备份原来的yum源:       

#mkdir /etc/yum.repos.d/bak       
#mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/    

3)增加一个光盘的yum源       

#vi /etc/yum.repos.d/mybase.repo        
[mybase]        
name=LocalYum        
baseurl=file:///mnt/cdrom        
gpgcheck=0        
enabled=1

第二种,使用本地或网络rpm包手动创建。
 第一步:安装createrepo       
第二步:确定repository输出方式:有两种,本地输出与网络输出。           
本地输出:提供一个放置rpm包的本地路径           
网络输出 :提供一个文件服务器,配置好ftp服务或http服务(注意防火墙要开放对应端口)      ftp服务:                   
  安装程序包:vsftpd                   
  文件存放路径:/var/ftp/pub                   
  启动服务: service   vsftpd  start               
http服务:                   
  安装程序包:httpd                   
  文件存放路径:/var/www/html                   
  启动服务:service httpd start       
第三步:把rpm程序包文件放入准备好的目录中,可以从光盘复制rpm包过去。       
第四步:对此目录运行createrepo命令即可,至此就完成了本地仓库的创建。       
第五步:测试所创建的yum 仓库是否可用           
在/etc/yum.repos.d/目录下创建一个以repo结尾的文件,示例如下:

[root@localhost yum.repos.d]# yum info createrepo//查看已安装的createrepo信息
[root@localhost yum.repos.d]# mkdir -p /yumtest/Packages    
[root@localhost yum.repos.d]# cp /media/cdrom/Packages/* /yumtest/Packages/     //下载所需要的所有文件到本地某个路径
[root@localhost yum.repos.d]# createrepo /yumtest/   //创建关联关系,完成后生成repodata
root@localhost yum.repos.d]# cat Local.repo    //配置yum源文件
[Local]
name=Local Yum
baseurl=file:///yumtest/
#baseurl=http:///Packages     //当为http网络输出时,用此配置。仓库主机IP,Packages为http发布目录下的软件包目录
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
[root@localhost yum.repos.d]# yum repolist       //查看配置好的yum仓库

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

(1)disk:show disk info信息
(2)mem:show memory info信息
(3)cpu:show cpu info信息
(*)quit

#!/bin/bash
cat<

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

 
sed:Stream Editor 行处理工具,流编辑器
格式:sed [OPTION]… {script-only-if-no-other-script} [input-file]…
其中{script-only-if-no-other-script}:指的是AddressCommands,地址界定执行命令
AddressCommands中间无空格,直接连接为一个选项操作
 
(1)OPTION常用选项

     -n:不输出模式空间中的内容至屏幕;
     -e script, --expression=script:多点编辑;
     -f  /PATH/TO/SED_SCRIPT_FILE   : 每行一个编辑命令;
     -r, --regexp-extended:支持使用扩展正则表达式;
     -i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;

(2)地址定界

1)空地址:什么都不填写时,表示对全文进行处理
2)单地址
     #:表示对指定的行
   /pattern/:被此模式所匹配到的每一行,其中模式两边的/不能省略

3)地址范围 (#表示任意数字)

   #,#:从某行到某行,第二个#大于第一个#
   #,+#:从某行开始加多商行
   #,/pattern1/:从某行开始到第一次配到模式的行
   /pattern1/,/pattern2/:从第一次匹配到的模式1到第二次匹配到哦的模式2

   步进:~,#~#   从第几行
   1~2:所有奇数行。从第一行开始,每次加两行读取
   2~2:所有偶数行。从第二行开始,每次加两行读取

(4)编辑命令

d:            删除;
p:           显示模式空间中的内容;
a  \text:  在行后面追加文本“text”,支持使用\n实现多行追加;
i  \text:   在行前面插入文本“text”,支持使用\n实现多行插入;
c  \text:  把匹配到的行替换为此处指定的文本“text”;
w /PATH/TO/SOMEFILE:        保存模式空间匹配到的行至指定的文件中;
r  /PATH/FROM/SOMEFILE:  读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
=:         为模式匹配到的行打印行号;
!:          条件取反;
s///:      查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
              替换标记:
              g:全局替换;
              w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
              p:显示替换成功的行;

实例

1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符
sed -r 's/^([[:space:]])//g' /etc/grub.conf
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
sed -r 's/^#[[:space:]]+//g' etc/fstab
3、在centos6系统/root/install.log每一行行首增加#号
sed '/Installing/i%' /root/install.log  在行的前一行加,而非行首
sed -r 's/(Install)/#\1/' /root/install.log
sed -r 's/^(.*)/#\1/g' /root/install.log
4、在/etc/fstab文件中不以#开头的行的行首增加#号(有问题)
sed -n -r 's/(^[^#].*)/#\1/p' /etc/fstab 
sed -n -r 's/^[^#].*/#&/p' /etc/fstab 
5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^.*\/)([^\/].*\/?)$#\1#'  基名,可换@
echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^.*\/)([^\/].*\/?)$#\2#'   路径
6、利用sed 取出ifconfig命令中本机的IPv4地址
ifconfig |sed -n '2p' |sed -r 's/.*addr://'| sed -r 's/\ B.*//'

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源,设置*.repo文件中相应的enabled=0

[root@localhost scripts]# yum install -y ftp --enablerepo=Local Yum
[root@localhost scripts]# yum install -y openssh --enablerepo=Local Yum
...