1.每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,“etc-年-月-日-时-分.tar.gz”
首先确保crond服务处于运行状态,通过crontab命令添加循环任务
echo "/bin/tar -zcf /data/backup/etc-\$(date '+%Y-%m-%d-%H-%M').tar.gz /etc/* &>/dev/null" > /root/bin/backup.sh
crontab -e
0 */12 * * * /root/bin/backup.sh
2.rpm包管理功能总结以及实例应用演示。
rpm是一个功能十分强大的软件包管理系统,它使得在Linux下安装、升级和删除软件包的工作变得容易,并且具有查询、验证软件包的功能。
安装软件包命令 | 说明 |
---|
rpm -ivh xxx.rpm | 安装指定的rpm软件包,还可以在线安装 |
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 | 导入签名 |
查询软件包命令 | 说明 |
---|
rpm -qa | grep ‘http’ | 查询包含http的包 |
rpm -qa “gpg-pubkey*” | 查询系统内的所有公钥包 |
rpm -qf /bin/ls | 查询ls文件是由哪个包提供 |
rpm -qi httpd | 查询httpd包的信息,这里包的名称必须完全正确,多一个少一个字符都不行 |
rpm -ql httpd | 查询包安装后产生哪些文件 |
rpm -qpi xxx.rpm | 查询未安装rpm包的信息,比如下载了一个包,看看它的描述信息 |
删除软件包命令 | 说明 |
---|
rpm -e gpg-pubkey-f4a80eb5-53a7ff4b | 删除指定的公钥软件包,包的名称要正确 |
3.yum的配置和使用总结以及yum私有仓库的创建。
yum是rpm的前端工具,可以解决软件包的依赖问题。yum的配置文件分两个部分:一个是 /etc/yum.conf 配置文件为所有仓库提供公共配置,一个是 /etc/yum.repos.d/*.repo 仓库配置文件。yum的日志文件保存在 /etc/log/yum.log 文件中。
常用命令 | 说明 |
---|
yum repolist | 显示仓库列表 |
yum list all http* | 显示所有安装和可用的以http开头的包信息,表达式支持通配符 |
yum install pkgname | 安装软件包 |
yum reinstall pkgname | 重新安装,可以解决软件的文件破坏或缺失问题 |
yum remove pkgname | 卸载软件包,可能卸载不干净,有些依赖包不会被卸载 |
yum whatprovides */lsof | 这个命令可以查找命令对应的软件包名称,很有用 |
yum history | 查看yum的事务历史 |
yum history undo ID | 适用于不能卸载依赖的包,使用yum事务来取消。至于安装的软件包是哪个事务ID,使用下面的info命令查看。 |
yum history info ID | 查看指定ID历史事务的信息 |
yum grouplist | 查看可安装的和已经安装的包组信息 |
yum groupinstall groupname | 安装包组 |
常用选项 | 说明 |
---|
-y | 自动回答yes |
-q | 静默安装 |
–disablerepo=repoid | 临时禁用指定的仓库 |
–enablerepo=repoid | 临时启用指定的仓库 |
–noplugins | 禁用所有插件 |
自定义仓库
在 /etc/yum.repos.d/ 目录中新建自定义仓库的配置文件,它最基本的几个要素包括:
[base] repoid仓库的标识
name=Centos tsinghua 仓库名称
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/ baseurl仓库的软件所在位置
gpgcheck=1 是否启用gpg校验
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 gpg公钥
enabled=1 是否启用仓库
4.写一个脚本实现列出以下菜单给用户:
(1)disk:show disk info信息
(2)mem: show memory info信息
(3)cpu: show cpu info信息
(*)quit
#!/bin/bash
echo "(1) disk: show disk info"
echo "(2) mem: show memory info"
echo "(3) cpu: show cpu info"
echo "(*) quit"
read -p "What's your choice:" choice
[[ $choice == 1 ]] && { echo "you choose $choice"; exit; }
[[ $choice == 2 ]] && { echo "you choose $choice"; exit; }
[[ $choice == 3 ]] && { echo "you choose $choice"; exit; }
[[ $choice == '*' ]] && { echo "you choose $choice"; exit; }
echo "you choose nothing."
5.sed用法总结并结合实例演示
sed 是一款过滤和转换文本的强大的流编辑器。sed是 stream editor 的缩写。它主要用来自动编辑一个或多个文件,简化对文件的反复操作。
语法格式如下
sed [option…] ‘script’ input-file…
其中script是由两部分构成:地址和命令。如果没有添加 -e,–expression,-f, 或 --file 选项, 那么第一个非选项参数将被当作是要执行的脚本。
常用选项 | 说明 |
---|
-n | 不自动打印所有行 |
-e | 后面跟script,只有一个脚本可以不写这个选项,要是多个脚本不能省略 |
-f | 后接文件路径,从文件中读取sed要执行的script |
-r | 开启扩展正则表达式的支持 |
-i.bak | 备份文件后编辑文件 |
示例 | 说明 |
---|
sed ‘3p’ /etc/passwd | 打印 /etc/passwd 文件的第三行,原文件所有行也将打印 |
sed -n ‘3p’ /etc/passwd | 只打印 /etc/passwd 文件的第三行 |
sed -n ‘1,4p’ /etc/passwd | 只打印 /etc/passwd 文件的第一行到第四行 |
sed -n ‘/root/p’ /etc/passwd | 只打印 /etc/passwd 文件中包行root字符的所有行 |
sed -n -e ‘/root/=’ -e ‘/root/p’ /etc/passwd | 第一行打印行号,第二行打印行内容,循环打印所有匹配到的行 |
sed ‘/root/a\superman\nover’ /etc/passwd | 在匹配行的下一行添加superman,并换行添加over。支持添加多行内容。 |
sed ‘/root/i\superman\nover’ /etc/passwd | 在匹配行的上一行添加superman,并换行添加over。支持添加多行内容。 |
sed ‘/root/c\superman\nover’ /etc/passwd | 在匹配行的行替换为superman和over新行。支持替换为多行内容。 |
sed ‘/^$/d’ file | 删除file中的空行并打印 |
sed –n ‘s/root/&superman/p’ /etc/passwd | 将root替换为rootsuperman字符串,其中&代表是每一个匹配的结果,如一行中有多个字符串匹配则只选取第一个匹配结果 |
sed –n ‘s/root/&superman/gp’ /etc/passwd | 将所有的root替换为rootsuperman,g表示行内全局替换 |
sed -i.bak ‘1d’ /etc/passwd | 以passwd.bak文件名备份后删除passwd文件的第一行,不会打印到屏幕上 |
echo /etc/fstab | sed -nr ‘s@(/.*/)([^/]+/?)@\1@p’ | 替换还支持后向引用 |
6. 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
sed -nr 's/^(.*) - -.*" ([0-9]{3}) .*/\2 \1/p' /var/log/httpd/access_log | grep -v '^[0-3]' | cut -d' ' -f2 | sort -nr | uniq -c
awk '$9>400{print $1}' /var/log/httpd/access_log |uniq -c |sort -nr
7. 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包
#!/bin/bash
osver=$(grep -o [0-9] /etc/centos-release | head -n1)
cd /etc/yum.repos.d
if ls *.repo &> /dev/null ;then
if ! ls bak &> /dev/null;then
mkdir bak
fi
/bin/mv *.repo bak &> /dev/null
fi
cat << eof > base.repo
[base]
name=Centos tsinghua
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/os/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$osver
eof
yum -y -q install ftp openssh curl wget tcpdump &>/dev/null
unset osver