Linux操作系统,从入门到精通02

Linux操作系统

目录

Linux操作系统

一、相关解释

1. 关于" 脚本后缀含义 "的解释

2. 关于" 特殊符号 "的解释

3. 关于" 判断文件状态 "的解释

4. 关于" 整数比较 "的解释

5. 关于" 字符串对比 "的解释

6. 关于" 常用数值运算方式 "的解释

7. 关于" 字符串判断 "的解释

8. 关于" 条件判断结构 "的解释

9. 关于" if条件判断结构 "的解释

10. 关于" case条件判断结构 "的解释

11. 关于" for循环语法结构 "的解释

12. 关于" while循环语法结构 "的解释

13. 关于" shell函数 "的解释

14. 关于脚本中断及退出" continue,break,exit "的解释

15. 关于" 字符串截取 "的解释

16. 关于" 字符串替换 "的解释

17. 关于" 字符串掐头去尾 "的解释

18. 关于" shell数组 "的解释

19. 关于" 正则表达式 "的解释

20. 关于" sed流式编辑器 "的解释

21. 关于" awk编程语言 "的解释

22. 关于" cron周期性计划任务 "的解释

23. 关于" SELinux "的解释

24. 关于" 常见协议及端口 "的解释

25. 关于" firewall "的解释

26. 关于" iptables "的解释

27. 关于" crul "的解释

28. 关于" visudo,sudo "的解释

29. 关于" OpenSSH "的解释

30. 关于" scp "的解释

31. 关于" Linux和Windows本地解析文件 "的解释

32. 关于" 文件共享服务FTP "的解释

33. 关于" vsftpd "的解释

34. 关于" NFS网络文件系统 "的解释

35. 关于" NAS,DAS,SAN "的解释

36. 关于" NTP网络时间协议 "的解释

37. 关于" rsync "的解释

38. 关于" inotify "的解释

39. 关于" Ansible "的解释

40. 关于" stratis卷 "的解释

二、相关操作

1. 关于" 查看shell下有哪些解释器 "的操作 

2. 关于" 编写并执行一个脚本 "的操作

3. 关于" 编写创建用户脚本 "的操作

4. 关于" 编写批量查看系统信息脚本 "的操作

5. 关于" 编写搭建本地软件yum仓库脚本 "的操作

6. 关于" 调用解释器执行脚本,不需要执行权限 "的操作

 7. 关于" 利用if条件判断结构编写猜数字脚本 "的操作

8. 关于" 利用if条件判断结构编写安装软件包脚本 "的操作

9. 关于" 利用if条件判断结构编写判断成绩脚本 "的操作

10. 关于" 利用case条件判断结构编写安装软件包脚本 "的操作

11. 关于" 利用for循环语法结构编写循环创建用户脚本 "的操作

12. 关于" 利用for循环语法结构编写测试服务器连通性脚本 "的操作

13. 关于" 利用while循环语法结构编写抽奖的脚本 "的操作

14. 关于" 利用while循环语法结构编写监控网卡进出口流量脚本 "的操作

15. 关于" 设置脚本开机自启动 "的操作

16. 关于" 主机型防火墙规则配置 "的操作

17. 关于" 网络型防火墙规则配置 "的操作

18. 关于" 禁掉MAC地址 "的操作

19. 关于" Linux系统之间建立连接 "的操作

20. 关于" Windows与Linux系统之间建立连接 "的操作

21. 关于" 服务器同步NTP时间流程 "的操作


一、相关解释

1. 关于" 脚本后缀含义 "的解释

① .sh(shell写的脚本)

② .py(python写的脚本)

③ .jsp(java写的脚本)

④ .c(C语言写的脚本)

2. 关于" 特殊符号 "的解释

" "(双引号,引用整体)

① echo "[local]

② > name=local_centos

③ >baseurl=xxxx"

① date "+%F %X"

' '(单引号,引用整体并取消所有特殊字符含义)

$[ ](四则运算:+,-,*,/,%除法取余数)

① echo $[2+1]

② echo $[2-1]

③ echo $[2*2]

④ echo $[10/2]

⑤ echo $[10%3] =1

