1.每12小时备份并压缩/etc/目录到/data中,并保存文件格式为“etc-年-月-日-时-分.tar.gz”
-
编写脚本用来备份 文件/root/etcback.sh
#!/bin/bash tar -zcf /data/etc-`date "+%F-%H-%M"`.tar.gz /etc/ &>/dev/null
- 执行crontab -e,加入0 1,13 * /root/etcback.sh,保存退出
- 确保crond服务启动 ps -aux|grep cron
root 971 0.0 0.1 126304 1564 ? Ss 13:18 0:00 /usr/sbin/crond -n
root 5393 0.0 0.0 123252 760 ? Ss 15:01 0:00 /usr/sbin/anacron -s - 测试:把系统时间调整到差不多时间,date -s 0:57
查看日志/var/log/cron
Dec 15 01:00:01 centos7 CROND[2440]: (root) CMD (/root/etcback.sh)
ls /data
etc-2018-12-15-01-00.tar.gz
成功备份
2.rpm基本用法和应用
- 将编译好的应用程序的各组成文件打包一个或几个 程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操作
rpm数据库(公共):/var/lib/rpm - rpm安装与升级
rpm -ivh PACKAGE_FILE 包路径 基本安装方法
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs | replacefiles 强行重新安装
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
--oldpackage:降级
--force: 强制安装
rpm -Uvh 升级和安装
rpm -Fvh 只升级(无旧版本无法升级)
内核建议rpm -ivh 安装新版本 (内核允许多版本) - rpm包查询
rpm -q 包名 查询
-qp 包路径 对未安装包查询
-qa 查询所有安装包
-ql 包名 列出文件列表
-qf 文件 列出文件来自哪个包
-qp 包路径 针对未安装包的查询
-qc 只看配置文件
-qd 只看文档
-qi 看一些说明
-V 包名 查看安装包文件是否被修改
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 导入私钥 - 包卸载
rpm -e 包名 卸载
--nodeps 忽略依赖关系
--noscripts
--notriggers
--test 测试卸载 - 其他应用
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件 (默认恢复到当前文件夹,不加条件恢复全部) - 示例
- rpm -qpi /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm查询包信息
Name : httpd
Version : 2.4.6
Release : 67.el7.centos
Architecture: x86_64
Install Date: (not installed)
Group : System Environment/Daemons
Size : 9823661
License : ASL 2.0
Signature : RSA/SHA256, Fri 11 Aug 2017 12:40:32 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : httpd-2.4.6-67.el7.centos.src.rpm
Build Date : Fri 04 Aug 2017 11:21:07 AM CST
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server. - rpm -ivh --nodeps Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm 忽略依赖性安装
Preparing... ################################# [100%]
Updating / installing...
1:httpd-2.4.6-67.el7.centos ################################# [100%] - rpm2cpio /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm |cpio -idv ./usr/sbin/httpd 解压rpm包中指定文件到当前文件夹
./usr/sbin/httpd
19336 blocks
tree usr/ 查看解压文件
usr/
└── sbin
└── httpd
1 directory, 1 file
- rpm -qpi /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm查询包信息
3.yum的配置与使用,私有仓库创建
- yum客户端配置文件
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置 - 仓库指向的定义:
[repositoryID] name= 仓库名字
baseurl=https:// http:// ftp:// file://
enabled={1|0} 0表示禁用,默认开启
gpgcheck={1|0} 0表示不检查,默认检查
gpgkey=URL 私钥文件位置
enablegroups={1|0}
failovermethod={roundrobin|priority} roundrobin:意为随机挑选,默认值 priority:按顺序访问 cost= 默认为1000 - yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
$YUM0-$YUM9:自定义变量
实例: http://server/centos/$releasever/$basearch/ - yum --nogpgcheck:禁止进行gpg check -y: 自动回答为“yes” -q:静默模式
yum repolist [all|enabled|disabled] 列出源信息
yum list all 列出所有可安装的包
yum install package1 [package2] [...] 安装
yum reinstall package1 [package2] [...] (重新安装)
yum update package1 [package2] [...] 更新
yum downgrade package1 [package2] [...] (降级)
yum check-update 检查可用更新
yum remove | erase package1 [package2] [...] 卸载
yum info package 查看包信息
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 清理本地缓存: 清除/var/cache/yum/$basearch/$releasever缓存
yum search string1 [string2] [...] 以指定的关键字搜索程序包名和相关信息
yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats] 查看yum事务历史
如
yum history
yum history info 6
yum history undo 6 - yum 程序组合安装相关
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...] - 创建自己的yum仓库
进入. /etc/yum.repos.d/ 建立base.repo文件
[base]
name=carom
baseurl=file:///misc/cd/
gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-$releaserver
[network]
name=all
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
enabled=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/RPM-GPG-KEY-CentOS-$releasever禁用network yum源时改为enabled=0
[[email protected] ~]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base network
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
[[email protected] ~]#yum repolist
Loaded plugins: fastestmirror, langpacks
base | 3.6 kB 00:00:00
network | 3.6 kB 00:00:00
(1/4): base/group_gz | 156 kB 00:00:00
(2/4): base/primary_db | 5.7 MB 00:00:00
(3/4): network/7/group_gz | 166 kB 00:00:01
(4/4): network/7/primary_db | 6.0 MB 00:00:05
Determining fastest mirrors
repo id repo name status
base carom 9,591
network/7 all 10,019
repolist: 19,610
4.查看系统信息小脚本
#!/bin/bash
disk () {
df -h
echo ""
lsblk
}
mem () {
free -h
echo ""
cat /proc/meminfo
}
cpu (){
iostat -c
echo ""
cat /proc/cpuinfo
}
f_wait () {
echo ""
read -p "please input any key to continue !" key
case $key in
*)
continue
;;
esac
}
while true ;do
echo -e "(1)disk:show disk info\n"
echo -e "(2)mem: show memory info\n"
echo -e "(3)cpu: show cpu info!\n"
echo -e "(*) quit\n "
read -p "please input your selection (1-3): " num
case $num in
1)
disk
f_wait
;;
2)
mem
f_wait
;;
3)
cpu
f_wait
;;
*)
echo "exit........"
sleep 1
exit
esac
done
测试:
[email protected] testsh]#bash sysmenu.sh
(1)disk:show disk info
(2)mem: show memory info
(3)cpu: show cpu info!
(*) quit
please input your selection (1-3): 1
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 8.8G 42G 18% /
devtmpfs 576M 0 576M 0% /dev
tmpfs 591M 0 591M 0% /dev/shm
tmpfs 591M 8.5M 582M 2% /run
tmpfs 591M 0 591M 0% /sys/fs/cgroup
/dev/sda3 30G 75M 30G 1% /data
/dev/sda1 1014M 158M 857M 16% /boot
/dev/sdb1 9.8G 13M 7.8G 1% /mydata
tmpfs 119M 12K 119M 1% /run/user/42
tmpfs 119M 0 119M 0% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /misc/cd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 50G 0 part /
├─sda3 8:3 0 30G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 10G 0 part /mydata
└─sdb2 8:18 0 1G 0 part [SWAP]
sdc 8:32 0 30G 0 disk
├─sdc1 8:33 0 10G 0 part
├─sdc2 8:34 0 10G 0 part
│ └─testvg-testlv 253:0 0 3G 0 lvm
└─sdc3 8:35 0 10G 0 part
sr0 11:0 1 8.1G 0 rom /misc/cd
please input any key to continue !
(1)disk:show disk info
(2)mem: show memory info
(3)cpu: show cpu info!
(*) quit
please input your selection (1-3): q
exit........
5.sed用法
sed是一种流编辑器,它一次处理一行内容。处理时,把当前 处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后 ,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环 。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空 模式空间,但不会清空保持空间(高级用法时候使用)。这样不断重复,直到文件末 尾。文件内容并没有改变,除非你使用重定向存储输出。
- 基本格式
sed 选项 位置定界 执行操作 如:sed –n ‘2p’ /etc/passwd 2是位置定界 p是打印操作 - 基本选项
-n:不输出模式空间内容到屏幕,即不自动打印
-e: 连接多次操作
-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i.bak: 修改原文件并且备份原文件 - 位置定界
(1) 不给地址:对全文进行处理
(2) 单地址: n: 指定的第n行,$:最后一行 /pattern/:被此处模式所能够匹配到的每一行(可用正则表达式匹配)
(3) 地址范围: m,n 指定从m行到n行 m,+n 指定从m行开始到下面第n行 /pat1/,/pat2/ 表达式之间的行 m,/pat1/ 从m行开始 到匹配行
(4) ~:步进 m~n 表示第m行开始 每n行处理一次 1~2 奇数行 2~2 偶数行 - 执行操作
d: 删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a []text:在指定行后面追加文本 支持使用\n实现多行追加
i []text:在行前面插入文本
c []text:替换行为单行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
=: 打印行号
!:模式空间中匹配行取反处理 如 2!d 删除除了第二行所有行 - 常用用法(替代)
s///:查找替换,支持使用其它分隔符,[email protected]@@,s### ?
替换标记: g: 行内全局替换 如sed ‘s/test/mytest/g‘ example test 换成 mytest
p: 显示替换成功的行 sed –n ‘s/root/&superman/p’ /etc/passwd root 换成 rootsuperman &表示要替换内容
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
例子
ifconfig ens33| sed -rn "2s/.inet (.) +netmask./\1/p" 获取ip ;第2行做替换 ,后向引用获取第一个括号内容
df |sed -rn "/^\/dev\/sd/s/. ([0-9]+)%./\1/p" 获取各个分区利用率
sed -r ‘s/(.\/)([^/]+\/?)/\2/‘ 获取目录基名
sed -r ‘s/(.*\/)([^/]+\/?)/\1/‘获取目录名 - 高级用法(使用模式空间和保持空间)
P 打印到\n
h 模式空间 覆盖 保持空间
H 模式空间 追加 保持空间
g 保持空间 覆盖 模式空间
G 保持空间 追加 模式空间
x 保持空间 互换 模式空间
n 读取匹配行的下一行覆盖到模式空间 如果没有用-n开关关闭auto-print,每次模式空间清空之前会默认打印一次里面的内容
N 读取匹配行的下一行追加到模式空间
d 删除模式空间的行
D 如果模式空间有换行符 ,就删除第一个换行符的模式空间文本,不重新读取新行,并返回脚本头部执行 例如:sed ‘N;D ‘中读第一行后执行N,追加第二行,执行D,删除第一行,这时系统不直接读取第三行,而是直接执行N
如果不包含换行符 ,类似d - 示例
seq 1 10 | sed -n ‘n;p‘ seq 1 10 | sed -n ‘1~2p‘ 打印偶数行
seq 1 10 | sed ‘1!G;h;$!d‘ seq 1 10 | sed -n ‘1!G;h;$p‘倒序打印1-10
seq 1 10 | sed ‘N;D ‘ seq 1 10 | sed ‘$!d‘ 打印最后一行
seq 1 10 | sed ‘$!N;$!D ‘打印最后两行
seq 1 10 | sed ‘G‘ 每一行下追加空行
seq 1 10 | sed ‘g ‘ 变成全部空行
sed ‘/^$/d;G‘ 每一行追加空白行且删除原本所以空白行
seq 1 10|sed ‘N;s/\n/ /‘ seq 1 10|xargs -n2
[^A-Za-z0-9_ ] 方法可以使用在排除特殊字符
6.统计httpd日志文件状态大于400的ip地址数量
#!/bin/bash
dirpath=/var/log/httpd/access_log
while read line ; do
sta=`echo $line |sed -rn "s/.*\" ([0-9]+) .*/\1/p"`
if [ $sta -ge 400 ] ;then
echo $line |sed -rn "s/(.*) - -.*/\1/p" >> ./httpdstat
fi
done <$dirpath
cat ./httpdstat|sort -rn|uniq -c|sort -rn
rm -f ./httpdstat &>/dev/null
安装httpd服务,启动httpd服务,用不同ip访问网页产生错误和正常日志文件
执行脚本
[[email protected] testsh]#bash httpdstatic.sh
354 192.168.0.101
18 192.168.0.108
15 192.168.0.111
3 192.168.0.112
7.使用自定义yum安装ftp、openssh、tcpdump服务
- 执行命令批量安装服务
yum -y install ftp tcpdump openssh
后面提示
Installed:
ftp.x86_64 0:0.17-67.el7 openssh.x86_64 0:7.4p1-16.el7 tcpdump.x86_64 14:4.9.2-3.el7Complete!
成功安装 - 查看安装历史
[[email protected] testsh]#yum history info
Loaded plugins: fastestmirror, langpacks
Transaction ID : 16
Begin time : Sun Dec 16 17:56:29 2018
Begin rpmdb : 1304:04159b1e18a815a1fde89273c26b57ef2cb0405d
End time : 17:56:30 2018 (1 seconds)
End rpmdb : 1307:43802a135230576fae6af9f1bc4399169efa29d4
User : root <root>
Return-Code : Success
Command Line : -y install ftp tcpdump openssh
Transaction performed with:
Installed rpm-4.11.3-32.el7.x86_64 @network
Installed yum-3.4.3-154.el7.centos.noarch @anaconda
Installed yum-plugin-fastestmirror-1.1.31-42.el7.noarch @anaconda
Packages Altered:
Install ftp-0.17-67.el7.x86_64 @base
Install openssh-7.4p1-16.el7.x86_64 @network
Install tcpdump-14:4.9.2-3.el7.x86_64 @network
history info
原文地址:http://blog.51cto.com/6289984/2331142