# ./anonftp.sh
使用ftp登录服务,测试是否可以上传:
# ftp localhost //本机访问测试
……
Name (localhost:root): ftp //匿名登录
……
ftp> cd pub //切换到 pub/ 目录
……
ftp> put install.log //上传当前目录下的install.log 文件
……
ftp> quit //断开FTP连接
查看/var/ftp/pub新上传的文件:# ls -lh /var/ftp/pub/
示例:clone-vm7脚本
#!/bin/bash
# exit code:
# 65 -> user input nothing
# 66 -> user input is not a number
# 67 -> user input out of range
# 68 -> vm disk image exists
IMG_DIR=/var/lib/libvirt/images
BASEVM=rh7_template
ROOM=sed -n "1p" /etc/hostname | sed -r 's/(room)([0-9]{1,})(.\*)/\2/'
if [ $ROOM -le 9 ];then
ROOM=0$ROOM
fi
IP=sed -n "1p" /etc/hostname | sed -r 's/(.\*)([0-9]+)(.\*)/\2/'
read -p "Enter VM number: " VMNUM
if [ $VMNUM -le 9 ];then
VMNUM=0$VMNUM
fi
if [ -z “${VMNUM}” ]; then
echo “You must input a number.”
exit 65
elif [ ( e c h o (echo (echo {VMNUM}*1 | bc) = 0 ]; then
echo “You must input a number.”
exit 66
elif [ V M N U M − l t 1 − o {VMNUM} -lt 1 -o VMNUM −lt 1 −o {VMNUM} -gt 99 ]; then
echo “Input out of range”
exit 67
fi
NEWVM=rh7_node${VMNUM}
if [ -e I M G _ D I R / IMG\_DIR/ IMG_DIR/{NEWVM}.img ]; then
echo “File exists.”
exit 68
fi
echo -en “Creating Virtual Machine disk image…\t”
qemu-img create -f qcow2 -b I M G _ D I R / . IMG\_DIR/. IMG_DIR/.{BASEVM}.img I M G _ D I R / IMG\_DIR/ IMG_DIR/{NEWVM}.img &> /dev/null
echo -e “\e[32;1m[OK]\e[0m”
#virsh dumpxml ${BASEVM} > /tmp/myvm.xml
cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml
sed -i “/ B A S E V M / s / {BASEVM}/s/ BASEVM/s/{BASEVM}/${NEWVM}/” /tmp/myvm.xml
sed -i “/uuid/s/.*</uuid>/$(uuidgen)</uuid>/” /tmp/myvm.xml
sed -i “/ B A S E V M i ˙ m g / s / {BASEVM}\.img/s/ BASEVMi˙mg/s/{BASEVM}/${NEWVM}/” /tmp/myvm.xml
sed -i “/mac /s/a1/${ROOM}/” /tmp/myvm.xml
sed -i “/mac /s/a2/${IP}/” /tmp/myvm.xml
sed -i “/mac /s/a3/${VMNUM}/” /tmp/myvm.xml
sed -i “/mac /s/b1/${ROOM}/” /tmp/myvm.xml
sed -i “/mac /s/b2/${IP}/” /tmp/myvm.xml
sed -i “/mac /s/b3/${VMNUM}/” /tmp/myvm.xml
sed -i “/mac /s/c1/${ROOM}/” /tmp/myvm.xml
sed -i “/mac /s/c2/${IP}/” /tmp/myvm.xml
sed -i “/mac /s/c3/${VMNUM}/” /tmp/myvm.xml
sed -i “/mac /s/d1/${ROOM}/” /tmp/myvm.xml
sed -i “/mac /s/d2/${IP}/” /tmp/myvm.xml
sed -i “/mac /s/d3/${VMNUM}/” /tmp/myvm.xml
echo -en “Defining new virtual machine…\t\t”
virsh define /tmp/myvm.xml &> /dev/null
echo -e “\e[32;1m[OK]\e[0m”
文件导入导出操作
基本动作:r动作应结合-i选项才会存入,否则只输出
W动作以覆盖的方式另存为新文件
操作符 | 用途 | 指令示例 | 指令解析 |
r | 读取文件 | 3r b.txt | 在第3行下方插入文件b.txt |
4,7r b.txt | 在第4~7每一行后插入文件b.txt | ||
w | 保存到文件 | 3w c.txt | 将第3行另存为文件c.txt |
4,7w c.txt | 将第4~7行另存为文件c.txt |
sed -n ‘/^XX/w d.txt’ reg.txt 与sed -n ‘/^XX/p d.txt’ reg.txt > d.txt操作效果相同
sed复制剪切
模式空间:存放当前处理的行,将处理结果输出
若当前行不符合处理条件,则原样输出
处理完当前行再读入下一行来处理
保持空间:作用类似于“剪贴板”
默认存放一个空行(换行符\n)
基本动作:
复制:H:模式空间—[追加]—>保持空间
h:模式空间—[覆盖]—>保持空间
粘贴:G:保持空间—[追加]—>模式空间
g:保持空间—[覆盖]—>模式空间
示例:把第1-3行复制到文件末尾:sed ‘1,3H;$G’a.txt
改用’1h;2,3H;$G’可避免出现空行 (出现空行的原因是保持空间内默认已有一个空行)
示例:把第2行复制第4行:# sed ‘2H;4G’ a.txt 追加出现空行
# sed ‘2h;4G’ a.txt 不要空行
示例:把第1行剪切到文件末尾:sed ‘1h,1d;$G’a.txt
把第1-2行剪切到文件末尾:sed ‘1h;2H;1,2d;$G’a.txt
sed流控制
!取反操作 ——根据定址条件取反
示例:把/etc/passwd中能登录的用户及其密码(/etc/shadow)提取出来
找到使用bash作登录Shell的本地用户;列出这些用户的shadow密码记录
按每行“用户名 --> 密码记录”保存到getupwd.log
基本思路如下:
1.先用sed工具取出登录Shell为/bin/bash的用户记录,保存为临时文件/tmp/urec.tmp,并计算记录数量
2.再结合while循环遍历取得的账号记录,逐行进行处理
3.针对每一行用户记录,采用掐头去尾的方式获得用户名、密码字串
4.按照指定格式追加到/tmp/getuupwd.log文件
5.结束循环后删除临时文件,报告分析结果
示例:列出不使用bash的用户帐号记录:
# sed -n ‘/bash$/!p’ /etc/passwd
# sed -n ‘/bash$/s/:.*//p’ /etc/passwd
# sed -n ‘/:/bin/bash$/w /tmp/urec.tmp’ /etc/passwd
方法一:
#/bin/bash
/tmp/getupwd.log ## 创建空文件
sed -n ‘/:/bin/bash$/w /tmp/urec.tmp’ /etc/passwd ## 提取符合条件的账号记录
UNUM=$(egrep -c ‘.’ /tmp/urec.tmp) ## 取得记录个数
while [ i : = 1 − l e {i:=1} -le i:=1 −le UNUM ] ## 从第1行开始,遍历账号记录
do
UREC= ( s e d − n " (sed -n " (sed −n "{i}p" /tmp/urec.tmp) ## 取指定行数的记录
NAME=${UREC%%😗} ## 截取用户名(记录去尾)
PREC=KaTeX parse error: Expected group after '^' at position 11: (sed -n "/^̲NAME:/p" /etc/shadow) ## 查找与用户名对应的密码记录
PASS=${PREC#*:} ## 掐头
PASS=${PASS%%😗} ## 去尾,只留下密码记录
echo “ N A M E − − > NAME --> NAME −−> PASS” >> /tmp/getupwd.log ## 保存结果
let i++ ## 自增1,转下一次循环
done
/bin/rm -rf /tmp/urec.tmp ## 删除临时文件
echo “用户分析完毕,请查阅文件 /tmp/getupwd.log” ## 完成后提示
# chmod +x ./getupwd.sh
步骤二:测试、验证执行结果 # ./getupwd.sh
用户分析完毕,请查阅文件 # less /tmp/getupwd.log
方法二:
#/bin/bash
NAME=sed -n "/bash$/s/:.\*//p" /etc/passwd
## 截取用户名(记录去尾)
for i in $NAME
do
pass1=grep $i /etc/shadow
## 查找与用户名对应的密码记录
pass2=${pass1#*:} ## 掐头
PASS=${pass2%%😗} ## 去尾,只留下密码记录
echo “ i − − − > i ---> i −−−> PASS” >>/tmp/getupwd.log
done
echo “用户分析完毕,请查阅文件 /tmp/getupwd.log” ## 完成后提示
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
给大家整理的视频资料:
[外链图片转存中…(img-Z31lHHdg-1712346195802)]
给大家整理的电子书资料:
[外链图片转存中…(img-uGwzZKoS-1712346195802)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算