$( )(将命令的输出结果作为参数)=` `

 tar -czf "log.tar.gz_`date"+%F %X"`" /var/log/*.log

3. 关于" 判断文件状态 "的解释

echo $?返回上一个命令状态,0则是,1则不是)

① [ -e /etc/passwd ](判断目录或文件是否存在)

② [ -d /etc/passwd ](判断目录是否存在)

③ [ -f /root/ken.txt ](判断文件是否存在)

-r(可读为真),-w(可写为真),-x(可执行为真):都需要"[ ]"和echo $?搭配使用

4. 关于" 整数比较 "的解释

① [ 1 -gt 1 ](大于)

② [ 1 -ge 1 ](大于等于)

③ [ 1 -eq 1 ](等于)

④ [ 1 -lt 1 ](小于)

⑤ [ 1 -le 1 ](小于等于)

⑥ [ 1 -ne 1 ](不等于)

都需要与echo $?搭配使用

5. 关于" 字符串对比 "的解释

① [ $USER == root ](等于)

② [ $USER != root ](不等于)

都需要与echo $?搭配使用

6. 关于" 常用数值运算方式 "的解释

① $[](四则运算:+,-,*,/,%)

② $(())(数值运算工具,echo $((5+1))

③ expr(echo `expr 1 + 1`

               echo `expr 5 \* 1`

              *需要\转译)

④ let(let a=1+1,echo $a

            let i=i+1 简写 let i++

            let i=i*2 简写 let i*=2)

7. 关于" 字符串判断 "的解释

① -z(字符串的值为空为真,[ -z /etc/passwd ],echo $?

② -n(字符串的值非空为真)相当于!z

8. 关于" 条件判断结构 "的解释

当条件满足时执行什么操作,当条件不满足时执行什么操作

① &&(并且,A && B,当A命令执行成功才会执行B,如果A执行失败则B不执行)

rpm -q vsftpd && systemctl start vsftpd

② ||(或者,A || B,当A命令执行失败才会执行B,如果A执行成功则B不执行)

rpm -q vsftpd || yum -y install vsftpd

③ ;(条件之间没有逻辑关系)

touch /opt/xx.txt;rpm -q vsftpd;ls /root;cd /opt;ls

9. 关于" if条件判断结构 "的解释

if单分支语句,只能判断对,不能判断错

比较常用

① if [条件判断];then     

②    条件成立时,执行的命令  

③ fi

① if [ -f /etc/passwd ];then

②    echo ‘存在’

③ fi

比较少用

① if [条件判断]

②    then

③    条件成立时,执行的命令

④ fi    

① if [ -f /etc/passwd ]

②    then

③    echo '存在'

④ fi

if双分支,既能判断对,也能判断错

① if [条件判断];then  

②    条件成立时,执行命令a

③ else  

④    条件不成立时,执行命令b

⑤ fi  

① if [ -f /opt/abcd.txt ];then

②    echo '存在'

③ else

④    touch /opt/abcd.txt

⑤    echo 'abcd.txt文件创建成功'

⑥ fi

① if rpm -q vsftpd -eq 0;then

②    echo "存在"

③ else

④    echo "不存在"

⑤ fi

if多分支语句

① if [条件判断1];then

②      条件1成立时,执行命令a  

③    elif [条件判断2];then   

④      条件2成立时,执行命令b 

⑤    elif [条件判断3];then   

⑥      条件3成立时,执行命令c 

⑦ ...省略更多条件  

⑧ else  

⑨      所有命令都不成立时,执行命令d 

⑩ fi 

10. 关于" case条件判断结构 "的解释

case从变量中取值,如果变量中的值与预设的值匹配,则执行对应的命令(应用场景没有if多)

① case $变量名 in

② 值1)

③      执行的命令xx;;

④ 值2)   

⑤      执行的命令yy;;

⑥ ...省略其他分支

⑦ *)

⑧      执行的命令zz;;

⑨ esac

vim case.sh

① #!/bin/bash

② read -p "请输入您喜爱的老师:"xxoo

③ case $xxoo in

④ 仓老师)

⑤        echo "1号房间";;    

⑥ 小泽老师)

⑦        echo "2号房间";;

⑧ *)

⑨        echo "老师休假了";;

⑩ esac

11. 关于" for循环语法结构 "的解释

for循环处理,根据变量的取值,重复执行xx命令

① for 变量名 in 值1 值2 值3 值N...

② do

③     执行的命令

④ done

12. 关于" while循环语法结构 "的解释

死循环,只要条件成立就重复执行命令

① while 条件判断

② do

③      执行的命令

④ done

编写while循环脚本

① #!/bin/bash

② while [ 1 == 1 ]

③ do

④     echo hello is babe     

⑤ done

(会一直循环)

指定循环次数

① #!/bin/bash

② NUM=1

③ while [ $NUM -le 5 ]

④ do

⑤     echo hello is babe

⑥     let NUM++(对变量加1,下次循环就是2)    

⑦ done

13. 关于" shell函数 "的解释

在shell环境中,将一些需要重复使用的操作,定义为公共的语句块,即可称为函数(给一堆命令取一个别名)函数可以使脚本中的代码更加简洁,增强易读性,提高脚本的执行效率

函数定义格式1

① function 函数名 {  

②       执行的命令1  

③       执行的命令2  

④        ...省略更多的命令

⑤ }    

函数定义格式2(用的比较多)

① 函数名( ){

②     执行的命令1

③     执行的命令2

④     ...省略更多的命令

⑤ }

14. 关于脚本中断及退出" continue,break,exit "的解释

continue(结束本次循环,进入下一次循环)

break(结束整个循环)

exit(退出脚本)

① #!/bin/bash

② for i in 'seq 5'

③ do

④   continue(会跳过echo $i这个循环,直接进入下个循环)

⑤   ecoh $i

⑥ done

⑦ echo Over

① #!/bin/bash      

② for i in {1..5}(跳过3这个循环/结束3与之后的所有本次循环/结束3与之后的所有循环)

③ do

④     [ $i -eq 3 ]&&continue /break/exit

⑤     echo $i

⑥ done

15. 关于" 字符串截取 "的解释

字符串截取的常用方法 ${变量名:起始位置:长度}

${}截取字符串时,起始位置是从0开始

① phone=13812345678

② echo $phone

③ echo ${#phone}(#:显示多少个数)

④ echo ${phone:0:3}(输出138)

截取一个随机的8位密码

① #!/bin/bash

② x=qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890

③ for i in {1..8}

④ do

⑤     num=$[RANDOWM%62](肯定是小于62,控制到62以内)

⑥     tmp${x:num:1}

⑦     pass=${pass}$tmp

⑧ done

⑨ echo $pass

16. 关于" 字符串替换 "的解释

只替换第一个匹配的结果

① vim编辑器 -> 底线命令模式 -> :%s/旧内容/新内容/

② ${变量名/xx/yy}

echo ${phone/1234/****}(输出138****5678)

替换全部匹配的结果

① ${变量名//xx/yy}

17. 关于" 字符串掐头去尾 "的解释

① 从左到右,最短匹配删除,${变量名#*关键词}  

echo ${phone#138} (输出12345678) 

如果关键词不在开头则需要加*,会导致关键词前所有字符都删除

② 从左向右,最长匹配删除,${变量名##*关键词}  只要有关键词前面全掐

③ 从右向左,最短匹配删除,${变量名%关键词*}  

④ 从右向左,最长匹配删除,${变量名%%关键词*}

把文件以.doc结尾的扩展名,全部改为.txt

touch {1..100}.doc

ls

vim txt-doc.sh

① #!/bin/bash

② for i in ' ls /script/*.doc '

③ do

④     mv $i ${i%doc}txt 或 mv $i ${i/doc/txt}

⑤ done

18. 关于" shell数组 "的解释

定义数组方式:数组名=(值1 值2 值3 ...值n)

① b=(xiaofang xiaowei xiaoming xiaohe)

② echo $b(输出xiaofang,默认取第1个值,按照下标取值,下标从0起使,0就是数组内的第一个值)

③ echo ${b[1]}(输出xiaowei)

④ echo ${b[@]}(输出xiaofang xiaowei xiaoming xiaohe)

新增加数组的值b[4]=boduo , echo ${b[4]}(输出boduo)

① #!/bin/bash

② x=(vsftpd httpd gcc openssl-devel pcre-devel)

③ for i in ${x[@]}

④ do

⑤     yum -y install $i

⑥ done

19. 关于" 正则表达式 "的解释

基本正则符号

① ^(匹配行首,过滤以什么开头)grep ^root /etc/passwd

② $(匹配行尾,过滤以什么结尾)grep bash$ /etc/passwd 

③ [](集合,匹配集合中的任意单个字符)grep [123](1与2没关系,单个字符)

④ [^](对集合取反)grep [^123](排除1、2、3单个字符)

⑤ .(匹配任意单个字符)grep .oot /etc/passwd

⑥ *(匹配前一个字符出现的任意次数)grep oot* /etc/passwd

扩展正则符号 (使用时需要用egrep过滤)

① ()(组合为整体,保留(复制))egrep "(root|test)" /etc/passwd(过滤完整的root,|为或者)

② |(或者)

③ \b(单词边界)egrep "(\bthe)" xx.txt(过滤贴着the左侧没有b的数据如abcthe)

20. 关于" sed流式编辑器 "的解释

sed是一个非交互的文本编辑器,与vim类似

常用选项 : -n(只把sed处理的行输出)

                  -i(直接修改文件内容,不加-i不会真正改变)

p(print,打印指定的行)

① sed -n 6p /etc/passwd(打印第6行)

② sed -n 2,4p /etc/passwd(打印2到4行)

③ sed -n "2p;4p" /etc/passwd(打印第2行和第4行)

d(删除指定的行

① sed -i '6d' passwd(删除第6行)

② sed -n '6d' passwd(查看第6行内容)

s(字符串替换,s/旧字符/新字符/)

① sed -i 's/xxoo/haha/' passwd

② sed -n 's/xxoo/haha/pg' passwd

③ sed -i 's/xxoo/haha/g' passwd(全文替换)

① sed -n '/daemon/p' passwd(利用正则表达式过滤daemon的内容,要放在" / "里)

② sed -i '/bash$/s/daemon/xxx/g' passwd(先过滤bash结尾的内容,再替换全文)

③ sed -n '7s/daemon/xxoo/p' passwd(输出替换第七行的内容)

21. 关于" awk编程语言 "的解释

awk过滤数据支持打印某列

① awk '/admin/{print}' passwd 等于 awk '/admin/' passwd

② free -h | awk '/Mem/{print "剩余内存\t"$4}'(处理包含Mem行,打印出匹配行第四列内容,\t是制表符)

③ df -h / | grep /$(以根结尾) | awk '{print $5}'

常用选项:print(常用的打印指令)

                  -F(指定分隔符,也可通过[ ]集合匹配多种单个字符)

                         若不指定,默认以空格为tab键为默认分隔符

① awk -F: '/admin/{print $1}' passwd

② awk -F: '/admin/{print $1,$7}' passwd(打印第1列和第7列)

awk 'BEGIN{指令} {指令} END{指令}' 文件名

① awk -F : 'BEGIN{print "用户名\t\t解释器"}{print $1 "\t\t"$7}' /etc/passwd

用户名  解释器

#   root   /bin/bash

#   bin    /usr/bin/nologin

 awk -F : 'BEGIN{print "用户名\t\t解释器"}{print $1 "\t\t"$7}'END{print"一共NR个用户"} /etc/passwd

用户名  解释器

#   root   /bin/bash

#   bin   /usr/bin/nologin

#   一共2个用户

NR代表行号,NF代表列

22. 关于" cron周期性计划任务 "的解释

用于定期备份数据

软件包名:cronie主包,crontabs提供管理命令包

服务名:crond 一般已启动

日志文件:/var/log/cron

cron定义时间格式:*             *             *             *             *             执行的命令

                         分钟0-59 小时0-23 日期1-31 月份1-12 星期0-6,0为周日

                                        (日期和星期一般不会同时定义

① 00  3  *  *  5  bash /script/log_bak.sh

星期五的凌晨3点执行该脚本,如果00是*则会备份60次

② 30  3  *  *  1,3,5  bash  /script/log_bak.sh

每周一、三、五凌晨3点30分执行该脚本

③ 30  3  *  *  1-5  bash /script/log_bak.sh

每周一至周五凌晨3点30分执行该脚本

④ 00  */2  *  *  0-6  bash  /script/log_bak.sh

