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> 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
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=
- enabled=1
- gpgkey=
禁用 network yum 源时改为 enabled=0
- [root@centos7 ~]# 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
- [root@centos7 ~]#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
测试:
- root@centos7 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///: 查找替换, 支持使用其它分隔符, s@@@,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 访问网页产生错误和正常日志文件
执行脚本
- [root@centos7 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.el7
- Complete!
成功安装
查看安装历史
- [root@centos7 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
- 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://www.bubuko.com/infodetail-2887386.html