第二周作业
- 总结vim的三种模式切换,配置vimrc实现写脚本自动生成注释。
vim三种模式
- 命令/普通模式(默认)
- 插入模式
- 扩展模式
set ts=4
set expandtab
set ignorecase
set shiftwidth=4
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"#")
call setline(3,"#*****************************************************************")
call setline(4,"#Author: zhangwanye")
call setline(5,"#QQ: ")
call setline(6,"#Date: ".strftime("%Y-%m-%d"))
call setline(7,"#FileName: ".expand("%"))
call setline(8,"#URL: https://www.cblogs.top")
call setline(9,"#Description The test script")
call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")
call setline(11,"#*****************************************************************")
call setline(12,"")
endif
endfunc
auto BufNewFile * normal G
- 使用grep/sed实现获取/etc/sysconfig/network-script/ifcfg-eth0目录的/etc/sysconfig/network-script/。或获取目录的ifcfg-eth0
[root@rocky3 ~]#echo /etc/sysconfig/network-scripts/ifcfg-eth0| sed -rn 's#(.*)/([^/]+)/?#\2#p'
ifcfg-eth0
[root@rocky3 ~]#echo /etc/sysconfig/network-scripts/ifcfg-eth0 | sed -rn 's#(.*)/([^/]+)/?#\1#p'
/etc/sysconfig/network-scripts
- 完成编程题,可以让用户选择当前主机的所有网卡,选中网卡后,获取ip,网段,掩码。
ETH=`ifconfig | grep flags | cut -d":" -f1 | tr '\n' ' '`
ip_netmask(){
echo "ip: `ifconfig ${MENU} | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' |head -n1`"
#echo "netmask: `ifconfig ${MENU} | sed -nr 's/.*netmask (.*) broadcast.*/\1/p'`"
echo "netmask: `ifconfig ${MENU} | grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' |head -2 | tail -1`"
echo "segment:`hostname -I | cut -d. -f1-3`"
}
PS3="请选择网卡:"
select MENU in $ETH;do
case $REPLY in
1)
ip_netmask
;;
2)
ip_netmask
;;
3)
echo "退出"
break
;;
*)
echo "输入错误,请重新输入!"
;;
esac
done
通过ping命令检测在线的主机,打印在线的主机,写入一个文件中。当ip的结尾是奇数时,在目标主机或当前主机,批量添加user1到user100用户,否则添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后。
#用户
USER=root
#登录密码
PASS=123456
#网段开始
BEG=3
#网段结束
END=254
#查询本机IP
localIp=`hostname -I|awk '{print $1}'`
#网段
NET=${localIp%.*}.
yum -y install expect &> /dev/null
#记录在线主机
for((i="$BEG";i<="$END";i++));do
ping -c 1 -w 1 ${NET}$i &> /dev/null && echo "${NET}$i" >> ScanIp.log &
done
wait
unset i
AliveIP=(`cat ScanIp.log`)
for ip in ${AliveIP[*]};do
lastNum=`echo ${ip} | cut -d. f4`
if [ $((lastNum%2)) -eq 1 ];then
expect <<EOF
spawn ssh $USER@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$PASS\n" }
}
expect "#" { send "echo user{1..100}| xargs -n1 useradd\n" }
expect "#" { send "exit\n" }
expect eof
EOF
else
expect <<EOF
spawn ssh $USER@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$PASS\n" }
}
expect "#" { send "for i in {1..100};do groupadd group$i &>/dev/null;useradd user$i -g group$i -e `date +%F -d +1day` &>/dev/null;done\n" }
expect "#" { send "exit\n" }
expect eof
EOF
fi
done
-
总结分区,格式化,挂载命令的使用。
创建分区命令
fdisk 管理MBR分区 gdisk 管理GPT分区 parted 高级分区操作,可以交互式或非交互式重新设置内存中的内核分区表版本,适用于除了Centos 6外的版本
partprobefdisk
fdisk -l [-u] [device...] 查看分区 fdisk [device] 管理MBR分区 gdisk [device] 类fdisk的GPT分区工具子命令
p 分区列表 t 更改分区类型 n 创建新分区 d 删除分区 v 检验分区 u 转换单位 w 保存并退出 q 不保存并退出创建文件系统管理工具
mkfs.ext4 /dev/sdc xfs btrfs vfat mkfs -t 文件系统类型 /dev/DEVICE -L 'LABEL' 设定卷标 mke2fs ext系列文件系统专用管理工具选项
-t {ext2|3|4|xfs} 指定系统文件类型 -b {1024|2048|4096} 指定块block大小 -L 'LABEL' 设置卷标 -j -i # 为数据空间中每多少个字节创建一个inode;不应小于block块 -N # 指定分区中创建多少个inode -I 一个inode记录占用预留空间占总空间的百分比 -m # 默认5%,为管理人员预留空间占总空间的百分比挂载文件系统mount
mount [-fnrsvw] [-t vfstype] [-o options] device dir同一个设备可以同时挂载到多个挂载点,一个挂载点不能同时挂载多个设备
卸载文件系统 umount
umount 设备名|挂载点查看挂载
#通过查看/etc/mtab文件显示当前已挂载的所有设备 mount #查看内核追踪到的已挂载的所有设备 cat /proc/mounts查看挂载点情况
findmnt 挂载点|device查看正在访问指定文件系统的进程
lsof 挂载点 fuser -V 挂载点 fuser -v /mnt终止所有在正访问指定的文件系统的进程
fuser -km 挂载点 -
总结RAID特性,LVM特性。
RAID每个等级特性:
RAID等级 最少硬盘 最大容错 可用容量 安全性 目的 0 1 0 n 一个硬盘异常所有都异常 最大容量、最大速度 1 2 n-1 n-1 高,一个正常即可 最大安全性 5 3 1 n-1 高 最大容量、最小预算 6 4 2 n-2 较RAID5高 同RAID5,较安全 10 4 高 综合RAID 0/1优点 50 6 高 提升数据安全 60 8 高 提升数据安全 LVM特性:
LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
-
准备20G/30G的2个分区,生成VG,并创建10G的mylv, 基于LVM,将10G的LV格式化挂载分区到/data/mysql, 添加gentoo用户,指定家目录为/data/mysql,确保/data/mysql的权限是gentoo用户,并切换确保gentoo用户家目录正常,之后复制/etc/sysconfig到gentoo家目录。 此时扩容mylv到20G,确保数据不丢失。 之后缩容mylv到5G确保数据不丢失。 现在基于mylv生成快照,修改或删除原卷中的数据,基于快照卷还原数据。
#创建物理卷
[root@centos ~]#pvcreate /dev/sd{b,c}
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
#创建卷组
[root@centos ~]#vgcreate vg0 /dev/sd{b,c}
Volume group "vg0" successfully created
#创建逻辑卷
[root@centos ~]#lvcreate -L 10G -n mylv vg0
Logical volume "mylv" created.
[root@centos ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
mylv vg0 -wi-a----- 10.00g
#创建文件系统
[root@centos ~]#mkfs.ext4 /dev/vg0/mylv
[root@centos ~]#mkdir -p /data/mysql
#开机自动挂载
[root@centos ~]#vim /etc/fstab
UUID=a045e059-1a68-42b5-83fd-5f5e3f18afe8 /data/mysql ext4 defaults 0 0
#手动挂载
[root@centos ~]#mount -a
[root@centos ~]#df -h
/dev/mapper/vg0-mylv 9.8G 37M 9.2G 1% /data/mysql
#创建gentoo用户
[root@centos ~]#useradd gentoo -d /data/mysql
[root@centos ~]#chown -R gentoo. /data/mysql
[root@centos ~]#cp -r /etc/sysconfig /data/mysql
#扩容
[root@centos ~]#lvextend -r -L +10G /dev/vg0/mylv
#缩减
[root@centos ~]#umount /data/mysql
#检测文件系统
[root@centos ~]#fsck -f /dev/vg0/mylv
#缩减文件系统为5G
[root@centos ~]#resize2fs /dev/vg0/mylv 5G
#缩减逻辑卷为5G
[root@centos ~]#lvreduce -L 5G /dev/vg0/mylv
#挂载
[root@centos ~]#mount -a
[root@centos ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv vg0 -wi-ao---- 5.00g
#创建快照
[root@centos ~]#lvcreate -L 1G -n mylv-snapshot -s -p r /dev/vg0/mylv
#创建挂载点
[root@centos ~]#mkdir /mnt/mylvsnap
#挂载
[root@centos ~]#mount /dev/vg0/mylv-snapshot /mnt/mylvsnap/
#恢复快照
[root@centos ~]#lvconvert --merge /dev/vg0/mylv-snapshot
浙公网安备 33010602011771号