每天每隔2小时执行该脚本

vim log_bak.sh

① #!/bin/bash

② tar -zcf /tmp/log.tar.gz_`date+%F-%H-%M-%S` /var/log/*

` `:取结果

① crontab -e(打开文本编辑器)写入 */1  3  *  *  5  bash /script/log_bak.sh

② crontab -e -u 用户名(编写计划任务,一般不用-u)

③ crontab -l -u 用户名(查看计划任务)

④ crontab -r -u 用户名(清除计划任务)

23. 关于" SELinux "的解释

系统内核安全机制(企业一般关掉)

SELinux运行模式:

① enforcing 强制模式(开启状态)

② permissive 宽松模式(允许任何访问)

③ disabled 禁用模式(关掉状态)

SELinux运行模式切换:

① getenforce查看当前运行模式

② setenforce 1|0临时切换运行模式,1是强制模式,0是宽松模式,临时切换命令不支持禁用模式

③ vim /etc/selinux/config

     SELINUX=更改为你需要的模式

  (永久切换运行模式,重启生效,一般在命令行切换,也可以查看运行模式名称

24. 关于" 常见协议及端口 "的解释

① http(超文本传输协议,明文协议,可以被别人抓包,查看中间传输了什么)端口为80

② https(安全的超文本传输协议,加密协议)端口为443

③ ssh(远程连接协议)端口为22

设备和服务器建立连接一般都是TCP或UDP协议

25. 关于" firewall "的解释

环境准备

① yum -y install httpd 与 rpm -q httpd安装httpd服务

② ss -ntlp | grep httpd查看运行端口

③ systemctl start httpd启动服务

④ systemctl status httpd查看运行状态

⑤ systemctl stop firewalld测试机访问不通因为服务器开着防火墙

防火墙种类

① 软件防火墙(通过软件技术实现数据包过滤,敲命令)

② 硬件防火墙(硬件设备,实现数据包过滤,相当于云主机的安全组)

防火墙类型

① 主机型防火墙保护自己本机应用程序,小企业

② 网络防火墙保护内部其他服务器应用程序,大企业

防火墙管理工具

① firewalld(CentOS7系统使用,但还是iptables用的较多)

② iptables(CentOS6系统使用)

netfilter(软件型防火墙,工作在主机或网络边缘,是Linux内核自带的一个模块,对用户数据进行过滤)

防火墙预设安全区域

① pubilc(仅允许访问本地的sshd、DHCP、ping等少量服务,HTTP服务访问不了)

② trusted(允许任何访问)

③ block(拒绝任何来访请求,有明确回应Destination Host Prohibited,得到回应并容易被流量攻击)

④ drop(拒绝任何来访请求,没有任何回应)

① firewalld-cmd(管理工具

② firewall-cmd --get-default-zone(查看默认区域

③ firewall-cmd --set-default-zone=trusted(修改默认区域为trusted

④ firewall-cmd --zone=区域名 --list-all(查看区域规则

# target:default

# services:ssh dhcpv6-client 查看哪些服务能够被访问

⑤ firewall-cmd --zone=public --add-service=http(为public区域添加httpd协议

⑥ firewall-cmd --zone=public --remove-service=http(移除public区域的httpd协议

26. 关于" iptables "的解释

iptables框架

iptables的五链

① INPUT链(入站链,入站规则,对目标地址为本机的数据包进行检测和过滤,主机防火墙

② OUTPUT链(出站链,出站规则,处理本机发出的数据包,对从本机发送到外部网络的数据包进行检测和过滤,主机防火墙但一般不配置

③ FORWARD链(流量转发链,用于将数据包转发到本机的另外一个网络所需要的链,网络型防火墙

④ PREROUTING链(客户端目的地址转换链,用于处理到达本机的数据包,在路由转发前,转换目的IP地址。用于DNAT目的地址转换)

⑤ POSTROUTING链(内部源地址转换链,用于处理离开本机的数据包,转换源IP地址。用于SNAT源地址转换)

iptables的4表

① filter(iptables的默认表,用于对数据包进行过滤,包含INPUTOUTPUTFORWARD三个链)

② nat(地址转换表,不能过滤数据包,用于修改数据包中的源IP和目的IP和端口映射,包含PREROUTINGPOSTROUTINGOUTPUT三个链)

③ mangle(包标记表,修改数据包的一些标志位,以便对数据包进行策略路由,包含PREROUTINGFORWARDPOSTROUTINGINPUTOUTPUT五个链,决定是否跟踪数据包)

④ raw(状态跟踪表,用于跟踪数据包但很消耗资源,包含OUTPUTPREROUTING两个链)

① iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作](iptables命令格式,若不指定表明默认查看filter表)

② iptables -A INPUT -p icmp -j REJECT(在filter表的INPUT链末尾追加一条规则,拒绝所有ICMP协议的数据包)

③ iptables -l INPUT -p icmp -j REJECT(在filter表的INPUT链开头插入一条规则,拒绝所有ICMP协议的数据包)

# 防火墙特性,从上到下匹配,匹配即停止

④ iptables -L(查看规则)

# target(目标操作,排名4) prot(条件,排名2) source(源,排名1) destination(目标,排名3)

# Chain INPUT (policy ACCEPT)

# Chain FORWARD (policy ACCEPT) 

# Chain OUTPUT (policy ACCEPT)

       默认规则            放行所有

->

# Chain INPUT (policy ACCEPT)

# target prot source destination

⑤ iptables -t filter -I INPUT -P tcp --dport 22 -j ACCEPT(更改默认规则,让ssh的连接端口22能够被访问)

⑥ iptables -P INPUT DROP(将filter表的INPUT链默认规则修改为DROP,不能设置为REJECT)

⑦ iptables -nL(查看ipitables的所有规则)

其中 -n 能以数字形式显示地址、端口等信息

⑧ iptables -nL --line-numbers(查看规则并显示规则的行号)

target目标操作 [-j 目标操作]

① ACCEPT允许通过/放行

② DROP直接丢弃,不给出任何回应

③ REJECT拒绝通过,有明确回应

① iptables -D 3(删除链内指定的序号或内容的一条规则)

② iptables -t nat -F(清空nat表的所有规则)

port条件 [条件]

① 协议匹配p协议名称

② 地址匹配-s 源地址、-d 目标地址

③ 接口匹配-i 接受数据的网卡、-o 发送数据的网卡

④ 端口匹配--sport 源端口号、--dport 目标端口号

如果在filter表INPUT链规则没有找到匹配条件,则执行防火墙默认规则

① iptables -I INPUT -p tcp --dport 80 -j REJECT(拒绝访问网站,若没指定端口默认所有)

② iptables -I INPUT-s 192.168.0.24 -p tcp --dport 80 -j REJECT(单独拒绝某个IP访问网站)

③ iptables -I INPUT-s 192.168.1.0/24 -p tcp --dport 80 -j REJECT(单独拒绝某个网段访问网站)

iptables 指定端口

① iptables -t filter -I FORWARD -p tcp -m multiport --dports 20,21,80,443 -j ACCEPT(在filter表的FORWARD链中插入一条规则,允许TCP协议的流量通过端口20、21、80和443)

web服务不一样的端口有不同的业务,multiport是多端口模块

iptables 指定IP范围

① iptables -t filter -I FORWARD -p tcp --dport 80 -m iprange --src-range 192.168.1.20-192.168.1.30 -j REJECT(在filter表的FORWARD链中插入一条规则,拒绝来自IP范围192.168.1.20到192.168.1.30的TCP流量访问端口80)

iprange模块是IP范围模块,--src-range是源IP范围,--dst-range是目标IP范围

iptables 进行SNAT源地址转换

① iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -p tcp -j SNAT --to-source 192.168.0.80(在nat表的POSTROUTING链中插入一条规则,将源IP地址为192.168.1.0/24的TCP流量的源地址转换为192.168.0.80)

-s是指定源地址为192.168.1.0网段的地址,-p通过TCP协议,-j SNAT进行SNAT转换也就是源地址转换,--to-source是转换源地址为192.168.0.80

① iptables -t nat -nL(列出NAT表中所有规则)

② cat /var/log/httpd/access_log(查看所有HTTP请求日志)

③ service iptables save(所有iptables规则都是临时的,此条命令能将当前的iptables规则永久保存)

④ rm -rf /etc/sysconfig/iptables(删除所有iptables规则)

⑤ iptables -F(清空iptables所有表的所有链)

⑥ iptables -t nat -F(清空NAT表中所有链规则)

⑦ iptables -t mangle -F(清空mangle表中所有链规则)

⑧ iptables -t raw -F(清空raw表中所有链规则)

⑨ vim /etc/sysconfig/iptables(也可以通过修改配置文件删除规则)

27. 关于" crul "的解释

① crul 192.168.0.80(在Linux系统访问网站)

28. 关于" visudo,sudo "的解释

vim /etc/sudoers 或 visudo(修改配置文件,为用户设置指向权限许可)

为lisi用户授予相关脚本的执行权限,允许通过systemctl工具来管理系统服务

编辑配置文件

① visudo

# root ALL=(ALL) ALL

# lisi ALL=(root) /bin/systemctl

切换lisi用户验证sudo权限

① su - lisi

② sudo -l(查看当前用户被授权的特定命令)

# (root) /bin/systemctl

通过sudo启动服务

① sudo systemctl start httpd

② sudo systemctl status httpd

③ sudo systemctl stop httpd

为lisi用户添加sudo权限,允许lisi用户可以创键用户,且能修改用户密码

编辑配置文件

① visudo

# lisi ALL=(root) /bin/systemctl,/sbin/useradd,/bin/passwd,!/bin/passwd root

解释:允许的命令systemctl、useradd添加新用户和用户组、paswd更改用户密码,!取反不允许的命令使用/bin/passwd来更改root密码

切换lisi用户验证sudo权限

① sudo useradd haha

② id haha

修改haha用户密码

① sudo passwd haha

为sudo机制启用日志记录,以便跟踪sudo执行操作

编辑配置文件

① visudo(Defaults logfile="/var/log/sudo.log"  #手动添加这一条)

普通用户执行sudo命令

① sudo systemctl start httpd

查看日志是否有记录

② cat /var/log/sudo.log

# Sep 24 12:57:09 : lisi : TTY=pts/1 ; PWD=/home/lisi ; USER=root ;

# COMMAND=/bin/systemctl start httpd

29. 关于" OpenSSH "的解释

OpenSSH开源免费提供ssh远程安全登录的程序,ssh协议端口为22/tcp,服务名为sshd,而ssh提供密钥认证管理方式

修改OpenSSH主配置文件,以提高ssh服务安全性

vim /etc/ssh/sshd_config

# Port 22(ssh默认监听端口)

# PermitRootLogin yes(是否允许root用户连接,yes允许,no不允许。企业一般不允许root连接)

# PermitEmptyPasswords no(不允许空密码登录)

# PasswordAuthentication yes(允许用密码登录,但一般只有允许密钥登录的需求)

# AllowUsers 用户1 用户2 test [email protected]/24(定义账号白名单,允许test用户登录,允许192.168.0.0到192.168.0.255范围的IP地址用户名为test的登录)

# DenyUsers 用户1 用户2(定义账号黑名单)

systemctl restart sshd(修改完重启配置文件)

30. 关于" scp "的解释

① scp /root/hello.txt [email protected]:/root(远程拷贝,将本地文件/root/hello.txt拷贝到远程主机192.168.0.112的/root目录下)

② scp [email protected]:/etc/fstab /opt(远程拉取,从远程主机192.168.0.27的/etc/fstav文件拉取到本地/opt目录下。scp可以实现跨主机文件拷贝,但前提时都安装了SSH服务和密钥验证)

31. 关于" Linux和Windows本地解析文件 "的解释

Linux本地解析文件:/etc/hosts

# 127.0.0.1(IP地址)  localhost(域名)  ping域名自动解析成IP地址

Windows本地解析文件:c:\Windows\System32\drivers\ect\hosts

32. 关于" 文件共享服务FTP "的解释

基于TCP协议端到端的数据传输协议

① 数据端口20(用于数据传输)

② 命令端口21(接受客户端发出的相关FTP命令)

工作模式

① 主动模式(客户端随机选择非特殊端口(>1023)连接FTP服务器的命令端口21,FTP服务器通过本地的数据端口20主动向客户端的随机端口发起连接请求,开始传输数据)

② 被动模式(客户端发送PASV命令给FTP服务器进入被动模式,FTP服务器在本地打开一个随机端口,客户端的随机端口连接到FTP服务器的随机端口后,开始传输数据)

可以实现ftp功能的软件

① WU-ftpd

② proftpd

③ pureftp

④ vsftpd

⑤ ServU

⑥ FileZilla

客户端访问ftp服务器工具

① ftp

② lftp、lftpget

③ wget

④ curl

⑤ FileZilla

⑥ 浏览器

33. 关于" vsftpd "的解释

vsftpd用户访问模式

① 客户端 -> FTP服务器(匿名用户:最不安全的一种认证模式,任何人无须密码验证旧能直接登录FTP服务器)

② 客户端 -> FTP服务器(本地用户:通过Linux系统本地的账户密码信息进行认证模式)

③ 客户端 -> FTP MySQL(虚拟用户:更安全的一种认证模式。它需要为FTP服务单独建立用户数据文件,虚拟出来进行密码验证的账户信息,而这些账户信息在FTP服务器实际不存在)

vsftpd服务相关参数

① /var/ftp(匿名用户共享目录)

② /etc/vsftpd(配置文件所在目录)

③ /etc/vsftpd/vsftpd.conf(主配置文件)

④ /etc/sbin/vsftpd(主程序文件)

⑤ /etc/vsftpd/ftpusers(黑名单)

⑥ /etc/vsftpd/user_list(控制名单)

⑦ /var/log/xferlog(日志目录)

vsftpd环境准备

① hostnamectl set-hostname ftp-server修改FTP服务器主机名

② yum -y install vsftpd安装软件

③ systemctl start vsftpd启动服务

④ systemctl status vsftpd查看服务运行状态

⑤ yum -y install ftp lftpFTP客户端下载连接工具

⑥ ftp 192.168.0.80 和 lftp 192.168.0.80客户端访问FTP服务器

vim /etc/vsftpd/vsftpd.conf 默认配置文件内容解读

# anonymous_enable=YES

# local_enable=YES

# write_enable=YES

# local_umask=022

# dirmessage_enable=YES

# xferlog_enable=YES

# connect_from_port_20=YES

# xferlog_std_format=YES

# listen=NO

# listen_ipv6=YES

# pam_service_name=vsftpd

# userlist_enable=YES

# tcp_wrappers=YES

/etc/vsftpd/vsftpd.conf 匿名用户模式解读

① anonymous_enable=YES(允许匿名用户模式)

② anon_umask=022(匿名用户上传文件的umask值)

③ anon_upload_enable=YES(允许匿名用户上传文件)

④ anon_mkdir_write_enable=YES(允许匿名用户创建文件)

⑤ anon_other_write_enable=YES(允许匿名用户修改目录名称或删除目录 手动添加)

/etc/vsftpd/vsftpd.conf 本地用户模式解读

useradd ftpuserpasswd ftpuser(创建本地用户)

本地用户访问的是自己的资源,本地用户连接上其他主机,其家目录为/home/ftpuse

① anonymous_enable=NO(禁止匿名用户模式)

② local_enable=YES(允许本地用户模式)

③ write_enbale=YES(设置可写权限)

④ local_umask=022(本地用户上传文件的umask值)

⑤ userlist_enable=YES(启用黑名单ftpusers和user_list,用不到

⑥ userlist_deny=YES(开启用户作为名单文件功能)

/etc/vsftpd/vsftpd.conf 虚拟用户模式解读

① anonymous_enable=NO(禁止匿名模式)

② local_enable=YES(允许本地用户模式)

③ guest_enable=YES(允许虚拟用户模式)

④ guest_username=virtual(指定虚拟用户账户)

⑤ pam_service_name=vsftpd.vu文件(指定PAM文件)

⑥ allow_writeable_chroot=YES(允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求)

针对不同虚拟用户配置不同的权限的目录,用于存放文件名为虚拟用户名的权限文件,如果

是空白权限文件,只能查看文件 ->

⑦ user_config_dir=/ect/vsftpd/vusers_dir

⑧ anon_upload_enable=YES

⑨ anon_mkdir_write_enable=YES

⑩ anon_other_write_enable=YES  

34. 关于" NFS网络文件系统 "的解释

NFS是基于TCP\UDP传输协议的文件共享服务,主要哟个有数据备份领域。主要流程是服务端启用协议将文件共享到网络上,本地NFS客户端通过网络挂载服务端共享的文件,实现数据备份

① NFS负责存文件,端口为2049,软件包名为nfs-utils,服务名为nfs,配置文件为/etc/exports

② RPC负责传输,端口为111,软件包为rpcbind,服务名为rpcbind

通过NFS实现数据备份流程

NFS服务端安装nfs服务器软件包

① yum -y install nfs-utils(包含rpcbind)

NFS服务端启动nfs服务

① systemctl start nfs

② systemctl enable nfs

NFS服务端创建共享目录

① mkdir /nfs_upload

② vim /etc/exports

# /nfs_upload 192.168.0.10 (rw,no_root_squash) :不挤压root权限,否则在这个文件没有足够的使用权限

③ systemctl restart nfs

NFS客户端受共享主机使用文件夹

① yum -y install nfs-utils(获取showmount命令,不用启动服务)

② showmount -e 192.168.0.40(查看IP地址为192.168.0.40的服务器共享了哪些文件夹)

③ mount 192.168.0.40:/nfs_upload /nfs_upload(将共享目录挂载到本地目录,远端挂载,实现数据备份,不会再本地浪费空间,需要挂载才能使用)

④ vim /etc/fstab(永久挂载)

# 192.168.0.40:/nfs_upload   /nfs_upload   nfs    defaults,_netdev    0     0

分别对应:服务器地址:共享文件夹路径,挂载点,文件设备,告诉设备时网络设备,否则读取时会一直卡在这,导致后面无法读取

35. 关于" NAS,DAS,SAN "的解释

NAS存储(网络附件存储)samba文件共享服务,FTP文件共享服务,NFS文件共享服务

DAS存储(直连存储,直接附加在电脑主板上的硬盘)

SAN存储(存储区域网络,块级别存储,把自己电脑上的硬盘共享给其他主机)

36. 关于" NTP网络时间协议 "的解释

使用场景是一台服务器有NTP服务,用这台服务器取同步其他台服务器,使得都处于标准时间

chrony是网络时间协议NTP的实现方式,在RHEL7/CentOS7操作系统中默认安装,它能保存时间与NTP服务器的时间始终同步

① 软件包:chrony

② 服务名:chronyd

③ 命令程序:chronyc

④ 配置文件:/etc/chrony.conf

date命令是CST中国标准时间,如果使用date -s更改时间但服务器又安装了NTP,即使改了时间还是会同步NTP标准时间

37. 关于" rsync "的解释

rsync:传统的cpscptar等工具都是完全备份,而rsync除了能完整拷贝,还能增量拷贝

拷贝(传统):第二次备份的数据会与第一次备份的数据重叠,导致空间浪费

增量同步:使用rsync进行备份,数据不会重叠

yum -y install rsync(软件安装)

本地同步

① rsync -avz /root /rsync_bak/(同步/root目录本身到/rsync_bak目录,-a递归同步保留文件

属性,-v显示详情,-z传输过程启用压缩/解压缩)

② rsync -avz /root/ /rsync_bak/(同步/root目录下的文件和所有子目录到/rsync_bak目录)

③ rsync -avz --delete /root/ /rsync_bak/(删除/rsync_bak目录下多余文件,相当于完全同步,把相互没有的删掉)

④ rsync -anv /root/ /rsync_bak/(-n测试同步过程,不做实际修改)

如果目录A用vim修改文件增加内容,再使用rsync同步只增加新内容

远程同步

① rsync -avz /root 用户名@目标主机IP地址:/目标目录(远程同步源目录本身,本机与目标主机都需要安装rsync

② rsync -avz /root/ [email protected]:/opt(远程同步源目录下所有内容)

而 scp hello.txt [email protected]:/opt(远程拷贝)

③ 如果使用rsync远程同步不想输目标主机密码,可以ssh-keygen -t rsa生成密钥指定RSA类型ssh-copy-id [email protected]

一般rsync要结合crontab放入脚本使用

① crontab -e

# 00  1  *  *  *  rsync -avz /root/ [email protected]:/opt添加定时任务,每天凌晨1点执行同步任务

38. 关于" inotify "的解释

inotify类似于监控系统,可以立刻让用户得知如文件增加、删除等事件,一般于rsync一起使用实时同步,但用的不多因为inotify比较消耗资源

环境前准备:配置同步主机之间ssh免密登录

① ssh-keygen

② ssh-copy-id [email protected]

③ ssh 192.168.0.28

④ exit

源码安装inotify:http:/download.sf.net/inotify-tools/

① yum -y install lrzsz(实现windows和linux之间文件传输)

② 将inotify压缩包拖入Linux系统

③ tar -xf inotify-tools-3.13.tar.gz(解压源码包)

④ cd inotify-tools-3.13(进入源码包路径)

⑤ yum -y install gcc(下载编译器)

⑥ ./configure --prefix=/usr/local/inotify(检测系统环境,安装在某个路径)

⑦ ls /usr/local/inotify/bin(列出目录下文件)

⑧ ln -s /usr/local/inotify/bin/inotifywait(程序命令) /sbin(软链接)

inotify使用方式

① inotifywait -m /path/to/your/file(持续监控文件,捕捉一个事件后不退出)

② inotifywait -mr /path/to/your/directory(持续递归监控目录)

③ inotifywait -mq /path/to/your/file(持续监控文件,并减少屏幕输出信息)

④ inotifywait -mr -e modify,create,delete,attrib /path/to/your/directory(持续递归监控目录,指定监控修改、创建、删除、权限的更改)

配置实时监控/test目录

vim rsync.sh

① #!/bin/bash

② while inotifywait -rq -e modify,create,delete,attrib /test/

③ do

④     rsync -avz /test/ [email protected]:/opt

⑤ done

把该脚本放入后台进行

① chmod +x rsync.sh

② ./rsync.sh &

39. 关于" Ansible "的解释

Ansible一款IT自动化DevOps软件,是一个批量管理工具,通过SSH协议与被管理节点进行通信,被管理主机无需安装Agent(https://www.ansible.com/)

批量管理工具(Ansible、SaltStack、Puppet、Chef,当需要同时查看多台被管理主机的内存,只需要在管理主机free -h

— 

实验准备

① hostnamectl set-hostname Ansible-server --static(更改主机名,--static支持大小写)

Ansible-server (管理主机),host1 (被管理主机),host2 (被管理主机)

关闭防火墙与SELinux

临时关闭

① systemctl stop firewalld

② setenforce 0

永久关闭

① systemctl disable firewalld

② vim /etc/selinux/config

# SELINUX=disabled(重启生效)

管理节点修改/etc/hosts文件实现本地解析

① vim /etc/hosts

# 192.168.0.26 host1

# 192.168.0.27 host2

管理节点与被管理节点实现SSH密钥认证,提前做好免密

① ssh-keygen

传递公钥至被管理节点

for i in host1 host2

do

    ssh-copy-id $1

done

验证SSH免密登录

① ssh host1

② ssh host2

— 

安装Ansible软件包

ansible需要epel源和Base源,Base源用于安装ansible所需依赖,epel源用于安装Base源没有的(阿里巴巴开源镜像站:centos源 -> centos7 -> 安装命令,epel源 -> epel(RHEL7) -> 安装命令)

① yum -y install ansible

② ansible --version

# config_file 主配置文件

# configured module search path 配置模块搜索路径

— 

定义Ansible主机清单

① ansible主配置文件为 /etc/ansible/ansible.cfg

# [default] 是默认值,都是注释但有用

# 26 remote_port=22 如果配置端口更改这个也需要改

② ansible默认清单文件为 /etc/ansible/hosts

(清单文件定义被管理主机文件,被管理的主机IP需要写入该文件)

管理单台主机

vim /etc/ansible/hosts(做了本地解析)

# host1

# host2

组名管理

[websrvs]

host1

host2

[dbsrvs]

xxxxx

xxxxx

可以更方便定义

[websrvs]

host[1:2]

www[001:004].example.com

① ansible all --list-host(列出清单文件所有主机)

② ansible websrvs --list-host(列出清单文件组名为websrvs的主机)

Ansible命令格式介绍

ansible 组名/主机 [-m 模块名] [-a 具体操作]

① ansible websrvs -m ping

② ansible websrvs -m shell -a 'touch /opt/hello.txt'

③ ansible-doc -l(列出所有模块,左边模块名,右边是模块描述信息)

④ ansible-doc -s ping(查看模块帮助信息)

Ansible命令返回值颜色表示

① 红色代表你的命令执行失败或者有异常,报错

② 绿色命令执行成功,代表对远程节点不进行相应修改

③ 黄色命令执行成功,代表对远程节点进行了相应修改

④ 粉色代表命令执行后发出的警告信息,可以忽略

Ansible常用模块介绍

command模块为默认模块,用于远程执行命令,默认模块不用-m指定

① chdir参数:ansible websrvs -a 'chdir/opt ls'表示执行命令前,先进入到指定的目录中)

② creates参数:ansible websrvs -a 'creates=/opt/hello.txt touch /opt/hello.txt'表示文件如果存在于远程主机中,则不执行对应命令,如果不存在则执行)

③ removes参数:ansible websrvs -a 'removes=/opt/abc.txt mv /opt/abc.txt /root'表示文件如果不存在于远程主机中,则不执行对应命令,如果存在则执行)

注意command模块不能用交互式命令但会在远程主机打开一个进程如ansible websrvs -a 'free -h'。使用command模块不会经过远程主机的bash处理,所以当执行的命令包含"<、>、|、;、&"都会失效

shell模块是远程执行命令模块,和command模块类似,区别在于shell模块通过/bin/bash程序处理命令

① cmd参数此参数用于执行的命令,用于在Playbook剧本中)

② chdir参数

③ creates参数

④ removes参数

注意shell模块中chdir、creates、removes参数作用于command模块作用相同。shell模块可以使用"<、>、|、;、&"这些符号

yum模块用于在远程主机通过yum源管理软件包

① name必须参数:ansible websrvs -m yum -a 'name=vsftpd'安装软件包,指定其名字)

② state参数用于指定软件包状态)

(1) present默认值,表示安装软件包

(2) installed与present等效

(3) latest表示安装软件包最新版本,如果已安装但不是最新版本会更新至最新版

(4) removed表示删除指定的软件包,如ansible websrvs -m yum -a 'name=vsftpd state=removed'

(5) absent与removed等效

cript模块用于远程执行脚本,该脚本存放在ansible本地主机,不需要拷贝至远程主机

① chdir参数

② creates参数

③ removes参数

注意script模块中chdir、creates、removes参数作用与command模块作用相同

service模块用于管理远程主机的服务,如启动或停止服务

① name参数

② state参数

(1) started用于启动服务,如ansible websrvs -m service -a 'name=vsftpd state=started'

(2) restarted用于重启服务

copy模块,用于将文件复制到远程主机

① src参数用于指定需要拷贝的文件或目录)

② dest必须参数指定文件拷贝到远程主机的哪个目录中)

ansible websrvs -m copy -a 'src=/root/hello.txt dest=/mnt'

③ force参数当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes表示覆盖,如果设置为no则不会执行覆盖拷贝操作,远程主机中的文件保持不变)

40. 关于" stratis卷 "的解释

stratis卷比逻辑卷好,不需要指定大小,不需要创建文件系统,会自动扩容。池化对象:物理磁盘、标准分区、逻辑卷

① yum -y install stratisd stratis-cli(安装两个该服务工具)

② rpm -q stratisd

③ rpm -q stratis-cli

④ systemctl enable --now stratisd

⑤ systemctl status stratisd

⑥ stratis pool list(列出已有的pool池

⑦ stratis pool create labpoool1 /dev/sdb /dev/sdc(创建pool池并指定名字,加上所用资源)

⑧ stratis blockdev list labpool1(查看labpool1池由什么物理设备组成)

⑨ stratis filesystem list(查看pool池有什么文件夹,该文件夹存储类多少容量文件)

⑩ stratis filesystem create labpood1 labfs1(在labpool1池创建labfs1文件夹

⑪ blkid /stratis/labpool1/labfs1(查看labfs1文件夹的文件系统路径是Device

⑫ mkdir /mnt/labfs1(创建挂载目录)

⑬ mount /stratis/labpool1/labfs1 /mnt/labfs1/(挂载)

⑭ dd if=/dev/urandom of=/mnt/labfs1/testfile bs=1M count=2048(if输入,/dev/urandom会随机生成数,of输出,bs一次生成几M,count生成几次)

⑮ umount /mnt/labfs1(卸载挂载点,准备快照

⑯ stratis filesystem snapshot labpool1 labfs1 labfs1-snap(快照

⑰ stratis filesystem list(查看快照)

⑱ mount /stratis/labpool1/labfs1 /mnt/labfs1/(重新挂载)

⑲ mkdir /mnt/labfs1-snap(创建快照挂载目录点)

⑳ mount /stratis/labpool1/labfs1-snap /mnt/labfs1-sanp/

㉑ stratis filesystem destroy labpool1 labfs1(销毁文件夹,准备恢复快照,前提卸载挂载点

㉒ stratis filesystem snapshot labpool1 labfs1-snap labfs1(快照恢复

先创建stratis池,再创建stratis文件夹,最后挂载

二、相关操作

1. 关于" 查看shell下有哪些解释器 "的操作 

① cat /etc/shells(查看shell下有哪些解释器,也有收费解释器如ksh,zsh)

2. 关于" 编写并执行一个脚本 "的操作

vim hello.sh(编写一个正确的脚本)

① #!/bin/bash(环境声明,指定某个解释器)

② #注释信息(方便他人解读)

③ 可执行代码(不能用Tab键补齐)

① mkdir /script将脚本统一归类在家目录下/script目录

② mv hello.sh /script/

③ chmod +x hello.sh给脚本一个执行权限,ls命令查看文件时会变绿色

④ ./hello.sh执行脚本,若不在/script当前目录需要"绝对路径/hello.sh"

3. 关于" 编写创建用户脚本 "的操作

vim useradd.sh(编写创建用户脚本)

① #!/bin/bash

② #创建系统账号

③ useradd user2

④ passwd use2

① ./useradd.sh(执行脚本会卡壳,因为不能写交互式命令 -> ③与④不能写在同一行,使用" echo 1234 | passwd --stdin user2 "替代

4. 关于" 编写批量查看系统信息脚本 "的操作

vim sysinfo.sh编写批量查看系统信息的脚本包括版本、内核、内存、网卡、主机名

① #!/bin/bash

② echo "查看系统版本信息"CentOS

③ cat /etc/centos-release

④ sleep 3歇3秒再输出

⑤ echo "查看内核信息"Linux

⑥ uname -rs

⑦ sleep 3

⑧ echo "查看根分区使用情况"

⑨ df -h /

⑩ sleep 3

⑪ echo "查看ens32网卡信息"

⑫ ifconfig ens32

⑬ sleep 3

⑭ echo "查看主机名信息"

⑮ hostnamectl

① chmod +x sysinfo.sh(添加执行权限

② ./sysinfo.sh执行脚本

5. 关于" 编写搭建本地软件yum仓库脚本 "的操作

vim local_yum.sh(编写搭建本地软件yum仓库脚本)

① #!/bin/bash

② echo "正在搭建本地软件仓库"

③ mount /dev/cdrom /mnt/centos

④ rm -rf /etc/yum.repos.d/*

⑤ echo [local] > /etc/yum.repos.d/local.repo                

⑥ echo name=local_centos >> /etc/yum.repos.d/local.repo         

⑦ echo baseurl=file:///mnt/centos >> /etc/yum.repos.d/local.repo   

⑧ echo enable=1 >> /etc/yum.repos.d/local.repo                  

⑨ echo gpgcheck=0 >> /etc/yum.repos.d/local.repo   

⑩ sleep 3

⑪ echo "正在验证软件包数量"

⑫ yum repolist | tail -1 或 yum repolist | grep repolist 或 yum repolist | awk '/repolist/{print $2}'

—(升级版)

① cat >> /etc/yum.repos.d/local.repo <

② [local]

③ name=local

④ baseurl=file:///mnt/centos

⑤ enable=1

⑥ gpgcheck=0

⑦ EOF

6. 关于" 调用解释器执行脚本,不需要执行权限 "的操作

① bash /script/hello.sh调用解释器执行脚本,不需要执行权限

 7. 关于" 利用if条件判断结构编写猜数字脚本 "的操作

编写猜数字的脚本,让计算机产生一个0-9随机数

set(查看系统所有变量)

RANDOM(输出一个不固定的数)

echo $[RANDOM%10](针对10取余,范围在0-9之间)

vim if3.sh

① #!/bin/bash

② read -p '请输入0-9之间的随机数:' num

③ num1=$[RANDOM%10]

④ if [ $num -eq $num1 ];then

⑤       echo "恭喜中奖"

⑥    else

⑦       echo "猜错了"

⑧       echo "正确的结果为$num1"

⑨ fi

8. 关于" 利用if条件判断结构编写安装软件包脚本 "的操作

vim if4.sh

① #!/bin/bash

② RPM='rpm -q vsftpd &> /dev/null;echo $?'

③ if [ RPM -eq 0 ];then

④    systemctl start vsftpd && systemctl enable vsftpd &> /dev/null

⑤    echo "vsftpd服务已启动"

⑥ else

⑦    echo '不存在'

⑧    echo '正在安装vsftpd软件'

⑨    yum -y install vsftpd &> /dev/null && systemctl start vsftpd && systemctl enable vsftpd && systemctl status vsftpd

⑩ fi

9. 关于" 利用if条件判断结构编写判断成绩脚本 "的操作

 vim if5.sh

① #!/bin/bash

② read -p "请输入自己成绩":num

③ if [ $num -ge 90 ];then

④       echo "优秀"

⑤ elif [ $num -ge 80 ];then

⑥        echo "比较优秀"

⑦ elif [ $num -ge 70 ];then

⑧        echo "一般"

⑨ elif [ $num -ge 60 ];then

⑩       echo "及格"

⑪ else

⑫       echo "你废了"

⑬ fi

10. 关于" 利用case条件判断结构编写安装软件包脚本 "的操作

① #!/bin/bash

② read -p "请输入您要安装的软件包(vsftpd|htppd)":i

③ case $i in

④ vsftpd)

⑤          yum -y install vsftpd &> /dev/null

⑥          echo "vsftpd安装成功";;

⑦ httpd)

⑧          yum -y install httpd &> /dev/null

⑨          echo "httpd安装成功";;

⑩ *)

⑪          echo "请输入范围内的软件包!"

⑫ esac

11. 关于" 利用for循环语法结构编写循环创建用户脚本 "的操作

① #!/bin/bash

② for user in xiaofang xiaowei jiumei alian

③ do

④     useradd $user $> /dev/null   

⑤     echo "$user 创建成功"

⑥     echo 1 | passwd --stdin $user &> /dev/null   

⑦     echo "$user 密码设置成功,初始密码为1"

⑧ done

12. 关于" 利用for循环语法结构编写测试服务器连通性脚本 "的操作

测试企业的服务器连通性,测试多台服务器哪台服务器出现问题

① #!/bin/bash

② for PING in 192.168.0.{1..254}

③ do

④     ping $PING  

⑤ done

会一直陷入ping进程,而导致不进入下一个循环

① for IP in 192.168.0.{1..254}('seq 254'相当于{1..254},'seq 100..254')

② do

③     ping -c2 -i0.1 -w1 $IP &> /dev/null

④    if [ $? -eq 0 ];then   

⑤           echo "$IP is UP" >> /opt/net_up.txt  

⑥    else  

⑦           echo "$IP is DOWN" >> /opt/net_down.txt

⑧    fi

⑨ done

-c:ping的次数,-i:指定ping的延迟时间,-w:指定超时时间

13. 关于" 利用while循环语法结构编写抽奖的脚本 "的操作

① #!/bin/bash

② NUM=$[RANDOM%10]

③ while :(循环里的固定符号,可以无限循环里面的命令,不需要条件判断,ture也可以)

④ do

⑤       read -p "请输入0-10之间的数字:"num1

⑥    if [ $NUM -eq $num1 ];then

⑦       echo "恭喜你猜对了"

⑧       exit (退出脚本)

⑨    else

⑩       echo "猜错了"

⑪    fi

⑫ done

14. 关于" 利用while循环语法结构编写监控网卡进出口流量脚本 "的操作

① #!/bin/bash

② while :

③ do

④ clear(清屏)

⑤ ifconfig ens32 | head -2(显示网卡头两行信息)

⑥ ifconfig ens32 | head "RX packets"(网卡入口流量)

⑦ ifconfig ens32 | grep "TX packets"(网卡出口流量)

⑧ sleep 0.2(休眠0.2秒)

⑨ done

15. 关于" 设置脚本开机自启动 "的操作

添加脚本,设置该脚本开机自启动

① vim /etc/rc.d/rc.local

② 写入 /bin/bash  /script/xx.sh (提前给该文件执行权限)

16. 关于" 主机型防火墙规则配置 "的操作

停止本机的firewalld防火墙

① systemctl stop firewalld

② systemctl disable firewalld

安装iptables服务

③ yum -y install iptables-services

④ systemctl start iptables

⑤ systemctl enable iptables

17. 关于" 网络型防火墙规则配置 "的操作

网络型防火墙需要两块网卡,外部网卡接受外部请求,内部网卡与内部主机通信

主机名

网关

IP地址

网关设备

clinet

ens32

内网IP:192.168.1.24

网关指向防火墙外网IP:192.168.1.100

iptables

ens32

内网IP:192.168.0.80

ens34外网IP:192.168.1.100

web

ens32

内网IP:192.168.0.26

网关指向防火墙内网IP:192.168.0.80

需要添加一块新网卡,并开启外部流量经”防火墙设备”转发到内部,把服务器iptables当路由使用

开启iptables的路由转发功能

① [root@iptables ~]# echo ‘net.ipv4.ip_forward=1’ >> /etc/sysctl.conf(在linux系统中设置IPv4转发功能)

② [root@iptables ~]# sysctl -p(加载配置立即生效,会返回net.ipv4.ip_forward = 1)

③ [root@iptables ~]# cat /proc/sys/net/ipv4/ip_forward(返回1)

配置网卡

[root@iptables]

① ip a s(查看参数信息,查看有多少块网卡)

② nmtui(交互式改变网卡IP地址:编辑连接 -> 有线连接 -> 配置名称为ens34,IPv4配置为手动,打开显示,添加地址为192.168.1.100不需要网关,确定)

③ systemctl restart network(重启网络)

④ ls /etc/sysconfig/network-scripts/(不通过,是因为添加的网卡ens34没有配置文件)

[root@web]

① vim /etc/sysconfig/network-scripts/ifcfg-ens32

# GATEWAY:192.168.0.80

② systemctl restart network重启网络

[root@client]

① vim /etc/sysconfig/network-scripts/ifcgi-ens32

# IPADDR:192.168.1.24

# GATEWAY:192.168.1.100

② systemctl restart network重启网络

安装httpd服务

① [root@web~]# yum -y install httpd

修改web默认首页

① [root@web~]# echo web26 > /var/www/html/index.html
② [root@web~]# systemctl start httpd

③ [root@web~]# systemctl status httpd

访问测试

① [root@client~]# curl 192.168.0.26

拒绝client(192.168.1.24内网IP)访问80端口

① iptables -I FORWARD -s 192.168.1.24 -p tcp --dport 80 -j REJECT

② iptables -F(查看规则)

18. 关于" 禁掉MAC地址 "的操作

如果我拒绝掉192.168.1.24地址后,对方通过换IP为192.168.1.25又可以成功访问,这时要把对方MAC地址(物理地址)禁掉

① yum -y install nmap(安装nmap服务扫描获取地方IP的MAC地址)

② nmap 192.168.1.25(扫描IP地址,并返回MAC Address:00:0C:29:D5:29:0F(VMware))

③ iptables -t filter -I FORWARD -p tcp --dport 80 -m mac --mac-source 00:0C:29:D5:29:0F -j REJECT(通过MAC地址限制对方访问)

19. 关于" Linux系统之间建立连接 "的操作

Linux系统之间建立连接

① ssh-keygen(生成公私钥)

② ls .ssh(查看密钥文件,其中id_rsa是私钥、id_rsa.pub是公钥)

③ ssh-copy-id -i .ssh/id_rsa.pub [email protected] 或 ssh-copy-id -i [email protected](将公钥拷贝至其他主机)

④ ls .ssh(其他主机查看公钥文件,会显示authorized_keys文件)

⑤ ssh 192.168.0.27(验证是否实现密钥认证登录,如果不需要密码即可登录,说明已实现密钥认证登录)

20. 关于" Windows与Linux系统之间建立连接 "的操作

Windows与Linux系统之间建立连接

① 想在Xshell中同时给多台服务器输入相同的命令:工具(发送键输入到所有会话) -> 切换水平排列

② Xshell密钥管理:只要通过Xshell连接过的主机都有,在工具(主机密钥管理者)

③ 在Xshell生成密钥对:工具(新建用户密钥生成向导),相当于ssh-keygen密钥类型RSA,密钥长度2048,下一步 -> 下一步 -> 私钥文件,询问是否需要加密,下一步 -> 公钥文件,需要保存为文件放在电脑里 -> 关闭

④ vim .ssh/authorized_keys(想根公钥文件主机建立连接,即把公钥放入)

ssh连接服务器时,选择Public Key

21. 关于" 服务器同步NTP时间流程 "的操作

① vim /etc/chrony.conf

# server 0.centos.pool.ntp.org iburst

# server 1.centos.pool.ntp.org iburst      注释掉,同步NTP时间

# server 2.centos.pool.ntp.org iburst      遵循按顺序匹配,成功后则一致跟随该台服务器

# server 3.centos.pool.ntp.org iburst

server ntp.aliyun.com iburst

server ntp1.aliyun.com iburst(添加换成国内阿里的NTP服务器)

② systemctl restart chronyd(重启服务)

③ chronyc sources -n(检查是否成功切换到阿里云的NTP服务器,输出的"s"字符下的IP地址应该与ping ntp1.aliyun.com域名解析出的IP地址相同)

案例需求:搭建一台NTP服务器,同步阿里云时间,其他服务器同步NTP服务器时间

NTP服务器

① vim /etc/chrony.conf,在前面步骤下添加allow 0.0.0.0/0

② systemctl restart chronyd

其他服务器

① vim /etc/chrony.conf,注释掉原有的NTP主机,加上server 192.168.0.40 iburst(NTP服务器IP)

② systemctl restart chronyd

你可能感兴趣的:(Linux操作系统,从入门到精通,linux,运维,服务器)